PR c++/11509
[official-gcc.git] / gcc / cp / pt.c
blobeb108e6338f5444ceb1252d8054d13e3ce61cb4d
1 /* Handle parameterized types (templates) for GNU C++.
2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003 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, 59 Temple Place - Suite 330,
22 Boston, MA 02111-1307, 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 "flags.h"
36 #include "cp-tree.h"
37 #include "tree-inline.h"
38 #include "decl.h"
39 #include "lex.h"
40 #include "output.h"
41 #include "except.h"
42 #include "toplev.h"
43 #include "rtl.h"
44 #include "timevar.h"
46 /* The type of functions taking a tree, and some additional data, and
47 returning an int. */
48 typedef int (*tree_fn_t) (tree, void*);
50 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
51 instantiations have been deferred, either because their definitions
52 were not yet available, or because we were putting off doing the work.
53 The TREE_PURPOSE of each entry is either a DECL (for a function or
54 static data member), or a TYPE (for a class) indicating what we are
55 hoping to instantiate. The TREE_VALUE is not used. */
56 static GTY(()) tree pending_templates;
57 static GTY(()) tree last_pending_template;
59 int processing_template_parmlist;
60 static int template_header_count;
62 static GTY(()) tree saved_trees;
63 static GTY(()) varray_type inline_parm_levels;
64 static size_t inline_parm_levels_used;
66 static GTY(()) tree current_tinst_level;
68 static GTY(()) tree saved_access_scope;
70 /* A map from local variable declarations in the body of the template
71 presently being instantiated to the corresponding instantiated
72 local variables. */
73 static htab_t local_specializations;
75 #define UNIFY_ALLOW_NONE 0
76 #define UNIFY_ALLOW_MORE_CV_QUAL 1
77 #define UNIFY_ALLOW_LESS_CV_QUAL 2
78 #define UNIFY_ALLOW_DERIVED 4
79 #define UNIFY_ALLOW_INTEGER 8
80 #define UNIFY_ALLOW_OUTER_LEVEL 16
81 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
82 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
83 #define UNIFY_ALLOW_MAX_CORRECTION 128
85 #define GTB_VIA_VIRTUAL 1 /* The base class we are examining is
86 virtual, or a base class of a virtual
87 base. */
88 #define GTB_IGNORE_TYPE 2 /* We don't need to try to unify the current
89 type with the desired type. */
91 static void push_access_scope (tree);
92 static void pop_access_scope (tree);
93 static int resolve_overloaded_unification (tree, tree, tree, tree,
94 unification_kind_t, int);
95 static int try_one_overload (tree, tree, tree, tree, tree,
96 unification_kind_t, int);
97 static int unify (tree, tree, tree, tree, int);
98 static void add_pending_template (tree);
99 static void reopen_tinst_level (tree);
100 static tree classtype_mangled_name (tree);
101 static char* mangle_class_name_for_template (const char *, tree, tree);
102 static tree tsubst_initializer_list (tree, tree);
103 static int list_eq (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, int);
113 static void note_template_header (int);
114 static tree maybe_fold_nontype_arg (tree);
115 static void maybe_fold_nontype_args (tree);
116 static tree convert_nontype_argument (tree, tree);
117 static tree convert_template_argument (tree, tree, tree,
118 tsubst_flags_t, int, tree);
119 static tree get_bindings_overload (tree, tree, tree);
120 static int for_each_template_parm (tree, tree_fn_t, void*, htab_t);
121 static tree build_template_parm_index (int, int, int, tree, tree);
122 static int inline_needs_template_parms (tree);
123 static void push_inline_template_parms_recursive (tree, int);
124 static tree retrieve_specialization (tree, tree);
125 static tree retrieve_local_specialization (tree);
126 static tree register_specialization (tree, tree, tree);
127 static void register_local_specialization (tree, tree);
128 static tree reduce_template_parm_level (tree, tree, int);
129 static tree build_template_decl (tree, tree);
130 static int mark_template_parm (tree, void *);
131 static int template_parm_this_level_p (tree, void *);
132 static tree tsubst_friend_function (tree, tree);
133 static tree tsubst_friend_class (tree, tree);
134 static int can_complete_type_without_circularity (tree);
135 static tree get_bindings_real (tree, tree, tree, int, int, int);
136 static int template_decl_level (tree);
137 static int check_cv_quals_for_unify (int, tree, tree);
138 static tree tsubst_template_arg_vector (tree, tree, tsubst_flags_t);
139 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
140 static void regenerate_decl_from_template (tree, tree);
141 static tree most_specialized (tree, tree, tree);
142 static tree most_specialized_class (tree, tree);
143 static int template_class_depth_real (tree, int);
144 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
145 static tree tsubst_decl (tree, tree, tree, tsubst_flags_t);
146 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
147 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
148 static void check_specialization_scope (void);
149 static tree process_partial_specialization (tree);
150 static void set_current_access_from_decl (tree);
151 static void check_default_tmpl_args (tree, tree, int, int);
152 static tree tsubst_call_declarator_parms (tree, tree, tsubst_flags_t, tree);
153 static tree get_template_base_recursive (tree, tree, tree, tree, tree, int);
154 static tree get_template_base (tree, tree, tree, tree);
155 static int verify_class_unification (tree, tree, tree);
156 static tree try_class_unification (tree, tree, tree, tree);
157 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
158 tree, tree);
159 static tree determine_specialization (tree, tree, tree *, int);
160 static int template_args_equal (tree, tree);
161 static void tsubst_default_arguments (tree);
162 static tree for_each_template_parm_r (tree *, int *, void *);
163 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
164 static void copy_default_args_to_explicit_spec (tree);
165 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
166 static int eq_local_specializations (const void *, const void *);
167 static bool dependent_type_p_r (tree);
168 static tree tsubst (tree, tree, tsubst_flags_t, tree);
169 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree);
170 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
172 /* Make the current scope suitable for access checking when we are
173 processing T. T can be FUNCTION_DECL for instantiated function
174 template, or VAR_DECL for static member variable (need by
175 instantiate_decl). */
177 static void
178 push_access_scope (tree t)
180 my_friendly_assert (TREE_CODE (t) == FUNCTION_DECL
181 || TREE_CODE (t) == VAR_DECL,
184 if (DECL_CLASS_SCOPE_P (t))
185 push_nested_class (DECL_CONTEXT (t));
186 else
187 push_to_top_level ();
189 if (TREE_CODE (t) == FUNCTION_DECL)
191 saved_access_scope = tree_cons
192 (NULL_TREE, current_function_decl, saved_access_scope);
193 current_function_decl = t;
197 /* Restore the scope set up by push_access_scope. T is the node we
198 are processing. */
200 static void
201 pop_access_scope (tree t)
203 if (TREE_CODE (t) == FUNCTION_DECL)
205 current_function_decl = TREE_VALUE (saved_access_scope);
206 saved_access_scope = TREE_CHAIN (saved_access_scope);
209 if (DECL_CLASS_SCOPE_P (t))
210 pop_nested_class ();
211 else
212 pop_from_top_level ();
215 /* Do any processing required when DECL (a member template
216 declaration) is finished. Returns the TEMPLATE_DECL corresponding
217 to DECL, unless it is a specialization, in which case the DECL
218 itself is returned. */
220 tree
221 finish_member_template_decl (tree decl)
223 if (decl == error_mark_node)
224 return error_mark_node;
226 my_friendly_assert (DECL_P (decl), 20020812);
228 if (TREE_CODE (decl) == TYPE_DECL)
230 tree type;
232 type = TREE_TYPE (decl);
233 if (IS_AGGR_TYPE (type)
234 && CLASSTYPE_TEMPLATE_INFO (type)
235 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
237 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
238 check_member_template (tmpl);
239 return tmpl;
241 return NULL_TREE;
243 else if (TREE_CODE (decl) == FIELD_DECL)
244 error ("data member `%D' cannot be a member template", decl);
245 else if (DECL_TEMPLATE_INFO (decl))
247 if (!DECL_TEMPLATE_SPECIALIZATION (decl))
249 check_member_template (DECL_TI_TEMPLATE (decl));
250 return DECL_TI_TEMPLATE (decl);
252 else
253 return decl;
255 else
256 error ("invalid member template declaration `%D'", decl);
258 return error_mark_node;
261 /* Returns the template nesting level of the indicated class TYPE.
263 For example, in:
264 template <class T>
265 struct A
267 template <class U>
268 struct B {};
271 A<T>::B<U> has depth two, while A<T> has depth one.
272 Both A<T>::B<int> and A<int>::B<U> have depth one, if
273 COUNT_SPECIALIZATIONS is 0 or if they are instantiations, not
274 specializations.
276 This function is guaranteed to return 0 if passed NULL_TREE so
277 that, for example, `template_class_depth (current_class_type)' is
278 always safe. */
280 static int
281 template_class_depth_real (tree type, int count_specializations)
283 int depth;
285 for (depth = 0;
286 type && TREE_CODE (type) != NAMESPACE_DECL;
287 type = (TREE_CODE (type) == FUNCTION_DECL)
288 ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
290 if (TREE_CODE (type) != FUNCTION_DECL)
292 if (CLASSTYPE_TEMPLATE_INFO (type)
293 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type))
294 && ((count_specializations
295 && CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
296 || uses_template_parms (CLASSTYPE_TI_ARGS (type))))
297 ++depth;
299 else
301 if (DECL_TEMPLATE_INFO (type)
302 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (type))
303 && ((count_specializations
304 && DECL_TEMPLATE_SPECIALIZATION (type))
305 || uses_template_parms (DECL_TI_ARGS (type))))
306 ++depth;
310 return depth;
313 /* Returns the template nesting level of the indicated class TYPE.
314 Like template_class_depth_real, but instantiations do not count in
315 the depth. */
317 int
318 template_class_depth (tree type)
320 return template_class_depth_real (type, /*count_specializations=*/0);
323 /* Returns 1 if processing DECL as part of do_pending_inlines
324 needs us to push template parms. */
326 static int
327 inline_needs_template_parms (tree decl)
329 if (! DECL_TEMPLATE_INFO (decl))
330 return 0;
332 return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
333 > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
336 /* Subroutine of maybe_begin_member_template_processing.
337 Push the template parms in PARMS, starting from LEVELS steps into the
338 chain, and ending at the beginning, since template parms are listed
339 innermost first. */
341 static void
342 push_inline_template_parms_recursive (tree parmlist, int levels)
344 tree parms = TREE_VALUE (parmlist);
345 int i;
347 if (levels > 1)
348 push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
350 ++processing_template_decl;
351 current_template_parms
352 = tree_cons (size_int (processing_template_decl),
353 parms, current_template_parms);
354 TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
356 pushlevel (0);
357 for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
359 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
360 my_friendly_assert (DECL_P (parm), 0);
362 switch (TREE_CODE (parm))
364 case TYPE_DECL:
365 case TEMPLATE_DECL:
366 pushdecl (parm);
367 break;
369 case PARM_DECL:
371 /* Make a CONST_DECL as is done in process_template_parm.
372 It is ugly that we recreate this here; the original
373 version built in process_template_parm is no longer
374 available. */
375 tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
376 TREE_TYPE (parm));
377 DECL_ARTIFICIAL (decl) = 1;
378 TREE_CONSTANT (decl) = TREE_READONLY (decl) = 1;
379 DECL_INITIAL (decl) = DECL_INITIAL (parm);
380 SET_DECL_TEMPLATE_PARM_P (decl);
381 pushdecl (decl);
383 break;
385 default:
386 abort ();
391 /* Restore the template parameter context for a member template or
392 a friend template defined in a class definition. */
394 void
395 maybe_begin_member_template_processing (tree decl)
397 tree parms;
398 int levels = 0;
400 if (inline_needs_template_parms (decl))
402 parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
403 levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
405 if (DECL_TEMPLATE_SPECIALIZATION (decl))
407 --levels;
408 parms = TREE_CHAIN (parms);
411 push_inline_template_parms_recursive (parms, levels);
414 /* Remember how many levels of template parameters we pushed so that
415 we can pop them later. */
416 if (!inline_parm_levels)
417 VARRAY_INT_INIT (inline_parm_levels, 4, "inline_parm_levels");
418 if (inline_parm_levels_used == inline_parm_levels->num_elements)
419 VARRAY_GROW (inline_parm_levels, 2 * inline_parm_levels_used);
420 VARRAY_INT (inline_parm_levels, inline_parm_levels_used) = levels;
421 ++inline_parm_levels_used;
424 /* Undo the effects of begin_member_template_processing. */
426 void
427 maybe_end_member_template_processing (void)
429 int i;
431 if (!inline_parm_levels_used)
432 return;
434 --inline_parm_levels_used;
435 for (i = 0;
436 i < VARRAY_INT (inline_parm_levels, inline_parm_levels_used);
437 ++i)
439 --processing_template_decl;
440 current_template_parms = TREE_CHAIN (current_template_parms);
441 poplevel (0, 0, 0);
445 /* Returns nonzero iff T is a member template function. We must be
446 careful as in
448 template <class T> class C { void f(); }
450 Here, f is a template function, and a member, but not a member
451 template. This function does not concern itself with the origin of
452 T, only its present state. So if we have
454 template <class T> class C { template <class U> void f(U); }
456 then neither C<int>::f<char> nor C<T>::f<double> is considered
457 to be a member template. But, `template <class U> void
458 C<int>::f(U)' is considered a member template. */
461 is_member_template (tree t)
463 if (!DECL_FUNCTION_TEMPLATE_P (t))
464 /* Anything that isn't a function or a template function is
465 certainly not a member template. */
466 return 0;
468 /* A local class can't have member templates. */
469 if (decl_function_context (t))
470 return 0;
472 return (DECL_FUNCTION_MEMBER_P (DECL_TEMPLATE_RESULT (t))
473 /* If there are more levels of template parameters than
474 there are template classes surrounding the declaration,
475 then we have a member template. */
476 && (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (t)) >
477 template_class_depth (DECL_CONTEXT (t))));
480 #if 0 /* UNUSED */
481 /* Returns nonzero iff T is a member template class. See
482 is_member_template for a description of what precisely constitutes
483 a member template. */
486 is_member_template_class (tree t)
488 if (!DECL_CLASS_TEMPLATE_P (t))
489 /* Anything that isn't a class template, is certainly not a member
490 template. */
491 return 0;
493 if (!DECL_CLASS_SCOPE_P (t))
494 /* Anything whose context isn't a class type is surely not a
495 member template. */
496 return 0;
498 /* If there are more levels of template parameters than there are
499 template classes surrounding the declaration, then we have a
500 member template. */
501 return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (t)) >
502 template_class_depth (DECL_CONTEXT (t)));
504 #endif
506 /* Return a new template argument vector which contains all of ARGS,
507 but has as its innermost set of arguments the EXTRA_ARGS. */
509 static tree
510 add_to_template_args (tree args, tree extra_args)
512 tree new_args;
513 int extra_depth;
514 int i;
515 int j;
517 extra_depth = TMPL_ARGS_DEPTH (extra_args);
518 new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
520 for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
521 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
523 for (j = 1; j <= extra_depth; ++j, ++i)
524 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
526 return new_args;
529 /* Like add_to_template_args, but only the outermost ARGS are added to
530 the EXTRA_ARGS. In particular, all but TMPL_ARGS_DEPTH
531 (EXTRA_ARGS) levels are added. This function is used to combine
532 the template arguments from a partial instantiation with the
533 template arguments used to attain the full instantiation from the
534 partial instantiation. */
536 static tree
537 add_outermost_template_args (tree args, tree extra_args)
539 tree new_args;
541 /* If there are more levels of EXTRA_ARGS than there are ARGS,
542 something very fishy is going on. */
543 my_friendly_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args),
546 /* If *all* the new arguments will be the EXTRA_ARGS, just return
547 them. */
548 if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
549 return extra_args;
551 /* For the moment, we make ARGS look like it contains fewer levels. */
552 TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
554 new_args = add_to_template_args (args, extra_args);
556 /* Now, we restore ARGS to its full dimensions. */
557 TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
559 return new_args;
562 /* Return the N levels of innermost template arguments from the ARGS. */
564 tree
565 get_innermost_template_args (tree args, int n)
567 tree new_args;
568 int extra_levels;
569 int i;
571 my_friendly_assert (n >= 0, 20000603);
573 /* If N is 1, just return the innermost set of template arguments. */
574 if (n == 1)
575 return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
577 /* If we're not removing anything, just return the arguments we were
578 given. */
579 extra_levels = TMPL_ARGS_DEPTH (args) - n;
580 my_friendly_assert (extra_levels >= 0, 20000603);
581 if (extra_levels == 0)
582 return args;
584 /* Make a new set of arguments, not containing the outer arguments. */
585 new_args = make_tree_vec (n);
586 for (i = 1; i <= n; ++i)
587 SET_TMPL_ARGS_LEVEL (new_args, i,
588 TMPL_ARGS_LEVEL (args, i + extra_levels));
590 return new_args;
593 /* We've got a template header coming up; push to a new level for storing
594 the parms. */
596 void
597 begin_template_parm_list (void)
599 /* We use a non-tag-transparent scope here, which causes pushtag to
600 put tags in this scope, rather than in the enclosing class or
601 namespace scope. This is the right thing, since we want
602 TEMPLATE_DECLS, and not TYPE_DECLS for template classes. For a
603 global template class, push_template_decl handles putting the
604 TEMPLATE_DECL into top-level scope. For a nested template class,
605 e.g.:
607 template <class T> struct S1 {
608 template <class T> struct S2 {};
611 pushtag contains special code to call pushdecl_with_scope on the
612 TEMPLATE_DECL for S2. */
613 begin_scope (sk_template_parms);
614 ++processing_template_decl;
615 ++processing_template_parmlist;
616 note_template_header (0);
619 /* This routine is called when a specialization is declared. If it is
620 invalid to declare a specialization here, an error is reported. */
622 static void
623 check_specialization_scope (void)
625 tree scope = current_scope ();
627 /* [temp.expl.spec]
629 An explicit specialization shall be declared in the namespace of
630 which the template is a member, or, for member templates, in the
631 namespace of which the enclosing class or enclosing class
632 template is a member. An explicit specialization of a member
633 function, member class or static data member of a class template
634 shall be declared in the namespace of which the class template
635 is a member. */
636 if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
637 error ("explicit specialization in non-namespace scope `%D'",
638 scope);
640 /* [temp.expl.spec]
642 In an explicit specialization declaration for a member of a class
643 template or a member template that appears in namespace scope,
644 the member template and some of its enclosing class templates may
645 remain unspecialized, except that the declaration shall not
646 explicitly specialize a class member template if its enclosing
647 class templates are not explicitly specialized as well. */
648 if (current_template_parms)
649 error ("enclosing class templates are not explicitly specialized");
652 /* We've just seen template <>. */
654 void
655 begin_specialization (void)
657 begin_scope (sk_template_spec);
658 note_template_header (1);
659 check_specialization_scope ();
662 /* Called at then end of processing a declaration preceded by
663 template<>. */
665 void
666 end_specialization (void)
668 finish_scope ();
669 reset_specialization ();
672 /* Any template <>'s that we have seen thus far are not referring to a
673 function specialization. */
675 void
676 reset_specialization (void)
678 processing_specialization = 0;
679 template_header_count = 0;
682 /* We've just seen a template header. If SPECIALIZATION is nonzero,
683 it was of the form template <>. */
685 static void
686 note_template_header (int specialization)
688 processing_specialization = specialization;
689 template_header_count++;
692 /* We're beginning an explicit instantiation. */
694 void
695 begin_explicit_instantiation (void)
697 my_friendly_assert (!processing_explicit_instantiation, 20020913);
698 processing_explicit_instantiation = true;
702 void
703 end_explicit_instantiation (void)
705 my_friendly_assert(processing_explicit_instantiation, 20020913);
706 processing_explicit_instantiation = false;
709 /* The TYPE is being declared. If it is a template type, that means it
710 is a partial specialization. Do appropriate error-checking. */
712 void
713 maybe_process_partial_specialization (tree type)
715 /* TYPE maybe an ERROR_MARK_NODE. */
716 tree context = TYPE_P (type) ? TYPE_CONTEXT (type) : NULL_TREE;
718 if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
720 /* This is for ordinary explicit specialization and partial
721 specialization of a template class such as:
723 template <> class C<int>;
727 template <class T> class C<T*>;
729 Make sure that `C<int>' and `C<T*>' are implicit instantiations. */
731 if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
732 && !COMPLETE_TYPE_P (type))
734 if (current_namespace
735 != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
737 pedwarn ("specializing `%#T' in different namespace", type);
738 cp_pedwarn_at (" from definition of `%#D'",
739 CLASSTYPE_TI_TEMPLATE (type));
741 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
742 if (processing_template_decl)
743 push_template_decl (TYPE_MAIN_DECL (type));
745 else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
746 error ("specialization of `%T' after instantiation", type);
748 else if (CLASS_TYPE_P (type)
749 && !CLASSTYPE_USE_TEMPLATE (type)
750 && CLASSTYPE_TEMPLATE_INFO (type)
751 && context && CLASS_TYPE_P (context)
752 && CLASSTYPE_TEMPLATE_INFO (context))
754 /* This is for an explicit specialization of member class
755 template according to [temp.expl.spec/18]:
757 template <> template <class U> class C<int>::D;
759 The context `C<int>' must be an implicit instantiation.
760 Otherwise this is just a member class template declared
761 earlier like:
763 template <> class C<int> { template <class U> class D; };
764 template <> template <class U> class C<int>::D;
766 In the first case, `C<int>::D' is a specialization of `C<T>::D'
767 while in the second case, `C<int>::D' is a primary template
768 and `C<T>::D' may not exist. */
770 if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
771 && !COMPLETE_TYPE_P (type))
773 tree t;
775 if (current_namespace
776 != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
778 pedwarn ("specializing `%#T' in different namespace", type);
779 cp_pedwarn_at (" from definition of `%#D'",
780 CLASSTYPE_TI_TEMPLATE (type));
783 /* Check for invalid specialization after instantiation:
785 template <> template <> class C<int>::D<int>;
786 template <> template <class U> class C<int>::D; */
788 for (t = DECL_TEMPLATE_INSTANTIATIONS
789 (most_general_template (CLASSTYPE_TI_TEMPLATE (type)));
790 t; t = TREE_CHAIN (t))
791 if (TREE_VALUE (t) != type
792 && TYPE_CONTEXT (TREE_VALUE (t)) == context)
793 error ("specialization `%T' after instantiation `%T'",
794 type, TREE_VALUE (t));
796 /* Mark TYPE as a specialization. And as a result, we only
797 have one level of template argument for the innermost
798 class template. */
799 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
800 CLASSTYPE_TI_ARGS (type)
801 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
804 else if (processing_specialization)
805 error ("explicit specialization of non-template `%T'", type);
808 /* Retrieve the specialization (in the sense of [temp.spec] - a
809 specialization is either an instantiation or an explicit
810 specialization) of TMPL for the given template ARGS. If there is
811 no such specialization, return NULL_TREE. The ARGS are a vector of
812 arguments, or a vector of vectors of arguments, in the case of
813 templates with more than one level of parameters. */
815 static tree
816 retrieve_specialization (tree tmpl, tree args)
818 tree s;
820 my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 0);
822 /* There should be as many levels of arguments as there are
823 levels of parameters. */
824 my_friendly_assert (TMPL_ARGS_DEPTH (args)
825 == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)),
828 for (s = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
829 s != NULL_TREE;
830 s = TREE_CHAIN (s))
831 if (comp_template_args (TREE_PURPOSE (s), args))
832 return TREE_VALUE (s);
834 return NULL_TREE;
837 /* Like retrieve_specialization, but for local declarations. */
839 static tree
840 retrieve_local_specialization (tree tmpl)
842 tree spec =
843 (tree) htab_find_with_hash (local_specializations, tmpl,
844 htab_hash_pointer (tmpl));
845 return spec ? TREE_PURPOSE (spec) : NULL_TREE;
848 /* Returns nonzero iff DECL is a specialization of TMPL. */
851 is_specialization_of (tree decl, tree tmpl)
853 tree t;
855 if (TREE_CODE (decl) == FUNCTION_DECL)
857 for (t = decl;
858 t != NULL_TREE;
859 t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
860 if (t == tmpl)
861 return 1;
863 else
865 my_friendly_assert (TREE_CODE (decl) == TYPE_DECL, 0);
867 for (t = TREE_TYPE (decl);
868 t != NULL_TREE;
869 t = CLASSTYPE_USE_TEMPLATE (t)
870 ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
871 if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
872 return 1;
875 return 0;
878 /* Register the specialization SPEC as a specialization of TMPL with
879 the indicated ARGS. Returns SPEC, or an equivalent prior
880 declaration, if available. */
882 static tree
883 register_specialization (tree spec, tree tmpl, tree args)
885 tree s;
887 my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 0);
889 if (TREE_CODE (spec) == FUNCTION_DECL
890 && uses_template_parms (DECL_TI_ARGS (spec)))
891 /* This is the FUNCTION_DECL for a partial instantiation. Don't
892 register it; we want the corresponding TEMPLATE_DECL instead.
893 We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
894 the more obvious `uses_template_parms (spec)' to avoid problems
895 with default function arguments. In particular, given
896 something like this:
898 template <class T> void f(T t1, T t = T())
900 the default argument expression is not substituted for in an
901 instantiation unless and until it is actually needed. */
902 return spec;
904 /* There should be as many levels of arguments as there are
905 levels of parameters. */
906 my_friendly_assert (TMPL_ARGS_DEPTH (args)
907 == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)),
910 for (s = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
911 s != NULL_TREE;
912 s = TREE_CHAIN (s))
914 tree fn = TREE_VALUE (s);
916 /* We can sometimes try to re-register a specialization that we've
917 already got. In particular, regenerate_decl_from_template
918 calls duplicate_decls which will update the specialization
919 list. But, we'll still get called again here anyhow. It's
920 more convenient to simply allow this than to try to prevent it. */
921 if (fn == spec)
922 return spec;
923 else if (comp_template_args (TREE_PURPOSE (s), args))
925 if (DECL_TEMPLATE_SPECIALIZATION (spec))
927 if (DECL_TEMPLATE_INSTANTIATION (fn))
929 if (TREE_USED (fn)
930 || DECL_EXPLICIT_INSTANTIATION (fn))
932 error ("specialization of %D after instantiation",
933 fn);
934 return spec;
936 else
938 /* This situation should occur only if the first
939 specialization is an implicit instantiation,
940 the second is an explicit specialization, and
941 the implicit instantiation has not yet been
942 used. That situation can occur if we have
943 implicitly instantiated a member function and
944 then specialized it later.
946 We can also wind up here if a friend
947 declaration that looked like an instantiation
948 turns out to be a specialization:
950 template <class T> void foo(T);
951 class S { friend void foo<>(int) };
952 template <> void foo(int);
954 We transform the existing DECL in place so that
955 any pointers to it become pointers to the
956 updated declaration.
958 If there was a definition for the template, but
959 not for the specialization, we want this to
960 look as if there is no definition, and vice
961 versa. */
962 DECL_INITIAL (fn) = NULL_TREE;
963 duplicate_decls (spec, fn);
965 return fn;
968 else if (DECL_TEMPLATE_SPECIALIZATION (fn))
970 if (!duplicate_decls (spec, fn) && DECL_INITIAL (spec))
971 /* Dup decl failed, but this is a new
972 definition. Set the line number so any errors
973 match this new definition. */
974 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
976 return fn;
982 DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
983 = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
985 return spec;
988 /* Unregister the specialization SPEC as a specialization of TMPL.
989 Replace it with NEW_SPEC, if NEW_SPEC is non-NULL. Returns true
990 if the SPEC was listed as a specialization of TMPL. */
992 bool
993 reregister_specialization (tree spec, tree tmpl, tree new_spec)
995 tree* s;
997 for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
998 *s != NULL_TREE;
999 s = &TREE_CHAIN (*s))
1000 if (TREE_VALUE (*s) == spec)
1002 if (!new_spec)
1003 *s = TREE_CHAIN (*s);
1004 else
1005 TREE_VALUE (*s) = new_spec;
1006 return 1;
1009 return 0;
1012 /* Compare an entry in the local specializations hash table P1 (which
1013 is really a pointer to a TREE_LIST) with P2 (which is really a
1014 DECL). */
1016 static int
1017 eq_local_specializations (const void *p1, const void *p2)
1019 return TREE_VALUE ((tree) p1) == (tree) p2;
1022 /* Hash P1, an entry in the local specializations table. */
1024 static hashval_t
1025 hash_local_specialization (const void* p1)
1027 return htab_hash_pointer (TREE_VALUE ((tree) p1));
1030 /* Like register_specialization, but for local declarations. We are
1031 registering SPEC, an instantiation of TMPL. */
1033 static void
1034 register_local_specialization (tree spec, tree tmpl)
1036 void **slot;
1038 slot = htab_find_slot_with_hash (local_specializations, tmpl,
1039 htab_hash_pointer (tmpl), INSERT);
1040 *slot = build_tree_list (spec, tmpl);
1043 /* Print the list of candidate FNS in an error message. */
1045 void
1046 print_candidates (tree fns)
1048 tree fn;
1050 const char *str = "candidates are:";
1052 for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1054 tree f;
1056 for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
1057 cp_error_at ("%s %+#D", str, OVL_CURRENT (f));
1058 str = " ";
1062 /* Returns the template (one of the functions given by TEMPLATE_ID)
1063 which can be specialized to match the indicated DECL with the
1064 explicit template args given in TEMPLATE_ID. The DECL may be
1065 NULL_TREE if none is available. In that case, the functions in
1066 TEMPLATE_ID are non-members.
1068 If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1069 specialization of a member template.
1071 The template args (those explicitly specified and those deduced)
1072 are output in a newly created vector *TARGS_OUT.
1074 If it is impossible to determine the result, an error message is
1075 issued. The error_mark_node is returned to indicate failure. */
1077 static tree
1078 determine_specialization (tree template_id,
1079 tree decl,
1080 tree* targs_out,
1081 int need_member_template)
1083 tree fns;
1084 tree targs;
1085 tree explicit_targs;
1086 tree candidates = NULL_TREE;
1087 tree templates = NULL_TREE;
1089 *targs_out = NULL_TREE;
1091 if (template_id == error_mark_node)
1092 return error_mark_node;
1094 fns = TREE_OPERAND (template_id, 0);
1095 explicit_targs = TREE_OPERAND (template_id, 1);
1097 if (fns == error_mark_node)
1098 return error_mark_node;
1100 /* Check for baselinks. */
1101 if (BASELINK_P (fns))
1102 fns = BASELINK_FUNCTIONS (fns);
1104 if (!is_overloaded_fn (fns))
1106 error ("`%D' is not a function template", fns);
1107 return error_mark_node;
1110 for (; fns; fns = OVL_NEXT (fns))
1112 tree fn = OVL_CURRENT (fns);
1114 if (TREE_CODE (fn) == TEMPLATE_DECL)
1116 tree decl_arg_types;
1118 /* DECL might be a specialization of FN. */
1120 /* Adjust the type of DECL in case FN is a static member. */
1121 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1122 if (DECL_STATIC_FUNCTION_P (fn)
1123 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1124 decl_arg_types = TREE_CHAIN (decl_arg_types);
1126 /* Check that the number of function parameters matches.
1127 For example,
1128 template <class T> void f(int i = 0);
1129 template <> void f<int>();
1130 The specialization f<int> is invalid but is not caught
1131 by get_bindings below. */
1133 if (list_length (TYPE_ARG_TYPES (TREE_TYPE (fn)))
1134 != list_length (decl_arg_types))
1135 continue;
1137 /* See whether this function might be a specialization of this
1138 template. */
1139 targs = get_bindings (fn, decl, explicit_targs);
1141 if (!targs)
1142 /* We cannot deduce template arguments that when used to
1143 specialize TMPL will produce DECL. */
1144 continue;
1146 /* Save this template, and the arguments deduced. */
1147 templates = tree_cons (targs, fn, templates);
1149 else if (need_member_template)
1150 /* FN is an ordinary member function, and we need a
1151 specialization of a member template. */
1153 else if (TREE_CODE (fn) != FUNCTION_DECL)
1154 /* We can get IDENTIFIER_NODEs here in certain erroneous
1155 cases. */
1157 else if (!DECL_FUNCTION_MEMBER_P (fn))
1158 /* This is just an ordinary non-member function. Nothing can
1159 be a specialization of that. */
1161 else if (DECL_ARTIFICIAL (fn))
1162 /* Cannot specialize functions that are created implicitly. */
1164 else
1166 tree decl_arg_types;
1168 /* This is an ordinary member function. However, since
1169 we're here, we can assume it's enclosing class is a
1170 template class. For example,
1172 template <typename T> struct S { void f(); };
1173 template <> void S<int>::f() {}
1175 Here, S<int>::f is a non-template, but S<int> is a
1176 template class. If FN has the same type as DECL, we
1177 might be in business. */
1179 if (!DECL_TEMPLATE_INFO (fn))
1180 /* Its enclosing class is an explicit specialization
1181 of a template class. This is not a candidate. */
1182 continue;
1184 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1185 TREE_TYPE (TREE_TYPE (fn))))
1186 /* The return types differ. */
1187 continue;
1189 /* Adjust the type of DECL in case FN is a static member. */
1190 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1191 if (DECL_STATIC_FUNCTION_P (fn)
1192 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1193 decl_arg_types = TREE_CHAIN (decl_arg_types);
1195 if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1196 decl_arg_types))
1197 /* They match! */
1198 candidates = tree_cons (NULL_TREE, fn, candidates);
1202 if (templates && TREE_CHAIN (templates))
1204 /* We have:
1206 [temp.expl.spec]
1208 It is possible for a specialization with a given function
1209 signature to be instantiated from more than one function
1210 template. In such cases, explicit specification of the
1211 template arguments must be used to uniquely identify the
1212 function template specialization being specialized.
1214 Note that here, there's no suggestion that we're supposed to
1215 determine which of the candidate templates is most
1216 specialized. However, we, also have:
1218 [temp.func.order]
1220 Partial ordering of overloaded function template
1221 declarations is used in the following contexts to select
1222 the function template to which a function template
1223 specialization refers:
1225 -- when an explicit specialization refers to a function
1226 template.
1228 So, we do use the partial ordering rules, at least for now.
1229 This extension can only serve to make invalid programs valid,
1230 so it's safe. And, there is strong anecdotal evidence that
1231 the committee intended the partial ordering rules to apply;
1232 the EDG front-end has that behavior, and John Spicer claims
1233 that the committee simply forgot to delete the wording in
1234 [temp.expl.spec]. */
1235 tree tmpl = most_specialized (templates, decl, explicit_targs);
1236 if (tmpl && tmpl != error_mark_node)
1238 targs = get_bindings (tmpl, decl, explicit_targs);
1239 templates = tree_cons (targs, tmpl, NULL_TREE);
1243 if (templates == NULL_TREE && candidates == NULL_TREE)
1245 cp_error_at ("template-id `%D' for `%+D' does not match any template declaration",
1246 template_id, decl);
1247 return error_mark_node;
1249 else if ((templates && TREE_CHAIN (templates))
1250 || (candidates && TREE_CHAIN (candidates))
1251 || (templates && candidates))
1253 cp_error_at ("ambiguous template specialization `%D' for `%+D'",
1254 template_id, decl);
1255 chainon (candidates, templates);
1256 print_candidates (candidates);
1257 return error_mark_node;
1260 /* We have one, and exactly one, match. */
1261 if (candidates)
1263 /* It was a specialization of an ordinary member function in a
1264 template class. */
1265 *targs_out = copy_node (DECL_TI_ARGS (TREE_VALUE (candidates)));
1266 return DECL_TI_TEMPLATE (TREE_VALUE (candidates));
1269 /* It was a specialization of a template. */
1270 targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
1271 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1273 *targs_out = copy_node (targs);
1274 SET_TMPL_ARGS_LEVEL (*targs_out,
1275 TMPL_ARGS_DEPTH (*targs_out),
1276 TREE_PURPOSE (templates));
1278 else
1279 *targs_out = TREE_PURPOSE (templates);
1280 return TREE_VALUE (templates);
1283 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1284 but with the default argument values filled in from those in the
1285 TMPL_TYPES. */
1287 static tree
1288 copy_default_args_to_explicit_spec_1 (tree spec_types,
1289 tree tmpl_types)
1291 tree new_spec_types;
1293 if (!spec_types)
1294 return NULL_TREE;
1296 if (spec_types == void_list_node)
1297 return void_list_node;
1299 /* Substitute into the rest of the list. */
1300 new_spec_types =
1301 copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1302 TREE_CHAIN (tmpl_types));
1304 /* Add the default argument for this parameter. */
1305 return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1306 TREE_VALUE (spec_types),
1307 new_spec_types);
1310 /* DECL is an explicit specialization. Replicate default arguments
1311 from the template it specializes. (That way, code like:
1313 template <class T> void f(T = 3);
1314 template <> void f(double);
1315 void g () { f (); }
1317 works, as required.) An alternative approach would be to look up
1318 the correct default arguments at the call-site, but this approach
1319 is consistent with how implicit instantiations are handled. */
1321 static void
1322 copy_default_args_to_explicit_spec (tree decl)
1324 tree tmpl;
1325 tree spec_types;
1326 tree tmpl_types;
1327 tree new_spec_types;
1328 tree old_type;
1329 tree new_type;
1330 tree t;
1331 tree object_type = NULL_TREE;
1332 tree in_charge = NULL_TREE;
1333 tree vtt = NULL_TREE;
1335 /* See if there's anything we need to do. */
1336 tmpl = DECL_TI_TEMPLATE (decl);
1337 tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1338 for (t = tmpl_types; t; t = TREE_CHAIN (t))
1339 if (TREE_PURPOSE (t))
1340 break;
1341 if (!t)
1342 return;
1344 old_type = TREE_TYPE (decl);
1345 spec_types = TYPE_ARG_TYPES (old_type);
1347 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1349 /* Remove the this pointer, but remember the object's type for
1350 CV quals. */
1351 object_type = TREE_TYPE (TREE_VALUE (spec_types));
1352 spec_types = TREE_CHAIN (spec_types);
1353 tmpl_types = TREE_CHAIN (tmpl_types);
1355 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
1357 /* DECL may contain more parameters than TMPL due to the extra
1358 in-charge parameter in constructors and destructors. */
1359 in_charge = spec_types;
1360 spec_types = TREE_CHAIN (spec_types);
1362 if (DECL_HAS_VTT_PARM_P (decl))
1364 vtt = spec_types;
1365 spec_types = TREE_CHAIN (spec_types);
1369 /* Compute the merged default arguments. */
1370 new_spec_types =
1371 copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1373 /* Compute the new FUNCTION_TYPE. */
1374 if (object_type)
1376 if (vtt)
1377 new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
1378 TREE_VALUE (vtt),
1379 new_spec_types);
1381 if (in_charge)
1382 /* Put the in-charge parameter back. */
1383 new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1384 TREE_VALUE (in_charge),
1385 new_spec_types);
1387 new_type = build_cplus_method_type (object_type,
1388 TREE_TYPE (old_type),
1389 new_spec_types);
1391 else
1392 new_type = build_function_type (TREE_TYPE (old_type),
1393 new_spec_types);
1394 new_type = build_type_attribute_variant (new_type,
1395 TYPE_ATTRIBUTES (old_type));
1396 new_type = build_exception_variant (new_type,
1397 TYPE_RAISES_EXCEPTIONS (old_type));
1398 TREE_TYPE (decl) = new_type;
1401 /* Check to see if the function just declared, as indicated in
1402 DECLARATOR, and in DECL, is a specialization of a function
1403 template. We may also discover that the declaration is an explicit
1404 instantiation at this point.
1406 Returns DECL, or an equivalent declaration that should be used
1407 instead if all goes well. Issues an error message if something is
1408 amiss. Returns error_mark_node if the error is not easily
1409 recoverable.
1411 FLAGS is a bitmask consisting of the following flags:
1413 2: The function has a definition.
1414 4: The function is a friend.
1416 The TEMPLATE_COUNT is the number of references to qualifying
1417 template classes that appeared in the name of the function. For
1418 example, in
1420 template <class T> struct S { void f(); };
1421 void S<int>::f();
1423 the TEMPLATE_COUNT would be 1. However, explicitly specialized
1424 classes are not counted in the TEMPLATE_COUNT, so that in
1426 template <class T> struct S {};
1427 template <> struct S<int> { void f(); }
1428 template <> void S<int>::f();
1430 the TEMPLATE_COUNT would be 0. (Note that this declaration is
1431 invalid; there should be no template <>.)
1433 If the function is a specialization, it is marked as such via
1434 DECL_TEMPLATE_SPECIALIZATION. Furthermore, its DECL_TEMPLATE_INFO
1435 is set up correctly, and it is added to the list of specializations
1436 for that template. */
1438 tree
1439 check_explicit_specialization (tree declarator,
1440 tree decl,
1441 int template_count,
1442 int flags)
1444 int have_def = flags & 2;
1445 int is_friend = flags & 4;
1446 int specialization = 0;
1447 int explicit_instantiation = 0;
1448 int member_specialization = 0;
1449 tree ctype = DECL_CLASS_CONTEXT (decl);
1450 tree dname = DECL_NAME (decl);
1451 tmpl_spec_kind tsk;
1453 tsk = current_tmpl_spec_kind (template_count);
1455 switch (tsk)
1457 case tsk_none:
1458 if (processing_specialization)
1460 specialization = 1;
1461 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1463 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1465 if (is_friend)
1466 /* This could be something like:
1468 template <class T> void f(T);
1469 class S { friend void f<>(int); } */
1470 specialization = 1;
1471 else
1473 /* This case handles bogus declarations like template <>
1474 template <class T> void f<int>(); */
1476 error ("template-id `%D' in declaration of primary template",
1477 declarator);
1478 return decl;
1481 break;
1483 case tsk_invalid_member_spec:
1484 /* The error has already been reported in
1485 check_specialization_scope. */
1486 return error_mark_node;
1488 case tsk_invalid_expl_inst:
1489 error ("template parameter list used in explicit instantiation");
1491 /* Fall through. */
1493 case tsk_expl_inst:
1494 if (have_def)
1495 error ("definition provided for explicit instantiation");
1497 explicit_instantiation = 1;
1498 break;
1500 case tsk_excessive_parms:
1501 error ("too many template parameter lists in declaration of `%D'",
1502 decl);
1503 return error_mark_node;
1505 /* Fall through. */
1506 case tsk_expl_spec:
1507 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1508 if (ctype)
1509 member_specialization = 1;
1510 else
1511 specialization = 1;
1512 break;
1514 case tsk_insufficient_parms:
1515 if (template_header_count)
1517 error("too few template parameter lists in declaration of `%D'",
1518 decl);
1519 return decl;
1521 else if (ctype != NULL_TREE
1522 && !TYPE_BEING_DEFINED (ctype)
1523 && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype)
1524 && !is_friend)
1526 /* For backwards compatibility, we accept:
1528 template <class T> struct S { void f(); };
1529 void S<int>::f() {} // Missing template <>
1531 That used to be valid C++. */
1532 if (pedantic)
1533 pedwarn
1534 ("explicit specialization not preceded by `template <>'");
1535 specialization = 1;
1536 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1538 break;
1540 case tsk_template:
1541 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1543 /* This case handles bogus declarations like template <>
1544 template <class T> void f<int>(); */
1546 if (uses_template_parms (declarator))
1547 error ("partial specialization `%D' of function template",
1548 declarator);
1549 else
1550 error ("template-id `%D' in declaration of primary template",
1551 declarator);
1552 return decl;
1555 if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1556 /* This is a specialization of a member template, without
1557 specialization the containing class. Something like:
1559 template <class T> struct S {
1560 template <class U> void f (U);
1562 template <> template <class U> void S<int>::f(U) {}
1564 That's a specialization -- but of the entire template. */
1565 specialization = 1;
1566 break;
1568 default:
1569 abort ();
1572 if (specialization || member_specialization)
1574 tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
1575 for (; t; t = TREE_CHAIN (t))
1576 if (TREE_PURPOSE (t))
1578 pedwarn
1579 ("default argument specified in explicit specialization");
1580 break;
1582 if (current_lang_name == lang_name_c)
1583 error ("template specialization with C linkage");
1586 if (specialization || member_specialization || explicit_instantiation)
1588 tree tmpl = NULL_TREE;
1589 tree targs = NULL_TREE;
1591 /* Make sure that the declarator is a TEMPLATE_ID_EXPR. */
1592 if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
1594 tree fns;
1596 my_friendly_assert (TREE_CODE (declarator) == IDENTIFIER_NODE, 0);
1597 if (ctype)
1598 fns = dname;
1599 else
1601 /* If there is no class context, the explicit instantiation
1602 must be at namespace scope. */
1603 my_friendly_assert (DECL_NAMESPACE_SCOPE_P (decl), 20030625);
1605 /* Find the namespace binding, using the declaration
1606 context. */
1607 fns = namespace_binding (dname, CP_DECL_CONTEXT (decl));
1610 declarator = lookup_template_function (fns, NULL_TREE);
1613 if (declarator == error_mark_node)
1614 return error_mark_node;
1616 if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
1618 if (!explicit_instantiation)
1619 /* A specialization in class scope. This is invalid,
1620 but the error will already have been flagged by
1621 check_specialization_scope. */
1622 return error_mark_node;
1623 else
1625 /* It's not valid to write an explicit instantiation in
1626 class scope, e.g.:
1628 class C { template void f(); }
1630 This case is caught by the parser. However, on
1631 something like:
1633 template class C { void f(); };
1635 (which is invalid) we can get here. The error will be
1636 issued later. */
1640 return decl;
1642 else if (TREE_CODE (TREE_OPERAND (declarator, 0)) == LOOKUP_EXPR)
1644 /* A friend declaration. We can't do much, because we don't
1645 know what this resolves to, yet. */
1646 my_friendly_assert (is_friend != 0, 0);
1647 my_friendly_assert (!explicit_instantiation, 0);
1648 SET_DECL_IMPLICIT_INSTANTIATION (decl);
1649 return decl;
1651 else if (ctype != NULL_TREE
1652 && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
1653 IDENTIFIER_NODE))
1655 /* Find the list of functions in ctype that have the same
1656 name as the declared function. */
1657 tree name = TREE_OPERAND (declarator, 0);
1658 tree fns = NULL_TREE;
1659 int idx;
1661 if (constructor_name_p (name, ctype))
1663 int is_constructor = DECL_CONSTRUCTOR_P (decl);
1665 if (is_constructor ? !TYPE_HAS_CONSTRUCTOR (ctype)
1666 : !TYPE_HAS_DESTRUCTOR (ctype))
1668 /* From [temp.expl.spec]:
1670 If such an explicit specialization for the member
1671 of a class template names an implicitly-declared
1672 special member function (clause _special_), the
1673 program is ill-formed.
1675 Similar language is found in [temp.explicit]. */
1676 error ("specialization of implicitly-declared special member function");
1677 return error_mark_node;
1680 name = is_constructor ? ctor_identifier : dtor_identifier;
1683 if (!DECL_CONV_FN_P (decl))
1685 idx = lookup_fnfields_1 (ctype, name);
1686 if (idx >= 0)
1687 fns = TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (ctype), idx);
1689 else
1691 tree methods;
1693 /* For a type-conversion operator, we cannot do a
1694 name-based lookup. We might be looking for `operator
1695 int' which will be a specialization of `operator T'.
1696 So, we find *all* the conversion operators, and then
1697 select from them. */
1698 fns = NULL_TREE;
1700 methods = CLASSTYPE_METHOD_VEC (ctype);
1701 if (methods)
1702 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
1703 idx < TREE_VEC_LENGTH (methods); ++idx)
1705 tree ovl = TREE_VEC_ELT (methods, idx);
1707 if (!ovl || !DECL_CONV_FN_P (OVL_CURRENT (ovl)))
1708 /* There are no more conversion functions. */
1709 break;
1711 /* Glue all these conversion functions together
1712 with those we already have. */
1713 for (; ovl; ovl = OVL_NEXT (ovl))
1714 fns = ovl_cons (OVL_CURRENT (ovl), fns);
1718 if (fns == NULL_TREE)
1720 error ("no member function `%D' declared in `%T'",
1721 name, ctype);
1722 return error_mark_node;
1724 else
1725 TREE_OPERAND (declarator, 0) = fns;
1728 /* Figure out what exactly is being specialized at this point.
1729 Note that for an explicit instantiation, even one for a
1730 member function, we cannot tell apriori whether the
1731 instantiation is for a member template, or just a member
1732 function of a template class. Even if a member template is
1733 being instantiated, the member template arguments may be
1734 elided if they can be deduced from the rest of the
1735 declaration. */
1736 tmpl = determine_specialization (declarator, decl,
1737 &targs,
1738 member_specialization);
1740 if (!tmpl || tmpl == error_mark_node)
1741 /* We couldn't figure out what this declaration was
1742 specializing. */
1743 return error_mark_node;
1744 else
1746 tree gen_tmpl = most_general_template (tmpl);
1748 if (explicit_instantiation)
1750 /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
1751 is done by do_decl_instantiation later. */
1753 int arg_depth = TMPL_ARGS_DEPTH (targs);
1754 int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
1756 if (arg_depth > parm_depth)
1758 /* If TMPL is not the most general template (for
1759 example, if TMPL is a friend template that is
1760 injected into namespace scope), then there will
1761 be too many levels of TARGS. Remove some of them
1762 here. */
1763 int i;
1764 tree new_targs;
1766 new_targs = make_tree_vec (parm_depth);
1767 for (i = arg_depth - parm_depth; i < arg_depth; ++i)
1768 TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
1769 = TREE_VEC_ELT (targs, i);
1770 targs = new_targs;
1773 return instantiate_template (tmpl, targs, tf_error);
1776 /* If we thought that the DECL was a member function, but it
1777 turns out to be specializing a static member function,
1778 make DECL a static member function as well. We also have
1779 to adjust last_function_parms to avoid confusing
1780 start_function later. */
1781 if (DECL_STATIC_FUNCTION_P (tmpl)
1782 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1784 revert_static_member_fn (decl);
1785 last_function_parms = TREE_CHAIN (last_function_parms);
1788 /* If this is a specialization of a member template of a
1789 template class. In we want to return the TEMPLATE_DECL,
1790 not the specialization of it. */
1791 if (tsk == tsk_template)
1793 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
1794 DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
1795 if (have_def)
1797 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
1798 DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl))
1799 = DECL_SOURCE_LOCATION (decl);
1801 return tmpl;
1804 /* Set up the DECL_TEMPLATE_INFO for DECL. */
1805 DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
1807 /* Inherit default function arguments from the template
1808 DECL is specializing. */
1809 copy_default_args_to_explicit_spec (decl);
1811 /* This specialization has the same protection as the
1812 template it specializes. */
1813 TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
1814 TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
1816 if (is_friend && !have_def)
1817 /* This is not really a declaration of a specialization.
1818 It's just the name of an instantiation. But, it's not
1819 a request for an instantiation, either. */
1820 SET_DECL_IMPLICIT_INSTANTIATION (decl);
1821 else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
1822 /* This is indeed a specialization. In case of constructors
1823 and destructors, we need in-charge and not-in-charge
1824 versions in V3 ABI. */
1825 clone_function_decl (decl, /*update_method_vec_p=*/0);
1827 /* Register this specialization so that we can find it
1828 again. */
1829 decl = register_specialization (decl, gen_tmpl, targs);
1833 return decl;
1836 /* TYPE is being declared. Verify that the use of template headers
1837 and such is reasonable. Issue error messages if not. */
1839 void
1840 maybe_check_template_type (tree type)
1842 if (template_header_count)
1844 /* We are in the scope of some `template <...>' header. */
1846 int context_depth
1847 = template_class_depth_real (TYPE_CONTEXT (type),
1848 /*count_specializations=*/1);
1850 if (template_header_count <= context_depth)
1851 /* This is OK; the template headers are for the context. We
1852 are actually too lenient here; like
1853 check_explicit_specialization we should consider the number
1854 of template types included in the actual declaration. For
1855 example,
1857 template <class T> struct S {
1858 template <class U> template <class V>
1859 struct I {};
1862 is invalid, but:
1864 template <class T> struct S {
1865 template <class U> struct I;
1868 template <class T> template <class U.
1869 struct S<T>::I {};
1871 is not. */
1873 else if (template_header_count > context_depth + 1)
1874 /* There are two many template parameter lists. */
1875 error ("too many template parameter lists in declaration of `%T'", type);
1879 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
1880 parameters. These are represented in the same format used for
1881 DECL_TEMPLATE_PARMS. */
1883 int comp_template_parms (tree parms1, tree parms2)
1885 tree p1;
1886 tree p2;
1888 if (parms1 == parms2)
1889 return 1;
1891 for (p1 = parms1, p2 = parms2;
1892 p1 != NULL_TREE && p2 != NULL_TREE;
1893 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
1895 tree t1 = TREE_VALUE (p1);
1896 tree t2 = TREE_VALUE (p2);
1897 int i;
1899 my_friendly_assert (TREE_CODE (t1) == TREE_VEC, 0);
1900 my_friendly_assert (TREE_CODE (t2) == TREE_VEC, 0);
1902 if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
1903 return 0;
1905 for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
1907 tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
1908 tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
1910 if (TREE_CODE (parm1) != TREE_CODE (parm2))
1911 return 0;
1913 if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM)
1914 continue;
1915 else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
1916 return 0;
1920 if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
1921 /* One set of parameters has more parameters lists than the
1922 other. */
1923 return 0;
1925 return 1;
1928 /* Complain if DECL shadows a template parameter.
1930 [temp.local]: A template-parameter shall not be redeclared within its
1931 scope (including nested scopes). */
1933 void
1934 check_template_shadow (tree decl)
1936 tree olddecl;
1938 /* If we're not in a template, we can't possibly shadow a template
1939 parameter. */
1940 if (!current_template_parms)
1941 return;
1943 /* Figure out what we're shadowing. */
1944 if (TREE_CODE (decl) == OVERLOAD)
1945 decl = OVL_CURRENT (decl);
1946 olddecl = IDENTIFIER_VALUE (DECL_NAME (decl));
1948 /* If there's no previous binding for this name, we're not shadowing
1949 anything, let alone a template parameter. */
1950 if (!olddecl)
1951 return;
1953 /* If we're not shadowing a template parameter, we're done. Note
1954 that OLDDECL might be an OVERLOAD (or perhaps even an
1955 ERROR_MARK), so we can't just blithely assume it to be a _DECL
1956 node. */
1957 if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
1958 return;
1960 /* We check for decl != olddecl to avoid bogus errors for using a
1961 name inside a class. We check TPFI to avoid duplicate errors for
1962 inline member templates. */
1963 if (decl == olddecl
1964 || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
1965 return;
1967 cp_error_at ("declaration of `%#D'", decl);
1968 cp_error_at (" shadows template parm `%#D'", olddecl);
1971 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
1972 ORIG_LEVEL, DECL, and TYPE. */
1974 static tree
1975 build_template_parm_index (int index,
1976 int level,
1977 int orig_level,
1978 tree decl,
1979 tree type)
1981 tree t = make_node (TEMPLATE_PARM_INDEX);
1982 TEMPLATE_PARM_IDX (t) = index;
1983 TEMPLATE_PARM_LEVEL (t) = level;
1984 TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
1985 TEMPLATE_PARM_DECL (t) = decl;
1986 TREE_TYPE (t) = type;
1987 TREE_CONSTANT (t) = TREE_CONSTANT (decl);
1988 TREE_READONLY (t) = TREE_READONLY (decl);
1990 return t;
1993 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
1994 TEMPLATE_PARM_LEVEL has been decreased by LEVELS. If such a
1995 TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
1996 new one is created. */
1998 static tree
1999 reduce_template_parm_level (tree index, tree type, int levels)
2001 if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
2002 || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
2003 != TEMPLATE_PARM_LEVEL (index) - levels))
2005 tree orig_decl = TEMPLATE_PARM_DECL (index);
2006 tree decl, t;
2008 decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
2009 TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
2010 TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2011 DECL_ARTIFICIAL (decl) = 1;
2012 SET_DECL_TEMPLATE_PARM_P (decl);
2014 t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
2015 TEMPLATE_PARM_LEVEL (index) - levels,
2016 TEMPLATE_PARM_ORIG_LEVEL (index),
2017 decl, type);
2018 TEMPLATE_PARM_DESCENDANTS (index) = t;
2020 /* Template template parameters need this. */
2021 DECL_TEMPLATE_PARMS (decl)
2022 = DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index));
2025 return TEMPLATE_PARM_DESCENDANTS (index);
2028 /* Process information from new template parameter NEXT and append it to the
2029 LIST being built. */
2031 tree
2032 process_template_parm (tree list, tree next)
2034 tree parm;
2035 tree decl = 0;
2036 tree defval;
2037 int is_type, idx;
2039 parm = next;
2040 my_friendly_assert (TREE_CODE (parm) == TREE_LIST, 259);
2041 defval = TREE_PURPOSE (parm);
2042 parm = TREE_VALUE (parm);
2043 is_type = TREE_PURPOSE (parm) == class_type_node;
2045 if (list)
2047 tree p = TREE_VALUE (tree_last (list));
2049 if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
2050 idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
2051 else
2052 idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
2053 ++idx;
2055 else
2056 idx = 0;
2058 if (!is_type)
2060 my_friendly_assert (TREE_CODE (TREE_PURPOSE (parm)) == TREE_LIST, 260);
2061 /* is a const-param */
2062 parm = grokdeclarator (TREE_VALUE (parm), TREE_PURPOSE (parm),
2063 PARM, 0, NULL);
2064 SET_DECL_TEMPLATE_PARM_P (parm);
2066 /* [temp.param]
2068 The top-level cv-qualifiers on the template-parameter are
2069 ignored when determining its type. */
2070 TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
2072 /* A template parameter is not modifiable. */
2073 TREE_READONLY (parm) = TREE_CONSTANT (parm) = 1;
2074 if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
2075 TREE_TYPE (parm) = void_type_node;
2076 decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
2077 TREE_CONSTANT (decl) = TREE_READONLY (decl) = 1;
2078 DECL_INITIAL (parm) = DECL_INITIAL (decl)
2079 = build_template_parm_index (idx, processing_template_decl,
2080 processing_template_decl,
2081 decl, TREE_TYPE (parm));
2083 else
2085 tree t;
2086 parm = TREE_VALUE (parm);
2088 if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
2090 t = make_aggr_type (TEMPLATE_TEMPLATE_PARM);
2091 /* This is for distinguishing between real templates and template
2092 template parameters */
2093 TREE_TYPE (parm) = t;
2094 TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
2095 decl = parm;
2097 else
2099 t = make_aggr_type (TEMPLATE_TYPE_PARM);
2100 /* parm is either IDENTIFIER_NODE or NULL_TREE */
2101 decl = build_decl (TYPE_DECL, parm, t);
2104 TYPE_NAME (t) = decl;
2105 TYPE_STUB_DECL (t) = decl;
2106 parm = decl;
2107 TEMPLATE_TYPE_PARM_INDEX (t)
2108 = build_template_parm_index (idx, processing_template_decl,
2109 processing_template_decl,
2110 decl, TREE_TYPE (parm));
2112 DECL_ARTIFICIAL (decl) = 1;
2113 SET_DECL_TEMPLATE_PARM_P (decl);
2114 pushdecl (decl);
2115 parm = build_tree_list (defval, parm);
2116 return chainon (list, parm);
2119 /* The end of a template parameter list has been reached. Process the
2120 tree list into a parameter vector, converting each parameter into a more
2121 useful form. Type parameters are saved as IDENTIFIER_NODEs, and others
2122 as PARM_DECLs. */
2124 tree
2125 end_template_parm_list (tree parms)
2127 int nparms;
2128 tree parm, next;
2129 tree saved_parmlist = make_tree_vec (list_length (parms));
2131 current_template_parms
2132 = tree_cons (size_int (processing_template_decl),
2133 saved_parmlist, current_template_parms);
2135 for (parm = parms, nparms = 0; parm; parm = next, nparms++)
2137 next = TREE_CHAIN (parm);
2138 TREE_VEC_ELT (saved_parmlist, nparms) = parm;
2139 TREE_CHAIN (parm) = NULL_TREE;
2142 --processing_template_parmlist;
2144 return saved_parmlist;
2147 /* end_template_decl is called after a template declaration is seen. */
2149 void
2150 end_template_decl (void)
2152 reset_specialization ();
2154 if (! processing_template_decl)
2155 return;
2157 /* This matches the pushlevel in begin_template_parm_list. */
2158 finish_scope ();
2160 --processing_template_decl;
2161 current_template_parms = TREE_CHAIN (current_template_parms);
2164 /* Given a template argument vector containing the template PARMS.
2165 The innermost PARMS are given first. */
2167 tree
2168 current_template_args (void)
2170 tree header;
2171 tree args = NULL_TREE;
2172 int length = TMPL_PARMS_DEPTH (current_template_parms);
2173 int l = length;
2175 /* If there is only one level of template parameters, we do not
2176 create a TREE_VEC of TREE_VECs. Instead, we return a single
2177 TREE_VEC containing the arguments. */
2178 if (length > 1)
2179 args = make_tree_vec (length);
2181 for (header = current_template_parms; header; header = TREE_CHAIN (header))
2183 tree a = copy_node (TREE_VALUE (header));
2184 int i;
2186 TREE_TYPE (a) = NULL_TREE;
2187 for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
2189 tree t = TREE_VEC_ELT (a, i);
2191 /* T will be a list if we are called from within a
2192 begin/end_template_parm_list pair, but a vector directly
2193 if within a begin/end_member_template_processing pair. */
2194 if (TREE_CODE (t) == TREE_LIST)
2196 t = TREE_VALUE (t);
2198 if (TREE_CODE (t) == TYPE_DECL
2199 || TREE_CODE (t) == TEMPLATE_DECL)
2200 t = TREE_TYPE (t);
2201 else
2202 t = DECL_INITIAL (t);
2203 TREE_VEC_ELT (a, i) = t;
2207 if (length > 1)
2208 TREE_VEC_ELT (args, --l) = a;
2209 else
2210 args = a;
2213 return args;
2216 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
2217 template PARMS. Used by push_template_decl below. */
2219 static tree
2220 build_template_decl (tree decl, tree parms)
2222 tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
2223 DECL_TEMPLATE_PARMS (tmpl) = parms;
2224 DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
2225 if (DECL_LANG_SPECIFIC (decl))
2227 DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
2228 DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
2229 DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
2230 DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
2231 DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
2232 if (DECL_OVERLOADED_OPERATOR_P (decl))
2233 SET_OVERLOADED_OPERATOR_CODE (tmpl,
2234 DECL_OVERLOADED_OPERATOR_P (decl));
2237 return tmpl;
2240 struct template_parm_data
2242 /* The level of the template parameters we are currently
2243 processing. */
2244 int level;
2246 /* The index of the specialization argument we are currently
2247 processing. */
2248 int current_arg;
2250 /* An array whose size is the number of template parameters. The
2251 elements are nonzero if the parameter has been used in any one
2252 of the arguments processed so far. */
2253 int* parms;
2255 /* An array whose size is the number of template arguments. The
2256 elements are nonzero if the argument makes use of template
2257 parameters of this level. */
2258 int* arg_uses_template_parms;
2261 /* Subroutine of push_template_decl used to see if each template
2262 parameter in a partial specialization is used in the explicit
2263 argument list. If T is of the LEVEL given in DATA (which is
2264 treated as a template_parm_data*), then DATA->PARMS is marked
2265 appropriately. */
2267 static int
2268 mark_template_parm (tree t, void* data)
2270 int level;
2271 int idx;
2272 struct template_parm_data* tpd = (struct template_parm_data*) data;
2274 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
2276 level = TEMPLATE_PARM_LEVEL (t);
2277 idx = TEMPLATE_PARM_IDX (t);
2279 else
2281 level = TEMPLATE_TYPE_LEVEL (t);
2282 idx = TEMPLATE_TYPE_IDX (t);
2285 if (level == tpd->level)
2287 tpd->parms[idx] = 1;
2288 tpd->arg_uses_template_parms[tpd->current_arg] = 1;
2291 /* Return zero so that for_each_template_parm will continue the
2292 traversal of the tree; we want to mark *every* template parm. */
2293 return 0;
2296 /* Process the partial specialization DECL. */
2298 static tree
2299 process_partial_specialization (tree decl)
2301 tree type = TREE_TYPE (decl);
2302 tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
2303 tree specargs = CLASSTYPE_TI_ARGS (type);
2304 tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
2305 tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
2306 tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
2307 int nargs = TREE_VEC_LENGTH (inner_args);
2308 int ntparms = TREE_VEC_LENGTH (inner_parms);
2309 int i;
2310 int did_error_intro = 0;
2311 struct template_parm_data tpd;
2312 struct template_parm_data tpd2;
2314 /* We check that each of the template parameters given in the
2315 partial specialization is used in the argument list to the
2316 specialization. For example:
2318 template <class T> struct S;
2319 template <class T> struct S<T*>;
2321 The second declaration is OK because `T*' uses the template
2322 parameter T, whereas
2324 template <class T> struct S<int>;
2326 is no good. Even trickier is:
2328 template <class T>
2329 struct S1
2331 template <class U>
2332 struct S2;
2333 template <class U>
2334 struct S2<T>;
2337 The S2<T> declaration is actually invalid; it is a
2338 full-specialization. Of course,
2340 template <class U>
2341 struct S2<T (*)(U)>;
2343 or some such would have been OK. */
2344 tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
2345 tpd.parms = alloca (sizeof (int) * ntparms);
2346 memset (tpd.parms, 0, sizeof (int) * ntparms);
2348 tpd.arg_uses_template_parms = alloca (sizeof (int) * nargs);
2349 memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
2350 for (i = 0; i < nargs; ++i)
2352 tpd.current_arg = i;
2353 for_each_template_parm (TREE_VEC_ELT (inner_args, i),
2354 &mark_template_parm,
2355 &tpd,
2356 NULL);
2358 for (i = 0; i < ntparms; ++i)
2359 if (tpd.parms[i] == 0)
2361 /* One of the template parms was not used in the
2362 specialization. */
2363 if (!did_error_intro)
2365 error ("template parameters not used in partial specialization:");
2366 did_error_intro = 1;
2369 error (" `%D'",
2370 TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
2373 /* [temp.class.spec]
2375 The argument list of the specialization shall not be identical to
2376 the implicit argument list of the primary template. */
2377 if (comp_template_args
2378 (inner_args,
2379 INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
2380 (maintmpl)))))
2381 error ("partial specialization `%T' does not specialize any template arguments", type);
2383 /* [temp.class.spec]
2385 A partially specialized non-type argument expression shall not
2386 involve template parameters of the partial specialization except
2387 when the argument expression is a simple identifier.
2389 The type of a template parameter corresponding to a specialized
2390 non-type argument shall not be dependent on a parameter of the
2391 specialization. */
2392 my_friendly_assert (nargs == DECL_NTPARMS (maintmpl), 0);
2393 tpd2.parms = 0;
2394 for (i = 0; i < nargs; ++i)
2396 tree arg = TREE_VEC_ELT (inner_args, i);
2397 if (/* These first two lines are the `non-type' bit. */
2398 !TYPE_P (arg)
2399 && TREE_CODE (arg) != TEMPLATE_DECL
2400 /* This next line is the `argument expression is not just a
2401 simple identifier' condition and also the `specialized
2402 non-type argument' bit. */
2403 && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
2405 if (tpd.arg_uses_template_parms[i])
2406 error ("template argument `%E' involves template parameter(s)", arg);
2407 else
2409 /* Look at the corresponding template parameter,
2410 marking which template parameters its type depends
2411 upon. */
2412 tree type =
2413 TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (main_inner_parms,
2414 i)));
2416 if (!tpd2.parms)
2418 /* We haven't yet initialized TPD2. Do so now. */
2419 tpd2.arg_uses_template_parms
2420 = (int*) alloca (sizeof (int) * nargs);
2421 /* The number of parameters here is the number in the
2422 main template, which, as checked in the assertion
2423 above, is NARGS. */
2424 tpd2.parms = (int*) alloca (sizeof (int) * nargs);
2425 tpd2.level =
2426 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
2429 /* Mark the template parameters. But this time, we're
2430 looking for the template parameters of the main
2431 template, not in the specialization. */
2432 tpd2.current_arg = i;
2433 tpd2.arg_uses_template_parms[i] = 0;
2434 memset (tpd2.parms, 0, sizeof (int) * nargs);
2435 for_each_template_parm (type,
2436 &mark_template_parm,
2437 &tpd2,
2438 NULL);
2440 if (tpd2.arg_uses_template_parms [i])
2442 /* The type depended on some template parameters.
2443 If they are fully specialized in the
2444 specialization, that's OK. */
2445 int j;
2446 for (j = 0; j < nargs; ++j)
2447 if (tpd2.parms[j] != 0
2448 && tpd.arg_uses_template_parms [j])
2450 error ("type `%T' of template argument `%E' depends on template parameter(s)",
2451 type,
2452 arg);
2453 break;
2460 if (retrieve_specialization (maintmpl, specargs))
2461 /* We've already got this specialization. */
2462 return decl;
2464 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
2465 = tree_cons (inner_args, inner_parms,
2466 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
2467 TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
2468 return decl;
2471 /* Check that a template declaration's use of default arguments is not
2472 invalid. Here, PARMS are the template parameters. IS_PRIMARY is
2473 nonzero if DECL is the thing declared by a primary template.
2474 IS_PARTIAL is nonzero if DECL is a partial specialization. */
2476 static void
2477 check_default_tmpl_args (tree decl, tree parms, int is_primary, int is_partial)
2479 const char *msg;
2480 int last_level_to_check;
2481 tree parm_level;
2483 /* [temp.param]
2485 A default template-argument shall not be specified in a
2486 function template declaration or a function template definition, nor
2487 in the template-parameter-list of the definition of a member of a
2488 class template. */
2490 if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
2491 /* You can't have a function template declaration in a local
2492 scope, nor you can you define a member of a class template in a
2493 local scope. */
2494 return;
2496 if (current_class_type
2497 && !TYPE_BEING_DEFINED (current_class_type)
2498 && DECL_LANG_SPECIFIC (decl)
2499 /* If this is either a friend defined in the scope of the class
2500 or a member function. */
2501 && (DECL_FUNCTION_MEMBER_P (decl)
2502 ? same_type_p (DECL_CONTEXT (decl), current_class_type)
2503 : DECL_FRIEND_CONTEXT (decl)
2504 ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
2505 : false)
2506 /* And, if it was a member function, it really was defined in
2507 the scope of the class. */
2508 && (!DECL_FUNCTION_MEMBER_P (decl)
2509 || DECL_INITIALIZED_IN_CLASS_P (decl)))
2510 /* We already checked these parameters when the template was
2511 declared, so there's no need to do it again now. This function
2512 was defined in class scope, but we're processing it's body now
2513 that the class is complete. */
2514 return;
2516 /* [temp.param]
2518 If a template-parameter has a default template-argument, all
2519 subsequent template-parameters shall have a default
2520 template-argument supplied. */
2521 for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
2523 tree inner_parms = TREE_VALUE (parm_level);
2524 int ntparms = TREE_VEC_LENGTH (inner_parms);
2525 int seen_def_arg_p = 0;
2526 int i;
2528 for (i = 0; i < ntparms; ++i)
2530 tree parm = TREE_VEC_ELT (inner_parms, i);
2531 if (TREE_PURPOSE (parm))
2532 seen_def_arg_p = 1;
2533 else if (seen_def_arg_p)
2535 error ("no default argument for `%D'", TREE_VALUE (parm));
2536 /* For better subsequent error-recovery, we indicate that
2537 there should have been a default argument. */
2538 TREE_PURPOSE (parm) = error_mark_node;
2543 if (TREE_CODE (decl) != TYPE_DECL || is_partial || !is_primary)
2544 /* For an ordinary class template, default template arguments are
2545 allowed at the innermost level, e.g.:
2546 template <class T = int>
2547 struct S {};
2548 but, in a partial specialization, they're not allowed even
2549 there, as we have in [temp.class.spec]:
2551 The template parameter list of a specialization shall not
2552 contain default template argument values.
2554 So, for a partial specialization, or for a function template,
2555 we look at all of them. */
2557 else
2558 /* But, for a primary class template that is not a partial
2559 specialization we look at all template parameters except the
2560 innermost ones. */
2561 parms = TREE_CHAIN (parms);
2563 /* Figure out what error message to issue. */
2564 if (TREE_CODE (decl) == FUNCTION_DECL)
2565 msg = "default template arguments may not be used in function templates";
2566 else if (is_partial)
2567 msg = "default template arguments may not be used in partial specializations";
2568 else
2569 msg = "default argument for template parameter for class enclosing `%D'";
2571 if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
2572 /* If we're inside a class definition, there's no need to
2573 examine the parameters to the class itself. On the one
2574 hand, they will be checked when the class is defined, and,
2575 on the other, default arguments are valid in things like:
2576 template <class T = double>
2577 struct S { template <class U> void f(U); };
2578 Here the default argument for `S' has no bearing on the
2579 declaration of `f'. */
2580 last_level_to_check = template_class_depth (current_class_type) + 1;
2581 else
2582 /* Check everything. */
2583 last_level_to_check = 0;
2585 for (parm_level = parms;
2586 parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
2587 parm_level = TREE_CHAIN (parm_level))
2589 tree inner_parms = TREE_VALUE (parm_level);
2590 int i;
2591 int ntparms;
2593 ntparms = TREE_VEC_LENGTH (inner_parms);
2594 for (i = 0; i < ntparms; ++i)
2595 if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
2597 if (msg)
2599 error (msg, decl);
2600 msg = 0;
2603 /* Clear out the default argument so that we are not
2604 confused later. */
2605 TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
2608 /* At this point, if we're still interested in issuing messages,
2609 they must apply to classes surrounding the object declared. */
2610 if (msg)
2611 msg = "default argument for template parameter for class enclosing `%D'";
2615 /* Worker for push_template_decl_real, called via
2616 for_each_template_parm. DATA is really an int, indicating the
2617 level of the parameters we are interested in. If T is a template
2618 parameter of that level, return nonzero. */
2620 static int
2621 template_parm_this_level_p (tree t, void* data)
2623 int this_level = *(int *)data;
2624 int level;
2626 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
2627 level = TEMPLATE_PARM_LEVEL (t);
2628 else
2629 level = TEMPLATE_TYPE_LEVEL (t);
2630 return level == this_level;
2633 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
2634 parameters given by current_template_args, or reuses a
2635 previously existing one, if appropriate. Returns the DECL, or an
2636 equivalent one, if it is replaced via a call to duplicate_decls.
2638 If IS_FRIEND is nonzero, DECL is a friend declaration. */
2640 tree
2641 push_template_decl_real (tree decl, int is_friend)
2643 tree tmpl;
2644 tree args;
2645 tree info;
2646 tree ctx;
2647 int primary;
2648 int is_partial;
2649 int new_template_p = 0;
2651 /* See if this is a partial specialization. */
2652 is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
2653 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
2654 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
2656 is_friend |= (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl));
2658 if (is_friend)
2659 /* For a friend, we want the context of the friend function, not
2660 the type of which it is a friend. */
2661 ctx = DECL_CONTEXT (decl);
2662 else if (CP_DECL_CONTEXT (decl)
2663 && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
2664 /* In the case of a virtual function, we want the class in which
2665 it is defined. */
2666 ctx = CP_DECL_CONTEXT (decl);
2667 else
2668 /* Otherwise, if we're currently defining some class, the DECL
2669 is assumed to be a member of the class. */
2670 ctx = current_scope ();
2672 if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
2673 ctx = NULL_TREE;
2675 if (!DECL_CONTEXT (decl))
2676 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2678 /* See if this is a primary template. */
2679 primary = template_parm_scope_p ();
2681 if (primary)
2683 if (current_lang_name == lang_name_c)
2684 error ("template with C linkage");
2685 else if (TREE_CODE (decl) == TYPE_DECL
2686 && ANON_AGGRNAME_P (DECL_NAME (decl)))
2687 error ("template class without a name");
2688 else if ((DECL_IMPLICIT_TYPEDEF_P (decl)
2689 && CLASS_TYPE_P (TREE_TYPE (decl)))
2690 || (TREE_CODE (decl) == VAR_DECL && ctx && CLASS_TYPE_P (ctx))
2691 || TREE_CODE (decl) == FUNCTION_DECL)
2692 /* OK */;
2693 else
2694 error ("template declaration of `%#D'", decl);
2697 /* Check to see that the rules regarding the use of default
2698 arguments are not being violated. */
2699 check_default_tmpl_args (decl, current_template_parms,
2700 primary, is_partial);
2702 if (is_partial)
2703 return process_partial_specialization (decl);
2705 args = current_template_args ();
2707 if (!ctx
2708 || TREE_CODE (ctx) == FUNCTION_DECL
2709 || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
2710 || (is_friend && !DECL_TEMPLATE_INFO (decl)))
2712 if (DECL_LANG_SPECIFIC (decl)
2713 && DECL_TEMPLATE_INFO (decl)
2714 && DECL_TI_TEMPLATE (decl))
2715 tmpl = DECL_TI_TEMPLATE (decl);
2716 /* If DECL is a TYPE_DECL for a class-template, then there won't
2717 be DECL_LANG_SPECIFIC. The information equivalent to
2718 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead. */
2719 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
2720 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
2721 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
2723 /* Since a template declaration already existed for this
2724 class-type, we must be redeclaring it here. Make sure
2725 that the redeclaration is valid. */
2726 redeclare_class_template (TREE_TYPE (decl),
2727 current_template_parms);
2728 /* We don't need to create a new TEMPLATE_DECL; just use the
2729 one we already had. */
2730 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
2732 else
2734 tmpl = build_template_decl (decl, current_template_parms);
2735 new_template_p = 1;
2737 if (DECL_LANG_SPECIFIC (decl)
2738 && DECL_TEMPLATE_SPECIALIZATION (decl))
2740 /* A specialization of a member template of a template
2741 class. */
2742 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2743 DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
2744 DECL_TEMPLATE_INFO (decl) = NULL_TREE;
2748 else
2750 tree a, t, current, parms;
2751 int i;
2753 if (TREE_CODE (decl) == TYPE_DECL)
2755 if ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (decl)))
2756 || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
2757 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
2758 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
2759 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
2760 else
2762 error ("`%D' does not declare a template type", decl);
2763 return decl;
2766 else if (!DECL_LANG_SPECIFIC (decl) || !DECL_TEMPLATE_INFO (decl))
2768 error ("template definition of non-template `%#D'", decl);
2769 return decl;
2771 else
2772 tmpl = DECL_TI_TEMPLATE (decl);
2774 if (is_member_template (tmpl)
2775 && DECL_FUNCTION_TEMPLATE_P (tmpl)
2776 && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
2777 && DECL_TEMPLATE_SPECIALIZATION (decl))
2779 tree new_tmpl;
2781 /* The declaration is a specialization of a member
2782 template, declared outside the class. Therefore, the
2783 innermost template arguments will be NULL, so we
2784 replace them with the arguments determined by the
2785 earlier call to check_explicit_specialization. */
2786 args = DECL_TI_ARGS (decl);
2788 new_tmpl
2789 = build_template_decl (decl, current_template_parms);
2790 DECL_TEMPLATE_RESULT (new_tmpl) = decl;
2791 TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
2792 DECL_TI_TEMPLATE (decl) = new_tmpl;
2793 SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
2794 DECL_TEMPLATE_INFO (new_tmpl)
2795 = tree_cons (tmpl, args, NULL_TREE);
2797 register_specialization (new_tmpl,
2798 most_general_template (tmpl),
2799 args);
2800 return decl;
2803 /* Make sure the template headers we got make sense. */
2805 parms = DECL_TEMPLATE_PARMS (tmpl);
2806 i = TMPL_PARMS_DEPTH (parms);
2807 if (TMPL_ARGS_DEPTH (args) != i)
2809 error ("expected %d levels of template parms for `%#D', got %d",
2810 i, decl, TMPL_ARGS_DEPTH (args));
2812 else
2813 for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
2815 a = TMPL_ARGS_LEVEL (args, i);
2816 t = INNERMOST_TEMPLATE_PARMS (parms);
2818 if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
2820 if (current == decl)
2821 error ("got %d template parameters for `%#D'",
2822 TREE_VEC_LENGTH (a), decl);
2823 else
2824 error ("got %d template parameters for `%#T'",
2825 TREE_VEC_LENGTH (a), current);
2826 error (" but %d required", TREE_VEC_LENGTH (t));
2829 /* Perhaps we should also check that the parms are used in the
2830 appropriate qualifying scopes in the declarator? */
2832 if (current == decl)
2833 current = ctx;
2834 else
2835 current = TYPE_CONTEXT (current);
2839 DECL_TEMPLATE_RESULT (tmpl) = decl;
2840 TREE_TYPE (tmpl) = TREE_TYPE (decl);
2842 /* Push template declarations for global functions and types. Note
2843 that we do not try to push a global template friend declared in a
2844 template class; such a thing may well depend on the template
2845 parameters of the class. */
2846 if (new_template_p && !ctx
2847 && !(is_friend && template_class_depth (current_class_type) > 0))
2848 tmpl = pushdecl_namespace_level (tmpl);
2850 if (primary)
2852 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
2853 if (DECL_CONV_FN_P (tmpl))
2855 int depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2857 /* It is a conversion operator. See if the type converted to
2858 depends on innermost template operands. */
2860 if (for_each_template_parm (TREE_TYPE (TREE_TYPE (tmpl)),
2861 template_parm_this_level_p,
2862 &depth,
2863 NULL))
2864 DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
2868 info = tree_cons (tmpl, args, NULL_TREE);
2870 if (DECL_IMPLICIT_TYPEDEF_P (decl))
2872 SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
2873 if ((!ctx || TREE_CODE (ctx) != FUNCTION_DECL)
2874 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
2875 /* Don't change the name if we've already set it up. */
2876 && !IDENTIFIER_TEMPLATE (DECL_NAME (decl)))
2877 DECL_NAME (decl) = classtype_mangled_name (TREE_TYPE (decl));
2879 else if (DECL_LANG_SPECIFIC (decl))
2880 DECL_TEMPLATE_INFO (decl) = info;
2882 return DECL_TEMPLATE_RESULT (tmpl);
2885 tree
2886 push_template_decl (tree decl)
2888 return push_template_decl_real (decl, 0);
2891 /* Called when a class template TYPE is redeclared with the indicated
2892 template PARMS, e.g.:
2894 template <class T> struct S;
2895 template <class T> struct S {}; */
2897 void
2898 redeclare_class_template (tree type, tree parms)
2900 tree tmpl;
2901 tree tmpl_parms;
2902 int i;
2904 if (!TYPE_TEMPLATE_INFO (type))
2906 error ("`%T' is not a template type", type);
2907 return;
2910 tmpl = TYPE_TI_TEMPLATE (type);
2911 if (!PRIMARY_TEMPLATE_P (tmpl))
2912 /* The type is nested in some template class. Nothing to worry
2913 about here; there are no new template parameters for the nested
2914 type. */
2915 return;
2917 parms = INNERMOST_TEMPLATE_PARMS (parms);
2918 tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
2920 if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
2922 cp_error_at ("previous declaration `%D'", tmpl);
2923 error ("used %d template parameter%s instead of %d",
2924 TREE_VEC_LENGTH (tmpl_parms),
2925 TREE_VEC_LENGTH (tmpl_parms) == 1 ? "" : "s",
2926 TREE_VEC_LENGTH (parms));
2927 return;
2930 for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
2932 tree tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
2933 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
2934 tree tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
2935 tree parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
2937 if (TREE_CODE (tmpl_parm) != TREE_CODE (parm))
2939 cp_error_at ("template parameter `%#D'", tmpl_parm);
2940 error ("redeclared here as `%#D'", parm);
2941 return;
2944 if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
2946 /* We have in [temp.param]:
2948 A template-parameter may not be given default arguments
2949 by two different declarations in the same scope. */
2950 error ("redefinition of default argument for `%#D'", parm);
2951 error ("%H original definition appeared here",
2952 &DECL_SOURCE_LOCATION (tmpl_parm));
2953 return;
2956 if (parm_default != NULL_TREE)
2957 /* Update the previous template parameters (which are the ones
2958 that will really count) with the new default value. */
2959 TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
2960 else if (tmpl_default != NULL_TREE)
2961 /* Update the new parameters, too; they'll be used as the
2962 parameters for any members. */
2963 TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
2967 /* Attempt to convert the non-type template parameter EXPR to the
2968 indicated TYPE. If the conversion is successful, return the
2969 converted value. If the conversion is unsuccessful, return
2970 NULL_TREE if we issued an error message, or error_mark_node if we
2971 did not. We issue error messages for out-and-out bad template
2972 parameters, but not simply because the conversion failed, since we
2973 might be just trying to do argument deduction. By the time this
2974 function is called, neither TYPE nor EXPR may make use of template
2975 parameters. */
2977 static tree
2978 convert_nontype_argument (tree type, tree expr)
2980 tree expr_type = TREE_TYPE (expr);
2982 /* A template-argument for a non-type, non-template
2983 template-parameter shall be one of:
2985 --an integral constant-expression of integral or enumeration
2986 type; or
2988 --the name of a non-type template-parameter; or
2990 --the name of an object or function with external linkage,
2991 including function templates and function template-ids but
2992 excluding non-static class members, expressed as id-expression;
2995 --the address of an object or function with external linkage,
2996 including function templates and function template-ids but
2997 excluding non-static class members, expressed as & id-expression
2998 where the & is optional if the name refers to a function or
2999 array; or
3001 --a pointer to member expressed as described in _expr.unary.op_. */
3003 /* An integral constant-expression can include const variables or
3004 enumerators. Simplify things by folding them to their values,
3005 unless we're about to bind the declaration to a reference
3006 parameter. */
3007 if (INTEGRAL_TYPE_P (expr_type)
3008 && TREE_CODE (type) != REFERENCE_TYPE)
3009 expr = decl_constant_value (expr);
3011 if (is_overloaded_fn (expr))
3012 /* OK for now. We'll check that it has external linkage later.
3013 Check this first since if expr_type is the unknown_type_node
3014 we would otherwise complain below. */
3016 else if (TYPE_PTRMEM_P (expr_type)
3017 || TYPE_PTRMEMFUNC_P (expr_type))
3019 if (TREE_CODE (expr) != PTRMEM_CST)
3020 goto bad_argument;
3022 else if (TYPE_PTR_P (expr_type)
3023 || TREE_CODE (expr_type) == ARRAY_TYPE
3024 || TREE_CODE (type) == REFERENCE_TYPE
3025 /* If expr is the address of an overloaded function, we
3026 will get the unknown_type_node at this point. */
3027 || expr_type == unknown_type_node)
3029 tree referent;
3030 tree e = expr;
3031 STRIP_NOPS (e);
3033 if (TREE_CODE (expr_type) == ARRAY_TYPE
3034 || (TREE_CODE (type) == REFERENCE_TYPE
3035 && TREE_CODE (e) != ADDR_EXPR))
3036 referent = e;
3037 else
3039 if (TREE_CODE (e) != ADDR_EXPR)
3041 bad_argument:
3042 error ("`%E' is not a valid template argument", expr);
3043 if (TYPE_PTR_P (expr_type))
3045 if (TREE_CODE (TREE_TYPE (expr_type)) == FUNCTION_TYPE)
3046 error ("it must be the address of a function with external linkage");
3047 else
3048 error ("it must be the address of an object with external linkage");
3050 else if (TYPE_PTRMEM_P (expr_type)
3051 || TYPE_PTRMEMFUNC_P (expr_type))
3052 error ("it must be a pointer-to-member of the form `&X::Y'");
3054 return NULL_TREE;
3057 referent = TREE_OPERAND (e, 0);
3058 STRIP_NOPS (referent);
3061 if (TREE_CODE (referent) == STRING_CST)
3063 error ("string literal %E is not a valid template argument because it is the address of an object with static linkage",
3064 referent);
3065 return NULL_TREE;
3068 if (TREE_CODE (referent) == SCOPE_REF)
3069 referent = TREE_OPERAND (referent, 1);
3071 if (is_overloaded_fn (referent))
3072 /* We'll check that it has external linkage later. */
3074 else if (TREE_CODE (referent) != VAR_DECL)
3075 goto bad_argument;
3076 else if (!DECL_EXTERNAL_LINKAGE_P (referent))
3078 error ("address of non-extern `%E' cannot be used as template argument", referent);
3079 return error_mark_node;
3082 else if (INTEGRAL_TYPE_P (expr_type)
3083 || TYPE_PTRMEM_P (expr_type)
3084 || TYPE_PTRMEMFUNC_P (expr_type))
3086 if (! TREE_CONSTANT (expr))
3088 non_constant:
3089 error ("non-constant `%E' cannot be used as template argument",
3090 expr);
3091 return NULL_TREE;
3094 else
3096 error ("object `%E' cannot be used as template argument", expr);
3097 return NULL_TREE;
3100 switch (TREE_CODE (type))
3102 case INTEGER_TYPE:
3103 case BOOLEAN_TYPE:
3104 case ENUMERAL_TYPE:
3105 /* For a non-type template-parameter of integral or enumeration
3106 type, integral promotions (_conv.prom_) and integral
3107 conversions (_conv.integral_) are applied. */
3108 if (!INTEGRAL_TYPE_P (expr_type))
3109 return error_mark_node;
3111 /* It's safe to call digest_init in this case; we know we're
3112 just converting one integral constant expression to another. */
3113 expr = digest_init (type, expr, (tree*) 0);
3115 if (TREE_CODE (expr) != INTEGER_CST)
3116 /* Curiously, some TREE_CONSTANT integral expressions do not
3117 simplify to integer constants. For example, `3 % 0',
3118 remains a TRUNC_MOD_EXPR. */
3119 goto non_constant;
3121 return expr;
3123 case POINTER_TYPE:
3125 tree type_pointed_to = TREE_TYPE (type);
3127 if (TYPE_PTRMEM_P (type))
3129 tree e;
3131 /* For a non-type template-parameter of type pointer to data
3132 member, qualification conversions (_conv.qual_) are
3133 applied. */
3134 e = perform_qualification_conversions (type, expr);
3135 if (TREE_CODE (e) == NOP_EXPR)
3136 /* The call to perform_qualification_conversions will
3137 insert a NOP_EXPR over EXPR to do express conversion,
3138 if necessary. But, that will confuse us if we use
3139 this (converted) template parameter to instantiate
3140 another template; then the thing will not look like a
3141 valid template argument. So, just make a new
3142 constant, of the appropriate type. */
3143 e = make_ptrmem_cst (type, PTRMEM_CST_MEMBER (expr));
3144 return e;
3146 else if (TREE_CODE (type_pointed_to) == FUNCTION_TYPE)
3148 /* For a non-type template-parameter of type pointer to
3149 function, only the function-to-pointer conversion
3150 (_conv.func_) is applied. If the template-argument
3151 represents a set of overloaded functions (or a pointer to
3152 such), the matching function is selected from the set
3153 (_over.over_). */
3154 tree fns;
3155 tree fn;
3157 if (TREE_CODE (expr) == ADDR_EXPR)
3158 fns = TREE_OPERAND (expr, 0);
3159 else
3160 fns = expr;
3162 fn = instantiate_type (type_pointed_to, fns, tf_none);
3164 if (fn == error_mark_node)
3165 return error_mark_node;
3167 if (!DECL_EXTERNAL_LINKAGE_P (fn))
3169 if (really_overloaded_fn (fns))
3170 return error_mark_node;
3171 else
3172 goto bad_argument;
3175 expr = build_unary_op (ADDR_EXPR, fn, 0);
3177 my_friendly_assert (same_type_p (type, TREE_TYPE (expr)),
3179 return expr;
3181 else
3183 /* For a non-type template-parameter of type pointer to
3184 object, qualification conversions (_conv.qual_) and the
3185 array-to-pointer conversion (_conv.array_) are applied.
3186 [Note: In particular, neither the null pointer conversion
3187 (_conv.ptr_) nor the derived-to-base conversion
3188 (_conv.ptr_) are applied. Although 0 is a valid
3189 template-argument for a non-type template-parameter of
3190 integral type, it is not a valid template-argument for a
3191 non-type template-parameter of pointer type.]
3193 The call to decay_conversion performs the
3194 array-to-pointer conversion, if appropriate. */
3195 expr = decay_conversion (expr);
3197 if (expr == error_mark_node)
3198 return error_mark_node;
3199 else
3200 return perform_qualification_conversions (type, expr);
3203 break;
3205 case REFERENCE_TYPE:
3207 tree type_referred_to = TREE_TYPE (type);
3209 /* If this expression already has reference type, get the
3210 underling object. */
3211 if (TREE_CODE (expr_type) == REFERENCE_TYPE)
3213 my_friendly_assert (TREE_CODE (expr) == ADDR_EXPR, 20000604);
3214 expr = TREE_OPERAND (expr, 0);
3215 expr_type = TREE_TYPE (expr);
3218 if (TREE_CODE (type_referred_to) == FUNCTION_TYPE)
3220 /* For a non-type template-parameter of type reference to
3221 function, no conversions apply. If the
3222 template-argument represents a set of overloaded
3223 functions, the matching function is selected from the
3224 set (_over.over_). */
3225 tree fn;
3227 fn = instantiate_type (type_referred_to, expr, tf_none);
3229 if (fn == error_mark_node)
3230 return error_mark_node;
3232 if (!DECL_EXTERNAL_LINKAGE_P (fn))
3234 if (really_overloaded_fn (expr))
3235 /* Don't issue an error here; we might get a different
3236 function if the overloading had worked out
3237 differently. */
3238 return error_mark_node;
3239 else
3240 goto bad_argument;
3243 my_friendly_assert (same_type_p (type_referred_to,
3244 TREE_TYPE (fn)),
3247 expr = fn;
3249 else
3251 /* For a non-type template-parameter of type reference to
3252 object, no conversions apply. The type referred to by the
3253 reference may be more cv-qualified than the (otherwise
3254 identical) type of the template-argument. The
3255 template-parameter is bound directly to the
3256 template-argument, which must be an lvalue. */
3257 if (!same_type_p (TYPE_MAIN_VARIANT (expr_type),
3258 TYPE_MAIN_VARIANT (type_referred_to))
3259 || !at_least_as_qualified_p (type_referred_to,
3260 expr_type)
3261 || !real_lvalue_p (expr))
3262 return error_mark_node;
3265 cxx_mark_addressable (expr);
3266 return build1 (ADDR_EXPR, type, expr);
3268 break;
3270 case RECORD_TYPE:
3272 my_friendly_assert (TYPE_PTRMEMFUNC_P (type), 20010112);
3274 /* For a non-type template-parameter of type pointer to member
3275 function, no conversions apply. If the template-argument
3276 represents a set of overloaded member functions, the
3277 matching member function is selected from the set
3278 (_over.over_). */
3280 if (!TYPE_PTRMEMFUNC_P (expr_type) &&
3281 expr_type != unknown_type_node)
3282 return error_mark_node;
3284 if (TREE_CODE (expr) == PTRMEM_CST)
3286 /* A ptr-to-member constant. */
3287 if (!same_type_p (type, expr_type))
3288 return error_mark_node;
3289 else
3290 return expr;
3293 if (TREE_CODE (expr) != ADDR_EXPR)
3294 return error_mark_node;
3296 expr = instantiate_type (type, expr, tf_none);
3298 if (expr == error_mark_node)
3299 return error_mark_node;
3301 my_friendly_assert (same_type_p (type, TREE_TYPE (expr)),
3303 return expr;
3305 break;
3307 default:
3308 /* All non-type parameters must have one of these types. */
3309 abort ();
3310 break;
3313 return error_mark_node;
3316 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
3317 template template parameters. Both PARM_PARMS and ARG_PARMS are
3318 vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
3319 or PARM_DECL.
3321 ARG_PARMS may contain more parameters than PARM_PARMS. If this is
3322 the case, then extra parameters must have default arguments.
3324 Consider the example:
3325 template <class T, class Allocator = allocator> class vector;
3326 template<template <class U> class TT> class C;
3328 C<vector> is a valid instantiation. PARM_PARMS for the above code
3329 contains a TYPE_DECL (for U), ARG_PARMS contains two TYPE_DECLs (for
3330 T and Allocator) and OUTER_ARGS contains the argument that is used to
3331 substitute the TT parameter. */
3333 static int
3334 coerce_template_template_parms (tree parm_parms,
3335 tree arg_parms,
3336 tsubst_flags_t complain,
3337 tree in_decl,
3338 tree outer_args)
3340 int nparms, nargs, i;
3341 tree parm, arg;
3343 my_friendly_assert (TREE_CODE (parm_parms) == TREE_VEC, 0);
3344 my_friendly_assert (TREE_CODE (arg_parms) == TREE_VEC, 0);
3346 nparms = TREE_VEC_LENGTH (parm_parms);
3347 nargs = TREE_VEC_LENGTH (arg_parms);
3349 /* The rule here is opposite of coerce_template_parms. */
3350 if (nargs < nparms
3351 || (nargs > nparms
3352 && TREE_PURPOSE (TREE_VEC_ELT (arg_parms, nparms)) == NULL_TREE))
3353 return 0;
3355 for (i = 0; i < nparms; ++i)
3357 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
3358 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
3360 if (arg == NULL_TREE || arg == error_mark_node
3361 || parm == NULL_TREE || parm == error_mark_node)
3362 return 0;
3364 if (TREE_CODE (arg) != TREE_CODE (parm))
3365 return 0;
3367 switch (TREE_CODE (parm))
3369 case TYPE_DECL:
3370 break;
3372 case TEMPLATE_DECL:
3373 /* We encounter instantiations of templates like
3374 template <template <template <class> class> class TT>
3375 class C; */
3377 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3378 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3380 if (!coerce_template_template_parms (parmparm, argparm,
3381 complain, in_decl,
3382 outer_args))
3383 return 0;
3385 break;
3387 case PARM_DECL:
3388 /* The tsubst call is used to handle cases such as
3389 template <class T, template <T> class TT> class D;
3390 i.e. the parameter list of TT depends on earlier parameters. */
3391 if (!same_type_p (tsubst (TREE_TYPE (parm), outer_args,
3392 complain, in_decl),
3393 TREE_TYPE (arg)))
3394 return 0;
3395 break;
3397 default:
3398 abort ();
3401 return 1;
3404 /* Convert the indicated template ARG as necessary to match the
3405 indicated template PARM. Returns the converted ARG, or
3406 error_mark_node if the conversion was unsuccessful. Error and
3407 warning messages are issued under control of COMPLAIN. This
3408 conversion is for the Ith parameter in the parameter list. ARGS is
3409 the full set of template arguments deduced so far. */
3411 static tree
3412 convert_template_argument (tree parm,
3413 tree arg,
3414 tree args,
3415 tsubst_flags_t complain,
3416 int i,
3417 tree in_decl)
3419 tree val;
3420 tree inner_args;
3421 int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
3423 inner_args = INNERMOST_TEMPLATE_ARGS (args);
3425 if (TREE_CODE (arg) == TREE_LIST
3426 && TREE_TYPE (arg) != NULL_TREE
3427 && TREE_CODE (TREE_TYPE (arg)) == OFFSET_TYPE)
3429 /* The template argument was the name of some
3430 member function. That's usually
3431 invalid, but static members are OK. In any
3432 case, grab the underlying fields/functions
3433 and issue an error later if required. */
3434 arg = TREE_VALUE (arg);
3435 TREE_TYPE (arg) = unknown_type_node;
3438 requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
3439 requires_type = (TREE_CODE (parm) == TYPE_DECL
3440 || requires_tmpl_type);
3442 if (TREE_CODE (arg) != RECORD_TYPE)
3443 is_tmpl_type = ((TREE_CODE (arg) == TEMPLATE_DECL
3444 && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
3445 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3446 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
3447 else if (CLASSTYPE_TEMPLATE_INFO (arg) && !CLASSTYPE_USE_TEMPLATE (arg)
3448 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (arg)))
3450 if (is_base_of_enclosing_class (arg, current_class_type))
3451 /* This is a template name used within the scope of the
3452 template. It could be the template, or it could be the
3453 instantiation. Choose whichever makes sense. */
3454 is_tmpl_type = requires_tmpl_type;
3455 else
3456 is_tmpl_type = 1;
3458 else
3459 /* It is a non-template class, or a specialization of a template
3460 class, or a non-template member of a template class. */
3461 is_tmpl_type = 0;
3463 if (is_tmpl_type
3464 && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3465 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
3466 arg = TYPE_STUB_DECL (arg);
3467 else if (is_tmpl_type && TREE_CODE (arg) == RECORD_TYPE)
3468 arg = CLASSTYPE_TI_TEMPLATE (arg);
3470 is_type = TYPE_P (arg) || is_tmpl_type;
3472 if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
3473 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
3475 pedwarn ("to refer to a type member of a template parameter, use `typename %E'", arg);
3477 arg = make_typename_type (TREE_OPERAND (arg, 0),
3478 TREE_OPERAND (arg, 1),
3479 complain & tf_error);
3480 is_type = 1;
3482 if (is_type != requires_type)
3484 if (in_decl)
3486 if (complain & tf_error)
3488 error ("type/value mismatch at argument %d in template parameter list for `%D'",
3489 i + 1, in_decl);
3490 if (is_type)
3491 error (" expected a constant of type `%T', got `%T'",
3492 TREE_TYPE (parm),
3493 (is_tmpl_type ? DECL_NAME (arg) : arg));
3494 else if (requires_tmpl_type)
3495 error (" expected a class template, got `%E'", arg);
3496 else
3497 error (" expected a type, got `%E'", arg);
3500 return error_mark_node;
3502 if (is_tmpl_type ^ requires_tmpl_type)
3504 if (in_decl && (complain & tf_error))
3506 error ("type/value mismatch at argument %d in template parameter list for `%D'",
3507 i + 1, in_decl);
3508 if (is_tmpl_type)
3509 error (" expected a type, got `%T'", DECL_NAME (arg));
3510 else
3511 error (" expected a class template, got `%T'", arg);
3513 return error_mark_node;
3516 if (is_type)
3518 if (requires_tmpl_type)
3520 if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
3521 /* The number of argument required is not known yet.
3522 Just accept it for now. */
3523 val = TREE_TYPE (arg);
3524 else
3526 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3527 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3529 if (coerce_template_template_parms (parmparm, argparm,
3530 complain, in_decl,
3531 inner_args))
3533 val = arg;
3535 /* TEMPLATE_TEMPLATE_PARM node is preferred over
3536 TEMPLATE_DECL. */
3537 if (val != error_mark_node
3538 && DECL_TEMPLATE_TEMPLATE_PARM_P (val))
3539 val = TREE_TYPE (val);
3541 else
3543 if (in_decl && (complain & tf_error))
3545 error ("type/value mismatch at argument %d in template parameter list for `%D'",
3546 i + 1, in_decl);
3547 error (" expected a template of type `%D', got `%D'", parm, arg);
3550 val = error_mark_node;
3554 else
3555 val = groktypename (arg);
3557 else
3559 tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
3561 if (invalid_nontype_parm_type_p (t, complain))
3562 return error_mark_node;
3564 if (!uses_template_parms (arg) && !uses_template_parms (t))
3565 /* We used to call digest_init here. However, digest_init
3566 will report errors, which we don't want when complain
3567 is zero. More importantly, digest_init will try too
3568 hard to convert things: for example, `0' should not be
3569 converted to pointer type at this point according to
3570 the standard. Accepting this is not merely an
3571 extension, since deciding whether or not these
3572 conversions can occur is part of determining which
3573 function template to call, or whether a given explicit
3574 argument specification is valid. */
3575 val = convert_nontype_argument (t, arg);
3576 else
3577 val = arg;
3579 if (val == NULL_TREE)
3580 val = error_mark_node;
3581 else if (val == error_mark_node && (complain & tf_error))
3582 error ("could not convert template argument `%E' to `%T'",
3583 arg, t);
3586 return val;
3589 /* Convert all template arguments to their appropriate types, and
3590 return a vector containing the innermost resulting template
3591 arguments. If any error occurs, return error_mark_node. Error and
3592 warning messages are issued under control of COMPLAIN.
3594 If REQUIRE_ALL_ARGUMENTS is nonzero, all arguments must be
3595 provided in ARGLIST, or else trailing parameters must have default
3596 values. If REQUIRE_ALL_ARGUMENTS is zero, we will attempt argument
3597 deduction for any unspecified trailing arguments. */
3599 static tree
3600 coerce_template_parms (tree parms,
3601 tree args,
3602 tree in_decl,
3603 tsubst_flags_t complain,
3604 int require_all_arguments)
3606 int nparms, nargs, i, lost = 0;
3607 tree inner_args;
3608 tree new_args;
3609 tree new_inner_args;
3611 inner_args = INNERMOST_TEMPLATE_ARGS (args);
3612 nargs = NUM_TMPL_ARGS (inner_args);
3613 nparms = TREE_VEC_LENGTH (parms);
3615 if (nargs > nparms
3616 || (nargs < nparms
3617 && require_all_arguments
3618 && TREE_PURPOSE (TREE_VEC_ELT (parms, nargs)) == NULL_TREE))
3620 if (complain & tf_error)
3622 error ("wrong number of template arguments (%d, should be %d)",
3623 nargs, nparms);
3625 if (in_decl)
3626 cp_error_at ("provided for `%D'", in_decl);
3629 return error_mark_node;
3632 new_inner_args = make_tree_vec (nparms);
3633 new_args = add_outermost_template_args (args, new_inner_args);
3634 for (i = 0; i < nparms; i++)
3636 tree arg;
3637 tree parm;
3639 /* Get the Ith template parameter. */
3640 parm = TREE_VEC_ELT (parms, i);
3642 /* Calculate the Ith argument. */
3643 if (inner_args && TREE_CODE (inner_args) == TREE_LIST)
3645 arg = TREE_VALUE (inner_args);
3646 inner_args = TREE_CHAIN (inner_args);
3648 else if (i < nargs)
3649 arg = TREE_VEC_ELT (inner_args, i);
3650 /* If no template argument was supplied, look for a default
3651 value. */
3652 else if (TREE_PURPOSE (parm) == NULL_TREE)
3654 /* There was no default value. */
3655 my_friendly_assert (!require_all_arguments, 0);
3656 break;
3658 else if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL)
3659 arg = tsubst (TREE_PURPOSE (parm), new_args, complain, in_decl);
3660 else
3661 arg = tsubst_expr (TREE_PURPOSE (parm), new_args, complain,
3662 in_decl);
3664 /* Now, convert the Ith argument, as necessary. */
3665 if (arg == NULL_TREE)
3666 /* We're out of arguments. */
3668 my_friendly_assert (!require_all_arguments, 0);
3669 break;
3671 else if (arg == error_mark_node)
3673 error ("template argument %d is invalid", i + 1);
3674 arg = error_mark_node;
3676 else
3677 arg = convert_template_argument (TREE_VALUE (parm),
3678 arg, new_args, complain, i,
3679 in_decl);
3681 if (arg == error_mark_node)
3682 lost++;
3683 TREE_VEC_ELT (new_inner_args, i) = arg;
3686 if (lost)
3687 return error_mark_node;
3689 return new_inner_args;
3692 /* Returns 1 if template args OT and NT are equivalent. */
3694 static int
3695 template_args_equal (tree ot, tree nt)
3697 if (nt == ot)
3698 return 1;
3700 if (TREE_CODE (nt) == TREE_VEC)
3701 /* For member templates */
3702 return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
3703 else if (TYPE_P (nt))
3704 return TYPE_P (ot) && same_type_p (ot, nt);
3705 else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
3706 return 0;
3707 else
3708 return cp_tree_equal (ot, nt);
3711 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
3712 of template arguments. Returns 0 otherwise. */
3715 comp_template_args (tree oldargs, tree newargs)
3717 int i;
3719 if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
3720 return 0;
3722 for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
3724 tree nt = TREE_VEC_ELT (newargs, i);
3725 tree ot = TREE_VEC_ELT (oldargs, i);
3727 if (! template_args_equal (ot, nt))
3728 return 0;
3730 return 1;
3733 /* Given class template name and parameter list, produce a user-friendly name
3734 for the instantiation. */
3736 static char *
3737 mangle_class_name_for_template (const char* name, tree parms, tree arglist)
3739 static struct obstack scratch_obstack;
3740 static char *scratch_firstobj;
3741 int i, nparms;
3743 if (!scratch_firstobj)
3744 gcc_obstack_init (&scratch_obstack);
3745 else
3746 obstack_free (&scratch_obstack, scratch_firstobj);
3747 scratch_firstobj = obstack_alloc (&scratch_obstack, 1);
3749 #define ccat(C) obstack_1grow (&scratch_obstack, (C));
3750 #define cat(S) obstack_grow (&scratch_obstack, (S), strlen (S))
3752 cat (name);
3753 ccat ('<');
3754 nparms = TREE_VEC_LENGTH (parms);
3755 arglist = INNERMOST_TEMPLATE_ARGS (arglist);
3756 my_friendly_assert (nparms == TREE_VEC_LENGTH (arglist), 268);
3757 for (i = 0; i < nparms; i++)
3759 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
3760 tree arg = TREE_VEC_ELT (arglist, i);
3762 if (i)
3763 ccat (',');
3765 if (TREE_CODE (parm) == TYPE_DECL)
3767 cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
3768 continue;
3770 else if (TREE_CODE (parm) == TEMPLATE_DECL)
3772 if (TREE_CODE (arg) == TEMPLATE_DECL)
3774 /* Already substituted with real template. Just output
3775 the template name here */
3776 tree context = DECL_CONTEXT (arg);
3777 if (context)
3779 /* The template may be defined in a namespace, or
3780 may be a member template. */
3781 my_friendly_assert (TREE_CODE (context) == NAMESPACE_DECL
3782 || CLASS_TYPE_P (context),
3783 980422);
3784 cat(decl_as_string (DECL_CONTEXT (arg), TFF_PLAIN_IDENTIFIER));
3785 cat("::");
3787 cat (IDENTIFIER_POINTER (DECL_NAME (arg)));
3789 else
3790 /* Output the parameter declaration */
3791 cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
3792 continue;
3794 else
3795 my_friendly_assert (TREE_CODE (parm) == PARM_DECL, 269);
3797 if (TREE_CODE (arg) == TREE_LIST)
3799 /* New list cell was built because old chain link was in
3800 use. */
3801 my_friendly_assert (TREE_PURPOSE (arg) == NULL_TREE, 270);
3802 arg = TREE_VALUE (arg);
3804 /* No need to check arglist against parmlist here; we did that
3805 in coerce_template_parms, called from lookup_template_class. */
3806 cat (expr_as_string (arg, TFF_PLAIN_IDENTIFIER));
3809 char *bufp = obstack_next_free (&scratch_obstack);
3810 int offset = 0;
3811 while (bufp[offset - 1] == ' ')
3812 offset--;
3813 obstack_blank_fast (&scratch_obstack, offset);
3815 /* B<C<char> >, not B<C<char>> */
3816 if (bufp[offset - 1] == '>')
3817 ccat (' ');
3819 ccat ('>');
3820 ccat ('\0');
3821 return (char *) obstack_base (&scratch_obstack);
3824 static tree
3825 classtype_mangled_name (tree t)
3827 if (CLASSTYPE_TEMPLATE_INFO (t)
3828 /* Specializations have already had their names set up in
3829 lookup_template_class. */
3830 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
3832 tree tmpl = most_general_template (CLASSTYPE_TI_TEMPLATE (t));
3834 /* For non-primary templates, the template parameters are
3835 implicit from their surrounding context. */
3836 if (PRIMARY_TEMPLATE_P (tmpl))
3838 tree name = DECL_NAME (tmpl);
3839 char *mangled_name = mangle_class_name_for_template
3840 (IDENTIFIER_POINTER (name),
3841 DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
3842 CLASSTYPE_TI_ARGS (t));
3843 tree id = get_identifier (mangled_name);
3844 IDENTIFIER_TEMPLATE (id) = name;
3845 return id;
3849 return TYPE_IDENTIFIER (t);
3852 static void
3853 add_pending_template (tree d)
3855 tree ti = (TYPE_P (d)
3856 ? CLASSTYPE_TEMPLATE_INFO (d)
3857 : DECL_TEMPLATE_INFO (d));
3858 tree pt;
3859 int level;
3861 if (TI_PENDING_TEMPLATE_FLAG (ti))
3862 return;
3864 /* We are called both from instantiate_decl, where we've already had a
3865 tinst_level pushed, and instantiate_template, where we haven't.
3866 Compensate. */
3867 level = !(current_tinst_level && TINST_DECL (current_tinst_level) == d);
3869 if (level)
3870 push_tinst_level (d);
3872 pt = tree_cons (current_tinst_level, d, NULL_TREE);
3873 if (last_pending_template)
3874 TREE_CHAIN (last_pending_template) = pt;
3875 else
3876 pending_templates = pt;
3878 last_pending_template = pt;
3880 TI_PENDING_TEMPLATE_FLAG (ti) = 1;
3882 if (level)
3883 pop_tinst_level ();
3887 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
3888 ARGLIST. Valid choices for FNS are given in the cp-tree.def
3889 documentation for TEMPLATE_ID_EXPR. */
3891 tree
3892 lookup_template_function (tree fns, tree arglist)
3894 tree type;
3896 if (fns == error_mark_node || arglist == error_mark_node)
3897 return error_mark_node;
3899 if (fns == NULL_TREE)
3901 error ("non-template used as template");
3902 return error_mark_node;
3905 my_friendly_assert (TREE_CODE (fns) == TEMPLATE_DECL
3906 || TREE_CODE (fns) == OVERLOAD
3907 || BASELINK_P (fns)
3908 || TREE_CODE (fns) == IDENTIFIER_NODE
3909 || TREE_CODE (fns) == LOOKUP_EXPR,
3910 20020730);
3912 if (BASELINK_P (fns))
3914 BASELINK_FUNCTIONS (fns) = build (TEMPLATE_ID_EXPR,
3915 unknown_type_node,
3916 BASELINK_FUNCTIONS (fns),
3917 arglist);
3918 return fns;
3921 type = TREE_TYPE (fns);
3922 if (TREE_CODE (fns) == OVERLOAD || !type)
3923 type = unknown_type_node;
3925 return build (TEMPLATE_ID_EXPR, type, fns, arglist);
3928 /* Within the scope of a template class S<T>, the name S gets bound
3929 (in build_self_reference) to a TYPE_DECL for the class, not a
3930 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
3931 or one of its enclosing classes, and that type is a template,
3932 return the associated TEMPLATE_DECL. Otherwise, the original
3933 DECL is returned. */
3935 tree
3936 maybe_get_template_decl_from_type_decl (tree decl)
3938 return (decl != NULL_TREE
3939 && TREE_CODE (decl) == TYPE_DECL
3940 && DECL_ARTIFICIAL (decl)
3941 && CLASS_TYPE_P (TREE_TYPE (decl))
3942 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
3943 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
3946 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
3947 parameters, find the desired type.
3949 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
3950 (Actually ARGLIST may be either a TREE_LIST or a TREE_VEC. It will
3951 be a TREE_LIST if called directly from the parser, and a TREE_VEC
3952 otherwise.)
3954 IN_DECL, if non-NULL, is the template declaration we are trying to
3955 instantiate.
3957 If ENTERING_SCOPE is nonzero, we are about to enter the scope of
3958 the class we are looking up.
3960 Issue error and warning messages under control of COMPLAIN.
3962 If the template class is really a local class in a template
3963 function, then the FUNCTION_CONTEXT is the function in which it is
3964 being instantiated. */
3966 tree
3967 lookup_template_class (tree d1,
3968 tree arglist,
3969 tree in_decl,
3970 tree context,
3971 int entering_scope,
3972 tsubst_flags_t complain)
3974 tree template = NULL_TREE, parmlist;
3975 tree t;
3977 timevar_push (TV_NAME_LOOKUP);
3978 if (TREE_CODE (d1) == IDENTIFIER_NODE)
3980 if (IDENTIFIER_VALUE (d1)
3981 && DECL_TEMPLATE_TEMPLATE_PARM_P (IDENTIFIER_VALUE (d1)))
3982 template = IDENTIFIER_VALUE (d1);
3983 else
3985 if (context)
3986 push_decl_namespace (context);
3987 template = lookup_name (d1, /*prefer_type=*/0);
3988 template = maybe_get_template_decl_from_type_decl (template);
3989 if (context)
3990 pop_decl_namespace ();
3992 if (template)
3993 context = DECL_CONTEXT (template);
3995 else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
3997 tree type = TREE_TYPE (d1);
3999 /* If we are declaring a constructor, say A<T>::A<T>, we will get
4000 an implicit typename for the second A. Deal with it. */
4001 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
4002 type = TREE_TYPE (type);
4004 if (CLASSTYPE_TEMPLATE_INFO (type))
4006 template = CLASSTYPE_TI_TEMPLATE (type);
4007 d1 = DECL_NAME (template);
4010 else if (TREE_CODE (d1) == ENUMERAL_TYPE
4011 || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
4013 template = TYPE_TI_TEMPLATE (d1);
4014 d1 = DECL_NAME (template);
4016 else if (TREE_CODE (d1) == TEMPLATE_DECL
4017 && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
4019 template = d1;
4020 d1 = DECL_NAME (template);
4021 context = DECL_CONTEXT (template);
4024 /* With something like `template <class T> class X class X { ... };'
4025 we could end up with D1 having nothing but an IDENTIFIER_VALUE.
4026 We don't want to do that, but we have to deal with the situation,
4027 so let's give them some syntax errors to chew on instead of a
4028 crash. Alternatively D1 might not be a template type at all. */
4029 if (! template)
4031 if (complain & tf_error)
4032 error ("`%T' is not a template", d1);
4033 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4036 if (TREE_CODE (template) != TEMPLATE_DECL
4037 /* If we're called from the parser, make sure it's a user visible
4038 template. */
4039 || ((!arglist || TREE_CODE (arglist) == TREE_LIST)
4040 && !DECL_TEMPLATE_PARM_P (template)
4041 && !PRIMARY_TEMPLATE_P (template)))
4043 if (complain & tf_error)
4045 error ("non-template type `%T' used as a template", d1);
4046 if (in_decl)
4047 cp_error_at ("for template declaration `%D'", in_decl);
4049 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4052 if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
4054 /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
4055 template arguments */
4057 tree parm;
4058 tree arglist2;
4060 parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
4062 /* Consider an example where a template template parameter declared as
4064 template <class T, class U = std::allocator<T> > class TT
4066 The template parameter level of T and U are one level larger than
4067 of TT. To proper process the default argument of U, say when an
4068 instantiation `TT<int>' is seen, we need to build the full
4069 arguments containing {int} as the innermost level. Outer levels,
4070 available when not appearing as default template argument, can be
4071 obtained from `current_template_args ()'.
4073 Suppose that TT is later substituted with std::vector. The above
4074 instantiation is `TT<int, std::allocator<T> >' with TT at
4075 level 1, and T at level 2, while the template arguments at level 1
4076 becomes {std::vector} and the inner level 2 is {int}. */
4078 if (current_template_parms)
4079 arglist = add_to_template_args (current_template_args (), arglist);
4081 arglist2 = coerce_template_parms (parmlist, arglist, template,
4082 complain, /*require_all_args=*/1);
4083 if (arglist2 == error_mark_node
4084 || (!uses_template_parms (arglist2)
4085 && check_instantiated_args (template, arglist2, complain)))
4086 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4088 parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
4089 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
4091 else
4093 tree template_type = TREE_TYPE (template);
4094 tree gen_tmpl;
4095 tree type_decl;
4096 tree found = NULL_TREE;
4097 tree *tp;
4098 int arg_depth;
4099 int parm_depth;
4100 int is_partial_instantiation;
4102 gen_tmpl = most_general_template (template);
4103 parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
4104 parm_depth = TMPL_PARMS_DEPTH (parmlist);
4105 arg_depth = TMPL_ARGS_DEPTH (arglist);
4107 if (arg_depth == 1 && parm_depth > 1)
4109 /* We've been given an incomplete set of template arguments.
4110 For example, given:
4112 template <class T> struct S1 {
4113 template <class U> struct S2 {};
4114 template <class U> struct S2<U*> {};
4117 we will be called with an ARGLIST of `U*', but the
4118 TEMPLATE will be `template <class T> template
4119 <class U> struct S1<T>::S2'. We must fill in the missing
4120 arguments. */
4121 arglist
4122 = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
4123 arglist);
4124 arg_depth = TMPL_ARGS_DEPTH (arglist);
4127 /* Now we should have enough arguments. */
4128 my_friendly_assert (parm_depth == arg_depth, 0);
4130 /* From here on, we're only interested in the most general
4131 template. */
4132 template = gen_tmpl;
4134 /* Calculate the BOUND_ARGS. These will be the args that are
4135 actually tsubst'd into the definition to create the
4136 instantiation. */
4137 if (parm_depth > 1)
4139 /* We have multiple levels of arguments to coerce, at once. */
4140 int i;
4141 int saved_depth = TMPL_ARGS_DEPTH (arglist);
4143 tree bound_args = make_tree_vec (parm_depth);
4145 for (i = saved_depth,
4146 t = DECL_TEMPLATE_PARMS (template);
4147 i > 0 && t != NULL_TREE;
4148 --i, t = TREE_CHAIN (t))
4150 tree a = coerce_template_parms (TREE_VALUE (t),
4151 arglist, template,
4152 complain, /*require_all_args=*/1);
4154 /* Don't process further if one of the levels fails. */
4155 if (a == error_mark_node)
4157 /* Restore the ARGLIST to its full size. */
4158 TREE_VEC_LENGTH (arglist) = saved_depth;
4159 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4162 SET_TMPL_ARGS_LEVEL (bound_args, i, a);
4164 /* We temporarily reduce the length of the ARGLIST so
4165 that coerce_template_parms will see only the arguments
4166 corresponding to the template parameters it is
4167 examining. */
4168 TREE_VEC_LENGTH (arglist)--;
4171 /* Restore the ARGLIST to its full size. */
4172 TREE_VEC_LENGTH (arglist) = saved_depth;
4174 arglist = bound_args;
4176 else
4177 arglist
4178 = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
4179 INNERMOST_TEMPLATE_ARGS (arglist),
4180 template,
4181 complain, /*require_all_args=*/1);
4183 if (arglist == error_mark_node
4184 || (!uses_template_parms (INNERMOST_TEMPLATE_ARGS (arglist))
4185 && check_instantiated_args (template,
4186 INNERMOST_TEMPLATE_ARGS (arglist),
4187 complain)))
4188 /* We were unable to bind the arguments. */
4189 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4191 /* In the scope of a template class, explicit references to the
4192 template class refer to the type of the template, not any
4193 instantiation of it. For example, in:
4195 template <class T> class C { void f(C<T>); }
4197 the `C<T>' is just the same as `C'. Outside of the
4198 class, however, such a reference is an instantiation. */
4199 if (comp_template_args (TYPE_TI_ARGS (template_type),
4200 arglist))
4202 found = template_type;
4204 if (!entering_scope && PRIMARY_TEMPLATE_P (template))
4206 tree ctx;
4208 for (ctx = current_class_type;
4209 ctx;
4210 ctx = TYPE_CONTEXT (ctx))
4212 if (TREE_CODE (ctx) == NAMESPACE_DECL)
4213 break;
4214 if (same_type_p (ctx, template_type))
4215 goto found_ctx;
4218 /* We're not in the scope of the class, so the
4219 TEMPLATE_TYPE is not the type we want after all. */
4220 found = NULL_TREE;
4221 found_ctx:;
4224 if (found)
4225 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4227 for (tp = &DECL_TEMPLATE_INSTANTIATIONS (template);
4228 *tp;
4229 tp = &TREE_CHAIN (*tp))
4230 if (comp_template_args (TREE_PURPOSE (*tp), arglist))
4232 found = *tp;
4234 /* Use the move-to-front heuristic to speed up future
4235 searches. */
4236 *tp = TREE_CHAIN (*tp);
4237 TREE_CHAIN (found)
4238 = DECL_TEMPLATE_INSTANTIATIONS (template);
4239 DECL_TEMPLATE_INSTANTIATIONS (template) = found;
4241 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, TREE_VALUE (found));
4244 /* This type is a "partial instantiation" if any of the template
4245 arguments still involve template parameters. Note that we set
4246 IS_PARTIAL_INSTANTIATION for partial specializations as
4247 well. */
4248 is_partial_instantiation = uses_template_parms (arglist);
4250 if (!is_partial_instantiation
4251 && !PRIMARY_TEMPLATE_P (template)
4252 && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
4254 found = xref_tag_from_type (TREE_TYPE (template),
4255 DECL_NAME (template),
4256 /*globalize=*/1);
4257 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4260 context = tsubst (DECL_CONTEXT (template), arglist,
4261 complain, in_decl);
4262 if (!context)
4263 context = global_namespace;
4265 /* Create the type. */
4266 if (TREE_CODE (template_type) == ENUMERAL_TYPE)
4268 if (!is_partial_instantiation)
4270 set_current_access_from_decl (TYPE_NAME (template_type));
4271 t = start_enum (TYPE_IDENTIFIER (template_type));
4273 else
4274 /* We don't want to call start_enum for this type, since
4275 the values for the enumeration constants may involve
4276 template parameters. And, no one should be interested
4277 in the enumeration constants for such a type. */
4278 t = make_node (ENUMERAL_TYPE);
4280 else
4282 t = make_aggr_type (TREE_CODE (template_type));
4283 CLASSTYPE_DECLARED_CLASS (t)
4284 = CLASSTYPE_DECLARED_CLASS (template_type);
4285 CLASSTYPE_GOT_SEMICOLON (t) = 1;
4286 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
4287 TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
4289 /* A local class. Make sure the decl gets registered properly. */
4290 if (context == current_function_decl)
4291 pushtag (DECL_NAME (template), t, 0);
4294 /* If we called start_enum or pushtag above, this information
4295 will already be set up. */
4296 if (!TYPE_NAME (t))
4298 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
4300 type_decl = create_implicit_typedef (DECL_NAME (template), t);
4301 DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
4302 TYPE_STUB_DECL (t) = type_decl;
4303 DECL_SOURCE_LOCATION (type_decl)
4304 = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
4306 else
4307 type_decl = TYPE_NAME (t);
4309 TREE_PRIVATE (type_decl)
4310 = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
4311 TREE_PROTECTED (type_decl)
4312 = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
4314 /* Set up the template information. We have to figure out which
4315 template is the immediate parent if this is a full
4316 instantiation. */
4317 if (parm_depth == 1 || is_partial_instantiation
4318 || !PRIMARY_TEMPLATE_P (template))
4319 /* This case is easy; there are no member templates involved. */
4320 found = template;
4321 else
4323 /* This is a full instantiation of a member template. Look
4324 for a partial instantiation of which this is an instance. */
4326 for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
4327 found; found = TREE_CHAIN (found))
4329 int success;
4330 tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
4332 /* We only want partial instantiations, here, not
4333 specializations or full instantiations. */
4334 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
4335 || !uses_template_parms (TREE_VALUE (found)))
4336 continue;
4338 /* Temporarily reduce by one the number of levels in the
4339 ARGLIST and in FOUND so as to avoid comparing the
4340 last set of arguments. */
4341 TREE_VEC_LENGTH (arglist)--;
4342 TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
4344 /* See if the arguments match. If they do, then TMPL is
4345 the partial instantiation we want. */
4346 success = comp_template_args (TREE_PURPOSE (found), arglist);
4348 /* Restore the argument vectors to their full size. */
4349 TREE_VEC_LENGTH (arglist)++;
4350 TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
4352 if (success)
4354 found = tmpl;
4355 break;
4359 if (!found)
4361 /* There was no partial instantiation. This happens
4362 where C<T> is a member template of A<T> and it's used
4363 in something like
4365 template <typename T> struct B { A<T>::C<int> m; };
4366 B<float>;
4368 Create the partial instantiation.
4370 TREE_VEC_LENGTH (arglist)--;
4371 found = tsubst (template, arglist, complain, NULL_TREE);
4372 TREE_VEC_LENGTH (arglist)++;
4376 SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
4377 DECL_TEMPLATE_INSTANTIATIONS (template)
4378 = tree_cons (arglist, t,
4379 DECL_TEMPLATE_INSTANTIATIONS (template));
4381 if (TREE_CODE (t) == ENUMERAL_TYPE
4382 && !is_partial_instantiation)
4383 /* Now that the type has been registered on the instantiations
4384 list, we set up the enumerators. Because the enumeration
4385 constants may involve the enumeration type itself, we make
4386 sure to register the type first, and then create the
4387 constants. That way, doing tsubst_expr for the enumeration
4388 constants won't result in recursive calls here; we'll find
4389 the instantiation and exit above. */
4390 tsubst_enum (template_type, t, arglist);
4392 /* Reset the name of the type, now that CLASSTYPE_TEMPLATE_INFO
4393 is set up. */
4394 if (TREE_CODE (t) != ENUMERAL_TYPE)
4395 DECL_NAME (type_decl) = classtype_mangled_name (t);
4396 if (!is_partial_instantiation)
4398 /* For backwards compatibility; code that uses
4399 -fexternal-templates expects looking up a template to
4400 instantiate it. I think DDD still relies on this.
4401 (jason 8/20/1998) */
4402 if (TREE_CODE (t) != ENUMERAL_TYPE
4403 && flag_external_templates
4404 && CLASSTYPE_INTERFACE_KNOWN (TREE_TYPE (template))
4405 && ! CLASSTYPE_INTERFACE_ONLY (TREE_TYPE (template)))
4406 add_pending_template (t);
4408 else
4409 /* If the type makes use of template parameters, the
4410 code that generates debugging information will crash. */
4411 DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
4413 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
4415 timevar_pop (TV_NAME_LOOKUP);
4418 struct pair_fn_data
4420 tree_fn_t fn;
4421 void *data;
4422 htab_t visited;
4425 /* Called from for_each_template_parm via walk_tree. */
4427 static tree
4428 for_each_template_parm_r (tree* tp, int* walk_subtrees, void* d)
4430 tree t = *tp;
4431 struct pair_fn_data *pfd = (struct pair_fn_data *) d;
4432 tree_fn_t fn = pfd->fn;
4433 void *data = pfd->data;
4434 void **slot;
4436 /* If we have already visited this tree, there's no need to walk
4437 subtrees. Otherwise, add it to the visited table. */
4438 slot = htab_find_slot (pfd->visited, *tp, INSERT);
4439 if (*slot)
4441 *walk_subtrees = 0;
4442 return NULL_TREE;
4444 *slot = *tp;
4446 if (TYPE_P (t)
4447 && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited))
4448 return error_mark_node;
4450 switch (TREE_CODE (t))
4452 case RECORD_TYPE:
4453 if (TYPE_PTRMEMFUNC_P (t))
4454 break;
4455 /* Fall through. */
4457 case UNION_TYPE:
4458 case ENUMERAL_TYPE:
4459 if (!TYPE_TEMPLATE_INFO (t))
4460 *walk_subtrees = 0;
4461 else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
4462 fn, data, pfd->visited))
4463 return error_mark_node;
4464 break;
4466 case METHOD_TYPE:
4467 /* Since we're not going to walk subtrees, we have to do this
4468 explicitly here. */
4469 if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
4470 pfd->visited))
4471 return error_mark_node;
4472 /* Fall through. */
4474 case FUNCTION_TYPE:
4475 /* Check the return type. */
4476 if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
4477 return error_mark_node;
4479 /* Check the parameter types. Since default arguments are not
4480 instantiated until they are needed, the TYPE_ARG_TYPES may
4481 contain expressions that involve template parameters. But,
4482 no-one should be looking at them yet. And, once they're
4483 instantiated, they don't contain template parameters, so
4484 there's no point in looking at them then, either. */
4486 tree parm;
4488 for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
4489 if (for_each_template_parm (TREE_VALUE (parm), fn, data,
4490 pfd->visited))
4491 return error_mark_node;
4493 /* Since we've already handled the TYPE_ARG_TYPES, we don't
4494 want walk_tree walking into them itself. */
4495 *walk_subtrees = 0;
4497 break;
4499 case TYPEOF_TYPE:
4500 if (for_each_template_parm (TYPE_FIELDS (t), fn, data,
4501 pfd->visited))
4502 return error_mark_node;
4503 break;
4505 case FUNCTION_DECL:
4506 case VAR_DECL:
4507 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
4508 && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
4509 pfd->visited))
4510 return error_mark_node;
4511 /* Fall through. */
4513 case PARM_DECL:
4514 case CONST_DECL:
4515 if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
4516 && for_each_template_parm (DECL_INITIAL (t), fn, data,
4517 pfd->visited))
4518 return error_mark_node;
4519 if (DECL_CONTEXT (t)
4520 && for_each_template_parm (DECL_CONTEXT (t), fn, data,
4521 pfd->visited))
4522 return error_mark_node;
4523 break;
4525 case BOUND_TEMPLATE_TEMPLATE_PARM:
4526 /* Record template parameters such as `T' inside `TT<T>'. */
4527 if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited))
4528 return error_mark_node;
4529 /* Fall through. */
4531 case TEMPLATE_TEMPLATE_PARM:
4532 case TEMPLATE_TYPE_PARM:
4533 case TEMPLATE_PARM_INDEX:
4534 if (fn && (*fn)(t, data))
4535 return error_mark_node;
4536 else if (!fn)
4537 return error_mark_node;
4538 break;
4540 case TEMPLATE_DECL:
4541 /* A template template parameter is encountered */
4542 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
4543 && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
4544 return error_mark_node;
4546 /* Already substituted template template parameter */
4547 *walk_subtrees = 0;
4548 break;
4550 case TYPENAME_TYPE:
4551 if (!fn
4552 || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
4553 data, pfd->visited))
4554 return error_mark_node;
4555 break;
4557 case CONSTRUCTOR:
4558 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
4559 && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
4560 (TREE_TYPE (t)), fn, data,
4561 pfd->visited))
4562 return error_mark_node;
4563 break;
4565 case INDIRECT_REF:
4566 case COMPONENT_REF:
4567 /* If there's no type, then this thing must be some expression
4568 involving template parameters. */
4569 if (!fn && !TREE_TYPE (t))
4570 return error_mark_node;
4571 break;
4573 case MODOP_EXPR:
4574 case CAST_EXPR:
4575 case REINTERPRET_CAST_EXPR:
4576 case CONST_CAST_EXPR:
4577 case STATIC_CAST_EXPR:
4578 case DYNAMIC_CAST_EXPR:
4579 case ARROW_EXPR:
4580 case DOTSTAR_EXPR:
4581 case TYPEID_EXPR:
4582 case LOOKUP_EXPR:
4583 case PSEUDO_DTOR_EXPR:
4584 if (!fn)
4585 return error_mark_node;
4586 break;
4588 case BASELINK:
4589 /* If we do not handle this case specially, we end up walking
4590 the BINFO hierarchy, which is circular, and therefore
4591 confuses walk_tree. */
4592 *walk_subtrees = 0;
4593 if (for_each_template_parm (BASELINK_FUNCTIONS (*tp), fn, data,
4594 pfd->visited))
4595 return error_mark_node;
4596 break;
4598 default:
4599 break;
4602 /* We didn't find any template parameters we liked. */
4603 return NULL_TREE;
4606 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
4607 BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
4608 call FN with the parameter and the DATA.
4609 If FN returns nonzero, the iteration is terminated, and
4610 for_each_template_parm returns 1. Otherwise, the iteration
4611 continues. If FN never returns a nonzero value, the value
4612 returned by for_each_template_parm is 0. If FN is NULL, it is
4613 considered to be the function which always returns 1. */
4615 static int
4616 for_each_template_parm (tree t, tree_fn_t fn, void* data, htab_t visited)
4618 struct pair_fn_data pfd;
4619 int result;
4621 /* Set up. */
4622 pfd.fn = fn;
4623 pfd.data = data;
4625 /* Walk the tree. (Conceptually, we would like to walk without
4626 duplicates, but for_each_template_parm_r recursively calls
4627 for_each_template_parm, so we would need to reorganize a fair
4628 bit to use walk_tree_without_duplicates, so we keep our own
4629 visited list.) */
4630 if (visited)
4631 pfd.visited = visited;
4632 else
4633 pfd.visited = htab_create (37, htab_hash_pointer, htab_eq_pointer,
4634 NULL);
4635 result = walk_tree (&t,
4636 for_each_template_parm_r,
4637 &pfd,
4638 NULL) != NULL_TREE;
4640 /* Clean up. */
4641 if (!visited)
4642 htab_delete (pfd.visited);
4644 return result;
4648 uses_template_parms (tree t)
4650 return for_each_template_parm (t, 0, 0, NULL);
4653 static int tinst_depth;
4654 extern int max_tinst_depth;
4655 #ifdef GATHER_STATISTICS
4656 int depth_reached;
4657 #endif
4658 static int tinst_level_tick;
4659 static int last_template_error_tick;
4661 /* We're starting to instantiate D; record the template instantiation context
4662 for diagnostics and to restore it later. */
4665 push_tinst_level (tree d)
4667 tree new;
4669 if (tinst_depth >= max_tinst_depth)
4671 /* If the instantiation in question still has unbound template parms,
4672 we don't really care if we can't instantiate it, so just return.
4673 This happens with base instantiation for implicit `typename'. */
4674 if (uses_template_parms (d))
4675 return 0;
4677 last_template_error_tick = tinst_level_tick;
4678 error ("template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN to increase the maximum) instantiating `%D'",
4679 max_tinst_depth, d);
4681 print_instantiation_context ();
4683 return 0;
4686 new = build_expr_wfl (d, input_filename, input_line, 0);
4687 TREE_CHAIN (new) = current_tinst_level;
4688 current_tinst_level = new;
4690 ++tinst_depth;
4691 #ifdef GATHER_STATISTICS
4692 if (tinst_depth > depth_reached)
4693 depth_reached = tinst_depth;
4694 #endif
4696 ++tinst_level_tick;
4697 return 1;
4700 /* We're done instantiating this template; return to the instantiation
4701 context. */
4703 void
4704 pop_tinst_level (void)
4706 tree old = current_tinst_level;
4708 /* Restore the filename and line number stashed away when we started
4709 this instantiation. */
4710 input_line = TINST_LINE (old);
4711 input_filename = TINST_FILE (old);
4712 extract_interface_info ();
4714 current_tinst_level = TREE_CHAIN (old);
4715 --tinst_depth;
4716 ++tinst_level_tick;
4719 /* We're instantiating a deferred template; restore the template
4720 instantiation context in which the instantiation was requested, which
4721 is one step out from LEVEL. */
4723 static void
4724 reopen_tinst_level (tree level)
4726 tree t;
4728 tinst_depth = 0;
4729 for (t = level; t; t = TREE_CHAIN (t))
4730 ++tinst_depth;
4732 current_tinst_level = level;
4733 pop_tinst_level ();
4736 /* Return the outermost template instantiation context, for use with
4737 -falt-external-templates. */
4739 tree
4740 tinst_for_decl (void)
4742 tree p = current_tinst_level;
4744 if (p)
4745 for (; TREE_CHAIN (p) ; p = TREE_CHAIN (p))
4747 return p;
4750 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
4751 vector of template arguments, as for tsubst.
4753 Returns an appropriate tsubst'd friend declaration. */
4755 static tree
4756 tsubst_friend_function (tree decl, tree args)
4758 tree new_friend;
4759 location_t saved_loc = input_location;
4761 input_location = DECL_SOURCE_LOCATION (decl);
4763 if (TREE_CODE (decl) == FUNCTION_DECL
4764 && DECL_TEMPLATE_INSTANTIATION (decl)
4765 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
4766 /* This was a friend declared with an explicit template
4767 argument list, e.g.:
4769 friend void f<>(T);
4771 to indicate that f was a template instantiation, not a new
4772 function declaration. Now, we have to figure out what
4773 instantiation of what template. */
4775 tree template_id, arglist, fns;
4776 tree new_args;
4777 tree tmpl;
4778 tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
4780 /* Friend functions are looked up in the containing namespace scope.
4781 We must enter that scope, to avoid finding member functions of the
4782 current cless with same name. */
4783 push_nested_namespace (ns);
4784 fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
4785 tf_error | tf_warning, NULL_TREE);
4786 pop_nested_namespace (ns);
4787 arglist = tsubst (DECL_TI_ARGS (decl), args,
4788 tf_error | tf_warning, NULL_TREE);
4789 template_id = lookup_template_function (fns, arglist);
4791 new_friend = tsubst (decl, args, tf_error | tf_warning, NULL_TREE);
4792 tmpl = determine_specialization (template_id, new_friend,
4793 &new_args,
4794 /*need_member_template=*/0);
4795 new_friend = instantiate_template (tmpl, new_args, tf_error);
4796 goto done;
4799 new_friend = tsubst (decl, args, tf_error | tf_warning, NULL_TREE);
4801 /* The NEW_FRIEND will look like an instantiation, to the
4802 compiler, but is not an instantiation from the point of view of
4803 the language. For example, we might have had:
4805 template <class T> struct S {
4806 template <class U> friend void f(T, U);
4809 Then, in S<int>, template <class U> void f(int, U) is not an
4810 instantiation of anything. */
4811 DECL_USE_TEMPLATE (new_friend) = 0;
4812 if (TREE_CODE (decl) == TEMPLATE_DECL)
4814 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
4815 DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
4816 = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
4819 /* The mangled name for the NEW_FRIEND is incorrect. The function
4820 is not a template instantiation and should not be mangled like
4821 one. Therefore, we forget the mangling here; we'll recompute it
4822 later if we need it. */
4823 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
4825 SET_DECL_RTL (new_friend, NULL_RTX);
4826 SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
4829 if (DECL_NAMESPACE_SCOPE_P (new_friend))
4831 tree old_decl;
4832 tree new_friend_template_info;
4833 tree new_friend_result_template_info;
4834 tree ns;
4835 int new_friend_is_defn;
4837 /* We must save some information from NEW_FRIEND before calling
4838 duplicate decls since that function will free NEW_FRIEND if
4839 possible. */
4840 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
4841 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
4843 /* This declaration is a `primary' template. */
4844 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
4846 new_friend_is_defn
4847 = DECL_INITIAL (DECL_TEMPLATE_RESULT (new_friend)) != NULL_TREE;
4848 new_friend_result_template_info
4849 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
4851 else
4853 new_friend_is_defn = DECL_INITIAL (new_friend) != NULL_TREE;
4854 new_friend_result_template_info = NULL_TREE;
4857 /* Inside pushdecl_namespace_level, we will push into the
4858 current namespace. However, the friend function should go
4859 into the namespace of the template. */
4860 ns = decl_namespace_context (new_friend);
4861 push_nested_namespace (ns);
4862 old_decl = pushdecl_namespace_level (new_friend);
4863 pop_nested_namespace (ns);
4865 if (old_decl != new_friend)
4867 /* This new friend declaration matched an existing
4868 declaration. For example, given:
4870 template <class T> void f(T);
4871 template <class U> class C {
4872 template <class T> friend void f(T) {}
4875 the friend declaration actually provides the definition
4876 of `f', once C has been instantiated for some type. So,
4877 old_decl will be the out-of-class template declaration,
4878 while new_friend is the in-class definition.
4880 But, if `f' was called before this point, the
4881 instantiation of `f' will have DECL_TI_ARGS corresponding
4882 to `T' but not to `U', references to which might appear
4883 in the definition of `f'. Previously, the most general
4884 template for an instantiation of `f' was the out-of-class
4885 version; now it is the in-class version. Therefore, we
4886 run through all specialization of `f', adding to their
4887 DECL_TI_ARGS appropriately. In particular, they need a
4888 new set of outer arguments, corresponding to the
4889 arguments for this class instantiation.
4891 The same situation can arise with something like this:
4893 friend void f(int);
4894 template <class T> class C {
4895 friend void f(T) {}
4898 when `C<int>' is instantiated. Now, `f(int)' is defined
4899 in the class. */
4901 if (!new_friend_is_defn)
4902 /* On the other hand, if the in-class declaration does
4903 *not* provide a definition, then we don't want to alter
4904 existing definitions. We can just leave everything
4905 alone. */
4907 else
4909 /* Overwrite whatever template info was there before, if
4910 any, with the new template information pertaining to
4911 the declaration. */
4912 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
4914 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
4915 reregister_specialization (new_friend,
4916 most_general_template (old_decl),
4917 old_decl);
4918 else
4920 tree t;
4921 tree new_friend_args;
4923 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
4924 = new_friend_result_template_info;
4926 new_friend_args = TI_ARGS (new_friend_template_info);
4927 for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
4928 t != NULL_TREE;
4929 t = TREE_CHAIN (t))
4931 tree spec = TREE_VALUE (t);
4933 DECL_TI_ARGS (spec)
4934 = add_outermost_template_args (new_friend_args,
4935 DECL_TI_ARGS (spec));
4938 /* Now, since specializations are always supposed to
4939 hang off of the most general template, we must move
4940 them. */
4941 t = most_general_template (old_decl);
4942 if (t != old_decl)
4944 DECL_TEMPLATE_SPECIALIZATIONS (t)
4945 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
4946 DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
4947 DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
4952 /* The information from NEW_FRIEND has been merged into OLD_DECL
4953 by duplicate_decls. */
4954 new_friend = old_decl;
4957 else if (COMPLETE_TYPE_P (DECL_CONTEXT (new_friend)))
4959 /* Check to see that the declaration is really present, and,
4960 possibly obtain an improved declaration. */
4961 tree fn = check_classfn (DECL_CONTEXT (new_friend),
4962 new_friend);
4964 if (fn)
4965 new_friend = fn;
4968 done:
4969 input_location = saved_loc;
4970 return new_friend;
4973 /* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
4974 template arguments, as for tsubst.
4976 Returns an appropriate tsubst'd friend type or error_mark_node on
4977 failure. */
4979 static tree
4980 tsubst_friend_class (tree friend_tmpl, tree args)
4982 tree friend_type;
4983 tree tmpl;
4984 tree context;
4986 context = DECL_CONTEXT (friend_tmpl);
4988 if (context)
4990 if (TREE_CODE (context) == NAMESPACE_DECL)
4991 push_nested_namespace (context);
4992 else
4993 push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
4996 /* First, we look for a class template. */
4997 tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/0);
4999 /* But, if we don't find one, it might be because we're in a
5000 situation like this:
5002 template <class T>
5003 struct S {
5004 template <class U>
5005 friend struct S;
5008 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
5009 for `S<int>', not the TEMPLATE_DECL. */
5010 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5012 tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/1);
5013 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
5016 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
5018 /* The friend template has already been declared. Just
5019 check to see that the declarations match, and install any new
5020 default parameters. We must tsubst the default parameters,
5021 of course. We only need the innermost template parameters
5022 because that is all that redeclare_class_template will look
5023 at. */
5024 if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
5025 > TMPL_ARGS_DEPTH (args))
5027 tree parms;
5028 parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
5029 args, tf_error | tf_warning);
5030 redeclare_class_template (TREE_TYPE (tmpl), parms);
5033 friend_type = TREE_TYPE (tmpl);
5035 else
5037 /* The friend template has not already been declared. In this
5038 case, the instantiation of the template class will cause the
5039 injection of this template into the global scope. */
5040 tmpl = tsubst (friend_tmpl, args, tf_error | tf_warning, NULL_TREE);
5042 /* The new TMPL is not an instantiation of anything, so we
5043 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
5044 the new type because that is supposed to be the corresponding
5045 template decl, i.e., TMPL. */
5046 DECL_USE_TEMPLATE (tmpl) = 0;
5047 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
5048 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
5050 /* Inject this template into the global scope. */
5051 friend_type = TREE_TYPE (pushdecl_top_level (tmpl));
5054 if (context)
5056 if (TREE_CODE (context) == NAMESPACE_DECL)
5057 pop_nested_namespace (context);
5058 else
5059 pop_nested_class ();
5062 return friend_type;
5065 /* Returns zero if TYPE cannot be completed later due to circularity.
5066 Otherwise returns one. */
5068 static int
5069 can_complete_type_without_circularity (tree type)
5071 if (type == NULL_TREE || type == error_mark_node)
5072 return 0;
5073 else if (COMPLETE_TYPE_P (type))
5074 return 1;
5075 else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
5076 return can_complete_type_without_circularity (TREE_TYPE (type));
5077 else if (CLASS_TYPE_P (type) && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
5078 return 0;
5079 else
5080 return 1;
5083 tree
5084 instantiate_class_template (tree type)
5086 tree template, args, pattern, t, member;
5087 tree typedecl;
5088 tree pbinfo;
5090 if (type == error_mark_node)
5091 return error_mark_node;
5093 if (TYPE_BEING_DEFINED (type)
5094 || COMPLETE_TYPE_P (type)
5095 || dependent_type_p (type))
5096 return type;
5098 /* Figure out which template is being instantiated. */
5099 template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
5100 my_friendly_assert (TREE_CODE (template) == TEMPLATE_DECL, 279);
5102 /* Figure out which arguments are being used to do the
5103 instantiation. */
5104 args = CLASSTYPE_TI_ARGS (type);
5106 /* Determine what specialization of the original template to
5107 instantiate. */
5108 t = most_specialized_class (template, args);
5109 if (t == error_mark_node)
5111 const char *str = "candidates are:";
5112 error ("ambiguous class template instantiation for `%#T'", type);
5113 for (t = DECL_TEMPLATE_SPECIALIZATIONS (template); t;
5114 t = TREE_CHAIN (t))
5116 if (get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t),
5117 args))
5119 cp_error_at ("%s %+#T", str, TREE_TYPE (t));
5120 str = " ";
5123 TYPE_BEING_DEFINED (type) = 1;
5124 return error_mark_node;
5127 if (t)
5128 pattern = TREE_TYPE (t);
5129 else
5130 pattern = TREE_TYPE (template);
5132 /* If the template we're instantiating is incomplete, then clearly
5133 there's nothing we can do. */
5134 if (!COMPLETE_TYPE_P (pattern))
5135 return type;
5137 /* If we've recursively instantiated too many templates, stop. */
5138 if (! push_tinst_level (type))
5139 return type;
5141 /* Now we're really doing the instantiation. Mark the type as in
5142 the process of being defined. */
5143 TYPE_BEING_DEFINED (type) = 1;
5145 /* We may be in the middle of deferred access check. Disable
5146 it now. */
5147 push_deferring_access_checks (dk_no_deferred);
5149 maybe_push_to_top_level (uses_template_parms (type));
5151 if (t)
5153 /* This TYPE is actually an instantiation of a partial
5154 specialization. We replace the innermost set of ARGS with
5155 the arguments appropriate for substitution. For example,
5156 given:
5158 template <class T> struct S {};
5159 template <class T> struct S<T*> {};
5161 and supposing that we are instantiating S<int*>, ARGS will
5162 present be {int*} but we need {int}. */
5163 tree inner_args
5164 = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t),
5165 args);
5167 /* If there were multiple levels in ARGS, replacing the
5168 innermost level would alter CLASSTYPE_TI_ARGS, which we don't
5169 want, so we make a copy first. */
5170 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
5172 args = copy_node (args);
5173 SET_TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args), inner_args);
5175 else
5176 args = inner_args;
5179 if (flag_external_templates)
5181 if (flag_alt_external_templates)
5183 CLASSTYPE_INTERFACE_ONLY (type) = interface_only;
5184 SET_CLASSTYPE_INTERFACE_UNKNOWN_X (type, interface_unknown);
5186 else
5188 CLASSTYPE_INTERFACE_ONLY (type) = CLASSTYPE_INTERFACE_ONLY (pattern);
5189 SET_CLASSTYPE_INTERFACE_UNKNOWN_X
5190 (type, CLASSTYPE_INTERFACE_UNKNOWN (pattern));
5193 else
5195 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
5198 TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
5199 TYPE_HAS_DESTRUCTOR (type) = TYPE_HAS_DESTRUCTOR (pattern);
5200 TYPE_OVERLOADS_CALL_EXPR (type) = TYPE_OVERLOADS_CALL_EXPR (pattern);
5201 TYPE_OVERLOADS_ARRAY_REF (type) = TYPE_OVERLOADS_ARRAY_REF (pattern);
5202 TYPE_OVERLOADS_ARROW (type) = TYPE_OVERLOADS_ARROW (pattern);
5203 TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
5204 TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
5205 TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
5206 TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
5207 TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
5208 TYPE_HAS_ABSTRACT_ASSIGN_REF (type) = TYPE_HAS_ABSTRACT_ASSIGN_REF (pattern);
5209 TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
5210 TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
5211 TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
5212 TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
5213 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (type)
5214 = TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (pattern);
5215 TYPE_USES_MULTIPLE_INHERITANCE (type)
5216 = TYPE_USES_MULTIPLE_INHERITANCE (pattern);
5217 TYPE_USES_VIRTUAL_BASECLASSES (type)
5218 = TYPE_USES_VIRTUAL_BASECLASSES (pattern);
5219 TYPE_PACKED (type) = TYPE_PACKED (pattern);
5220 TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
5221 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
5222 TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
5223 if (ANON_AGGR_TYPE_P (pattern))
5224 SET_ANON_AGGR_TYPE_P (type);
5226 pbinfo = TYPE_BINFO (pattern);
5228 if (BINFO_BASETYPES (pbinfo))
5230 tree base_list = NULL_TREE;
5231 tree pbases = BINFO_BASETYPES (pbinfo);
5232 tree paccesses = BINFO_BASEACCESSES (pbinfo);
5233 int i;
5235 /* Substitute into each of the bases to determine the actual
5236 basetypes. */
5237 for (i = 0; i < TREE_VEC_LENGTH (pbases); ++i)
5239 tree base;
5240 tree access;
5241 tree pbase;
5243 pbase = TREE_VEC_ELT (pbases, i);
5244 access = TREE_VEC_ELT (paccesses, i);
5246 /* Substitute to figure out the base class. */
5247 base = tsubst (BINFO_TYPE (pbase), args, tf_error, NULL_TREE);
5248 if (base == error_mark_node)
5249 continue;
5251 base_list = tree_cons (access, base, base_list);
5252 TREE_VIA_VIRTUAL (base_list) = TREE_VIA_VIRTUAL (pbase);
5255 /* The list is now in reverse order; correct that. */
5256 base_list = nreverse (base_list);
5258 /* Now call xref_basetypes to set up all the base-class
5259 information. */
5260 xref_basetypes (type, base_list);
5263 /* Now that our base classes are set up, enter the scope of the
5264 class, so that name lookups into base classes, etc. will work
5265 correctly. This is precisely analogous to what we do in
5266 begin_class_definition when defining an ordinary non-template
5267 class. */
5268 pushclass (type, true);
5270 /* Now members are processed in the order of declaration. */
5271 for (member = CLASSTYPE_DECL_LIST (pattern); member; member = TREE_CHAIN (member))
5273 tree t = TREE_VALUE (member);
5275 if (TREE_PURPOSE (member))
5277 if (TYPE_P (t))
5279 /* Build new CLASSTYPE_NESTED_UTDS. */
5281 tree tag = t;
5282 tree name = TYPE_IDENTIFIER (tag);
5283 tree newtag;
5285 newtag = tsubst (tag, args, tf_error, NULL_TREE);
5286 my_friendly_assert (newtag != error_mark_node, 20010206);
5287 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
5289 if (TYPE_LANG_SPECIFIC (tag) && CLASSTYPE_IS_TEMPLATE (tag))
5290 /* Unfortunately, lookup_template_class sets
5291 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
5292 instantiation (i.e., for the type of a member template
5293 class nested within a template class.) This behavior is
5294 required for maybe_process_partial_specialization to work
5295 correctly, but is not accurate in this case; the TAG is not
5296 an instantiation of anything. (The corresponding
5297 TEMPLATE_DECL is an instantiation, but the TYPE is not.) */
5298 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
5300 /* Now, we call pushtag to put this NEWTAG into the scope of
5301 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
5302 pushtag calling push_template_decl. We don't have to do
5303 this for enums because it will already have been done in
5304 tsubst_enum. */
5305 if (name)
5306 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
5307 pushtag (name, newtag, /*globalize=*/0);
5310 else if (TREE_CODE (t) == FUNCTION_DECL
5311 || DECL_FUNCTION_TEMPLATE_P (t))
5313 /* Build new TYPE_METHODS. */
5315 tree r = tsubst (t, args, tf_error, NULL_TREE);
5316 set_current_access_from_decl (r);
5317 grok_special_member_properties (r);
5318 finish_member_declaration (r);
5320 else
5322 /* Build new TYPE_FIELDS. */
5324 if (TREE_CODE (t) != CONST_DECL)
5326 tree r;
5328 /* The the file and line for this declaration, to
5329 assist in error message reporting. Since we
5330 called push_tinst_level above, we don't need to
5331 restore these. */
5332 input_location = DECL_SOURCE_LOCATION (t);
5334 r = tsubst (t, args, tf_error | tf_warning, NULL_TREE);
5335 if (TREE_CODE (r) == VAR_DECL)
5337 tree init;
5339 if (DECL_INITIALIZED_IN_CLASS_P (r))
5340 init = tsubst_expr (DECL_INITIAL (t), args,
5341 tf_error | tf_warning, NULL_TREE);
5342 else
5343 init = NULL_TREE;
5345 finish_static_data_member_decl (r, init,
5346 /*asmspec_tree=*/NULL_TREE,
5347 /*flags=*/0);
5349 if (DECL_INITIALIZED_IN_CLASS_P (r))
5350 check_static_variable_definition (r, TREE_TYPE (r));
5352 else if (TREE_CODE (r) == FIELD_DECL)
5354 /* Determine whether R has a valid type and can be
5355 completed later. If R is invalid, then it is
5356 replaced by error_mark_node so that it will not be
5357 added to TYPE_FIELDS. */
5358 tree rtype = TREE_TYPE (r);
5359 if (can_complete_type_without_circularity (rtype))
5360 complete_type (rtype);
5362 if (!COMPLETE_TYPE_P (rtype))
5364 cxx_incomplete_type_error (r, rtype);
5365 r = error_mark_node;
5369 /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
5370 such a thing will already have been added to the field
5371 list by tsubst_enum in finish_member_declaration in the
5372 CLASSTYPE_NESTED_UTDS case above. */
5373 if (!(TREE_CODE (r) == TYPE_DECL
5374 && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
5375 && DECL_ARTIFICIAL (r)))
5377 set_current_access_from_decl (r);
5378 finish_member_declaration (r);
5383 else
5385 if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
5387 /* Build new CLASSTYPE_FRIEND_CLASSES. */
5389 tree friend_type = t;
5390 tree new_friend_type;
5392 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5393 new_friend_type = tsubst_friend_class (friend_type, args);
5394 else if (uses_template_parms (friend_type))
5395 new_friend_type = tsubst (friend_type, args,
5396 tf_error | tf_warning, NULL_TREE);
5397 else if (CLASSTYPE_USE_TEMPLATE (friend_type))
5398 new_friend_type = friend_type;
5399 else
5401 tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
5403 /* The call to xref_tag_from_type does injection for friend
5404 classes. */
5405 push_nested_namespace (ns);
5406 new_friend_type =
5407 xref_tag_from_type (friend_type, NULL_TREE, 1);
5408 pop_nested_namespace (ns);
5411 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5412 /* Trick make_friend_class into realizing that the friend
5413 we're adding is a template, not an ordinary class. It's
5414 important that we use make_friend_class since it will
5415 perform some error-checking and output cross-reference
5416 information. */
5417 ++processing_template_decl;
5419 if (new_friend_type != error_mark_node)
5420 make_friend_class (type, new_friend_type);
5422 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5423 --processing_template_decl;
5425 else
5426 /* Build new DECL_FRIENDLIST. */
5427 add_friend (type, tsubst_friend_function (t, args));
5431 /* Set the file and line number information to whatever is given for
5432 the class itself. This puts error messages involving generated
5433 implicit functions at a predictable point, and the same point
5434 that would be used for non-template classes. */
5435 typedecl = TYPE_MAIN_DECL (type);
5436 input_location = DECL_SOURCE_LOCATION (typedecl);
5438 unreverse_member_declarations (type);
5439 finish_struct_1 (type);
5440 CLASSTYPE_GOT_SEMICOLON (type) = 1;
5442 /* Clear this now so repo_template_used is happy. */
5443 TYPE_BEING_DEFINED (type) = 0;
5444 repo_template_used (type);
5446 /* Now that the class is complete, instantiate default arguments for
5447 any member functions. We don't do this earlier because the
5448 default arguments may reference members of the class. */
5449 if (!PRIMARY_TEMPLATE_P (template))
5450 for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
5451 if (TREE_CODE (t) == FUNCTION_DECL
5452 /* Implicitly generated member functions will not have template
5453 information; they are not instantiations, but instead are
5454 created "fresh" for each instantiation. */
5455 && DECL_TEMPLATE_INFO (t))
5456 tsubst_default_arguments (t);
5458 popclass ();
5459 pop_from_top_level ();
5460 pop_deferring_access_checks ();
5461 pop_tinst_level ();
5463 if (TYPE_CONTAINS_VPTR_P (type))
5464 keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
5466 return type;
5469 static int
5470 list_eq (tree t1, tree t2)
5472 if (t1 == NULL_TREE)
5473 return t2 == NULL_TREE;
5474 if (t2 == NULL_TREE)
5475 return 0;
5476 /* Don't care if one declares its arg const and the other doesn't -- the
5477 main variant of the arg type is all that matters. */
5478 if (TYPE_MAIN_VARIANT (TREE_VALUE (t1))
5479 != TYPE_MAIN_VARIANT (TREE_VALUE (t2)))
5480 return 0;
5481 return list_eq (TREE_CHAIN (t1), TREE_CHAIN (t2));
5484 /* If arg is a non-type template parameter that does not depend on template
5485 arguments, fold it like we weren't in the body of a template. */
5487 static tree
5488 maybe_fold_nontype_arg (tree arg)
5490 if (arg && !TYPE_P (arg) && !uses_template_parms (arg))
5492 /* Sometimes, one of the args was an expression involving a
5493 template constant parameter, like N - 1. Now that we've
5494 tsubst'd, we might have something like 2 - 1. This will
5495 confuse lookup_template_class, so we do constant folding
5496 here. We have to unset processing_template_decl, to fool
5497 tsubst_copy_and_build() into building an actual tree. */
5499 /* If the TREE_TYPE of ARG is not NULL_TREE, ARG is already
5500 as simple as it's going to get, and trying to reprocess
5501 the trees will break. */
5502 if (!TREE_TYPE (arg))
5504 int saved_processing_template_decl = processing_template_decl;
5505 processing_template_decl = 0;
5506 arg = tsubst_copy_and_build (arg,
5507 /*args=*/NULL_TREE,
5508 tf_error,
5509 /*in_decl=*/NULL_TREE,
5510 /*function_p=*/false);
5511 processing_template_decl = saved_processing_template_decl;
5514 arg = fold (arg);
5516 return arg;
5519 /* Apply maybe_fold_nontype_arg on a list or vector of args. */
5521 static void
5522 maybe_fold_nontype_args (tree targs)
5524 if (!targs)
5525 /*OK*/;
5526 else if (TREE_CODE (targs) == TREE_LIST)
5528 tree chain;
5529 for (chain = targs; chain; chain = TREE_CHAIN (chain))
5530 TREE_VALUE (chain) = maybe_fold_nontype_arg (TREE_VALUE (chain));
5532 else
5534 int i;
5535 for (i = 0; i < TREE_VEC_LENGTH (targs); ++i)
5536 TREE_VEC_ELT (targs, i)
5537 = maybe_fold_nontype_arg (TREE_VEC_ELT (targs, i));
5541 /* Substitute ARGS into the vector of template arguments T. */
5543 static tree
5544 tsubst_template_arg_vector (tree t, tree args, tsubst_flags_t complain)
5546 int len = TREE_VEC_LENGTH (t), need_new = 0, i;
5547 tree *elts = (tree *) alloca (len * sizeof (tree));
5549 memset ((char *) elts, 0, len * sizeof (tree));
5551 for (i = 0; i < len; i++)
5553 if (TREE_VEC_ELT (t, i) != NULL_TREE
5554 && TREE_CODE (TREE_VEC_ELT (t, i)) == TREE_VEC)
5555 elts[i] = tsubst_template_arg_vector (TREE_VEC_ELT (t, i),
5556 args, complain);
5557 else
5558 elts[i] = maybe_fold_nontype_arg
5559 (tsubst_expr (TREE_VEC_ELT (t, i), args, complain,
5560 NULL_TREE));
5562 if (elts[i] == error_mark_node)
5563 return error_mark_node;
5565 if (elts[i] != TREE_VEC_ELT (t, i))
5566 need_new = 1;
5569 if (!need_new)
5570 return t;
5572 t = make_tree_vec (len);
5573 for (i = 0; i < len; i++)
5574 TREE_VEC_ELT (t, i) = elts[i];
5576 return t;
5579 /* Return the result of substituting ARGS into the template parameters
5580 given by PARMS. If there are m levels of ARGS and m + n levels of
5581 PARMS, then the result will contain n levels of PARMS. For
5582 example, if PARMS is `template <class T> template <class U>
5583 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
5584 result will be `template <int*, double, class V>'. */
5586 static tree
5587 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
5589 tree r = NULL_TREE;
5590 tree* new_parms;
5592 for (new_parms = &r;
5593 TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
5594 new_parms = &(TREE_CHAIN (*new_parms)),
5595 parms = TREE_CHAIN (parms))
5597 tree new_vec =
5598 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
5599 int i;
5601 for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
5603 tree tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
5604 tree default_value = TREE_PURPOSE (tuple);
5605 tree parm_decl = TREE_VALUE (tuple);
5607 parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
5608 default_value = tsubst_expr (default_value, args,
5609 complain, NULL_TREE);
5610 tuple = build_tree_list (maybe_fold_nontype_arg (default_value),
5611 parm_decl);
5612 TREE_VEC_ELT (new_vec, i) = tuple;
5615 *new_parms =
5616 tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
5617 - TMPL_ARGS_DEPTH (args)),
5618 new_vec, NULL_TREE);
5621 return r;
5624 /* Substitute the ARGS into the indicated aggregate (or enumeration)
5625 type T. If T is not an aggregate or enumeration type, it is
5626 handled as if by tsubst. IN_DECL is as for tsubst. If
5627 ENTERING_SCOPE is nonzero, T is the context for a template which
5628 we are presently tsubst'ing. Return the substituted value. */
5630 static tree
5631 tsubst_aggr_type (tree t,
5632 tree args,
5633 tsubst_flags_t complain,
5634 tree in_decl,
5635 int entering_scope)
5637 if (t == NULL_TREE)
5638 return NULL_TREE;
5640 switch (TREE_CODE (t))
5642 case RECORD_TYPE:
5643 if (TYPE_PTRMEMFUNC_P (t))
5644 return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
5646 /* else fall through */
5647 case ENUMERAL_TYPE:
5648 case UNION_TYPE:
5649 if (TYPE_TEMPLATE_INFO (t))
5651 tree argvec;
5652 tree context;
5653 tree r;
5655 /* First, determine the context for the type we are looking
5656 up. */
5657 if (TYPE_CONTEXT (t) != NULL_TREE)
5658 context = tsubst_aggr_type (TYPE_CONTEXT (t), args,
5659 complain,
5660 in_decl, /*entering_scope=*/1);
5661 else
5662 context = NULL_TREE;
5664 /* Then, figure out what arguments are appropriate for the
5665 type we are trying to find. For example, given:
5667 template <class T> struct S;
5668 template <class T, class U> void f(T, U) { S<U> su; }
5670 and supposing that we are instantiating f<int, double>,
5671 then our ARGS will be {int, double}, but, when looking up
5672 S we only want {double}. */
5673 argvec = tsubst_template_arg_vector (TYPE_TI_ARGS (t), args,
5674 complain);
5675 if (argvec == error_mark_node)
5676 return error_mark_node;
5678 r = lookup_template_class (t, argvec, in_decl, context,
5679 entering_scope, complain);
5681 return cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
5683 else
5684 /* This is not a template type, so there's nothing to do. */
5685 return t;
5687 default:
5688 return tsubst (t, args, complain, in_decl);
5692 /* Substitute into the default argument ARG (a default argument for
5693 FN), which has the indicated TYPE. */
5695 tree
5696 tsubst_default_argument (tree fn, tree type, tree arg)
5698 /* This default argument came from a template. Instantiate the
5699 default argument here, not in tsubst. In the case of
5700 something like:
5702 template <class T>
5703 struct S {
5704 static T t();
5705 void f(T = t());
5708 we must be careful to do name lookup in the scope of S<T>,
5709 rather than in the current class.
5711 ??? current_class_type affects a lot more than name lookup. This is
5712 very fragile. Fortunately, it will go away when we do 2-phase name
5713 binding properly. */
5715 /* FN is already the desired FUNCTION_DECL. */
5716 push_access_scope (fn);
5718 arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
5719 tf_error | tf_warning, NULL_TREE);
5721 pop_access_scope (fn);
5723 /* Make sure the default argument is reasonable. */
5724 arg = check_default_argument (type, arg);
5726 return arg;
5729 /* Substitute into all the default arguments for FN. */
5731 static void
5732 tsubst_default_arguments (tree fn)
5734 tree arg;
5735 tree tmpl_args;
5737 tmpl_args = DECL_TI_ARGS (fn);
5739 /* If this function is not yet instantiated, we certainly don't need
5740 its default arguments. */
5741 if (uses_template_parms (tmpl_args))
5742 return;
5744 for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
5745 arg;
5746 arg = TREE_CHAIN (arg))
5747 if (TREE_PURPOSE (arg))
5748 TREE_PURPOSE (arg) = tsubst_default_argument (fn,
5749 TREE_VALUE (arg),
5750 TREE_PURPOSE (arg));
5753 /* Substitute the ARGS into the T, which is a _DECL. TYPE is the
5754 (already computed) substitution of ARGS into TREE_TYPE (T), if
5755 appropriate. Return the result of the substitution. Issue error
5756 and warning messages under control of COMPLAIN. */
5758 static tree
5759 tsubst_decl (tree t, tree args, tree type, tsubst_flags_t complain)
5761 location_t saved_loc;
5762 tree r = NULL_TREE;
5763 tree in_decl = t;
5765 /* Set the filename and linenumber to improve error-reporting. */
5766 saved_loc = input_location;
5767 input_location = DECL_SOURCE_LOCATION (t);
5769 switch (TREE_CODE (t))
5771 case TEMPLATE_DECL:
5773 /* We can get here when processing a member template function
5774 of a template class. */
5775 tree decl = DECL_TEMPLATE_RESULT (t);
5776 tree spec;
5777 int is_template_template_parm = DECL_TEMPLATE_TEMPLATE_PARM_P (t);
5779 if (!is_template_template_parm)
5781 /* We might already have an instance of this template.
5782 The ARGS are for the surrounding class type, so the
5783 full args contain the tsubst'd args for the context,
5784 plus the innermost args from the template decl. */
5785 tree tmpl_args = DECL_CLASS_TEMPLATE_P (t)
5786 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
5787 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
5788 tree full_args;
5790 full_args = tsubst_template_arg_vector (tmpl_args, args,
5791 complain);
5793 /* tsubst_template_arg_vector doesn't copy the vector if
5794 nothing changed. But, *something* should have
5795 changed. */
5796 my_friendly_assert (full_args != tmpl_args, 0);
5798 spec = retrieve_specialization (t, full_args);
5799 if (spec != NULL_TREE)
5801 r = spec;
5802 break;
5806 /* Make a new template decl. It will be similar to the
5807 original, but will record the current template arguments.
5808 We also create a new function declaration, which is just
5809 like the old one, but points to this new template, rather
5810 than the old one. */
5811 r = copy_decl (t);
5812 my_friendly_assert (DECL_LANG_SPECIFIC (r) != 0, 0);
5813 TREE_CHAIN (r) = NULL_TREE;
5815 if (is_template_template_parm)
5817 tree new_decl = tsubst (decl, args, complain, in_decl);
5818 DECL_TEMPLATE_RESULT (r) = new_decl;
5819 TREE_TYPE (r) = TREE_TYPE (new_decl);
5820 break;
5823 DECL_CONTEXT (r)
5824 = tsubst_aggr_type (DECL_CONTEXT (t), args,
5825 complain, in_decl,
5826 /*entering_scope=*/1);
5827 DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
5829 if (TREE_CODE (decl) == TYPE_DECL)
5831 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
5832 TREE_TYPE (r) = new_type;
5833 CLASSTYPE_TI_TEMPLATE (new_type) = r;
5834 DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
5835 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
5837 else
5839 tree new_decl = tsubst (decl, args, complain, in_decl);
5841 DECL_TEMPLATE_RESULT (r) = new_decl;
5842 DECL_TI_TEMPLATE (new_decl) = r;
5843 TREE_TYPE (r) = TREE_TYPE (new_decl);
5844 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
5847 SET_DECL_IMPLICIT_INSTANTIATION (r);
5848 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
5849 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
5851 /* The template parameters for this new template are all the
5852 template parameters for the old template, except the
5853 outermost level of parameters. */
5854 DECL_TEMPLATE_PARMS (r)
5855 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
5856 complain);
5858 if (PRIMARY_TEMPLATE_P (t))
5859 DECL_PRIMARY_TEMPLATE (r) = r;
5861 /* We don't partially instantiate partial specializations. */
5862 if (TREE_CODE (decl) == TYPE_DECL)
5863 break;
5865 /* Record this partial instantiation. */
5866 register_specialization (r, t,
5867 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)));
5870 break;
5872 case FUNCTION_DECL:
5874 tree ctx;
5875 tree argvec = NULL_TREE;
5876 tree *friends;
5877 tree gen_tmpl;
5878 int member;
5879 int args_depth;
5880 int parms_depth;
5882 /* Nobody should be tsubst'ing into non-template functions. */
5883 my_friendly_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE, 0);
5885 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
5887 tree spec;
5888 bool dependent_p;
5890 /* If T is not dependent, just return it. We have to
5891 increment PROCESSING_TEMPLATE_DECL because
5892 value_dependent_expression_p assumes that nothing is
5893 dependent when PROCESSING_TEMPLATE_DECL is zero. */
5894 ++processing_template_decl;
5895 dependent_p = value_dependent_expression_p (t);
5896 --processing_template_decl;
5897 if (!dependent_p)
5898 return t;
5900 /* Calculate the most general template of which R is a
5901 specialization, and the complete set of arguments used to
5902 specialize R. */
5903 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
5904 argvec
5905 = tsubst_template_arg_vector (DECL_TI_ARGS
5906 (DECL_TEMPLATE_RESULT (gen_tmpl)),
5907 args, complain);
5909 /* Check to see if we already have this specialization. */
5910 spec = retrieve_specialization (gen_tmpl, argvec);
5912 if (spec)
5914 r = spec;
5915 break;
5918 /* We can see more levels of arguments than parameters if
5919 there was a specialization of a member template, like
5920 this:
5922 template <class T> struct S { template <class U> void f(); }
5923 template <> template <class U> void S<int>::f(U);
5925 Here, we'll be substituting into the specialization,
5926 because that's where we can find the code we actually
5927 want to generate, but we'll have enough arguments for
5928 the most general template.
5930 We also deal with the peculiar case:
5932 template <class T> struct S {
5933 template <class U> friend void f();
5935 template <class U> void f() {}
5936 template S<int>;
5937 template void f<double>();
5939 Here, the ARGS for the instantiation of will be {int,
5940 double}. But, we only need as many ARGS as there are
5941 levels of template parameters in CODE_PATTERN. We are
5942 careful not to get fooled into reducing the ARGS in
5943 situations like:
5945 template <class T> struct S { template <class U> void f(U); }
5946 template <class T> template <> void S<T>::f(int) {}
5948 which we can spot because the pattern will be a
5949 specialization in this case. */
5950 args_depth = TMPL_ARGS_DEPTH (args);
5951 parms_depth =
5952 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
5953 if (args_depth > parms_depth
5954 && !DECL_TEMPLATE_SPECIALIZATION (t))
5955 args = get_innermost_template_args (args, parms_depth);
5957 else
5959 /* This special case arises when we have something like this:
5961 template <class T> struct S {
5962 friend void f<int>(int, double);
5965 Here, the DECL_TI_TEMPLATE for the friend declaration
5966 will be a LOOKUP_EXPR or an IDENTIFIER_NODE. We are
5967 being called from tsubst_friend_function, and we want
5968 only to create a new decl (R) with appropriate types so
5969 that we can call determine_specialization. */
5970 gen_tmpl = NULL_TREE;
5973 if (DECL_CLASS_SCOPE_P (t))
5975 if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
5976 member = 2;
5977 else
5978 member = 1;
5979 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
5980 complain, t,
5981 /*entering_scope=*/1);
5983 else
5985 member = 0;
5986 ctx = DECL_CONTEXT (t);
5988 type = tsubst (type, args, complain, in_decl);
5989 if (type == error_mark_node)
5990 return error_mark_node;
5992 /* We do NOT check for matching decls pushed separately at this
5993 point, as they may not represent instantiations of this
5994 template, and in any case are considered separate under the
5995 discrete model. */
5996 r = copy_decl (t);
5997 DECL_USE_TEMPLATE (r) = 0;
5998 TREE_TYPE (r) = type;
5999 /* Clear out the mangled name and RTL for the instantiation. */
6000 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
6001 SET_DECL_RTL (r, NULL_RTX);
6003 DECL_CONTEXT (r) = ctx;
6005 if (member && DECL_CONV_FN_P (r))
6006 /* Type-conversion operator. Reconstruct the name, in
6007 case it's the name of one of the template's parameters. */
6008 DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
6010 DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
6011 complain, t);
6012 DECL_RESULT (r) = NULL_TREE;
6014 TREE_STATIC (r) = 0;
6015 TREE_PUBLIC (r) = TREE_PUBLIC (t);
6016 DECL_EXTERNAL (r) = 1;
6017 DECL_INTERFACE_KNOWN (r) = 0;
6018 DECL_DEFER_OUTPUT (r) = 0;
6019 TREE_CHAIN (r) = NULL_TREE;
6020 DECL_PENDING_INLINE_INFO (r) = 0;
6021 DECL_PENDING_INLINE_P (r) = 0;
6022 DECL_SAVED_TREE (r) = NULL_TREE;
6023 TREE_USED (r) = 0;
6024 if (DECL_CLONED_FUNCTION (r))
6026 DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
6027 args, complain, t);
6028 TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
6029 TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
6032 /* Set up the DECL_TEMPLATE_INFO for R. There's no need to do
6033 this in the special friend case mentioned above where
6034 GEN_TMPL is NULL. */
6035 if (gen_tmpl)
6037 DECL_TEMPLATE_INFO (r)
6038 = tree_cons (gen_tmpl, argvec, NULL_TREE);
6039 SET_DECL_IMPLICIT_INSTANTIATION (r);
6040 register_specialization (r, gen_tmpl, argvec);
6042 /* We're not supposed to instantiate default arguments
6043 until they are called, for a template. But, for a
6044 declaration like:
6046 template <class T> void f ()
6047 { extern void g(int i = T()); }
6049 we should do the substitution when the template is
6050 instantiated. We handle the member function case in
6051 instantiate_class_template since the default arguments
6052 might refer to other members of the class. */
6053 if (!member
6054 && !PRIMARY_TEMPLATE_P (gen_tmpl)
6055 && !uses_template_parms (argvec))
6056 tsubst_default_arguments (r);
6059 /* Copy the list of befriending classes. */
6060 for (friends = &DECL_BEFRIENDING_CLASSES (r);
6061 *friends;
6062 friends = &TREE_CHAIN (*friends))
6064 *friends = copy_node (*friends);
6065 TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
6066 args, complain,
6067 in_decl);
6070 if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
6072 maybe_retrofit_in_chrg (r);
6073 if (DECL_CONSTRUCTOR_P (r))
6074 grok_ctor_properties (ctx, r);
6075 /* If this is an instantiation of a member template, clone it.
6076 If it isn't, that'll be handled by
6077 clone_constructors_and_destructors. */
6078 if (PRIMARY_TEMPLATE_P (gen_tmpl))
6079 clone_function_decl (r, /*update_method_vec_p=*/0);
6081 else if (IDENTIFIER_OPNAME_P (DECL_NAME (r)))
6082 grok_op_properties (r, DECL_FRIEND_P (r));
6084 break;
6086 case PARM_DECL:
6088 r = copy_node (t);
6089 if (DECL_TEMPLATE_PARM_P (t))
6090 SET_DECL_TEMPLATE_PARM_P (r);
6092 TREE_TYPE (r) = type;
6093 c_apply_type_quals_to_decl (cp_type_quals (type), r);
6095 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
6096 DECL_INITIAL (r) = TREE_TYPE (r);
6097 else
6098 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
6099 complain, in_decl);
6101 DECL_CONTEXT (r) = NULL_TREE;
6103 if (!DECL_TEMPLATE_PARM_P (r))
6104 DECL_ARG_TYPE (r) = type_passed_as (type);
6105 if (TREE_CHAIN (t))
6106 TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
6107 complain, TREE_CHAIN (t));
6109 break;
6111 case FIELD_DECL:
6113 r = copy_decl (t);
6114 TREE_TYPE (r) = type;
6115 c_apply_type_quals_to_decl (cp_type_quals (type), r);
6117 /* We don't have to set DECL_CONTEXT here; it is set by
6118 finish_member_declaration. */
6119 DECL_INITIAL (r) = tsubst_expr (DECL_INITIAL (t), args,
6120 complain, in_decl);
6121 TREE_CHAIN (r) = NULL_TREE;
6122 if (VOID_TYPE_P (type))
6123 cp_error_at ("instantiation of `%D' as type `%T'", r, type);
6125 break;
6127 case USING_DECL:
6129 r = copy_node (t);
6130 DECL_INITIAL (r)
6131 = tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
6132 TREE_CHAIN (r) = NULL_TREE;
6134 break;
6136 case TYPE_DECL:
6137 if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
6138 || t == TYPE_MAIN_DECL (TREE_TYPE (t)))
6140 /* If this is the canonical decl, we don't have to mess with
6141 instantiations, and often we can't (for typename, template
6142 type parms and such). Note that TYPE_NAME is not correct for
6143 the above test if we've copied the type for a typedef. */
6144 r = TYPE_NAME (type);
6145 break;
6148 /* Fall through. */
6150 case VAR_DECL:
6152 tree argvec = NULL_TREE;
6153 tree gen_tmpl = NULL_TREE;
6154 tree spec;
6155 tree tmpl = NULL_TREE;
6156 tree ctx;
6157 int local_p;
6159 /* Assume this is a non-local variable. */
6160 local_p = 0;
6162 if (TYPE_P (CP_DECL_CONTEXT (t)))
6163 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
6164 complain,
6165 in_decl, /*entering_scope=*/1);
6166 else if (DECL_NAMESPACE_SCOPE_P (t))
6167 ctx = DECL_CONTEXT (t);
6168 else
6170 /* Subsequent calls to pushdecl will fill this in. */
6171 ctx = NULL_TREE;
6172 local_p = 1;
6175 /* Check to see if we already have this specialization. */
6176 if (!local_p)
6178 tmpl = DECL_TI_TEMPLATE (t);
6179 gen_tmpl = most_general_template (tmpl);
6180 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
6181 spec = retrieve_specialization (gen_tmpl, argvec);
6183 else
6184 spec = retrieve_local_specialization (t);
6186 if (spec)
6188 r = spec;
6189 break;
6192 r = copy_decl (t);
6193 if (TREE_CODE (r) == VAR_DECL)
6194 type = complete_type (type);
6195 else if (DECL_SELF_REFERENCE_P (t))
6196 SET_DECL_SELF_REFERENCE_P (r);
6197 TREE_TYPE (r) = type;
6198 c_apply_type_quals_to_decl (cp_type_quals (type), r);
6199 DECL_CONTEXT (r) = ctx;
6200 /* Clear out the mangled name and RTL for the instantiation. */
6201 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
6202 SET_DECL_RTL (r, NULL_RTX);
6204 /* Don't try to expand the initializer until someone tries to use
6205 this variable; otherwise we run into circular dependencies. */
6206 DECL_INITIAL (r) = NULL_TREE;
6207 SET_DECL_RTL (r, NULL_RTX);
6208 DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
6210 /* Even if the original location is out of scope, the newly
6211 substituted one is not. */
6212 if (TREE_CODE (r) == VAR_DECL)
6214 DECL_DEAD_FOR_LOCAL (r) = 0;
6215 DECL_INITIALIZED_P (r) = 0;
6218 if (!local_p)
6220 /* A static data member declaration is always marked
6221 external when it is declared in-class, even if an
6222 initializer is present. We mimic the non-template
6223 processing here. */
6224 DECL_EXTERNAL (r) = 1;
6226 register_specialization (r, gen_tmpl, argvec);
6227 DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
6228 SET_DECL_IMPLICIT_INSTANTIATION (r);
6230 else
6231 register_local_specialization (r, t);
6233 TREE_CHAIN (r) = NULL_TREE;
6234 if (TREE_CODE (r) == VAR_DECL && VOID_TYPE_P (type))
6235 cp_error_at ("instantiation of `%D' as type `%T'", r, type);
6236 /* Compute the size, alignment, etc. of R. */
6237 layout_decl (r, 0);
6239 break;
6241 default:
6242 abort ();
6245 /* Restore the file and line information. */
6246 input_location = saved_loc;
6248 return r;
6251 /* Substitute into the ARG_TYPES of a function type. */
6253 static tree
6254 tsubst_arg_types (tree arg_types,
6255 tree args,
6256 tsubst_flags_t complain,
6257 tree in_decl)
6259 tree remaining_arg_types;
6260 tree type;
6262 if (!arg_types || arg_types == void_list_node)
6263 return arg_types;
6265 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
6266 args, complain, in_decl);
6267 if (remaining_arg_types == error_mark_node)
6268 return error_mark_node;
6270 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
6271 if (type == error_mark_node)
6272 return error_mark_node;
6273 if (VOID_TYPE_P (type))
6275 if (complain & tf_error)
6277 error ("invalid parameter type `%T'", type);
6278 if (in_decl)
6279 cp_error_at ("in declaration `%D'", in_decl);
6281 return error_mark_node;
6284 /* Do array-to-pointer, function-to-pointer conversion, and ignore
6285 top-level qualifiers as required. */
6286 type = TYPE_MAIN_VARIANT (type_decays_to (type));
6288 /* Note that we do not substitute into default arguments here. The
6289 standard mandates that they be instantiated only when needed,
6290 which is done in build_over_call. */
6291 return hash_tree_cons (TREE_PURPOSE (arg_types), type,
6292 remaining_arg_types);
6296 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
6297 *not* handle the exception-specification for FNTYPE, because the
6298 initial substitution of explicitly provided template parameters
6299 during argument deduction forbids substitution into the
6300 exception-specification:
6302 [temp.deduct]
6304 All references in the function type of the function template to the
6305 corresponding template parameters are replaced by the specified tem-
6306 plate argument values. If a substitution in a template parameter or
6307 in the function type of the function template results in an invalid
6308 type, type deduction fails. [Note: The equivalent substitution in
6309 exception specifications is done only when the function is instanti-
6310 ated, at which point a program is ill-formed if the substitution
6311 results in an invalid type.] */
6313 static tree
6314 tsubst_function_type (tree t,
6315 tree args,
6316 tsubst_flags_t complain,
6317 tree in_decl)
6319 tree return_type;
6320 tree arg_types;
6321 tree fntype;
6323 /* The TYPE_CONTEXT is not used for function/method types. */
6324 my_friendly_assert (TYPE_CONTEXT (t) == NULL_TREE, 0);
6326 /* Substitute the return type. */
6327 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6328 if (return_type == error_mark_node)
6329 return error_mark_node;
6331 /* Substitute the argument types. */
6332 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
6333 complain, in_decl);
6334 if (arg_types == error_mark_node)
6335 return error_mark_node;
6337 /* Construct a new type node and return it. */
6338 if (TREE_CODE (t) == FUNCTION_TYPE)
6339 fntype = build_function_type (return_type, arg_types);
6340 else
6342 tree r = TREE_TYPE (TREE_VALUE (arg_types));
6343 if (! IS_AGGR_TYPE (r))
6345 /* [temp.deduct]
6347 Type deduction may fail for any of the following
6348 reasons:
6350 -- Attempting to create "pointer to member of T" when T
6351 is not a class type. */
6352 if (complain & tf_error)
6353 error ("creating pointer to member function of non-class type `%T'",
6355 return error_mark_node;
6358 fntype = build_cplus_method_type (r, return_type, TREE_CHAIN
6359 (arg_types));
6361 fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
6362 fntype = build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
6364 return fntype;
6367 /* Substitute into the PARMS of a call-declarator. */
6369 static tree
6370 tsubst_call_declarator_parms (tree parms,
6371 tree args,
6372 tsubst_flags_t complain,
6373 tree in_decl)
6375 tree new_parms;
6376 tree type;
6377 tree defarg;
6379 if (!parms || parms == void_list_node)
6380 return parms;
6382 new_parms = tsubst_call_declarator_parms (TREE_CHAIN (parms),
6383 args, complain, in_decl);
6385 /* Figure out the type of this parameter. */
6386 type = tsubst (TREE_VALUE (parms), args, complain, in_decl);
6388 /* Figure out the default argument as well. Note that we use
6389 tsubst_expr since the default argument is really an expression. */
6390 defarg = tsubst_expr (TREE_PURPOSE (parms), args, complain, in_decl);
6392 /* Chain this parameter on to the front of those we have already
6393 processed. We don't use hash_tree_cons because that function
6394 doesn't check TREE_PARMLIST. */
6395 new_parms = tree_cons (defarg, type, new_parms);
6397 /* And note that these are parameters. */
6398 TREE_PARMLIST (new_parms) = 1;
6400 return new_parms;
6403 /* Take the tree structure T and replace template parameters used
6404 therein with the argument vector ARGS. IN_DECL is an associated
6405 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
6406 Issue error and warning messages under control of COMPLAIN. Note
6407 that we must be relatively non-tolerant of extensions here, in
6408 order to preserve conformance; if we allow substitutions that
6409 should not be allowed, we may allow argument deductions that should
6410 not succeed, and therefore report ambiguous overload situations
6411 where there are none. In theory, we could allow the substitution,
6412 but indicate that it should have failed, and allow our caller to
6413 make sure that the right thing happens, but we don't try to do this
6414 yet.
6416 This function is used for dealing with types, decls and the like;
6417 for expressions, use tsubst_expr or tsubst_copy. */
6419 static tree
6420 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
6422 tree type, r;
6424 if (t == NULL_TREE || t == error_mark_node
6425 || t == integer_type_node
6426 || t == void_type_node
6427 || t == char_type_node
6428 || TREE_CODE (t) == NAMESPACE_DECL)
6429 return t;
6431 if (TREE_CODE (t) == IDENTIFIER_NODE)
6432 type = IDENTIFIER_TYPE_VALUE (t);
6433 else
6434 type = TREE_TYPE (t);
6435 if (type == unknown_type_node)
6436 abort ();
6438 if (type && TREE_CODE (t) != FUNCTION_DECL
6439 && TREE_CODE (t) != TYPENAME_TYPE
6440 && TREE_CODE (t) != TEMPLATE_DECL
6441 && TREE_CODE (t) != IDENTIFIER_NODE
6442 && TREE_CODE (t) != FUNCTION_TYPE
6443 && TREE_CODE (t) != METHOD_TYPE)
6444 type = tsubst (type, args, complain, in_decl);
6445 if (type == error_mark_node)
6446 return error_mark_node;
6448 if (DECL_P (t))
6449 return tsubst_decl (t, args, type, complain);
6451 switch (TREE_CODE (t))
6453 case RECORD_TYPE:
6454 case UNION_TYPE:
6455 case ENUMERAL_TYPE:
6456 return tsubst_aggr_type (t, args, complain, in_decl,
6457 /*entering_scope=*/0);
6459 case ERROR_MARK:
6460 case IDENTIFIER_NODE:
6461 case VOID_TYPE:
6462 case REAL_TYPE:
6463 case COMPLEX_TYPE:
6464 case VECTOR_TYPE:
6465 case BOOLEAN_TYPE:
6466 case INTEGER_CST:
6467 case REAL_CST:
6468 case STRING_CST:
6469 return t;
6471 case INTEGER_TYPE:
6472 if (t == integer_type_node)
6473 return t;
6475 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
6476 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
6477 return t;
6480 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
6482 max = tsubst_expr (omax, args, complain, in_decl);
6483 if (max == error_mark_node)
6484 return error_mark_node;
6486 /* See if we can reduce this expression to something simpler. */
6487 max = maybe_fold_nontype_arg (max);
6488 if (!processing_template_decl)
6489 max = decl_constant_value (max);
6491 if (processing_template_decl
6492 /* When providing explicit arguments to a template
6493 function, but leaving some arguments for subsequent
6494 deduction, MAX may be template-dependent even if we're
6495 not PROCESSING_TEMPLATE_DECL. We still need to check for
6496 template parms, though; MAX won't be an INTEGER_CST for
6497 dynamic arrays, either. */
6498 || (TREE_CODE (max) != INTEGER_CST
6499 && uses_template_parms (max)))
6501 tree itype = make_node (INTEGER_TYPE);
6502 TYPE_MIN_VALUE (itype) = size_zero_node;
6503 TYPE_MAX_VALUE (itype) = build_min (MINUS_EXPR, sizetype, max,
6504 integer_one_node);
6505 return itype;
6508 if (integer_zerop (omax))
6510 /* Still allow an explicit array of size zero. */
6511 if (pedantic)
6512 pedwarn ("creating array with size zero");
6514 else if (integer_zerop (max)
6515 || (TREE_CODE (max) == INTEGER_CST
6516 && INT_CST_LT (max, integer_zero_node)))
6518 /* [temp.deduct]
6520 Type deduction may fail for any of the following
6521 reasons:
6523 Attempting to create an array with a size that is
6524 zero or negative. */
6525 if (complain & tf_error)
6526 error ("creating array with size zero (`%E')", max);
6528 return error_mark_node;
6531 return compute_array_index_type (NULL_TREE, max);
6534 case TEMPLATE_TYPE_PARM:
6535 case TEMPLATE_TEMPLATE_PARM:
6536 case BOUND_TEMPLATE_TEMPLATE_PARM:
6537 case TEMPLATE_PARM_INDEX:
6539 int idx;
6540 int level;
6541 int levels;
6543 r = NULL_TREE;
6545 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
6546 || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
6547 || TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
6549 idx = TEMPLATE_TYPE_IDX (t);
6550 level = TEMPLATE_TYPE_LEVEL (t);
6552 else
6554 idx = TEMPLATE_PARM_IDX (t);
6555 level = TEMPLATE_PARM_LEVEL (t);
6558 if (TREE_VEC_LENGTH (args) > 0)
6560 tree arg = NULL_TREE;
6562 levels = TMPL_ARGS_DEPTH (args);
6563 if (level <= levels)
6564 arg = TMPL_ARG (args, level, idx);
6566 if (arg == error_mark_node)
6567 return error_mark_node;
6568 else if (arg != NULL_TREE)
6570 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
6572 my_friendly_assert (TYPE_P (arg), 0);
6573 return cp_build_qualified_type_real
6574 (arg, cp_type_quals (arg) | cp_type_quals (t),
6575 complain | tf_ignore_bad_quals);
6577 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
6579 /* We are processing a type constructed from
6580 a template template parameter */
6581 tree argvec = tsubst (TYPE_TI_ARGS (t),
6582 args, complain, in_decl);
6583 if (argvec == error_mark_node)
6584 return error_mark_node;
6586 /* We can get a TEMPLATE_TEMPLATE_PARM here when
6587 we are resolving nested-types in the signature of
6588 a member function templates.
6589 Otherwise ARG is a TEMPLATE_DECL and is the real
6590 template to be instantiated. */
6591 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
6592 arg = TYPE_NAME (arg);
6594 r = lookup_template_class (arg,
6595 argvec, in_decl,
6596 DECL_CONTEXT (arg),
6597 /*entering_scope=*/0,
6598 complain);
6599 return cp_build_qualified_type_real
6600 (r, TYPE_QUALS (t), complain);
6602 else
6603 /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX. */
6604 return arg;
6607 else
6608 abort ();
6610 if (level == 1)
6611 /* This can happen during the attempted tsubst'ing in
6612 unify. This means that we don't yet have any information
6613 about the template parameter in question. */
6614 return t;
6616 /* If we get here, we must have been looking at a parm for a
6617 more deeply nested template. Make a new version of this
6618 template parameter, but with a lower level. */
6619 switch (TREE_CODE (t))
6621 case TEMPLATE_TYPE_PARM:
6622 case TEMPLATE_TEMPLATE_PARM:
6623 case BOUND_TEMPLATE_TEMPLATE_PARM:
6624 if (cp_type_quals (t))
6626 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
6627 r = cp_build_qualified_type_real
6628 (r, cp_type_quals (t),
6629 complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
6630 ? tf_ignore_bad_quals : 0));
6632 else
6634 r = copy_type (t);
6635 TEMPLATE_TYPE_PARM_INDEX (r)
6636 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
6637 r, levels);
6638 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
6639 TYPE_MAIN_VARIANT (r) = r;
6640 TYPE_POINTER_TO (r) = NULL_TREE;
6641 TYPE_REFERENCE_TO (r) = NULL_TREE;
6643 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
6645 tree argvec = tsubst (TYPE_TI_ARGS (t), args,
6646 complain, in_decl);
6647 if (argvec == error_mark_node)
6648 return error_mark_node;
6650 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
6651 = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
6654 break;
6656 case TEMPLATE_PARM_INDEX:
6657 r = reduce_template_parm_level (t, type, levels);
6658 break;
6660 default:
6661 abort ();
6664 return r;
6667 case TREE_LIST:
6669 tree purpose, value, chain, result;
6671 if (t == void_list_node)
6672 return t;
6674 purpose = TREE_PURPOSE (t);
6675 if (purpose)
6677 purpose = tsubst (purpose, args, complain, in_decl);
6678 if (purpose == error_mark_node)
6679 return error_mark_node;
6681 value = TREE_VALUE (t);
6682 if (value)
6684 value = tsubst (value, args, complain, in_decl);
6685 if (value == error_mark_node)
6686 return error_mark_node;
6688 chain = TREE_CHAIN (t);
6689 if (chain && chain != void_type_node)
6691 chain = tsubst (chain, args, complain, in_decl);
6692 if (chain == error_mark_node)
6693 return error_mark_node;
6695 if (purpose == TREE_PURPOSE (t)
6696 && value == TREE_VALUE (t)
6697 && chain == TREE_CHAIN (t))
6698 return t;
6699 if (TREE_PARMLIST (t))
6701 result = tree_cons (purpose, value, chain);
6702 TREE_PARMLIST (result) = 1;
6704 else
6705 result = hash_tree_cons (purpose, value, chain);
6706 return result;
6708 case TREE_VEC:
6709 if (type != NULL_TREE)
6711 /* A binfo node. We always need to make a copy, of the node
6712 itself and of its BINFO_BASETYPES. */
6714 t = copy_node (t);
6716 /* Make sure type isn't a typedef copy. */
6717 type = BINFO_TYPE (TYPE_BINFO (type));
6719 TREE_TYPE (t) = complete_type (type);
6720 if (IS_AGGR_TYPE (type))
6722 BINFO_VTABLE (t) = TYPE_BINFO_VTABLE (type);
6723 BINFO_VIRTUALS (t) = TYPE_BINFO_VIRTUALS (type);
6724 if (TYPE_BINFO_BASETYPES (type) != NULL_TREE)
6725 BINFO_BASETYPES (t) = copy_node (TYPE_BINFO_BASETYPES (type));
6727 return t;
6730 /* Otherwise, a vector of template arguments. */
6731 return tsubst_template_arg_vector (t, args, complain);
6733 case POINTER_TYPE:
6734 case REFERENCE_TYPE:
6736 enum tree_code code;
6738 if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
6739 return t;
6741 code = TREE_CODE (t);
6744 /* [temp.deduct]
6746 Type deduction may fail for any of the following
6747 reasons:
6749 -- Attempting to create a pointer to reference type.
6750 -- Attempting to create a reference to a reference type or
6751 a reference to void. */
6752 if (TREE_CODE (type) == REFERENCE_TYPE
6753 || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
6755 static location_t last_loc;
6757 /* We keep track of the last time we issued this error
6758 message to avoid spewing a ton of messages during a
6759 single bad template instantiation. */
6760 if (complain & tf_error
6761 && (last_loc.line != input_line
6762 || last_loc.file != input_filename))
6764 if (TREE_CODE (type) == VOID_TYPE)
6765 error ("forming reference to void");
6766 else
6767 error ("forming %s to reference type `%T'",
6768 (code == POINTER_TYPE) ? "pointer" : "reference",
6769 type);
6770 last_loc = input_location;
6773 return error_mark_node;
6775 else if (code == POINTER_TYPE)
6777 r = build_pointer_type (type);
6778 if (TREE_CODE (type) == METHOD_TYPE)
6779 r = build_ptrmemfunc_type (r);
6781 else
6782 r = build_reference_type (type);
6783 r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
6785 if (r != error_mark_node)
6786 /* Will this ever be needed for TYPE_..._TO values? */
6787 layout_type (r);
6789 return r;
6791 case OFFSET_TYPE:
6793 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
6794 if (r == error_mark_node || !IS_AGGR_TYPE (r))
6796 /* [temp.deduct]
6798 Type deduction may fail for any of the following
6799 reasons:
6801 -- Attempting to create "pointer to member of T" when T
6802 is not a class type. */
6803 if (complain & tf_error)
6804 error ("creating pointer to member of non-class type `%T'", r);
6805 return error_mark_node;
6807 if (TREE_CODE (type) == REFERENCE_TYPE)
6809 if (complain & tf_error)
6810 error ("creating pointer to member reference type `%T'", type);
6812 return error_mark_node;
6814 my_friendly_assert (TREE_CODE (type) != METHOD_TYPE, 20011231);
6815 if (TREE_CODE (type) == FUNCTION_TYPE)
6816 /* This is really a method type. The cv qualifiers of the
6817 this pointer should _not_ be determined by the cv
6818 qualifiers of the class type. They should be held
6819 somewhere in the FUNCTION_TYPE, but we don't do that at
6820 the moment. Consider
6821 typedef void (Func) () const;
6823 template <typename T1> void Foo (Func T1::*);
6826 return build_cplus_method_type (TYPE_MAIN_VARIANT (r),
6827 TREE_TYPE (type),
6828 TYPE_ARG_TYPES (type));
6829 else
6830 return build_offset_type (r, type);
6832 case FUNCTION_TYPE:
6833 case METHOD_TYPE:
6835 tree fntype;
6836 tree raises;
6838 fntype = tsubst_function_type (t, args, complain, in_decl);
6839 if (fntype == error_mark_node)
6840 return error_mark_node;
6842 /* Substitute the exception specification. */
6843 raises = TYPE_RAISES_EXCEPTIONS (t);
6844 if (raises)
6846 tree list = NULL_TREE;
6848 if (! TREE_VALUE (raises))
6849 list = raises;
6850 else
6851 for (; raises != NULL_TREE; raises = TREE_CHAIN (raises))
6853 tree spec = TREE_VALUE (raises);
6855 spec = tsubst (spec, args, complain, in_decl);
6856 if (spec == error_mark_node)
6857 return spec;
6858 list = add_exception_specifier (list, spec, complain);
6860 fntype = build_exception_variant (fntype, list);
6862 return fntype;
6864 case ARRAY_TYPE:
6866 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
6867 if (domain == error_mark_node)
6868 return error_mark_node;
6870 /* As an optimization, we avoid regenerating the array type if
6871 it will obviously be the same as T. */
6872 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
6873 return t;
6875 /* These checks should match the ones in grokdeclarator.
6877 [temp.deduct]
6879 The deduction may fail for any of the following reasons:
6881 -- Attempting to create an array with an element type that
6882 is void, a function type, or a reference type. */
6883 if (TREE_CODE (type) == VOID_TYPE
6884 || TREE_CODE (type) == FUNCTION_TYPE
6885 || TREE_CODE (type) == REFERENCE_TYPE)
6887 if (complain & tf_error)
6888 error ("creating array of `%T'", type);
6889 return error_mark_node;
6892 r = build_cplus_array_type (type, domain);
6893 return r;
6896 case PLUS_EXPR:
6897 case MINUS_EXPR:
6899 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
6900 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
6902 if (e1 == error_mark_node || e2 == error_mark_node)
6903 return error_mark_node;
6905 return fold (build (TREE_CODE (t), TREE_TYPE (t), e1, e2));
6908 case NEGATE_EXPR:
6909 case NOP_EXPR:
6911 tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
6912 if (e == error_mark_node)
6913 return error_mark_node;
6915 return fold (build (TREE_CODE (t), TREE_TYPE (t), e));
6918 case TYPENAME_TYPE:
6920 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
6921 in_decl, /*entering_scope=*/1);
6922 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
6923 complain, in_decl);
6925 if (ctx == error_mark_node || f == error_mark_node)
6926 return error_mark_node;
6928 if (!IS_AGGR_TYPE (ctx))
6930 if (complain & tf_error)
6931 error ("`%T' is not a class, struct, or union type",
6932 ctx);
6933 return error_mark_node;
6935 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
6937 /* Normally, make_typename_type does not require that the CTX
6938 have complete type in order to allow things like:
6940 template <class T> struct S { typename S<T>::X Y; };
6942 But, such constructs have already been resolved by this
6943 point, so here CTX really should have complete type, unless
6944 it's a partial instantiation. */
6945 ctx = complete_type (ctx);
6946 if (!COMPLETE_TYPE_P (ctx))
6948 if (complain & tf_error)
6949 cxx_incomplete_type_error (NULL_TREE, ctx);
6950 return error_mark_node;
6954 f = make_typename_type (ctx, f,
6955 (complain & tf_error) | tf_keep_type_decl);
6956 if (f == error_mark_node)
6957 return f;
6958 if (TREE_CODE (f) == TYPE_DECL)
6960 complain |= tf_ignore_bad_quals;
6961 f = TREE_TYPE (f);
6964 return cp_build_qualified_type_real
6965 (f, cp_type_quals (f) | cp_type_quals (t), complain);
6968 case UNBOUND_CLASS_TEMPLATE:
6970 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
6971 in_decl, /*entering_scope=*/1);
6972 tree name = TYPE_IDENTIFIER (t);
6974 if (ctx == error_mark_node || name == error_mark_node)
6975 return error_mark_node;
6977 return make_unbound_class_template (ctx, name, complain);
6980 case INDIRECT_REF:
6982 tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
6983 if (e == error_mark_node)
6984 return error_mark_node;
6985 return make_pointer_declarator (type, e);
6988 case ADDR_EXPR:
6990 tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
6991 if (e == error_mark_node)
6992 return error_mark_node;
6993 return make_reference_declarator (type, e);
6996 case ARRAY_REF:
6998 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
6999 tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl);
7000 if (e1 == error_mark_node || e2 == error_mark_node)
7001 return error_mark_node;
7003 return build_nt (ARRAY_REF, e1, e2, tsubst_expr);
7006 case CALL_EXPR:
7008 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7009 tree e2 = (tsubst_call_declarator_parms
7010 (CALL_DECLARATOR_PARMS (t), args, complain, in_decl));
7011 tree e3 = tsubst (CALL_DECLARATOR_EXCEPTION_SPEC (t), args,
7012 complain, in_decl);
7014 if (e1 == error_mark_node || e2 == error_mark_node
7015 || e3 == error_mark_node)
7016 return error_mark_node;
7018 return make_call_declarator (e1, e2, CALL_DECLARATOR_QUALS (t), e3);
7021 case SCOPE_REF:
7023 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7024 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
7025 if (e1 == error_mark_node || e2 == error_mark_node)
7026 return error_mark_node;
7028 return build_nt (TREE_CODE (t), e1, e2);
7031 case TYPEOF_TYPE:
7033 tree e1 = tsubst_expr (TYPE_FIELDS (t), args, complain, in_decl);
7034 if (e1 == error_mark_node)
7035 return error_mark_node;
7037 return cp_build_qualified_type_real (TREE_TYPE (e1),
7038 cp_type_quals (t)
7039 | cp_type_quals (TREE_TYPE (e1)),
7040 complain);
7043 default:
7044 sorry ("use of `%s' in template",
7045 tree_code_name [(int) TREE_CODE (t)]);
7046 return error_mark_node;
7050 /* Like tsubst_expr for a BASELINK. OBJECT_TYPE, if non-NULL, is the
7051 type of the expression on the left-hand side of the "." or "->"
7052 operator. */
7054 static tree
7055 tsubst_baselink (tree baselink, tree object_type,
7056 tree args, tsubst_flags_t complain, tree in_decl)
7058 tree name;
7059 tree qualifying_scope;
7060 tree fns;
7061 tree template_args = 0;
7062 bool template_id_p = false;
7064 /* A baselink indicates a function from a base class. The
7065 BASELINK_ACCESS_BINFO and BASELINK_BINFO are going to have
7066 non-dependent types; otherwise, the lookup could not have
7067 succeeded. However, they may indicate bases of the template
7068 class, rather than the instantiated class.
7070 In addition, lookups that were not ambiguous before may be
7071 ambiguous now. Therefore, we perform the lookup again. */
7072 qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
7073 fns = BASELINK_FUNCTIONS (baselink);
7074 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7076 template_id_p = true;
7077 template_args = TREE_OPERAND (fns, 1);
7078 fns = TREE_OPERAND (fns, 0);
7079 template_args = tsubst_copy_and_build (template_args, args,
7080 complain, in_decl,
7081 /*function_p=*/false);
7083 name = DECL_NAME (get_first_fn (fns));
7084 baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
7085 if (BASELINK_P (baselink) && template_id_p)
7086 BASELINK_FUNCTIONS (baselink)
7087 = build_nt (TEMPLATE_ID_EXPR,
7088 BASELINK_FUNCTIONS (baselink),
7089 template_args);
7090 if (!object_type)
7091 object_type = current_class_type;
7092 return adjust_result_of_qualified_name_lookup (baselink,
7093 qualifying_scope,
7094 object_type);
7097 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID. DONE is
7098 true if the qualified-id will be a postfix-expression in-and-of
7099 itself; false if more of the postfix-expression follows the
7100 QUALIFIED_ID. ADDRESS_P is true if the qualified-id is the operand
7101 of "&". */
7103 static tree
7104 tsubst_qualified_id (tree qualified_id, tree args,
7105 tsubst_flags_t complain, tree in_decl,
7106 bool done, bool address_p)
7108 tree expr;
7109 tree scope;
7110 tree name;
7111 bool is_template;
7112 tree template_args;
7114 my_friendly_assert (TREE_CODE (qualified_id) == SCOPE_REF, 20030706);
7116 /* Figure out what name to look up. */
7117 name = TREE_OPERAND (qualified_id, 1);
7118 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
7120 is_template = true;
7121 template_args = tsubst_copy_and_build (TREE_OPERAND (name, 1),
7122 args, complain, in_decl,
7123 /*function_p=*/false);
7124 name = TREE_OPERAND (name, 0);
7126 else
7128 is_template = false;
7129 template_args = NULL_TREE;
7132 /* Substitute into the qualifying scope. When there are no ARGS, we
7133 are just trying to simplify a non-dependent expression. In that
7134 case the qualifying scope may be dependent, and, in any case,
7135 substituting will not help. */
7136 scope = TREE_OPERAND (qualified_id, 0);
7137 if (args)
7139 scope = tsubst (scope, args, complain, in_decl);
7140 expr = tsubst_copy (name, args, complain, in_decl);
7142 else
7143 expr = name;
7144 if (!BASELINK_P (name) && !DECL_P (expr))
7145 expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0,
7146 (complain & tf_error) != 0);
7147 if (DECL_P (expr))
7148 check_accessibility_of_qualified_id (expr,
7149 /*object_type=*/NULL_TREE,
7150 scope);
7152 /* Remember that there was a reference to this entity. */
7153 if (DECL_P (expr))
7155 mark_used (expr);
7156 if (!args && TREE_CODE (expr) == VAR_DECL)
7157 expr = DECL_INITIAL (expr);
7160 if (is_template)
7161 lookup_template_function (expr, template_args);
7163 if (TYPE_P (scope))
7165 expr = (adjust_result_of_qualified_name_lookup
7166 (expr, scope, current_class_type));
7167 expr = finish_qualified_id_expr (scope, expr, done, address_p);
7170 return expr;
7173 /* Like tsubst, but deals with expressions. This function just replaces
7174 template parms; to finish processing the resultant expression, use
7175 tsubst_expr. */
7177 static tree
7178 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7180 enum tree_code code;
7181 tree r;
7183 if (t == NULL_TREE || t == error_mark_node)
7184 return t;
7186 code = TREE_CODE (t);
7188 switch (code)
7190 case PARM_DECL:
7191 r = retrieve_local_specialization (t);
7192 my_friendly_assert (r != NULL, 20020903);
7193 return r;
7195 case CONST_DECL:
7197 tree enum_type;
7198 tree v;
7200 if (DECL_TEMPLATE_PARM_P (t))
7201 return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
7202 if (!DECL_CONTEXT (t))
7203 /* This is a global enumeration constant. */
7204 return t;
7206 /* Unfortunately, we cannot just call lookup_name here.
7207 Consider:
7209 template <int I> int f() {
7210 enum E { a = I };
7211 struct S { void g() { E e = a; } };
7214 When we instantiate f<7>::S::g(), say, lookup_name is not
7215 clever enough to find f<7>::a. */
7216 enum_type
7217 = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
7218 /*entering_scope=*/0);
7220 for (v = TYPE_VALUES (enum_type);
7221 v != NULL_TREE;
7222 v = TREE_CHAIN (v))
7223 if (TREE_PURPOSE (v) == DECL_NAME (t))
7224 return TREE_VALUE (v);
7226 /* We didn't find the name. That should never happen; if
7227 name-lookup found it during preliminary parsing, we
7228 should find it again here during instantiation. */
7229 abort ();
7231 return t;
7233 case FIELD_DECL:
7234 if (DECL_CONTEXT (t))
7236 tree ctx;
7238 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
7239 /*entering_scope=*/1);
7240 if (ctx != DECL_CONTEXT (t))
7241 return lookup_field (ctx, DECL_NAME (t), 0, false);
7243 return t;
7245 case VAR_DECL:
7246 case FUNCTION_DECL:
7247 if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
7248 || local_variable_p (t))
7249 t = tsubst (t, args, complain, in_decl);
7250 mark_used (t);
7251 return t;
7253 case BASELINK:
7254 return tsubst_baselink (t, current_class_type, args, complain, in_decl);
7256 case TEMPLATE_DECL:
7257 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7258 return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
7259 args, complain, in_decl);
7260 else if (is_member_template (t))
7261 return tsubst (t, args, complain, in_decl);
7262 else if (DECL_CLASS_SCOPE_P (t)
7263 && uses_template_parms (DECL_CONTEXT (t)))
7265 /* Template template argument like the following example need
7266 special treatment:
7268 template <template <class> class TT> struct C {};
7269 template <class T> struct D {
7270 template <class U> struct E {};
7271 C<E> c; // #1
7273 D<int> d; // #2
7275 We are processing the template argument `E' in #1 for
7276 the template instantiation #2. Originally, `E' is a
7277 TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT. Now we
7278 have to substitute this with one having context `D<int>'. */
7280 tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
7281 return lookup_field (context, DECL_NAME(t), 0, false);
7283 else
7284 /* Ordinary template template argument. */
7285 return t;
7287 case LOOKUP_EXPR:
7289 /* We must tsubst into a LOOKUP_EXPR in case the names to
7290 which it refers is a conversion operator; in that case the
7291 name will change. We avoid making unnecessary copies,
7292 however. */
7294 tree id = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
7296 if (id != TREE_OPERAND (t, 0))
7298 r = build_nt (LOOKUP_EXPR, id);
7299 LOOKUP_EXPR_GLOBAL (r) = LOOKUP_EXPR_GLOBAL (t);
7300 t = r;
7303 return t;
7306 case CAST_EXPR:
7307 case REINTERPRET_CAST_EXPR:
7308 case CONST_CAST_EXPR:
7309 case STATIC_CAST_EXPR:
7310 case DYNAMIC_CAST_EXPR:
7311 case NOP_EXPR:
7312 return build1
7313 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7314 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
7316 case INDIRECT_REF:
7317 case NEGATE_EXPR:
7318 case TRUTH_NOT_EXPR:
7319 case BIT_NOT_EXPR:
7320 case ADDR_EXPR:
7321 case CONVERT_EXPR: /* Unary + */
7322 case SIZEOF_EXPR:
7323 case ALIGNOF_EXPR:
7324 case ARROW_EXPR:
7325 case THROW_EXPR:
7326 case TYPEID_EXPR:
7327 case REALPART_EXPR:
7328 case IMAGPART_EXPR:
7329 return build1
7330 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7331 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
7333 case COMPONENT_REF:
7335 tree object;
7336 tree name;
7338 object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
7339 name = TREE_OPERAND (t, 1);
7340 if (TREE_CODE (name) == BIT_NOT_EXPR)
7342 name = tsubst_copy (TREE_OPERAND (name, 0), args,
7343 complain, in_decl);
7344 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7346 else if (TREE_CODE (name) == SCOPE_REF
7347 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
7349 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
7350 complain, in_decl);
7351 name = TREE_OPERAND (name, 1);
7352 name = tsubst_copy (TREE_OPERAND (name, 0), args,
7353 complain, in_decl);
7354 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7355 name = build_nt (SCOPE_REF, base, name);
7357 else if (TREE_CODE (name) == BASELINK)
7358 name = tsubst_baselink (name,
7359 non_reference (TREE_TYPE (object)),
7360 args, complain,
7361 in_decl);
7362 else
7363 name = tsubst_copy (name, args, complain, in_decl);
7364 return build_nt (COMPONENT_REF, object, name);
7367 case PLUS_EXPR:
7368 case MINUS_EXPR:
7369 case MULT_EXPR:
7370 case TRUNC_DIV_EXPR:
7371 case CEIL_DIV_EXPR:
7372 case FLOOR_DIV_EXPR:
7373 case ROUND_DIV_EXPR:
7374 case EXACT_DIV_EXPR:
7375 case BIT_AND_EXPR:
7376 case BIT_ANDTC_EXPR:
7377 case BIT_IOR_EXPR:
7378 case BIT_XOR_EXPR:
7379 case TRUNC_MOD_EXPR:
7380 case FLOOR_MOD_EXPR:
7381 case TRUTH_ANDIF_EXPR:
7382 case TRUTH_ORIF_EXPR:
7383 case TRUTH_AND_EXPR:
7384 case TRUTH_OR_EXPR:
7385 case RSHIFT_EXPR:
7386 case LSHIFT_EXPR:
7387 case RROTATE_EXPR:
7388 case LROTATE_EXPR:
7389 case EQ_EXPR:
7390 case NE_EXPR:
7391 case MAX_EXPR:
7392 case MIN_EXPR:
7393 case LE_EXPR:
7394 case GE_EXPR:
7395 case LT_EXPR:
7396 case GT_EXPR:
7397 case ARRAY_REF:
7398 case COMPOUND_EXPR:
7399 case SCOPE_REF:
7400 case DOTSTAR_EXPR:
7401 case MEMBER_REF:
7402 case PREDECREMENT_EXPR:
7403 case PREINCREMENT_EXPR:
7404 case POSTDECREMENT_EXPR:
7405 case POSTINCREMENT_EXPR:
7406 return build_nt
7407 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7408 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
7410 case CALL_EXPR:
7411 return build_nt (code,
7412 tsubst_copy (TREE_OPERAND (t, 0), args,
7413 complain, in_decl),
7414 tsubst_copy (TREE_OPERAND (t, 1), args, complain,
7415 in_decl),
7416 NULL_TREE);
7418 case STMT_EXPR:
7419 /* This processing should really occur in tsubst_expr. However,
7420 tsubst_expr does not recurse into expressions, since it
7421 assumes that there aren't any statements inside them. So, we
7422 need to expand the STMT_EXPR here. */
7423 if (!processing_template_decl)
7425 tree stmt_expr = begin_stmt_expr ();
7426 tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl);
7427 return finish_stmt_expr (stmt_expr);
7430 return t;
7432 case COND_EXPR:
7433 case MODOP_EXPR:
7434 case PSEUDO_DTOR_EXPR:
7436 r = build_nt
7437 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7438 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7439 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
7440 return r;
7443 case NEW_EXPR:
7445 r = build_nt
7446 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7447 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7448 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
7449 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
7450 return r;
7453 case DELETE_EXPR:
7455 r = build_nt
7456 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7457 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
7458 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
7459 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
7460 return r;
7463 case TEMPLATE_ID_EXPR:
7465 /* Substituted template arguments */
7466 tree targs = tsubst_copy (TREE_OPERAND (t, 1), args, complain,
7467 in_decl);
7469 maybe_fold_nontype_args (targs);
7470 return lookup_template_function
7471 (tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl), targs);
7474 case TREE_LIST:
7476 tree purpose, value, chain;
7478 if (t == void_list_node)
7479 return t;
7481 purpose = TREE_PURPOSE (t);
7482 if (purpose)
7483 purpose = tsubst_copy (purpose, args, complain, in_decl);
7484 value = TREE_VALUE (t);
7485 if (value)
7486 value = tsubst_copy (value, args, complain, in_decl);
7487 chain = TREE_CHAIN (t);
7488 if (chain && chain != void_type_node)
7489 chain = tsubst_copy (chain, args, complain, in_decl);
7490 if (purpose == TREE_PURPOSE (t)
7491 && value == TREE_VALUE (t)
7492 && chain == TREE_CHAIN (t))
7493 return t;
7494 return tree_cons (purpose, value, chain);
7497 case RECORD_TYPE:
7498 case UNION_TYPE:
7499 case ENUMERAL_TYPE:
7500 case INTEGER_TYPE:
7501 case TEMPLATE_TYPE_PARM:
7502 case TEMPLATE_TEMPLATE_PARM:
7503 case BOUND_TEMPLATE_TEMPLATE_PARM:
7504 case TEMPLATE_PARM_INDEX:
7505 case POINTER_TYPE:
7506 case REFERENCE_TYPE:
7507 case OFFSET_TYPE:
7508 case FUNCTION_TYPE:
7509 case METHOD_TYPE:
7510 case ARRAY_TYPE:
7511 case TYPENAME_TYPE:
7512 case UNBOUND_CLASS_TEMPLATE:
7513 case TYPEOF_TYPE:
7514 case TYPE_DECL:
7515 return tsubst (t, args, complain, in_decl);
7517 case IDENTIFIER_NODE:
7518 if (IDENTIFIER_TYPENAME_P (t))
7520 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7521 return mangle_conv_op_name_for_type (new_type);
7523 else
7524 return t;
7526 case CONSTRUCTOR:
7528 r = build_constructor
7529 (tsubst (TREE_TYPE (t), args, complain, in_decl),
7530 tsubst_copy (CONSTRUCTOR_ELTS (t), args, complain, in_decl));
7531 TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
7532 return r;
7535 case VA_ARG_EXPR:
7536 return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
7537 in_decl),
7538 tsubst (TREE_TYPE (t), args, complain, in_decl));
7540 default:
7541 return t;
7545 /* Like tsubst_copy for expressions, etc. but also does semantic
7546 processing. */
7548 static tree
7549 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7551 tree stmt, tmp;
7553 if (t == NULL_TREE || t == error_mark_node)
7554 return t;
7556 if (processing_template_decl)
7557 return tsubst_copy (t, args, complain, in_decl);
7559 if (!STATEMENT_CODE_P (TREE_CODE (t)))
7560 return tsubst_copy_and_build (t, args, complain, in_decl,
7561 /*function_p=*/false);
7563 switch (TREE_CODE (t))
7565 case CTOR_INITIALIZER:
7566 prep_stmt (t);
7567 finish_mem_initializers (tsubst_initializer_list
7568 (TREE_OPERAND (t, 0), args));
7569 break;
7571 case RETURN_STMT:
7572 prep_stmt (t);
7573 finish_return_stmt (tsubst_expr (RETURN_STMT_EXPR (t),
7574 args, complain, in_decl));
7575 break;
7577 case EXPR_STMT:
7578 prep_stmt (t);
7579 finish_expr_stmt (tsubst_expr (EXPR_STMT_EXPR (t),
7580 args, complain, in_decl));
7581 break;
7583 case USING_STMT:
7584 prep_stmt (t);
7585 do_using_directive (tsubst_expr (USING_STMT_NAMESPACE (t),
7586 args, complain, in_decl));
7587 break;
7589 case DECL_STMT:
7591 tree decl;
7592 tree init;
7594 prep_stmt (t);
7595 decl = DECL_STMT_DECL (t);
7596 if (TREE_CODE (decl) == LABEL_DECL)
7597 finish_label_decl (DECL_NAME (decl));
7598 else if (TREE_CODE (decl) == USING_DECL)
7600 tree scope = DECL_INITIAL (decl);
7601 tree name = DECL_NAME (decl);
7603 scope = tsubst_expr (scope, args, complain, in_decl);
7604 do_local_using_decl (lookup_qualified_name (scope,
7605 name,
7606 /*is_type_p=*/0,
7607 /*complain=*/true));
7609 else
7611 init = DECL_INITIAL (decl);
7612 decl = tsubst (decl, args, complain, in_decl);
7613 if (decl != error_mark_node)
7615 if (init)
7616 DECL_INITIAL (decl) = error_mark_node;
7617 /* By marking the declaration as instantiated, we avoid
7618 trying to instantiate it. Since instantiate_decl can't
7619 handle local variables, and since we've already done
7620 all that needs to be done, that's the right thing to
7621 do. */
7622 if (TREE_CODE (decl) == VAR_DECL)
7623 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
7624 if (TREE_CODE (decl) == VAR_DECL
7625 && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
7626 /* Anonymous aggregates are a special case. */
7627 finish_anon_union (decl);
7628 else
7630 maybe_push_decl (decl);
7631 if (DECL_PRETTY_FUNCTION_P (decl))
7633 /* For __PRETTY_FUNCTION__ we have to adjust the
7634 initializer. */
7635 const char *const name
7636 = cxx_printable_name (current_function_decl, 2);
7637 init = cp_fname_init (name);
7638 TREE_TYPE (decl) = TREE_TYPE (init);
7640 else
7641 init = tsubst_expr (init, args, complain, in_decl);
7642 cp_finish_decl (decl, init, NULL_TREE, 0);
7647 /* A DECL_STMT can also be used as an expression, in the condition
7648 clause of an if/for/while construct. If we aren't followed by
7649 another statement, return our decl. */
7650 if (TREE_CHAIN (t) == NULL_TREE)
7651 return decl;
7653 break;
7655 case FOR_STMT:
7657 prep_stmt (t);
7659 stmt = begin_for_stmt ();
7660 tsubst_expr (FOR_INIT_STMT (t), args, complain, in_decl);
7661 finish_for_init_stmt (stmt);
7662 finish_for_cond (tsubst_expr (FOR_COND (t),
7663 args, complain, in_decl),
7664 stmt);
7665 tmp = tsubst_expr (FOR_EXPR (t), args, complain, in_decl);
7666 finish_for_expr (tmp, stmt);
7667 tsubst_expr (FOR_BODY (t), args, complain, in_decl);
7668 finish_for_stmt (stmt);
7670 break;
7672 case WHILE_STMT:
7674 prep_stmt (t);
7675 stmt = begin_while_stmt ();
7676 finish_while_stmt_cond (tsubst_expr (WHILE_COND (t),
7677 args, complain, in_decl),
7678 stmt);
7679 tsubst_expr (WHILE_BODY (t), args, complain, in_decl);
7680 finish_while_stmt (stmt);
7682 break;
7684 case DO_STMT:
7686 prep_stmt (t);
7687 stmt = begin_do_stmt ();
7688 tsubst_expr (DO_BODY (t), args, complain, in_decl);
7689 finish_do_body (stmt);
7690 finish_do_stmt (tsubst_expr (DO_COND (t),
7691 args, complain, in_decl),
7692 stmt);
7694 break;
7696 case IF_STMT:
7698 prep_stmt (t);
7699 stmt = begin_if_stmt ();
7700 finish_if_stmt_cond (tsubst_expr (IF_COND (t),
7701 args, complain, in_decl),
7702 stmt);
7704 if (tmp = THEN_CLAUSE (t), tmp)
7706 tsubst_expr (tmp, args, complain, in_decl);
7707 finish_then_clause (stmt);
7710 if (tmp = ELSE_CLAUSE (t), tmp)
7712 begin_else_clause ();
7713 tsubst_expr (tmp, args, complain, in_decl);
7714 finish_else_clause (stmt);
7717 finish_if_stmt ();
7719 break;
7721 case COMPOUND_STMT:
7723 prep_stmt (t);
7724 if (COMPOUND_STMT_BODY_BLOCK (t))
7725 stmt = begin_function_body ();
7726 else
7727 stmt = begin_compound_stmt (COMPOUND_STMT_NO_SCOPE (t));
7729 tsubst_expr (COMPOUND_BODY (t), args, complain, in_decl);
7731 if (COMPOUND_STMT_BODY_BLOCK (t))
7732 finish_function_body (stmt);
7733 else
7734 finish_compound_stmt (COMPOUND_STMT_NO_SCOPE (t), stmt);
7736 break;
7738 case BREAK_STMT:
7739 prep_stmt (t);
7740 finish_break_stmt ();
7741 break;
7743 case CONTINUE_STMT:
7744 prep_stmt (t);
7745 finish_continue_stmt ();
7746 break;
7748 case SWITCH_STMT:
7750 tree val;
7752 prep_stmt (t);
7753 stmt = begin_switch_stmt ();
7754 val = tsubst_expr (SWITCH_COND (t), args, complain, in_decl);
7755 finish_switch_cond (val, stmt);
7756 tsubst_expr (SWITCH_BODY (t), args, complain, in_decl);
7757 finish_switch_stmt (stmt);
7759 break;
7761 case CASE_LABEL:
7762 prep_stmt (t);
7763 finish_case_label (tsubst_expr (CASE_LOW (t), args, complain, in_decl),
7764 tsubst_expr (CASE_HIGH (t), args, complain,
7765 in_decl));
7766 break;
7768 case LABEL_STMT:
7769 input_line = STMT_LINENO (t);
7770 finish_label_stmt (DECL_NAME (LABEL_STMT_LABEL (t)));
7771 break;
7773 case FILE_STMT:
7774 input_filename = FILE_STMT_FILENAME (t);
7775 add_stmt (build_nt (FILE_STMT, FILE_STMT_FILENAME_NODE (t)));
7776 break;
7778 case GOTO_STMT:
7779 prep_stmt (t);
7780 tmp = GOTO_DESTINATION (t);
7781 if (TREE_CODE (tmp) != LABEL_DECL)
7782 /* Computed goto's must be tsubst'd into. On the other hand,
7783 non-computed gotos must not be; the identifier in question
7784 will have no binding. */
7785 tmp = tsubst_expr (tmp, args, complain, in_decl);
7786 else
7787 tmp = DECL_NAME (tmp);
7788 finish_goto_stmt (tmp);
7789 break;
7791 case ASM_STMT:
7792 prep_stmt (t);
7793 tmp = finish_asm_stmt
7794 (ASM_CV_QUAL (t),
7795 tsubst_expr (ASM_STRING (t), args, complain, in_decl),
7796 tsubst_expr (ASM_OUTPUTS (t), args, complain, in_decl),
7797 tsubst_expr (ASM_INPUTS (t), args, complain, in_decl),
7798 tsubst_expr (ASM_CLOBBERS (t), args, complain, in_decl));
7799 ASM_INPUT_P (tmp) = ASM_INPUT_P (t);
7800 break;
7802 case TRY_BLOCK:
7803 prep_stmt (t);
7804 if (CLEANUP_P (t))
7806 stmt = begin_try_block ();
7807 tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
7808 finish_cleanup_try_block (stmt);
7809 finish_cleanup (tsubst_expr (TRY_HANDLERS (t), args,
7810 complain, in_decl),
7811 stmt);
7813 else
7815 if (FN_TRY_BLOCK_P (t))
7816 stmt = begin_function_try_block ();
7817 else
7818 stmt = begin_try_block ();
7820 tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
7822 if (FN_TRY_BLOCK_P (t))
7823 finish_function_try_block (stmt);
7824 else
7825 finish_try_block (stmt);
7827 tsubst_expr (TRY_HANDLERS (t), args, complain, in_decl);
7828 if (FN_TRY_BLOCK_P (t))
7829 finish_function_handler_sequence (stmt);
7830 else
7831 finish_handler_sequence (stmt);
7833 break;
7835 case HANDLER:
7837 tree decl;
7839 prep_stmt (t);
7840 stmt = begin_handler ();
7841 if (HANDLER_PARMS (t))
7843 decl = DECL_STMT_DECL (HANDLER_PARMS (t));
7844 decl = tsubst (decl, args, complain, in_decl);
7845 /* Prevent instantiate_decl from trying to instantiate
7846 this variable. We've already done all that needs to be
7847 done. */
7848 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
7850 else
7851 decl = NULL_TREE;
7852 finish_handler_parms (decl, stmt);
7853 tsubst_expr (HANDLER_BODY (t), args, complain, in_decl);
7854 finish_handler (stmt);
7856 break;
7858 case TAG_DEFN:
7859 prep_stmt (t);
7860 tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
7861 break;
7863 default:
7864 abort ();
7867 return tsubst_expr (TREE_CHAIN (t), args, complain, in_decl);
7870 /* T is a postfix-expression that is not being used in a function
7871 call. Return the substituted version of T. */
7873 static tree
7874 tsubst_non_call_postfix_expression (tree t, tree args,
7875 tsubst_flags_t complain,
7876 tree in_decl)
7878 if (TREE_CODE (t) == SCOPE_REF)
7879 t = tsubst_qualified_id (t, args, complain, in_decl,
7880 /*done=*/false, /*address_p=*/false);
7881 else
7882 t = tsubst_copy_and_build (t, args, complain, in_decl,
7883 /*function_p=*/false);
7885 return t;
7888 /* Like tsubst but deals with expressions and performs semantic
7889 analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
7891 tree
7892 tsubst_copy_and_build (tree t,
7893 tree args,
7894 tsubst_flags_t complain,
7895 tree in_decl,
7896 bool function_p)
7898 #define RECUR(NODE) \
7899 tsubst_copy_and_build (NODE, args, complain, in_decl, /*function_p=*/false)
7901 tree op1;
7903 if (t == NULL_TREE || t == error_mark_node)
7904 return t;
7906 switch (TREE_CODE (t))
7908 case LOOKUP_EXPR:
7909 case IDENTIFIER_NODE:
7911 tree decl;
7912 tree scope;
7913 cp_id_kind idk;
7914 tree qualifying_class;
7915 bool non_constant_expression_p;
7916 const char *error_msg;
7918 /* Remember whether this identifier was explicitly qualified
7919 with "::". */
7920 if (TREE_CODE (t) == LOOKUP_EXPR && LOOKUP_EXPR_GLOBAL (t))
7921 scope = global_namespace;
7922 else
7923 scope = NULL_TREE;
7924 /* Get at the underlying identifier. */
7925 if (TREE_CODE (t) == LOOKUP_EXPR)
7926 t = TREE_OPERAND (t, 0);
7928 if (IDENTIFIER_TYPENAME_P (t))
7930 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7931 t = mangle_conv_op_name_for_type (new_type);
7934 /* Look up the name. */
7935 if (scope == global_namespace)
7936 decl = IDENTIFIER_GLOBAL_VALUE (t);
7937 else
7938 decl = lookup_name (t, 0);
7940 /* By convention, expressions use ERROR_MARK_NODE to indicate
7941 failure, not NULL_TREE. */
7942 if (decl == NULL_TREE)
7943 decl = error_mark_node;
7945 decl = finish_id_expression (t, decl, scope,
7946 &idk,
7947 &qualifying_class,
7948 /*constant_expression_p=*/false,
7949 /*allow_non_constant_expression_p=*/false,
7950 &non_constant_expression_p,
7951 &error_msg);
7952 if (error_msg)
7953 error (error_msg);
7954 if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
7955 decl = unqualified_name_lookup_error (decl);
7956 return decl;
7959 case TEMPLATE_ID_EXPR:
7961 tree object;
7962 tree template = RECUR (TREE_OPERAND (t, 0));
7963 tree targs = RECUR (TREE_OPERAND (t, 1));
7965 if (TREE_CODE (template) == COMPONENT_REF)
7967 object = TREE_OPERAND (template, 0);
7968 template = TREE_OPERAND (template, 1);
7970 else
7971 object = NULL_TREE;
7972 template = lookup_template_function (template, targs);
7974 if (object)
7975 return build (COMPONENT_REF, TREE_TYPE (template),
7976 object, template);
7977 else
7978 return template;
7981 case INDIRECT_REF:
7982 return build_x_indirect_ref (RECUR (TREE_OPERAND (t, 0)), "unary *");
7984 case CAST_EXPR:
7985 return build_functional_cast
7986 (tsubst (TREE_TYPE (t), args, complain, in_decl),
7987 RECUR (TREE_OPERAND (t, 0)));
7989 case REINTERPRET_CAST_EXPR:
7990 return build_reinterpret_cast
7991 (tsubst (TREE_TYPE (t), args, complain, in_decl),
7992 RECUR (TREE_OPERAND (t, 0)));
7994 case CONST_CAST_EXPR:
7995 return build_const_cast
7996 (tsubst (TREE_TYPE (t), args, complain, in_decl),
7997 RECUR (TREE_OPERAND (t, 0)));
7999 case DYNAMIC_CAST_EXPR:
8000 return build_dynamic_cast
8001 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8002 RECUR (TREE_OPERAND (t, 0)));
8004 case STATIC_CAST_EXPR:
8005 return build_static_cast
8006 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8007 RECUR (TREE_OPERAND (t, 0)));
8009 case POSTDECREMENT_EXPR:
8010 case POSTINCREMENT_EXPR:
8011 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8012 args, complain, in_decl);
8013 return build_x_unary_op (TREE_CODE (t), op1);
8015 case PREDECREMENT_EXPR:
8016 case PREINCREMENT_EXPR:
8017 case NEGATE_EXPR:
8018 case BIT_NOT_EXPR:
8019 case ABS_EXPR:
8020 case TRUTH_NOT_EXPR:
8021 case CONVERT_EXPR: /* Unary + */
8022 case REALPART_EXPR:
8023 case IMAGPART_EXPR:
8024 return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
8026 case ADDR_EXPR:
8027 op1 = TREE_OPERAND (t, 0);
8028 if (TREE_CODE (op1) == SCOPE_REF)
8029 op1 = tsubst_qualified_id (op1, args, complain, in_decl,
8030 /*done=*/true, /*address_p=*/true);
8031 else
8032 op1 = tsubst_non_call_postfix_expression (op1, args, complain,
8033 in_decl);
8034 return build_x_unary_op (ADDR_EXPR, op1);
8036 case PLUS_EXPR:
8037 case MINUS_EXPR:
8038 case MULT_EXPR:
8039 case TRUNC_DIV_EXPR:
8040 case CEIL_DIV_EXPR:
8041 case FLOOR_DIV_EXPR:
8042 case ROUND_DIV_EXPR:
8043 case EXACT_DIV_EXPR:
8044 case BIT_AND_EXPR:
8045 case BIT_ANDTC_EXPR:
8046 case BIT_IOR_EXPR:
8047 case BIT_XOR_EXPR:
8048 case TRUNC_MOD_EXPR:
8049 case FLOOR_MOD_EXPR:
8050 case TRUTH_ANDIF_EXPR:
8051 case TRUTH_ORIF_EXPR:
8052 case TRUTH_AND_EXPR:
8053 case TRUTH_OR_EXPR:
8054 case RSHIFT_EXPR:
8055 case LSHIFT_EXPR:
8056 case RROTATE_EXPR:
8057 case LROTATE_EXPR:
8058 case EQ_EXPR:
8059 case NE_EXPR:
8060 case MAX_EXPR:
8061 case MIN_EXPR:
8062 case LE_EXPR:
8063 case GE_EXPR:
8064 case LT_EXPR:
8065 case GT_EXPR:
8066 case MEMBER_REF:
8067 case DOTSTAR_EXPR:
8068 return build_x_binary_op
8069 (TREE_CODE (t),
8070 RECUR (TREE_OPERAND (t, 0)),
8071 RECUR (TREE_OPERAND (t, 1)));
8073 case SCOPE_REF:
8074 return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
8075 /*address_p=*/false);
8077 case ARRAY_REF:
8078 if (tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl)
8079 == NULL_TREE)
8080 /* new-type-id */
8081 return build_nt (ARRAY_REF, NULL_TREE, RECUR (TREE_OPERAND (t, 1)));
8083 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8084 args, complain, in_decl);
8085 /* Remember that there was a reference to this entity. */
8086 if (DECL_P (op1))
8087 mark_used (op1);
8088 return grok_array_decl (op1, RECUR (TREE_OPERAND (t, 1)));
8090 case SIZEOF_EXPR:
8091 case ALIGNOF_EXPR:
8092 op1 = TREE_OPERAND (t, 0);
8093 if (!args)
8095 /* When there are no ARGS, we are trying to evaluate a
8096 non-dependent expression from the parser. Trying to do
8097 the substitutions may not work. */
8098 if (!TYPE_P (op1))
8099 op1 = TREE_TYPE (op1);
8101 else
8103 ++skip_evaluation;
8104 op1 = RECUR (op1);
8105 --skip_evaluation;
8107 if (TREE_CODE (t) == SIZEOF_EXPR)
8108 return finish_sizeof (op1);
8109 else
8110 return finish_alignof (op1);
8112 case MODOP_EXPR:
8113 return build_x_modify_expr
8114 (RECUR (TREE_OPERAND (t, 0)),
8115 TREE_CODE (TREE_OPERAND (t, 1)),
8116 RECUR (TREE_OPERAND (t, 2)));
8118 case ARROW_EXPR:
8119 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8120 args, complain, in_decl);
8121 /* Remember that there was a reference to this entity. */
8122 if (DECL_P (op1))
8123 mark_used (op1);
8124 return build_x_arrow (op1);
8126 case NEW_EXPR:
8127 return build_new
8128 (RECUR (TREE_OPERAND (t, 0)),
8129 RECUR (TREE_OPERAND (t, 1)),
8130 RECUR (TREE_OPERAND (t, 2)),
8131 NEW_EXPR_USE_GLOBAL (t));
8133 case DELETE_EXPR:
8134 return delete_sanity
8135 (RECUR (TREE_OPERAND (t, 0)),
8136 RECUR (TREE_OPERAND (t, 1)),
8137 DELETE_EXPR_USE_VEC (t),
8138 DELETE_EXPR_USE_GLOBAL (t));
8140 case COMPOUND_EXPR:
8141 return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
8142 RECUR (TREE_OPERAND (t, 1)));
8144 case CALL_EXPR:
8146 tree function;
8147 tree call_args;
8148 bool qualified_p;
8150 function = TREE_OPERAND (t, 0);
8151 if (TREE_CODE (function) == SCOPE_REF)
8153 qualified_p = true;
8154 function = tsubst_qualified_id (function, args, complain, in_decl,
8155 /*done=*/false,
8156 /*address_p=*/false);
8158 else
8160 qualified_p = (TREE_CODE (function) == COMPONENT_REF
8161 && (TREE_CODE (TREE_OPERAND (function, 1))
8162 == SCOPE_REF));
8163 function = tsubst_copy_and_build (function, args, complain,
8164 in_decl,
8165 !qualified_p);
8168 call_args = RECUR (TREE_OPERAND (t, 1));
8170 if (BASELINK_P (function))
8171 qualified_p = 1;
8173 if (!qualified_p
8174 && TREE_CODE (function) != TEMPLATE_ID_EXPR
8175 && (is_overloaded_fn (function)
8176 || DECL_P (function)
8177 || TREE_CODE (function) == IDENTIFIER_NODE))
8179 if (call_args)
8180 function = perform_koenig_lookup (function, call_args);
8181 else if (TREE_CODE (function) == IDENTIFIER_NODE)
8182 function = unqualified_name_lookup_error (function);
8185 /* Remember that there was a reference to this entity. */
8186 if (DECL_P (function))
8187 mark_used (function);
8189 function = convert_from_reference (function);
8191 if (TREE_CODE (function) == OFFSET_REF)
8192 return build_offset_ref_call_from_tree (function, call_args);
8193 if (TREE_CODE (function) == COMPONENT_REF)
8194 return (build_new_method_call
8195 (TREE_OPERAND (function, 0),
8196 TREE_OPERAND (function, 1),
8197 call_args, NULL_TREE,
8198 qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL));
8199 return finish_call_expr (function, call_args,
8200 /*disallow_virtual=*/qualified_p);
8203 case COND_EXPR:
8204 return build_x_conditional_expr
8205 (RECUR (TREE_OPERAND (t, 0)),
8206 RECUR (TREE_OPERAND (t, 1)),
8207 RECUR (TREE_OPERAND (t, 2)));
8209 case PSEUDO_DTOR_EXPR:
8210 return finish_pseudo_destructor_expr
8211 (RECUR (TREE_OPERAND (t, 0)),
8212 RECUR (TREE_OPERAND (t, 1)),
8213 RECUR (TREE_OPERAND (t, 2)));
8215 case TREE_LIST:
8217 tree purpose, value, chain;
8219 if (t == void_list_node)
8220 return t;
8222 purpose = TREE_PURPOSE (t);
8223 if (purpose)
8224 purpose = RECUR (purpose);
8225 value = TREE_VALUE (t);
8226 if (value)
8227 value = RECUR (value);
8228 chain = TREE_CHAIN (t);
8229 if (chain && chain != void_type_node)
8230 chain = RECUR (chain);
8231 if (purpose == TREE_PURPOSE (t)
8232 && value == TREE_VALUE (t)
8233 && chain == TREE_CHAIN (t))
8234 return t;
8235 return tree_cons (purpose, value, chain);
8238 case COMPONENT_REF:
8240 tree object;
8241 tree member;
8243 object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8244 args, complain, in_decl);
8245 /* Remember that there was a reference to this entity. */
8246 if (DECL_P (object))
8247 mark_used (object);
8249 member = TREE_OPERAND (t, 1);
8250 if (BASELINK_P (member))
8251 member = tsubst_baselink (member,
8252 non_reference (TREE_TYPE (object)),
8253 args, complain, in_decl);
8254 else
8255 member = tsubst_copy (member, args, complain, in_decl);
8257 if (!CLASS_TYPE_P (TREE_TYPE (object)))
8259 if (TREE_CODE (member) == BIT_NOT_EXPR)
8260 return finish_pseudo_destructor_expr (object,
8261 NULL_TREE,
8262 TREE_TYPE (object));
8263 else if (TREE_CODE (member) == SCOPE_REF
8264 && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
8265 return finish_pseudo_destructor_expr (object,
8266 object,
8267 TREE_TYPE (object));
8269 else if (TREE_CODE (member) == SCOPE_REF
8270 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
8272 tree tmpl;
8273 tree args;
8275 /* Lookup the template functions now that we know what the
8276 scope is. */
8277 tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
8278 args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
8279 member = lookup_qualified_name (TREE_OPERAND (member, 0),
8280 tmpl,
8281 /*is_type=*/0,
8282 /*complain=*/true);
8283 if (BASELINK_P (member))
8284 BASELINK_FUNCTIONS (member)
8285 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
8286 args);
8287 else
8289 error ("`%D' is not a member of `%T'",
8290 tmpl, TREE_TYPE (object));
8291 return error_mark_node;
8295 return finish_class_member_access_expr (object, member);
8298 case THROW_EXPR:
8299 return build_throw
8300 (RECUR (TREE_OPERAND (t, 0)));
8302 case CONSTRUCTOR:
8304 tree r;
8305 tree elts;
8306 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8307 bool purpose_p;
8309 /* digest_init will do the wrong thing if we let it. */
8310 if (type && TYPE_PTRMEMFUNC_P (type))
8311 return t;
8313 r = NULL_TREE;
8314 /* We do not want to process the purpose of aggregate
8315 initializers as they are identifier nodes which will be
8316 looked up by digest_init. */
8317 purpose_p = !(type && IS_AGGR_TYPE (type));
8318 for (elts = CONSTRUCTOR_ELTS (t);
8319 elts;
8320 elts = TREE_CHAIN (elts))
8322 tree purpose = TREE_PURPOSE (elts);
8323 tree value = TREE_VALUE (elts);
8325 if (purpose && purpose_p)
8326 purpose = RECUR (purpose);
8327 value = RECUR (value);
8328 r = tree_cons (purpose, value, r);
8331 r = build_constructor (NULL_TREE, nreverse (r));
8332 TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
8334 if (type)
8335 return digest_init (type, r, 0);
8336 return r;
8339 case TYPEID_EXPR:
8341 tree operand_0 = RECUR (TREE_OPERAND (t, 0));
8342 if (TYPE_P (operand_0))
8343 return get_typeid (operand_0);
8344 return build_typeid (operand_0);
8347 case PARM_DECL:
8348 return convert_from_reference (tsubst_copy (t, args, complain, in_decl));
8350 case VAR_DECL:
8351 if (args)
8352 t = tsubst_copy (t, args, complain, in_decl);
8353 else
8354 /* If there are no ARGS, then we are evaluating a
8355 non-dependent expression. If the expression is
8356 non-dependent, the variable must be a constant. */
8357 t = DECL_INITIAL (t);
8358 return convert_from_reference (t);
8360 case VA_ARG_EXPR:
8361 return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
8362 tsubst_copy (TREE_TYPE (t), args, complain,
8363 in_decl));
8365 default:
8366 return tsubst_copy (t, args, complain, in_decl);
8369 #undef RECUR
8372 /* Verify that the instantiated ARGS are valid. For type arguments,
8373 make sure that the type's linkage is ok. For non-type arguments,
8374 make sure they are constants if they are integral or enumerations.
8375 Emit an error under control of COMPLAIN, and return TRUE on error. */
8377 static bool
8378 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
8380 int ix, len = DECL_NTPARMS (tmpl);
8381 bool result = false;
8383 for (ix = 0; ix != len; ix++)
8385 tree t = TREE_VEC_ELT (args, ix);
8387 if (TYPE_P (t))
8389 /* [basic.link]: A name with no linkage (notably, the name
8390 of a class or enumeration declared in a local scope)
8391 shall not be used to declare an entity with linkage.
8392 This implies that names with no linkage cannot be used as
8393 template arguments. */
8394 tree nt = no_linkage_check (t);
8396 if (nt)
8398 if (!(complain & tf_error))
8399 /*OK*/;
8400 else if (TYPE_ANONYMOUS_P (nt))
8401 error ("`%T' uses anonymous type", t);
8402 else
8403 error ("`%T' uses local type `%T'", t, nt);
8404 result = true;
8406 /* In order to avoid all sorts of complications, we do not
8407 allow variably-modified types as template arguments. */
8408 else if (variably_modified_type_p (t))
8410 if (complain & tf_error)
8411 error ("`%T' is a variably modified type", t);
8412 result = true;
8415 /* A non-type argument of integral or enumerated type must be a
8416 constant. */
8417 else if (TREE_TYPE (t)
8418 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
8419 && !TREE_CONSTANT (t))
8421 if (complain & tf_error)
8422 error ("integral expression `%E' is not constant", t);
8423 result = true;
8426 if (result && complain & tf_error)
8427 error (" trying to instantiate `%D'", tmpl);
8428 return result;
8431 /* Instantiate the indicated variable or function template TMPL with
8432 the template arguments in TARG_PTR. */
8434 tree
8435 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
8437 tree fndecl;
8438 tree gen_tmpl;
8439 tree spec;
8441 if (tmpl == error_mark_node)
8442 return error_mark_node;
8444 my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 283);
8446 /* If this function is a clone, handle it specially. */
8447 if (DECL_CLONED_FUNCTION_P (tmpl))
8449 tree spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
8450 complain);
8451 tree clone;
8453 /* Look for the clone. */
8454 for (clone = TREE_CHAIN (spec);
8455 clone && DECL_CLONED_FUNCTION_P (clone);
8456 clone = TREE_CHAIN (clone))
8457 if (DECL_NAME (clone) == DECL_NAME (tmpl))
8458 return clone;
8459 /* We should always have found the clone by now. */
8460 abort ();
8461 return NULL_TREE;
8464 /* Check to see if we already have this specialization. */
8465 spec = retrieve_specialization (tmpl, targ_ptr);
8466 if (spec != NULL_TREE)
8467 return spec;
8469 gen_tmpl = most_general_template (tmpl);
8470 if (tmpl != gen_tmpl)
8472 /* The TMPL is a partial instantiation. To get a full set of
8473 arguments we must add the arguments used to perform the
8474 partial instantiation. */
8475 targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
8476 targ_ptr);
8478 /* Check to see if we already have this specialization. */
8479 spec = retrieve_specialization (gen_tmpl, targ_ptr);
8480 if (spec != NULL_TREE)
8481 return spec;
8484 if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
8485 complain))
8486 return error_mark_node;
8488 /* We are building a FUNCTION_DECL, during which the access of its
8489 parameters and return types have to be checked. However this
8490 FUNCTION_DECL which is the desired context for access checking
8491 is not built yet. We solve this chicken-and-egg problem by
8492 deferring all checks until we have the FUNCTION_DECL. */
8493 push_deferring_access_checks (dk_deferred);
8495 /* substitute template parameters */
8496 fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
8497 targ_ptr, complain, gen_tmpl);
8499 /* Now we know the specialization, compute access previously
8500 deferred. */
8501 push_access_scope (fndecl);
8502 perform_deferred_access_checks ();
8503 pop_access_scope (fndecl);
8504 pop_deferring_access_checks ();
8506 /* The DECL_TI_TEMPLATE should always be the immediate parent
8507 template, not the most general template. */
8508 DECL_TI_TEMPLATE (fndecl) = tmpl;
8510 if (flag_external_templates)
8511 add_pending_template (fndecl);
8513 /* If we've just instantiated the main entry point for a function,
8514 instantiate all the alternate entry points as well. We do this
8515 by cloning the instantiation of the main entry point, not by
8516 instantiating the template clones. */
8517 if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
8518 clone_function_decl (fndecl, /*update_method_vec_p=*/0);
8520 return fndecl;
8523 /* The FN is a TEMPLATE_DECL for a function. The ARGS are the
8524 arguments that are being used when calling it. TARGS is a vector
8525 into which the deduced template arguments are placed.
8527 Return zero for success, 2 for an incomplete match that doesn't resolve
8528 all the types, and 1 for complete failure. An error message will be
8529 printed only for an incomplete match.
8531 If FN is a conversion operator, or we are trying to produce a specific
8532 specialization, RETURN_TYPE is the return type desired.
8534 The EXPLICIT_TARGS are explicit template arguments provided via a
8535 template-id.
8537 The parameter STRICT is one of:
8539 DEDUCE_CALL:
8540 We are deducing arguments for a function call, as in
8541 [temp.deduct.call].
8543 DEDUCE_CONV:
8544 We are deducing arguments for a conversion function, as in
8545 [temp.deduct.conv].
8547 DEDUCE_EXACT:
8548 We are deducing arguments when doing an explicit instantiation
8549 as in [temp.explicit], when determining an explicit specialization
8550 as in [temp.expl.spec], or when taking the address of a function
8551 template, as in [temp.deduct.funcaddr].
8553 DEDUCE_ORDER:
8554 We are deducing arguments when calculating the partial
8555 ordering between specializations of function or class
8556 templates, as in [temp.func.order] and [temp.class.order].
8558 LEN is the number of parms to consider before returning success, or -1
8559 for all. This is used in partial ordering to avoid comparing parms for
8560 which no actual argument was passed, since they are not considered in
8561 overload resolution (and are explicitly excluded from consideration in
8562 partial ordering in [temp.func.order]/6). */
8565 fn_type_unification (tree fn,
8566 tree explicit_targs,
8567 tree targs,
8568 tree args,
8569 tree return_type,
8570 unification_kind_t strict,
8571 int len)
8573 tree parms;
8574 tree fntype;
8575 int result;
8577 my_friendly_assert (TREE_CODE (fn) == TEMPLATE_DECL, 0);
8579 fntype = TREE_TYPE (fn);
8580 if (explicit_targs)
8582 /* [temp.deduct]
8584 The specified template arguments must match the template
8585 parameters in kind (i.e., type, nontype, template), and there
8586 must not be more arguments than there are parameters;
8587 otherwise type deduction fails.
8589 Nontype arguments must match the types of the corresponding
8590 nontype template parameters, or must be convertible to the
8591 types of the corresponding nontype parameters as specified in
8592 _temp.arg.nontype_, otherwise type deduction fails.
8594 All references in the function type of the function template
8595 to the corresponding template parameters are replaced by the
8596 specified template argument values. If a substitution in a
8597 template parameter or in the function type of the function
8598 template results in an invalid type, type deduction fails. */
8599 int i;
8600 tree converted_args;
8602 converted_args
8603 = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
8604 explicit_targs, NULL_TREE, tf_none,
8605 /*require_all_arguments=*/0));
8606 if (converted_args == error_mark_node)
8607 return 1;
8609 fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
8610 if (fntype == error_mark_node)
8611 return 1;
8613 /* Place the explicitly specified arguments in TARGS. */
8614 for (i = 0; i < TREE_VEC_LENGTH (targs); i++)
8615 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
8618 parms = TYPE_ARG_TYPES (fntype);
8619 /* Never do unification on the 'this' parameter. */
8620 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
8621 parms = TREE_CHAIN (parms);
8623 if (return_type)
8625 /* We've been given a return type to match, prepend it. */
8626 parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
8627 args = tree_cons (NULL_TREE, return_type, args);
8628 if (len >= 0)
8629 ++len;
8632 /* We allow incomplete unification without an error message here
8633 because the standard doesn't seem to explicitly prohibit it. Our
8634 callers must be ready to deal with unification failures in any
8635 event. */
8636 result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
8637 targs, parms, args, /*subr=*/0,
8638 strict, /*allow_incomplete*/1, len);
8640 if (result == 0)
8641 /* All is well so far. Now, check:
8643 [temp.deduct]
8645 When all template arguments have been deduced, all uses of
8646 template parameters in nondeduced contexts are replaced with
8647 the corresponding deduced argument values. If the
8648 substitution results in an invalid type, as described above,
8649 type deduction fails. */
8650 if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
8651 == error_mark_node)
8652 return 1;
8654 return result;
8657 /* Adjust types before performing type deduction, as described in
8658 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
8659 sections are symmetric. PARM is the type of a function parameter
8660 or the return type of the conversion function. ARG is the type of
8661 the argument passed to the call, or the type of the value
8662 initialized with the result of the conversion function. */
8664 static int
8665 maybe_adjust_types_for_deduction (unification_kind_t strict,
8666 tree* parm,
8667 tree* arg)
8669 int result = 0;
8671 switch (strict)
8673 case DEDUCE_CALL:
8674 break;
8676 case DEDUCE_CONV:
8678 /* Swap PARM and ARG throughout the remainder of this
8679 function; the handling is precisely symmetric since PARM
8680 will initialize ARG rather than vice versa. */
8681 tree* temp = parm;
8682 parm = arg;
8683 arg = temp;
8684 break;
8687 case DEDUCE_EXACT:
8688 /* There is nothing to do in this case. */
8689 return 0;
8691 case DEDUCE_ORDER:
8692 /* DR 214. [temp.func.order] is underspecified, and leads to no
8693 ordering between things like `T *' and `T const &' for `U *'.
8694 The former has T=U and the latter T=U*. The former looks more
8695 specialized and John Spicer considers it well-formed (the EDG
8696 compiler accepts it).
8698 John also confirms that deduction should proceed as in a function
8699 call. Which implies the usual ARG and PARM conversions as DEDUCE_CALL.
8700 However, in ordering, ARG can have REFERENCE_TYPE, but no argument
8701 to an actual call can have such a type.
8703 If both ARG and PARM are REFERENCE_TYPE, we change neither.
8704 If only ARG is a REFERENCE_TYPE, we look through that and then
8705 proceed as with DEDUCE_CALL (which could further convert it). */
8706 if (TREE_CODE (*arg) == REFERENCE_TYPE)
8708 if (TREE_CODE (*parm) == REFERENCE_TYPE)
8709 return 0;
8710 *arg = TREE_TYPE (*arg);
8712 break;
8713 default:
8714 abort ();
8717 if (TREE_CODE (*parm) != REFERENCE_TYPE)
8719 /* [temp.deduct.call]
8721 If P is not a reference type:
8723 --If A is an array type, the pointer type produced by the
8724 array-to-pointer standard conversion (_conv.array_) is
8725 used in place of A for type deduction; otherwise,
8727 --If A is a function type, the pointer type produced by
8728 the function-to-pointer standard conversion
8729 (_conv.func_) is used in place of A for type deduction;
8730 otherwise,
8732 --If A is a cv-qualified type, the top level
8733 cv-qualifiers of A's type are ignored for type
8734 deduction. */
8735 if (TREE_CODE (*arg) == ARRAY_TYPE)
8736 *arg = build_pointer_type (TREE_TYPE (*arg));
8737 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
8738 *arg = build_pointer_type (*arg);
8739 else
8740 *arg = TYPE_MAIN_VARIANT (*arg);
8743 /* [temp.deduct.call]
8745 If P is a cv-qualified type, the top level cv-qualifiers
8746 of P's type are ignored for type deduction. If P is a
8747 reference type, the type referred to by P is used for
8748 type deduction. */
8749 *parm = TYPE_MAIN_VARIANT (*parm);
8750 if (TREE_CODE (*parm) == REFERENCE_TYPE)
8752 *parm = TREE_TYPE (*parm);
8753 result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
8756 /* DR 322. For conversion deduction, remove a reference type on parm
8757 too (which has been swapped into ARG). */
8758 if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
8759 *arg = TREE_TYPE (*arg);
8761 return result;
8764 /* Most parms like fn_type_unification.
8766 If SUBR is 1, we're being called recursively (to unify the
8767 arguments of a function or method parameter of a function
8768 template). */
8770 static int
8771 type_unification_real (tree tparms,
8772 tree targs,
8773 tree xparms,
8774 tree xargs,
8775 int subr,
8776 unification_kind_t strict,
8777 int allow_incomplete,
8778 int xlen)
8780 tree parm, arg;
8781 int i;
8782 int ntparms = TREE_VEC_LENGTH (tparms);
8783 int sub_strict;
8784 int saw_undeduced = 0;
8785 tree parms, args;
8786 int len;
8788 my_friendly_assert (TREE_CODE (tparms) == TREE_VEC, 289);
8789 my_friendly_assert (xparms == NULL_TREE
8790 || TREE_CODE (xparms) == TREE_LIST, 290);
8791 /* ARGS could be NULL. */
8792 if (xargs)
8793 my_friendly_assert (TREE_CODE (xargs) == TREE_LIST, 291);
8794 my_friendly_assert (ntparms > 0, 292);
8796 switch (strict)
8798 case DEDUCE_CALL:
8799 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
8800 | UNIFY_ALLOW_DERIVED);
8801 break;
8803 case DEDUCE_CONV:
8804 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
8805 break;
8807 case DEDUCE_EXACT:
8808 sub_strict = UNIFY_ALLOW_NONE;
8809 break;
8811 case DEDUCE_ORDER:
8812 sub_strict = UNIFY_ALLOW_NONE;
8813 break;
8815 default:
8816 abort ();
8819 if (xlen == 0)
8820 return 0;
8822 again:
8823 parms = xparms;
8824 args = xargs;
8825 len = xlen;
8827 while (parms
8828 && parms != void_list_node
8829 && args
8830 && args != void_list_node)
8832 parm = TREE_VALUE (parms);
8833 parms = TREE_CHAIN (parms);
8834 arg = TREE_VALUE (args);
8835 args = TREE_CHAIN (args);
8837 if (arg == error_mark_node)
8838 return 1;
8839 if (arg == unknown_type_node)
8840 /* We can't deduce anything from this, but we might get all the
8841 template args from other function args. */
8842 continue;
8844 /* Conversions will be performed on a function argument that
8845 corresponds with a function parameter that contains only
8846 non-deducible template parameters and explicitly specified
8847 template parameters. */
8848 if (! uses_template_parms (parm))
8850 tree type;
8852 if (!TYPE_P (arg))
8853 type = TREE_TYPE (arg);
8854 else
8856 type = arg;
8857 arg = NULL_TREE;
8860 if (strict == DEDUCE_EXACT || strict == DEDUCE_ORDER)
8862 if (same_type_p (parm, type))
8863 continue;
8865 else
8866 /* It might work; we shouldn't check now, because we might
8867 get into infinite recursion. Overload resolution will
8868 handle it. */
8869 continue;
8871 return 1;
8874 if (!TYPE_P (arg))
8876 my_friendly_assert (TREE_TYPE (arg) != NULL_TREE, 293);
8877 if (type_unknown_p (arg))
8879 /* [temp.deduct.type] A template-argument can be deduced from
8880 a pointer to function or pointer to member function
8881 argument if the set of overloaded functions does not
8882 contain function templates and at most one of a set of
8883 overloaded functions provides a unique match. */
8885 if (resolve_overloaded_unification
8886 (tparms, targs, parm, arg, strict, sub_strict)
8887 != 0)
8888 return 1;
8889 continue;
8891 arg = TREE_TYPE (arg);
8892 if (arg == error_mark_node)
8893 return 1;
8897 int arg_strict = sub_strict;
8899 if (!subr)
8900 arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
8902 if (unify (tparms, targs, parm, arg, arg_strict))
8903 return 1;
8906 /* Are we done with the interesting parms? */
8907 if (--len == 0)
8908 goto done;
8910 /* Fail if we've reached the end of the parm list, and more args
8911 are present, and the parm list isn't variadic. */
8912 if (args && args != void_list_node && parms == void_list_node)
8913 return 1;
8914 /* Fail if parms are left and they don't have default values. */
8915 if (parms
8916 && parms != void_list_node
8917 && TREE_PURPOSE (parms) == NULL_TREE)
8918 return 1;
8920 done:
8921 if (!subr)
8922 for (i = 0; i < ntparms; i++)
8923 if (TREE_VEC_ELT (targs, i) == NULL_TREE)
8925 tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
8927 /* If this is an undeduced nontype parameter that depends on
8928 a type parameter, try another pass; its type may have been
8929 deduced from a later argument than the one from which
8930 this parameter can be deduced. */
8931 if (TREE_CODE (tparm) == PARM_DECL
8932 && uses_template_parms (TREE_TYPE (tparm))
8933 && !saw_undeduced++)
8934 goto again;
8936 if (!allow_incomplete)
8937 error ("incomplete type unification");
8938 return 2;
8940 return 0;
8943 /* Subroutine of type_unification_real. Args are like the variables at the
8944 call site. ARG is an overloaded function (or template-id); we try
8945 deducing template args from each of the overloads, and if only one
8946 succeeds, we go with that. Modifies TARGS and returns 0 on success. */
8948 static int
8949 resolve_overloaded_unification (tree tparms,
8950 tree targs,
8951 tree parm,
8952 tree arg,
8953 unification_kind_t strict,
8954 int sub_strict)
8956 tree tempargs = copy_node (targs);
8957 int good = 0;
8959 if (TREE_CODE (arg) == ADDR_EXPR)
8960 arg = TREE_OPERAND (arg, 0);
8962 if (TREE_CODE (arg) == COMPONENT_REF)
8963 /* Handle `&x' where `x' is some static or non-static member
8964 function name. */
8965 arg = TREE_OPERAND (arg, 1);
8967 if (TREE_CODE (arg) == OFFSET_REF)
8968 arg = TREE_OPERAND (arg, 1);
8970 /* Strip baselink information. */
8971 if (BASELINK_P (arg))
8972 arg = BASELINK_FUNCTIONS (arg);
8974 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
8976 /* If we got some explicit template args, we need to plug them into
8977 the affected templates before we try to unify, in case the
8978 explicit args will completely resolve the templates in question. */
8980 tree expl_subargs = TREE_OPERAND (arg, 1);
8981 arg = TREE_OPERAND (arg, 0);
8983 for (; arg; arg = OVL_NEXT (arg))
8985 tree fn = OVL_CURRENT (arg);
8986 tree subargs, elem;
8988 if (TREE_CODE (fn) != TEMPLATE_DECL)
8989 continue;
8991 subargs = get_bindings_overload (fn, DECL_TEMPLATE_RESULT (fn),
8992 expl_subargs);
8993 if (subargs)
8995 elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
8996 if (TREE_CODE (elem) == METHOD_TYPE)
8997 elem = build_ptrmemfunc_type (build_pointer_type (elem));
8998 good += try_one_overload (tparms, targs, tempargs, parm, elem,
8999 strict, sub_strict);
9003 else if (TREE_CODE (arg) == OVERLOAD
9004 || TREE_CODE (arg) == FUNCTION_DECL)
9006 for (; arg; arg = OVL_NEXT (arg))
9008 tree type = TREE_TYPE (OVL_CURRENT (arg));
9009 if (TREE_CODE (type) == METHOD_TYPE)
9010 type = build_ptrmemfunc_type (build_pointer_type (type));
9011 good += try_one_overload (tparms, targs, tempargs, parm,
9012 type,
9013 strict, sub_strict);
9016 else
9017 abort ();
9019 /* [temp.deduct.type] A template-argument can be deduced from a pointer
9020 to function or pointer to member function argument if the set of
9021 overloaded functions does not contain function templates and at most
9022 one of a set of overloaded functions provides a unique match.
9024 So if we found multiple possibilities, we return success but don't
9025 deduce anything. */
9027 if (good == 1)
9029 int i = TREE_VEC_LENGTH (targs);
9030 for (; i--; )
9031 if (TREE_VEC_ELT (tempargs, i))
9032 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
9034 if (good)
9035 return 0;
9037 return 1;
9040 /* Subroutine of resolve_overloaded_unification; does deduction for a single
9041 overload. Fills TARGS with any deduced arguments, or error_mark_node if
9042 different overloads deduce different arguments for a given parm.
9043 Returns 1 on success. */
9045 static int
9046 try_one_overload (tree tparms,
9047 tree orig_targs,
9048 tree targs,
9049 tree parm,
9050 tree arg,
9051 unification_kind_t strict,
9052 int sub_strict)
9054 int nargs;
9055 tree tempargs;
9056 int i;
9058 /* [temp.deduct.type] A template-argument can be deduced from a pointer
9059 to function or pointer to member function argument if the set of
9060 overloaded functions does not contain function templates and at most
9061 one of a set of overloaded functions provides a unique match.
9063 So if this is a template, just return success. */
9065 if (uses_template_parms (arg))
9066 return 1;
9068 sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9070 /* We don't copy orig_targs for this because if we have already deduced
9071 some template args from previous args, unify would complain when we
9072 try to deduce a template parameter for the same argument, even though
9073 there isn't really a conflict. */
9074 nargs = TREE_VEC_LENGTH (targs);
9075 tempargs = make_tree_vec (nargs);
9077 if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
9078 return 0;
9080 /* First make sure we didn't deduce anything that conflicts with
9081 explicitly specified args. */
9082 for (i = nargs; i--; )
9084 tree elt = TREE_VEC_ELT (tempargs, i);
9085 tree oldelt = TREE_VEC_ELT (orig_targs, i);
9087 if (elt == NULL_TREE)
9088 continue;
9089 else if (uses_template_parms (elt))
9091 /* Since we're unifying against ourselves, we will fill in template
9092 args used in the function parm list with our own template parms.
9093 Discard them. */
9094 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
9095 continue;
9097 else if (oldelt && ! template_args_equal (oldelt, elt))
9098 return 0;
9101 for (i = nargs; i--; )
9103 tree elt = TREE_VEC_ELT (tempargs, i);
9105 if (elt)
9106 TREE_VEC_ELT (targs, i) = elt;
9109 return 1;
9112 /* Verify that nondeduce template argument agrees with the type
9113 obtained from argument deduction. Return nonzero if the
9114 verification fails.
9116 For example:
9118 struct A { typedef int X; };
9119 template <class T, class U> struct C {};
9120 template <class T> struct C<T, typename T::X> {};
9122 Then with the instantiation `C<A, int>', we can deduce that
9123 `T' is `A' but unify () does not check whether `typename T::X'
9124 is `int'. This function ensure that they agree.
9126 TARGS, PARMS are the same as the arguments of unify.
9127 ARGS contains template arguments from all levels. */
9129 static int
9130 verify_class_unification (tree targs, tree parms, tree args)
9132 parms = tsubst (parms, add_outermost_template_args (args, targs),
9133 tf_none, NULL_TREE);
9134 if (parms == error_mark_node)
9135 return 1;
9137 return !comp_template_args (parms, INNERMOST_TEMPLATE_ARGS (args));
9140 /* PARM is a template class (perhaps with unbound template
9141 parameters). ARG is a fully instantiated type. If ARG can be
9142 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
9143 TARGS are as for unify. */
9145 static tree
9146 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
9148 tree copy_of_targs;
9150 if (!CLASSTYPE_TEMPLATE_INFO (arg)
9151 || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
9152 != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
9153 return NULL_TREE;
9155 /* We need to make a new template argument vector for the call to
9156 unify. If we used TARGS, we'd clutter it up with the result of
9157 the attempted unification, even if this class didn't work out.
9158 We also don't want to commit ourselves to all the unifications
9159 we've already done, since unification is supposed to be done on
9160 an argument-by-argument basis. In other words, consider the
9161 following pathological case:
9163 template <int I, int J, int K>
9164 struct S {};
9166 template <int I, int J>
9167 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
9169 template <int I, int J, int K>
9170 void f(S<I, J, K>, S<I, I, I>);
9172 void g() {
9173 S<0, 0, 0> s0;
9174 S<0, 1, 2> s2;
9176 f(s0, s2);
9179 Now, by the time we consider the unification involving `s2', we
9180 already know that we must have `f<0, 0, 0>'. But, even though
9181 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
9182 because there are two ways to unify base classes of S<0, 1, 2>
9183 with S<I, I, I>. If we kept the already deduced knowledge, we
9184 would reject the possibility I=1. */
9185 copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
9187 /* If unification failed, we're done. */
9188 if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
9189 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
9190 return NULL_TREE;
9192 return arg;
9195 /* Subroutine of get_template_base. RVAL, if non-NULL, is a base we
9196 have already discovered to be satisfactory. ARG_BINFO is the binfo
9197 for the base class of ARG that we are currently examining. */
9199 static tree
9200 get_template_base_recursive (tree tparms,
9201 tree targs,
9202 tree parm,
9203 tree arg_binfo,
9204 tree rval,
9205 int flags)
9207 tree binfos;
9208 int i, n_baselinks;
9209 tree arg = BINFO_TYPE (arg_binfo);
9211 if (!(flags & GTB_IGNORE_TYPE))
9213 tree r = try_class_unification (tparms, targs,
9214 parm, arg);
9216 /* If there is more than one satisfactory baseclass, then:
9218 [temp.deduct.call]
9220 If they yield more than one possible deduced A, the type
9221 deduction fails.
9223 applies. */
9224 if (r && rval && !same_type_p (r, rval))
9225 return error_mark_node;
9226 else if (r)
9227 rval = r;
9230 binfos = BINFO_BASETYPES (arg_binfo);
9231 n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
9233 /* Process base types. */
9234 for (i = 0; i < n_baselinks; i++)
9236 tree base_binfo = TREE_VEC_ELT (binfos, i);
9237 int this_virtual;
9239 /* Skip this base, if we've already seen it. */
9240 if (BINFO_MARKED (base_binfo))
9241 continue;
9243 this_virtual =
9244 (flags & GTB_VIA_VIRTUAL) || TREE_VIA_VIRTUAL (base_binfo);
9246 /* When searching for a non-virtual, we cannot mark virtually
9247 found binfos. */
9248 if (! this_virtual)
9249 BINFO_MARKED (base_binfo) = 1;
9251 rval = get_template_base_recursive (tparms, targs,
9252 parm,
9253 base_binfo,
9254 rval,
9255 GTB_VIA_VIRTUAL * this_virtual);
9257 /* If we discovered more than one matching base class, we can
9258 stop now. */
9259 if (rval == error_mark_node)
9260 return error_mark_node;
9263 return rval;
9266 /* Given a template type PARM and a class type ARG, find the unique
9267 base type in ARG that is an instance of PARM. We do not examine
9268 ARG itself; only its base-classes. If there is no appropriate base
9269 class, return NULL_TREE. If there is more than one, return
9270 error_mark_node. PARM may be the type of a partial specialization,
9271 as well as a plain template type. Used by unify. */
9273 static tree
9274 get_template_base (tree tparms, tree targs, tree parm, tree arg)
9276 tree rval;
9277 tree arg_binfo;
9279 my_friendly_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)), 92);
9281 arg_binfo = TYPE_BINFO (complete_type (arg));
9282 rval = get_template_base_recursive (tparms, targs,
9283 parm, arg_binfo,
9284 NULL_TREE,
9285 GTB_IGNORE_TYPE);
9287 /* Since get_template_base_recursive marks the bases classes, we
9288 must unmark them here. */
9289 dfs_walk (arg_binfo, dfs_unmark, markedp, 0);
9291 return rval;
9294 /* Returns the level of DECL, which declares a template parameter. */
9296 static int
9297 template_decl_level (tree decl)
9299 switch (TREE_CODE (decl))
9301 case TYPE_DECL:
9302 case TEMPLATE_DECL:
9303 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
9305 case PARM_DECL:
9306 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
9308 default:
9309 abort ();
9310 return 0;
9314 /* Decide whether ARG can be unified with PARM, considering only the
9315 cv-qualifiers of each type, given STRICT as documented for unify.
9316 Returns nonzero iff the unification is OK on that basis.*/
9318 static int
9319 check_cv_quals_for_unify (int strict, tree arg, tree parm)
9321 int arg_quals = cp_type_quals (arg);
9322 int parm_quals = cp_type_quals (parm);
9324 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM)
9326 /* If the cvr quals of parm will not unify with ARG, they'll be
9327 ignored in instantiation, so we have to do the same here. */
9328 if (TREE_CODE (arg) == REFERENCE_TYPE)
9329 parm_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
9330 if (!POINTER_TYPE_P (arg) &&
9331 TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
9332 parm_quals &= ~TYPE_QUAL_RESTRICT;
9335 if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
9336 && (arg_quals & parm_quals) != parm_quals)
9337 return 0;
9339 if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
9340 && (parm_quals & arg_quals) != arg_quals)
9341 return 0;
9343 return 1;
9346 /* Takes parameters as for type_unification. Returns 0 if the
9347 type deduction succeeds, 1 otherwise. The parameter STRICT is a
9348 bitwise or of the following flags:
9350 UNIFY_ALLOW_NONE:
9351 Require an exact match between PARM and ARG.
9352 UNIFY_ALLOW_MORE_CV_QUAL:
9353 Allow the deduced ARG to be more cv-qualified (by qualification
9354 conversion) than ARG.
9355 UNIFY_ALLOW_LESS_CV_QUAL:
9356 Allow the deduced ARG to be less cv-qualified than ARG.
9357 UNIFY_ALLOW_DERIVED:
9358 Allow the deduced ARG to be a template base class of ARG,
9359 or a pointer to a template base class of the type pointed to by
9360 ARG.
9361 UNIFY_ALLOW_INTEGER:
9362 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
9363 case for more information.
9364 UNIFY_ALLOW_OUTER_LEVEL:
9365 This is the outermost level of a deduction. Used to determine validity
9366 of qualification conversions. A valid qualification conversion must
9367 have const qualified pointers leading up to the inner type which
9368 requires additional CV quals, except at the outer level, where const
9369 is not required [conv.qual]. It would be normal to set this flag in
9370 addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
9371 UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
9372 This is the outermost level of a deduction, and PARM can be more CV
9373 qualified at this point.
9374 UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
9375 This is the outermost level of a deduction, and PARM can be less CV
9376 qualified at this point.
9377 UNIFY_ALLOW_MAX_CORRECTION:
9378 This is an INTEGER_TYPE's maximum value. Used if the range may
9379 have been derived from a size specification, such as an array size.
9380 If the size was given by a nontype template parameter N, the maximum
9381 value will have the form N-1. The flag says that we can (and indeed
9382 must) unify N with (ARG + 1), an exception to the normal rules on
9383 folding PARM. */
9385 static int
9386 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
9388 int idx;
9389 tree targ;
9390 tree tparm;
9391 int strict_in = strict;
9393 /* I don't think this will do the right thing with respect to types.
9394 But the only case I've seen it in so far has been array bounds, where
9395 signedness is the only information lost, and I think that will be
9396 okay. */
9397 while (TREE_CODE (parm) == NOP_EXPR)
9398 parm = TREE_OPERAND (parm, 0);
9400 if (arg == error_mark_node)
9401 return 1;
9402 if (arg == unknown_type_node)
9403 /* We can't deduce anything from this, but we might get all the
9404 template args from other function args. */
9405 return 0;
9407 /* If PARM uses template parameters, then we can't bail out here,
9408 even if ARG == PARM, since we won't record unifications for the
9409 template parameters. We might need them if we're trying to
9410 figure out which of two things is more specialized. */
9411 if (arg == parm && !uses_template_parms (parm))
9412 return 0;
9414 /* Immediately reject some pairs that won't unify because of
9415 cv-qualification mismatches. */
9416 if (TREE_CODE (arg) == TREE_CODE (parm)
9417 && TYPE_P (arg)
9418 /* It is the elements of the array which hold the cv quals of an array
9419 type, and the elements might be template type parms. We'll check
9420 when we recurse. */
9421 && TREE_CODE (arg) != ARRAY_TYPE
9422 /* We check the cv-qualifiers when unifying with template type
9423 parameters below. We want to allow ARG `const T' to unify with
9424 PARM `T' for example, when computing which of two templates
9425 is more specialized, for example. */
9426 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
9427 && !check_cv_quals_for_unify (strict_in, arg, parm))
9428 return 1;
9430 if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
9431 && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
9432 strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
9433 strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
9434 strict &= ~UNIFY_ALLOW_DERIVED;
9435 strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9436 strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
9437 strict &= ~UNIFY_ALLOW_MAX_CORRECTION;
9439 switch (TREE_CODE (parm))
9441 case TYPENAME_TYPE:
9442 case SCOPE_REF:
9443 case UNBOUND_CLASS_TEMPLATE:
9444 /* In a type which contains a nested-name-specifier, template
9445 argument values cannot be deduced for template parameters used
9446 within the nested-name-specifier. */
9447 return 0;
9449 case TEMPLATE_TYPE_PARM:
9450 case TEMPLATE_TEMPLATE_PARM:
9451 case BOUND_TEMPLATE_TEMPLATE_PARM:
9452 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
9454 if (TEMPLATE_TYPE_LEVEL (parm)
9455 != template_decl_level (tparm))
9456 /* The PARM is not one we're trying to unify. Just check
9457 to see if it matches ARG. */
9458 return (TREE_CODE (arg) == TREE_CODE (parm)
9459 && same_type_p (parm, arg)) ? 0 : 1;
9460 idx = TEMPLATE_TYPE_IDX (parm);
9461 targ = TREE_VEC_ELT (targs, idx);
9462 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
9464 /* Check for mixed types and values. */
9465 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
9466 && TREE_CODE (tparm) != TYPE_DECL)
9467 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
9468 && TREE_CODE (tparm) != TEMPLATE_DECL))
9469 return 1;
9471 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
9473 /* ARG must be constructed from a template class or a template
9474 template parameter. */
9475 if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
9476 && (TREE_CODE (arg) != RECORD_TYPE || !CLASSTYPE_TEMPLATE_INFO (arg)))
9477 return 1;
9480 tree parmtmpl = TYPE_TI_TEMPLATE (parm);
9481 tree parmvec = TYPE_TI_ARGS (parm);
9482 tree argvec = TYPE_TI_ARGS (arg);
9483 tree argtmplvec
9484 = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
9485 int i;
9487 /* The parameter and argument roles have to be switched here
9488 in order to handle default arguments properly. For example,
9489 template<template <class> class TT> void f(TT<int>)
9490 should be able to accept vector<int> which comes from
9491 template <class T, class Allocator = allocator>
9492 class vector. */
9494 if (coerce_template_parms (argtmplvec, parmvec, parmtmpl, 0, 1)
9495 == error_mark_node)
9496 return 1;
9498 /* Deduce arguments T, i from TT<T> or TT<i>.
9499 We check each element of PARMVEC and ARGVEC individually
9500 rather than the whole TREE_VEC since they can have
9501 different number of elements. */
9503 for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
9505 tree t = TREE_VEC_ELT (parmvec, i);
9507 if (unify (tparms, targs, t,
9508 TREE_VEC_ELT (argvec, i),
9509 UNIFY_ALLOW_NONE))
9510 return 1;
9513 arg = TYPE_TI_TEMPLATE (arg);
9515 /* Fall through to deduce template name. */
9518 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
9519 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
9521 /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>. */
9523 /* Simple cases: Value already set, does match or doesn't. */
9524 if (targ != NULL_TREE && template_args_equal (targ, arg))
9525 return 0;
9526 else if (targ)
9527 return 1;
9529 else
9531 /* If ARG is an offset type, we're trying to unify '*T' with
9532 'U C::*', which is ill-formed. See the comment in the
9533 POINTER_TYPE case about this ugliness. */
9534 if (TREE_CODE (arg) == OFFSET_TYPE)
9535 return 1;
9537 /* If PARM is `const T' and ARG is only `int', we don't have
9538 a match unless we are allowing additional qualification.
9539 If ARG is `const int' and PARM is just `T' that's OK;
9540 that binds `const int' to `T'. */
9541 if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
9542 arg, parm))
9543 return 1;
9545 /* Consider the case where ARG is `const volatile int' and
9546 PARM is `const T'. Then, T should be `volatile int'. */
9547 arg = cp_build_qualified_type_real
9548 (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
9549 if (arg == error_mark_node)
9550 return 1;
9552 /* Simple cases: Value already set, does match or doesn't. */
9553 if (targ != NULL_TREE && same_type_p (targ, arg))
9554 return 0;
9555 else if (targ)
9556 return 1;
9558 /* Make sure that ARG is not a variable-sized array. (Note
9559 that were talking about variable-sized arrays (like
9560 `int[n]'), rather than arrays of unknown size (like
9561 `int[]').) We'll get very confused by such a type since
9562 the bound of the array will not be computable in an
9563 instantiation. Besides, such types are not allowed in
9564 ISO C++, so we can do as we please here. */
9565 if (variably_modified_type_p (arg))
9566 return 1;
9569 TREE_VEC_ELT (targs, idx) = arg;
9570 return 0;
9572 case TEMPLATE_PARM_INDEX:
9573 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
9575 if (TEMPLATE_PARM_LEVEL (parm)
9576 != template_decl_level (tparm))
9577 /* The PARM is not one we're trying to unify. Just check
9578 to see if it matches ARG. */
9579 return !(TREE_CODE (arg) == TREE_CODE (parm)
9580 && cp_tree_equal (parm, arg));
9582 idx = TEMPLATE_PARM_IDX (parm);
9583 targ = TREE_VEC_ELT (targs, idx);
9585 if (targ)
9586 return !cp_tree_equal (targ, arg);
9588 /* [temp.deduct.type] If, in the declaration of a function template
9589 with a non-type template-parameter, the non-type
9590 template-parameter is used in an expression in the function
9591 parameter-list and, if the corresponding template-argument is
9592 deduced, the template-argument type shall match the type of the
9593 template-parameter exactly, except that a template-argument
9594 deduced from an array bound may be of any integral type.
9595 The non-type parameter might use already deduced type parameters. */
9596 tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
9597 if (!TREE_TYPE (arg))
9598 /* Template-parameter dependent expression. Just accept it for now.
9599 It will later be processed in convert_template_argument. */
9601 else if (same_type_p (TREE_TYPE (arg), tparm))
9602 /* OK */;
9603 else if ((strict & UNIFY_ALLOW_INTEGER)
9604 && (TREE_CODE (tparm) == INTEGER_TYPE
9605 || TREE_CODE (tparm) == BOOLEAN_TYPE))
9606 /* OK */;
9607 else if (uses_template_parms (tparm))
9608 /* We haven't deduced the type of this parameter yet. Try again
9609 later. */
9610 return 0;
9611 else
9612 return 1;
9614 TREE_VEC_ELT (targs, idx) = arg;
9615 return 0;
9617 case POINTER_TYPE:
9619 if (TREE_CODE (arg) != POINTER_TYPE)
9620 return 1;
9622 /* [temp.deduct.call]
9624 A can be another pointer or pointer to member type that can
9625 be converted to the deduced A via a qualification
9626 conversion (_conv.qual_).
9628 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
9629 This will allow for additional cv-qualification of the
9630 pointed-to types if appropriate. */
9632 if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
9633 /* The derived-to-base conversion only persists through one
9634 level of pointers. */
9635 strict |= (strict_in & UNIFY_ALLOW_DERIVED);
9637 if (TREE_CODE (TREE_TYPE (parm)) == OFFSET_TYPE
9638 && TREE_CODE (TREE_TYPE (arg)) == OFFSET_TYPE)
9640 /* Avoid getting confused about cv-quals; don't recurse here.
9641 Pointers to members should really be just OFFSET_TYPE, not
9642 this two-level nonsense... */
9644 parm = TREE_TYPE (parm);
9645 arg = TREE_TYPE (arg);
9646 goto offset;
9649 return unify (tparms, targs, TREE_TYPE (parm),
9650 TREE_TYPE (arg), strict);
9653 case REFERENCE_TYPE:
9654 if (TREE_CODE (arg) != REFERENCE_TYPE)
9655 return 1;
9656 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
9657 strict & UNIFY_ALLOW_MORE_CV_QUAL);
9659 case ARRAY_TYPE:
9660 if (TREE_CODE (arg) != ARRAY_TYPE)
9661 return 1;
9662 if ((TYPE_DOMAIN (parm) == NULL_TREE)
9663 != (TYPE_DOMAIN (arg) == NULL_TREE))
9664 return 1;
9665 if (TYPE_DOMAIN (parm) != NULL_TREE
9666 && unify (tparms, targs, TYPE_DOMAIN (parm),
9667 TYPE_DOMAIN (arg), UNIFY_ALLOW_NONE) != 0)
9668 return 1;
9669 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
9670 strict & UNIFY_ALLOW_MORE_CV_QUAL);
9672 case REAL_TYPE:
9673 case COMPLEX_TYPE:
9674 case VECTOR_TYPE:
9675 case INTEGER_TYPE:
9676 case BOOLEAN_TYPE:
9677 case VOID_TYPE:
9678 if (TREE_CODE (arg) != TREE_CODE (parm))
9679 return 1;
9681 if (TREE_CODE (parm) == INTEGER_TYPE
9682 && TREE_CODE (TYPE_MAX_VALUE (parm)) != INTEGER_CST)
9684 if (TYPE_MIN_VALUE (parm) && TYPE_MIN_VALUE (arg)
9685 && unify (tparms, targs, TYPE_MIN_VALUE (parm),
9686 TYPE_MIN_VALUE (arg), UNIFY_ALLOW_INTEGER))
9687 return 1;
9688 if (TYPE_MAX_VALUE (parm) && TYPE_MAX_VALUE (arg)
9689 && unify (tparms, targs, TYPE_MAX_VALUE (parm),
9690 TYPE_MAX_VALUE (arg),
9691 UNIFY_ALLOW_INTEGER | UNIFY_ALLOW_MAX_CORRECTION))
9692 return 1;
9694 /* We have already checked cv-qualification at the top of the
9695 function. */
9696 else if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
9697 return 1;
9699 /* As far as unification is concerned, this wins. Later checks
9700 will invalidate it if necessary. */
9701 return 0;
9703 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
9704 /* Type INTEGER_CST can come from ordinary constant template args. */
9705 case INTEGER_CST:
9706 while (TREE_CODE (arg) == NOP_EXPR)
9707 arg = TREE_OPERAND (arg, 0);
9709 if (TREE_CODE (arg) != INTEGER_CST)
9710 return 1;
9711 return !tree_int_cst_equal (parm, arg);
9713 case TREE_VEC:
9715 int i;
9716 if (TREE_CODE (arg) != TREE_VEC)
9717 return 1;
9718 if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
9719 return 1;
9720 for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
9721 if (unify (tparms, targs,
9722 TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
9723 UNIFY_ALLOW_NONE))
9724 return 1;
9725 return 0;
9728 case RECORD_TYPE:
9729 case UNION_TYPE:
9730 if (TREE_CODE (arg) != TREE_CODE (parm))
9731 return 1;
9733 if (TYPE_PTRMEMFUNC_P (parm))
9735 if (!TYPE_PTRMEMFUNC_P (arg))
9736 return 1;
9738 return unify (tparms, targs,
9739 TYPE_PTRMEMFUNC_FN_TYPE (parm),
9740 TYPE_PTRMEMFUNC_FN_TYPE (arg),
9741 strict);
9744 if (CLASSTYPE_TEMPLATE_INFO (parm))
9746 tree t = NULL_TREE;
9748 if (strict_in & UNIFY_ALLOW_DERIVED)
9750 /* First, we try to unify the PARM and ARG directly. */
9751 t = try_class_unification (tparms, targs,
9752 parm, arg);
9754 if (!t)
9756 /* Fallback to the special case allowed in
9757 [temp.deduct.call]:
9759 If P is a class, and P has the form
9760 template-id, then A can be a derived class of
9761 the deduced A. Likewise, if P is a pointer to
9762 a class of the form template-id, A can be a
9763 pointer to a derived class pointed to by the
9764 deduced A. */
9765 t = get_template_base (tparms, targs,
9766 parm, arg);
9768 if (! t || t == error_mark_node)
9769 return 1;
9772 else if (CLASSTYPE_TEMPLATE_INFO (arg)
9773 && (CLASSTYPE_TI_TEMPLATE (parm)
9774 == CLASSTYPE_TI_TEMPLATE (arg)))
9775 /* Perhaps PARM is something like S<U> and ARG is S<int>.
9776 Then, we should unify `int' and `U'. */
9777 t = arg;
9778 else
9779 /* There's no chance of unification succeeding. */
9780 return 1;
9782 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
9783 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
9785 else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
9786 return 1;
9787 return 0;
9789 case METHOD_TYPE:
9790 case FUNCTION_TYPE:
9791 if (TREE_CODE (arg) != TREE_CODE (parm))
9792 return 1;
9794 if (unify (tparms, targs, TREE_TYPE (parm),
9795 TREE_TYPE (arg), UNIFY_ALLOW_NONE))
9796 return 1;
9797 return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
9798 TYPE_ARG_TYPES (arg), 1,
9799 DEDUCE_EXACT, 0, -1);
9801 case OFFSET_TYPE:
9802 offset:
9803 if (TREE_CODE (arg) != OFFSET_TYPE)
9804 return 1;
9805 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
9806 TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
9807 return 1;
9808 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
9809 strict);
9811 case CONST_DECL:
9812 if (DECL_TEMPLATE_PARM_P (parm))
9813 return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
9814 if (arg != decl_constant_value (parm))
9815 return 1;
9816 return 0;
9818 case TEMPLATE_DECL:
9819 /* Matched cases are handled by the ARG == PARM test above. */
9820 return 1;
9822 case MINUS_EXPR:
9823 if (tree_int_cst_equal (TREE_OPERAND (parm, 1), integer_one_node)
9824 && (strict_in & UNIFY_ALLOW_MAX_CORRECTION))
9826 /* We handle this case specially, since it comes up with
9827 arrays. In particular, something like:
9829 template <int N> void f(int (&x)[N]);
9831 Here, we are trying to unify the range type, which
9832 looks like [0 ... (N - 1)]. */
9833 tree t, t1, t2;
9834 t1 = TREE_OPERAND (parm, 0);
9835 t2 = TREE_OPERAND (parm, 1);
9837 t = fold (build (PLUS_EXPR, integer_type_node, arg, t2));
9839 return unify (tparms, targs, t1, t, strict);
9841 /* else fall through */
9843 default:
9844 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (parm))))
9847 /* We're looking at an expression. This can happen with
9848 something like:
9850 template <int I>
9851 void foo(S<I>, S<I + 2>);
9853 This is a "nondeduced context":
9855 [deduct.type]
9857 The nondeduced contexts are:
9859 --A type that is a template-id in which one or more of
9860 the template-arguments is an expression that references
9861 a template-parameter.
9863 In these cases, we assume deduction succeeded, but don't
9864 actually infer any unifications. */
9866 if (!uses_template_parms (parm)
9867 && !template_args_equal (parm, arg))
9868 return 1;
9869 else
9870 return 0;
9872 else
9873 sorry ("use of `%s' in template type unification",
9874 tree_code_name [(int) TREE_CODE (parm)]);
9876 return 1;
9880 /* Called if RESULT is explicitly instantiated, or is a member of an
9881 explicitly instantiated class, or if using -frepo and the
9882 instantiation of RESULT has been assigned to this file. */
9884 void
9885 mark_decl_instantiated (tree result, int extern_p)
9887 /* We used to set this unconditionally; we moved that to
9888 do_decl_instantiation so it wouldn't get set on members of
9889 explicit class template instantiations. But we still need to set
9890 it here for the 'extern template' case in order to suppress
9891 implicit instantiations. */
9892 if (extern_p)
9893 SET_DECL_EXPLICIT_INSTANTIATION (result);
9895 /* If this entity has already been written out, it's too late to
9896 make any modifications. */
9897 if (TREE_ASM_WRITTEN (result))
9898 return;
9900 if (TREE_CODE (result) != FUNCTION_DECL)
9901 /* The TREE_PUBLIC flag for function declarations will have been
9902 set correctly by tsubst. */
9903 TREE_PUBLIC (result) = 1;
9905 /* This might have been set by an earlier implicit instantiation. */
9906 DECL_COMDAT (result) = 0;
9908 if (! extern_p)
9910 DECL_INTERFACE_KNOWN (result) = 1;
9911 DECL_NOT_REALLY_EXTERN (result) = 1;
9913 /* Always make artificials weak. */
9914 if (DECL_ARTIFICIAL (result) && flag_weak)
9915 comdat_linkage (result);
9916 /* For WIN32 we also want to put explicit instantiations in
9917 linkonce sections. */
9918 else if (TREE_PUBLIC (result))
9919 maybe_make_one_only (result);
9922 if (TREE_CODE (result) == FUNCTION_DECL)
9923 defer_fn (result);
9926 /* Given two function templates PAT1 and PAT2, return:
9928 DEDUCE should be DEDUCE_EXACT or DEDUCE_ORDER.
9930 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
9931 -1 if PAT2 is more specialized than PAT1.
9932 0 if neither is more specialized.
9934 LEN is passed through to fn_type_unification. */
9937 more_specialized (tree pat1, tree pat2, int deduce, int len)
9939 tree targs;
9940 int winner = 0;
9942 targs = get_bindings_real (pat1, DECL_TEMPLATE_RESULT (pat2),
9943 NULL_TREE, 0, deduce, len);
9944 if (targs)
9945 --winner;
9947 targs = get_bindings_real (pat2, DECL_TEMPLATE_RESULT (pat1),
9948 NULL_TREE, 0, deduce, len);
9949 if (targs)
9950 ++winner;
9952 return winner;
9955 /* Given two class template specialization list nodes PAT1 and PAT2, return:
9957 1 if PAT1 is more specialized than PAT2 as described in [temp.class.order].
9958 -1 if PAT2 is more specialized than PAT1.
9959 0 if neither is more specialized.
9961 FULL_ARGS is the full set of template arguments that triggers this
9962 partial ordering. */
9965 more_specialized_class (tree pat1, tree pat2, tree full_args)
9967 tree targs;
9968 int winner = 0;
9970 targs = get_class_bindings (TREE_VALUE (pat1), TREE_PURPOSE (pat1),
9971 add_outermost_template_args (full_args, TREE_PURPOSE (pat2)));
9972 if (targs)
9973 --winner;
9975 targs = get_class_bindings (TREE_VALUE (pat2), TREE_PURPOSE (pat2),
9976 add_outermost_template_args (full_args, TREE_PURPOSE (pat1)));
9977 if (targs)
9978 ++winner;
9980 return winner;
9983 /* Return the template arguments that will produce the function signature
9984 DECL from the function template FN, with the explicit template
9985 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is 1, the return type must
9986 also match. Return NULL_TREE if no satisfactory arguments could be
9987 found. DEDUCE and LEN are passed through to fn_type_unification. */
9989 static tree
9990 get_bindings_real (tree fn,
9991 tree decl,
9992 tree explicit_args,
9993 int check_rettype,
9994 int deduce,
9995 int len)
9997 int ntparms = DECL_NTPARMS (fn);
9998 tree targs = make_tree_vec (ntparms);
9999 tree decl_type;
10000 tree decl_arg_types;
10001 int i;
10003 /* Substitute the explicit template arguments into the type of DECL.
10004 The call to fn_type_unification will handle substitution into the
10005 FN. */
10006 decl_type = TREE_TYPE (decl);
10007 if (explicit_args && uses_template_parms (decl_type))
10009 tree tmpl;
10010 tree converted_args;
10012 if (DECL_TEMPLATE_INFO (decl))
10013 tmpl = DECL_TI_TEMPLATE (decl);
10014 else
10015 /* We can get here for some invalid specializations. */
10016 return NULL_TREE;
10018 converted_args
10019 = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
10020 explicit_args, NULL_TREE,
10021 tf_none, /*require_all_arguments=*/0));
10022 if (converted_args == error_mark_node)
10023 return NULL_TREE;
10025 decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
10026 if (decl_type == error_mark_node)
10027 return NULL_TREE;
10030 decl_arg_types = TYPE_ARG_TYPES (decl_type);
10031 /* Never do unification on the 'this' parameter. */
10032 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10033 decl_arg_types = TREE_CHAIN (decl_arg_types);
10035 i = fn_type_unification (fn, explicit_args, targs,
10036 decl_arg_types,
10037 (check_rettype || DECL_CONV_FN_P (fn)
10038 ? TREE_TYPE (decl_type) : NULL_TREE),
10039 deduce, len);
10041 if (i != 0)
10042 return NULL_TREE;
10044 return targs;
10047 /* For most uses, we want to check the return type. */
10049 tree
10050 get_bindings (tree fn, tree decl, tree explicit_args)
10052 return get_bindings_real (fn, decl, explicit_args, 1, DEDUCE_EXACT, -1);
10055 /* But for resolve_overloaded_unification, we only care about the parameter
10056 types. */
10058 static tree
10059 get_bindings_overload (tree fn, tree decl, tree explicit_args)
10061 return get_bindings_real (fn, decl, explicit_args, 0, DEDUCE_EXACT, -1);
10064 /* Return the innermost template arguments that, when applied to a
10065 template specialization whose innermost template parameters are
10066 TPARMS, and whose specialization arguments are PARMS, yield the
10067 ARGS.
10069 For example, suppose we have:
10071 template <class T, class U> struct S {};
10072 template <class T> struct S<T*, int> {};
10074 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
10075 {T}, the PARMS will be {T*, int} and the ARGS will be {double*,
10076 int}. The resulting vector will be {double}, indicating that `T'
10077 is bound to `double'. */
10079 static tree
10080 get_class_bindings (tree tparms, tree parms, tree args)
10082 int i, ntparms = TREE_VEC_LENGTH (tparms);
10083 tree vec = make_tree_vec (ntparms);
10085 if (unify (tparms, vec, parms, INNERMOST_TEMPLATE_ARGS (args),
10086 UNIFY_ALLOW_NONE))
10087 return NULL_TREE;
10089 for (i = 0; i < ntparms; ++i)
10090 if (! TREE_VEC_ELT (vec, i))
10091 return NULL_TREE;
10093 if (verify_class_unification (vec, parms, args))
10094 return NULL_TREE;
10096 return vec;
10099 /* In INSTANTIATIONS is a list of <INSTANTIATION, TEMPLATE> pairs.
10100 Pick the most specialized template, and return the corresponding
10101 instantiation, or if there is no corresponding instantiation, the
10102 template itself. If there is no most specialized template,
10103 error_mark_node is returned. If there are no templates at all,
10104 NULL_TREE is returned. */
10106 tree
10107 most_specialized_instantiation (tree instantiations)
10109 tree fn, champ;
10110 int fate;
10112 if (!instantiations)
10113 return NULL_TREE;
10115 champ = instantiations;
10116 for (fn = TREE_CHAIN (instantiations); fn; fn = TREE_CHAIN (fn))
10118 fate = more_specialized (TREE_VALUE (champ), TREE_VALUE (fn),
10119 DEDUCE_EXACT, -1);
10120 if (fate == 1)
10122 else
10124 if (fate == 0)
10126 fn = TREE_CHAIN (fn);
10127 if (! fn)
10128 return error_mark_node;
10130 champ = fn;
10134 for (fn = instantiations; fn && fn != champ; fn = TREE_CHAIN (fn))
10136 fate = more_specialized (TREE_VALUE (champ), TREE_VALUE (fn),
10137 DEDUCE_EXACT, -1);
10138 if (fate != 1)
10139 return error_mark_node;
10142 return TREE_PURPOSE (champ) ? TREE_PURPOSE (champ) : TREE_VALUE (champ);
10145 /* Return the most specialized of the list of templates in FNS that can
10146 produce an instantiation matching DECL, given the explicit template
10147 arguments EXPLICIT_ARGS. */
10149 static tree
10150 most_specialized (tree fns, tree decl, tree explicit_args)
10152 tree candidates = NULL_TREE;
10153 tree fn, args;
10155 for (fn = fns; fn; fn = TREE_CHAIN (fn))
10157 tree candidate = TREE_VALUE (fn);
10159 args = get_bindings (candidate, decl, explicit_args);
10160 if (args)
10161 candidates = tree_cons (NULL_TREE, candidate, candidates);
10164 return most_specialized_instantiation (candidates);
10167 /* If DECL is a specialization of some template, return the most
10168 general such template. Otherwise, returns NULL_TREE.
10170 For example, given:
10172 template <class T> struct S { template <class U> void f(U); };
10174 if TMPL is `template <class U> void S<int>::f(U)' this will return
10175 the full template. This function will not trace past partial
10176 specializations, however. For example, given in addition:
10178 template <class T> struct S<T*> { template <class U> void f(U); };
10180 if TMPL is `template <class U> void S<int*>::f(U)' this will return
10181 `template <class T> template <class U> S<T*>::f(U)'. */
10183 tree
10184 most_general_template (tree decl)
10186 /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
10187 an immediate specialization. */
10188 if (TREE_CODE (decl) == FUNCTION_DECL)
10190 if (DECL_TEMPLATE_INFO (decl)) {
10191 decl = DECL_TI_TEMPLATE (decl);
10193 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
10194 template friend. */
10195 if (TREE_CODE (decl) != TEMPLATE_DECL)
10196 return NULL_TREE;
10197 } else
10198 return NULL_TREE;
10201 /* Look for more and more general templates. */
10202 while (DECL_TEMPLATE_INFO (decl))
10204 /* The DECL_TI_TEMPLATE can be a LOOKUP_EXPR or IDENTIFIER_NODE
10205 in some cases. (See cp-tree.h for details.) */
10206 if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
10207 break;
10209 if (CLASS_TYPE_P (TREE_TYPE (decl))
10210 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
10211 break;
10213 /* Stop if we run into an explicitly specialized class template. */
10214 if (!DECL_NAMESPACE_SCOPE_P (decl)
10215 && DECL_CONTEXT (decl)
10216 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
10217 break;
10219 decl = DECL_TI_TEMPLATE (decl);
10222 return decl;
10225 /* Return the most specialized of the class template specializations
10226 of TMPL which can produce an instantiation matching ARGS, or
10227 error_mark_node if the choice is ambiguous. */
10229 static tree
10230 most_specialized_class (tree tmpl, tree args)
10232 tree list = NULL_TREE;
10233 tree t;
10234 tree champ;
10235 int fate;
10237 tmpl = most_general_template (tmpl);
10238 for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
10240 tree spec_args
10241 = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args);
10242 if (spec_args)
10244 list = tree_cons (TREE_PURPOSE (t), TREE_VALUE (t), list);
10245 TREE_TYPE (list) = TREE_TYPE (t);
10249 if (! list)
10250 return NULL_TREE;
10252 t = list;
10253 champ = t;
10254 t = TREE_CHAIN (t);
10255 for (; t; t = TREE_CHAIN (t))
10257 fate = more_specialized_class (champ, t, args);
10258 if (fate == 1)
10260 else
10262 if (fate == 0)
10264 t = TREE_CHAIN (t);
10265 if (! t)
10266 return error_mark_node;
10268 champ = t;
10272 for (t = list; t && t != champ; t = TREE_CHAIN (t))
10274 fate = more_specialized_class (champ, t, args);
10275 if (fate != 1)
10276 return error_mark_node;
10279 return champ;
10282 /* Explicitly instantiate DECL. */
10284 void
10285 do_decl_instantiation (tree decl, tree storage)
10287 tree result = NULL_TREE;
10288 int extern_p = 0;
10290 if (!decl)
10291 /* An error occurred, for which grokdeclarator has already issued
10292 an appropriate message. */
10293 return;
10294 else if (! DECL_LANG_SPECIFIC (decl))
10296 error ("explicit instantiation of non-template `%#D'", decl);
10297 return;
10299 else if (TREE_CODE (decl) == VAR_DECL)
10301 /* There is an asymmetry here in the way VAR_DECLs and
10302 FUNCTION_DECLs are handled by grokdeclarator. In the case of
10303 the latter, the DECL we get back will be marked as a
10304 template instantiation, and the appropriate
10305 DECL_TEMPLATE_INFO will be set up. This does not happen for
10306 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
10307 should handle VAR_DECLs as it currently handles
10308 FUNCTION_DECLs. */
10309 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
10310 if (!result || TREE_CODE (result) != VAR_DECL)
10312 error ("no matching template for `%D' found", decl);
10313 return;
10316 else if (TREE_CODE (decl) != FUNCTION_DECL)
10318 error ("explicit instantiation of `%#D'", decl);
10319 return;
10321 else
10322 result = decl;
10324 /* Check for various error cases. Note that if the explicit
10325 instantiation is valid the RESULT will currently be marked as an
10326 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
10327 until we get here. */
10329 if (DECL_TEMPLATE_SPECIALIZATION (result))
10331 /* DR 259 [temp.spec].
10333 Both an explicit instantiation and a declaration of an explicit
10334 specialization shall not appear in a program unless the explicit
10335 instantiation follows a declaration of the explicit specialization.
10337 For a given set of template parameters, if an explicit
10338 instantiation of a template appears after a declaration of an
10339 explicit specialization for that template, the explicit
10340 instantiation has no effect. */
10341 return;
10343 else if (DECL_EXPLICIT_INSTANTIATION (result))
10345 /* [temp.spec]
10347 No program shall explicitly instantiate any template more
10348 than once.
10350 We check DECL_INTERFACE_KNOWN so as not to complain when the first
10351 instantiation was `extern' and the second is not, and EXTERN_P for
10352 the opposite case. If -frepo, chances are we already got marked
10353 as an explicit instantiation because of the repo file. */
10354 if (DECL_INTERFACE_KNOWN (result) && !extern_p && !flag_use_repository)
10355 pedwarn ("duplicate explicit instantiation of `%#D'", result);
10357 /* If we've already instantiated the template, just return now. */
10358 if (DECL_INTERFACE_KNOWN (result))
10359 return;
10361 else if (!DECL_IMPLICIT_INSTANTIATION (result))
10363 error ("no matching template for `%D' found", result);
10364 return;
10366 else if (!DECL_TEMPLATE_INFO (result))
10368 pedwarn ("explicit instantiation of non-template `%#D'", result);
10369 return;
10372 if (flag_external_templates)
10373 return;
10375 if (storage == NULL_TREE)
10377 else if (storage == ridpointers[(int) RID_EXTERN])
10379 if (pedantic && !in_system_header)
10380 pedwarn ("ISO C++ forbids the use of `extern' on explicit instantiations");
10381 extern_p = 1;
10383 else
10384 error ("storage class `%D' applied to template instantiation",
10385 storage);
10387 SET_DECL_EXPLICIT_INSTANTIATION (result);
10388 mark_decl_instantiated (result, extern_p);
10389 repo_template_instantiated (result, extern_p);
10390 if (! extern_p)
10391 instantiate_decl (result, /*defer_ok=*/1);
10394 void
10395 mark_class_instantiated (tree t, int extern_p)
10397 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
10398 SET_CLASSTYPE_INTERFACE_KNOWN (t);
10399 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
10400 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
10401 if (! extern_p)
10403 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
10404 rest_of_type_compilation (t, 1);
10408 /* Called from do_type_instantiation through binding_table_foreach to
10409 do recursive instantiation for the type bound in ENTRY. */
10410 static void
10411 bt_instantiate_type_proc (binding_entry entry, void *data)
10413 tree storage = *(tree *) data;
10415 if (IS_AGGR_TYPE (entry->type)
10416 && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
10417 do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
10420 /* Perform an explicit instantiation of template class T. STORAGE, if
10421 non-null, is the RID for extern, inline or static. COMPLAIN is
10422 nonzero if this is called from the parser, zero if called recursively,
10423 since the standard is unclear (as detailed below). */
10425 void
10426 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
10428 int extern_p = 0;
10429 int nomem_p = 0;
10430 int static_p = 0;
10432 if (TREE_CODE (t) == TYPE_DECL)
10433 t = TREE_TYPE (t);
10435 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
10437 error ("explicit instantiation of non-template type `%T'", t);
10438 return;
10441 complete_type (t);
10443 /* With -fexternal-templates, explicit instantiations are treated the same
10444 as implicit ones. */
10445 if (flag_external_templates)
10446 return;
10448 if (!COMPLETE_TYPE_P (t))
10450 if (complain & tf_error)
10451 error ("explicit instantiation of `%#T' before definition of template",
10453 return;
10456 if (storage != NULL_TREE)
10458 if (pedantic && !in_system_header)
10459 pedwarn("ISO C++ forbids the use of `%s' on explicit instantiations",
10460 IDENTIFIER_POINTER (storage));
10462 if (storage == ridpointers[(int) RID_INLINE])
10463 nomem_p = 1;
10464 else if (storage == ridpointers[(int) RID_EXTERN])
10465 extern_p = 1;
10466 else if (storage == ridpointers[(int) RID_STATIC])
10467 static_p = 1;
10468 else
10470 error ("storage class `%D' applied to template instantiation",
10471 storage);
10472 extern_p = 0;
10476 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
10478 /* DR 259 [temp.spec].
10480 Both an explicit instantiation and a declaration of an explicit
10481 specialization shall not appear in a program unless the explicit
10482 instantiation follows a declaration of the explicit specialization.
10484 For a given set of template parameters, if an explicit
10485 instantiation of a template appears after a declaration of an
10486 explicit specialization for that template, the explicit
10487 instantiation has no effect. */
10488 return;
10490 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
10492 /* [temp.spec]
10494 No program shall explicitly instantiate any template more
10495 than once.
10497 If CLASSTYPE_INTERFACE_ONLY, then the first explicit instantiation
10498 was `extern'. If EXTERN_P then the second is. If -frepo, chances
10499 are we already got marked as an explicit instantiation because of the
10500 repo file. All these cases are OK. */
10501 if (!CLASSTYPE_INTERFACE_ONLY (t) && !extern_p && !flag_use_repository
10502 && (complain & tf_error))
10503 pedwarn ("duplicate explicit instantiation of `%#T'", t);
10505 /* If we've already instantiated the template, just return now. */
10506 if (!CLASSTYPE_INTERFACE_ONLY (t))
10507 return;
10510 mark_class_instantiated (t, extern_p);
10511 repo_template_instantiated (t, extern_p);
10513 if (nomem_p)
10514 return;
10517 tree tmp;
10519 /* In contrast to implicit instantiation, where only the
10520 declarations, and not the definitions, of members are
10521 instantiated, we have here:
10523 [temp.explicit]
10525 The explicit instantiation of a class template specialization
10526 implies the instantiation of all of its members not
10527 previously explicitly specialized in the translation unit
10528 containing the explicit instantiation.
10530 Of course, we can't instantiate member template classes, since
10531 we don't have any arguments for them. Note that the standard
10532 is unclear on whether the instantiation of the members are
10533 *explicit* instantiations or not. We choose to be generous,
10534 and not set DECL_EXPLICIT_INSTANTIATION. Therefore, we allow
10535 the explicit instantiation of a class where some of the members
10536 have no definition in the current translation unit. */
10538 if (! static_p)
10539 for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
10540 if (TREE_CODE (tmp) == FUNCTION_DECL
10541 && DECL_TEMPLATE_INSTANTIATION (tmp))
10543 mark_decl_instantiated (tmp, extern_p);
10544 repo_template_instantiated (tmp, extern_p);
10545 if (! extern_p)
10546 instantiate_decl (tmp, /*defer_ok=*/1);
10549 for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
10550 if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
10552 mark_decl_instantiated (tmp, extern_p);
10553 repo_template_instantiated (tmp, extern_p);
10554 if (! extern_p)
10555 instantiate_decl (tmp, /*defer_ok=*/1);
10558 if (CLASSTYPE_NESTED_UTDS (t))
10559 binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
10560 bt_instantiate_type_proc, &storage);
10564 /* Given a function DECL, which is a specialization of TMPL, modify
10565 DECL to be a re-instantiation of TMPL with the same template
10566 arguments. TMPL should be the template into which tsubst'ing
10567 should occur for DECL, not the most general template.
10569 One reason for doing this is a scenario like this:
10571 template <class T>
10572 void f(const T&, int i);
10574 void g() { f(3, 7); }
10576 template <class T>
10577 void f(const T& t, const int i) { }
10579 Note that when the template is first instantiated, with
10580 instantiate_template, the resulting DECL will have no name for the
10581 first parameter, and the wrong type for the second. So, when we go
10582 to instantiate the DECL, we regenerate it. */
10584 static void
10585 regenerate_decl_from_template (tree decl, tree tmpl)
10587 /* The most general version of TMPL. */
10588 tree gen_tmpl;
10589 /* The arguments used to instantiate DECL, from the most general
10590 template. */
10591 tree args;
10592 tree code_pattern;
10593 tree new_decl;
10594 bool unregistered;
10596 args = DECL_TI_ARGS (decl);
10597 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
10599 /* Unregister the specialization so that when we tsubst we will not
10600 just return DECL. We don't have to unregister DECL from TMPL
10601 because if would only be registered there if it were a partial
10602 instantiation of a specialization, which it isn't: it's a full
10603 instantiation. */
10604 gen_tmpl = most_general_template (tmpl);
10605 unregistered = reregister_specialization (decl, gen_tmpl,
10606 /*new_spec=*/NULL_TREE);
10608 /* If the DECL was not unregistered then something peculiar is
10609 happening: we created a specialization but did not call
10610 register_specialization for it. */
10611 my_friendly_assert (unregistered, 0);
10613 /* Make sure that we can see identifiers, and compute access
10614 correctly. */
10615 push_access_scope (decl);
10617 /* Do the substitution to get the new declaration. */
10618 new_decl = tsubst (code_pattern, args, tf_error, NULL_TREE);
10620 if (TREE_CODE (decl) == VAR_DECL)
10622 /* Set up DECL_INITIAL, since tsubst doesn't. */
10623 if (!DECL_INITIALIZED_IN_CLASS_P (decl))
10624 DECL_INITIAL (new_decl) =
10625 tsubst_expr (DECL_INITIAL (code_pattern), args,
10626 tf_error, DECL_TI_TEMPLATE (decl));
10628 else if (TREE_CODE (decl) == FUNCTION_DECL)
10630 /* Convince duplicate_decls to use the DECL_ARGUMENTS from the
10631 new decl. */
10632 DECL_INITIAL (new_decl) = error_mark_node;
10633 /* And don't complain about a duplicate definition. */
10634 DECL_INITIAL (decl) = NULL_TREE;
10637 pop_access_scope (decl);
10639 /* The immediate parent of the new template is still whatever it was
10640 before, even though tsubst sets DECL_TI_TEMPLATE up as the most
10641 general template. We also reset the DECL_ASSEMBLER_NAME since
10642 tsubst always calculates the name as if the function in question
10643 were really a template instance, and sometimes, with friend
10644 functions, this is not so. See tsubst_friend_function for
10645 details. */
10646 DECL_TI_TEMPLATE (new_decl) = DECL_TI_TEMPLATE (decl);
10647 COPY_DECL_ASSEMBLER_NAME (decl, new_decl);
10648 COPY_DECL_RTL (decl, new_decl);
10649 DECL_USE_TEMPLATE (new_decl) = DECL_USE_TEMPLATE (decl);
10651 /* Call duplicate decls to merge the old and new declarations. */
10652 duplicate_decls (new_decl, decl);
10654 /* Now, re-register the specialization. */
10655 register_specialization (decl, gen_tmpl, args);
10658 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
10659 substituted to get DECL. */
10661 tree
10662 template_for_substitution (tree decl)
10664 tree tmpl = DECL_TI_TEMPLATE (decl);
10666 /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
10667 for the instantiation. This is not always the most general
10668 template. Consider, for example:
10670 template <class T>
10671 struct S { template <class U> void f();
10672 template <> void f<int>(); };
10674 and an instantiation of S<double>::f<int>. We want TD to be the
10675 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
10676 while (/* An instantiation cannot have a definition, so we need a
10677 more general template. */
10678 DECL_TEMPLATE_INSTANTIATION (tmpl)
10679 /* We must also deal with friend templates. Given:
10681 template <class T> struct S {
10682 template <class U> friend void f() {};
10685 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
10686 so far as the language is concerned, but that's still
10687 where we get the pattern for the instantiation from. On
10688 other hand, if the definition comes outside the class, say:
10690 template <class T> struct S {
10691 template <class U> friend void f();
10693 template <class U> friend void f() {}
10695 we don't need to look any further. That's what the check for
10696 DECL_INITIAL is for. */
10697 || (TREE_CODE (decl) == FUNCTION_DECL
10698 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
10699 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
10701 /* The present template, TD, should not be a definition. If it
10702 were a definition, we should be using it! Note that we
10703 cannot restructure the loop to just keep going until we find
10704 a template with a definition, since that might go too far if
10705 a specialization was declared, but not defined. */
10706 my_friendly_assert (!(TREE_CODE (decl) == VAR_DECL
10707 && !DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl))),
10708 0);
10710 /* Fetch the more general template. */
10711 tmpl = DECL_TI_TEMPLATE (tmpl);
10714 return tmpl;
10717 /* Produce the definition of D, a _DECL generated from a template. If
10718 DEFER_OK is nonzero, then we don't have to actually do the
10719 instantiation now; we just have to do it sometime. */
10721 tree
10722 instantiate_decl (tree d, int defer_ok)
10724 tree tmpl = DECL_TI_TEMPLATE (d);
10725 tree gen_args;
10726 tree args;
10727 tree td;
10728 tree code_pattern;
10729 tree spec;
10730 tree gen_tmpl;
10731 int pattern_defined;
10732 int need_push;
10733 location_t saved_loc = input_location;
10735 /* This function should only be used to instantiate templates for
10736 functions and static member variables. */
10737 my_friendly_assert (TREE_CODE (d) == FUNCTION_DECL
10738 || TREE_CODE (d) == VAR_DECL, 0);
10740 /* Variables are never deferred; if instantiation is required, they
10741 are instantiated right away. That allows for better code in the
10742 case that an expression refers to the value of the variable --
10743 if the variable has a constant value the referring expression can
10744 take advantage of that fact. */
10745 if (TREE_CODE (d) == VAR_DECL)
10746 defer_ok = 0;
10748 /* Don't instantiate cloned functions. Instead, instantiate the
10749 functions they cloned. */
10750 if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
10751 d = DECL_CLONED_FUNCTION (d);
10753 if (DECL_TEMPLATE_INSTANTIATED (d))
10754 /* D has already been instantiated. It might seem reasonable to
10755 check whether or not D is an explicit instantiation, and, if so,
10756 stop here. But when an explicit instantiation is deferred
10757 until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
10758 is set, even though we still need to do the instantiation. */
10759 return d;
10761 /* If we already have a specialization of this declaration, then
10762 there's no reason to instantiate it. Note that
10763 retrieve_specialization gives us both instantiations and
10764 specializations, so we must explicitly check
10765 DECL_TEMPLATE_SPECIALIZATION. */
10766 gen_tmpl = most_general_template (tmpl);
10767 gen_args = DECL_TI_ARGS (d);
10768 spec = retrieve_specialization (gen_tmpl, gen_args);
10769 if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
10770 return spec;
10772 /* This needs to happen before any tsubsting. */
10773 if (! push_tinst_level (d))
10774 return d;
10776 timevar_push (TV_PARSE);
10778 /* We may be in the middle of deferred access check. Disable
10779 it now. */
10780 push_deferring_access_checks (dk_no_deferred);
10782 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
10783 for the instantiation. */
10784 td = template_for_substitution (d);
10785 code_pattern = DECL_TEMPLATE_RESULT (td);
10787 if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
10788 || DECL_TEMPLATE_SPECIALIZATION (td))
10789 /* In the case of a friend template whose definition is provided
10790 outside the class, we may have too many arguments. Drop the
10791 ones we don't need. The same is true for specializations. */
10792 args = get_innermost_template_args
10793 (gen_args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td)));
10794 else
10795 args = gen_args;
10797 if (TREE_CODE (d) == FUNCTION_DECL)
10798 pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
10799 else
10800 pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
10802 input_location = DECL_SOURCE_LOCATION (d);
10804 if (pattern_defined)
10806 /* Let the repository code that this template definition is
10807 available.
10809 The repository doesn't need to know about cloned functions
10810 because they never actually show up in the object file. It
10811 does need to know about the clones; those are the symbols
10812 that the linker will be emitting error messages about. */
10813 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (d)
10814 || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (d))
10816 tree t;
10818 for (t = TREE_CHAIN (d);
10819 t && DECL_CLONED_FUNCTION_P (t);
10820 t = TREE_CHAIN (t))
10821 repo_template_used (t);
10823 else
10824 repo_template_used (d);
10826 if (flag_external_templates && ! DECL_INTERFACE_KNOWN (d))
10828 if (flag_alt_external_templates)
10830 if (interface_unknown)
10831 warn_if_unknown_interface (d);
10833 else if (DECL_INTERFACE_KNOWN (code_pattern))
10835 DECL_INTERFACE_KNOWN (d) = 1;
10836 DECL_NOT_REALLY_EXTERN (d) = ! DECL_EXTERNAL (code_pattern);
10838 else
10839 warn_if_unknown_interface (code_pattern);
10842 if (at_eof)
10843 import_export_decl (d);
10846 if (!defer_ok)
10848 /* Recheck the substitutions to obtain any warning messages
10849 about ignoring cv qualifiers. */
10850 tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
10851 tree type = TREE_TYPE (gen);
10853 /* Make sure that we can see identifiers, and compute access
10854 correctly. D is already the target FUNCTION_DECL with the
10855 right context. */
10856 push_access_scope (d);
10858 if (TREE_CODE (gen) == FUNCTION_DECL)
10860 tsubst (DECL_ARGUMENTS (gen), gen_args, tf_error | tf_warning, d);
10861 tsubst (TYPE_RAISES_EXCEPTIONS (type), gen_args,
10862 tf_error | tf_warning, d);
10863 /* Don't simply tsubst the function type, as that will give
10864 duplicate warnings about poor parameter qualifications.
10865 The function arguments are the same as the decl_arguments
10866 without the top level cv qualifiers. */
10867 type = TREE_TYPE (type);
10869 tsubst (type, gen_args, tf_error | tf_warning, d);
10871 pop_access_scope (d);
10874 if (TREE_CODE (d) == VAR_DECL && DECL_INITIALIZED_IN_CLASS_P (d)
10875 && DECL_INITIAL (d) == NULL_TREE)
10876 /* We should have set up DECL_INITIAL in instantiate_class_template. */
10877 abort ();
10878 /* Reject all external templates except inline functions. */
10879 else if (DECL_INTERFACE_KNOWN (d)
10880 && ! DECL_NOT_REALLY_EXTERN (d)
10881 && ! (TREE_CODE (d) == FUNCTION_DECL
10882 && DECL_INLINE (d)))
10883 goto out;
10884 /* Defer all other templates, unless we have been explicitly
10885 forbidden from doing so. We restore the source position here
10886 because it's used by add_pending_template. */
10887 else if (! pattern_defined || defer_ok)
10889 input_location = saved_loc;
10891 if (at_eof && !pattern_defined
10892 && DECL_EXPLICIT_INSTANTIATION (d))
10893 /* [temp.explicit]
10895 The definition of a non-exported function template, a
10896 non-exported member function template, or a non-exported
10897 member function or static data member of a class template
10898 shall be present in every translation unit in which it is
10899 explicitly instantiated. */
10900 pedwarn
10901 ("explicit instantiation of `%D' but no definition available", d);
10903 add_pending_template (d);
10904 goto out;
10907 need_push = !global_bindings_p ();
10908 if (need_push)
10909 push_to_top_level ();
10911 /* Regenerate the declaration in case the template has been modified
10912 by a subsequent redeclaration. */
10913 regenerate_decl_from_template (d, td);
10915 /* We already set the file and line above. Reset them now in case
10916 they changed as a result of calling
10917 regenerate_decl_from_template. */
10918 input_location = DECL_SOURCE_LOCATION (d);
10920 if (TREE_CODE (d) == VAR_DECL)
10922 /* Clear out DECL_RTL; whatever was there before may not be right
10923 since we've reset the type of the declaration. */
10924 SET_DECL_RTL (d, NULL_RTX);
10926 DECL_IN_AGGR_P (d) = 0;
10927 import_export_decl (d);
10928 DECL_EXTERNAL (d) = ! DECL_NOT_REALLY_EXTERN (d);
10930 if (DECL_EXTERNAL (d))
10932 /* The fact that this code is executing indicates that:
10934 (1) D is a template static data member, for which a
10935 definition is available.
10937 (2) An implicit or explicit instantiation has occurred.
10939 (3) We are not going to emit a definition of the static
10940 data member at this time.
10942 This situation is peculiar, but it occurs on platforms
10943 without weak symbols when performing an implicit
10944 instantiation. There, we cannot implicitly instantiate a
10945 defined static data member in more than one translation
10946 unit, so import_export_decl marks the declaration as
10947 external; we must rely on explicit instantiation. */
10949 else
10951 /* Mark D as instantiated so that recursive calls to
10952 instantiate_decl do not try to instantiate it again. */
10953 DECL_TEMPLATE_INSTANTIATED (d) = 1;
10954 cp_finish_decl (d,
10955 (!DECL_INITIALIZED_IN_CLASS_P (d)
10956 ? DECL_INITIAL (d) : NULL_TREE),
10957 NULL_TREE, 0);
10960 else if (TREE_CODE (d) == FUNCTION_DECL)
10962 htab_t saved_local_specializations;
10963 tree subst_decl;
10964 tree tmpl_parm;
10965 tree spec_parm;
10967 /* Mark D as instantiated so that recursive calls to
10968 instantiate_decl do not try to instantiate it again. */
10969 DECL_TEMPLATE_INSTANTIATED (d) = 1;
10971 /* Save away the current list, in case we are instantiating one
10972 template from within the body of another. */
10973 saved_local_specializations = local_specializations;
10975 /* Set up the list of local specializations. */
10976 local_specializations = htab_create (37,
10977 hash_local_specialization,
10978 eq_local_specializations,
10979 NULL);
10981 /* Set up context. */
10982 import_export_decl (d);
10983 start_function (NULL_TREE, d, NULL_TREE, SF_PRE_PARSED);
10985 /* Create substitution entries for the parameters. */
10986 subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
10987 tmpl_parm = DECL_ARGUMENTS (subst_decl);
10988 spec_parm = DECL_ARGUMENTS (d);
10989 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
10991 register_local_specialization (spec_parm, tmpl_parm);
10992 spec_parm = skip_artificial_parms_for (d, spec_parm);
10993 tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
10995 while (tmpl_parm)
10997 register_local_specialization (spec_parm, tmpl_parm);
10998 tmpl_parm = TREE_CHAIN (tmpl_parm);
10999 spec_parm = TREE_CHAIN (spec_parm);
11001 my_friendly_assert (!spec_parm, 20020813);
11003 /* Substitute into the body of the function. */
11004 tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
11005 tf_error | tf_warning, tmpl);
11007 /* We don't need the local specializations any more. */
11008 htab_delete (local_specializations);
11009 local_specializations = saved_local_specializations;
11011 /* Finish the function. */
11012 d = finish_function (0);
11013 expand_or_defer_fn (d);
11016 /* We're not deferring instantiation any more. */
11017 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
11019 if (need_push)
11020 pop_from_top_level ();
11022 out:
11023 input_location = saved_loc;
11024 pop_deferring_access_checks ();
11025 pop_tinst_level ();
11027 timevar_pop (TV_PARSE);
11029 return d;
11032 /* Run through the list of templates that we wish we could
11033 instantiate, and instantiate any we can. */
11036 instantiate_pending_templates (void)
11038 tree *t;
11039 tree last = NULL_TREE;
11040 int instantiated_something = 0;
11041 int reconsider;
11045 reconsider = 0;
11047 t = &pending_templates;
11048 while (*t)
11050 tree instantiation = TREE_VALUE (*t);
11052 reopen_tinst_level (TREE_PURPOSE (*t));
11054 if (TYPE_P (instantiation))
11056 tree fn;
11058 if (!COMPLETE_TYPE_P (instantiation))
11060 instantiate_class_template (instantiation);
11061 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
11062 for (fn = TYPE_METHODS (instantiation);
11064 fn = TREE_CHAIN (fn))
11065 if (! DECL_ARTIFICIAL (fn))
11066 instantiate_decl (fn, /*defer_ok=*/0);
11067 if (COMPLETE_TYPE_P (instantiation))
11069 instantiated_something = 1;
11070 reconsider = 1;
11074 if (COMPLETE_TYPE_P (instantiation))
11075 /* If INSTANTIATION has been instantiated, then we don't
11076 need to consider it again in the future. */
11077 *t = TREE_CHAIN (*t);
11078 else
11080 last = *t;
11081 t = &TREE_CHAIN (*t);
11084 else
11086 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
11087 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
11089 instantiation = instantiate_decl (instantiation,
11090 /*defer_ok=*/0);
11091 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
11093 instantiated_something = 1;
11094 reconsider = 1;
11098 if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
11099 || DECL_TEMPLATE_INSTANTIATED (instantiation))
11100 /* If INSTANTIATION has been instantiated, then we don't
11101 need to consider it again in the future. */
11102 *t = TREE_CHAIN (*t);
11103 else
11105 last = *t;
11106 t = &TREE_CHAIN (*t);
11109 tinst_depth = 0;
11110 current_tinst_level = NULL_TREE;
11112 last_pending_template = last;
11114 while (reconsider);
11116 return instantiated_something;
11119 /* Substitute ARGVEC into T, which is a list of initializers for
11120 either base class or a non-static data member. The TREE_PURPOSEs
11121 are DECLs, and the TREE_VALUEs are the initializer values. Used by
11122 instantiate_decl. */
11124 static tree
11125 tsubst_initializer_list (tree t, tree argvec)
11127 tree inits = NULL_TREE;
11129 for (; t; t = TREE_CHAIN (t))
11131 tree decl;
11132 tree init;
11133 tree val;
11135 decl = tsubst_copy (TREE_PURPOSE (t), argvec, tf_error | tf_warning,
11136 NULL_TREE);
11137 decl = expand_member_init (decl);
11138 if (decl && !DECL_P (decl))
11139 in_base_initializer = 1;
11141 init = tsubst_expr (TREE_VALUE (t), argvec, tf_error | tf_warning,
11142 NULL_TREE);
11143 if (!init)
11145 else if (TREE_CODE (init) == TREE_LIST)
11146 for (val = init; val; val = TREE_CHAIN (val))
11147 TREE_VALUE (val) = convert_from_reference (TREE_VALUE (val));
11148 else if (init != void_type_node)
11149 init = convert_from_reference (init);
11151 in_base_initializer = 0;
11153 if (decl)
11155 init = build_tree_list (decl, init);
11156 TREE_CHAIN (init) = inits;
11157 inits = init;
11160 return inits;
11163 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
11165 static void
11166 set_current_access_from_decl (tree decl)
11168 if (TREE_PRIVATE (decl))
11169 current_access_specifier = access_private_node;
11170 else if (TREE_PROTECTED (decl))
11171 current_access_specifier = access_protected_node;
11172 else
11173 current_access_specifier = access_public_node;
11176 /* Instantiate an enumerated type. TAG is the template type, NEWTAG
11177 is the instantiation (which should have been created with
11178 start_enum) and ARGS are the template arguments to use. */
11180 static void
11181 tsubst_enum (tree tag, tree newtag, tree args)
11183 tree e;
11185 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
11187 tree value;
11189 /* Note that in a template enum, the TREE_VALUE is the
11190 CONST_DECL, not the corresponding INTEGER_CST. */
11191 value = tsubst_expr (DECL_INITIAL (TREE_VALUE (e)),
11192 args, tf_error | tf_warning,
11193 NULL_TREE);
11195 /* Give this enumeration constant the correct access. */
11196 set_current_access_from_decl (TREE_VALUE (e));
11198 /* Actually build the enumerator itself. */
11199 build_enumerator (TREE_PURPOSE (e), value, newtag);
11202 finish_enum (newtag);
11203 DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
11204 = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
11207 /* DECL is a FUNCTION_DECL that is a template specialization. Return
11208 its type -- but without substituting the innermost set of template
11209 arguments. So, innermost set of template parameters will appear in
11210 the type. */
11212 tree
11213 get_mostly_instantiated_function_type (tree decl)
11215 tree fn_type;
11216 tree tmpl;
11217 tree targs;
11218 tree tparms;
11219 int parm_depth;
11221 tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11222 targs = DECL_TI_ARGS (decl);
11223 tparms = DECL_TEMPLATE_PARMS (tmpl);
11224 parm_depth = TMPL_PARMS_DEPTH (tparms);
11226 /* There should be as many levels of arguments as there are levels
11227 of parameters. */
11228 my_friendly_assert (parm_depth == TMPL_ARGS_DEPTH (targs), 0);
11230 fn_type = TREE_TYPE (tmpl);
11232 if (parm_depth == 1)
11233 /* No substitution is necessary. */
11235 else
11237 int i;
11238 tree partial_args;
11240 /* Replace the innermost level of the TARGS with NULL_TREEs to
11241 let tsubst know not to substitute for those parameters. */
11242 partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
11243 for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
11244 SET_TMPL_ARGS_LEVEL (partial_args, i,
11245 TMPL_ARGS_LEVEL (targs, i));
11246 SET_TMPL_ARGS_LEVEL (partial_args,
11247 TMPL_ARGS_DEPTH (targs),
11248 make_tree_vec (DECL_NTPARMS (tmpl)));
11250 /* Make sure that we can see identifiers, and compute access
11251 correctly. We can just use the context of DECL for the
11252 partial substitution here. It depends only on outer template
11253 parameters, regardless of whether the innermost level is
11254 specialized or not. */
11255 push_access_scope (decl);
11257 /* Now, do the (partial) substitution to figure out the
11258 appropriate function type. */
11259 fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
11261 /* Substitute into the template parameters to obtain the real
11262 innermost set of parameters. This step is important if the
11263 innermost set of template parameters contains value
11264 parameters whose types depend on outer template parameters. */
11265 TREE_VEC_LENGTH (partial_args)--;
11266 tparms = tsubst_template_parms (tparms, partial_args, tf_error);
11268 pop_access_scope (decl);
11271 return fn_type;
11274 /* Return truthvalue if we're processing a template different from
11275 the last one involved in diagnostics. */
11277 problematic_instantiation_changed (void)
11279 return last_template_error_tick != tinst_level_tick;
11282 /* Remember current template involved in diagnostics. */
11283 void
11284 record_last_problematic_instantiation (void)
11286 last_template_error_tick = tinst_level_tick;
11289 tree
11290 current_instantiation (void)
11292 return current_tinst_level;
11295 /* [temp.param] Check that template non-type parm TYPE is of an allowable
11296 type. Return zero for ok, nonzero for disallowed. Issue error and
11297 warning messages under control of COMPLAIN. */
11299 static int
11300 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
11302 if (INTEGRAL_TYPE_P (type))
11303 return 0;
11304 else if (POINTER_TYPE_P (type))
11305 return 0;
11306 else if (TYPE_PTRMEM_P (type))
11307 return 0;
11308 else if (TYPE_PTRMEMFUNC_P (type))
11309 return 0;
11310 else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11311 return 0;
11312 else if (TREE_CODE (type) == TYPENAME_TYPE)
11313 return 0;
11315 if (complain & tf_error)
11316 error ("`%#T' is not a valid type for a template constant parameter",
11317 type);
11318 return 1;
11321 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
11322 Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
11324 static bool
11325 dependent_type_p_r (tree type)
11327 tree scope;
11329 /* [temp.dep.type]
11331 A type is dependent if it is:
11333 -- a template parameter. */
11334 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11335 return true;
11336 /* -- a qualified-id with a nested-name-specifier which contains a
11337 class-name that names a dependent type or whose unqualified-id
11338 names a dependent type. */
11339 if (TREE_CODE (type) == TYPENAME_TYPE)
11340 return true;
11341 /* -- a cv-qualified type where the cv-unqualified type is
11342 dependent. */
11343 type = TYPE_MAIN_VARIANT (type);
11344 /* -- a compound type constructed from any dependent type. */
11345 if (TYPE_PTRMEM_P (type) || TYPE_PTRMEMFUNC_P (type))
11346 return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
11347 || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
11348 (type)));
11349 else if (TREE_CODE (type) == POINTER_TYPE
11350 || TREE_CODE (type) == REFERENCE_TYPE)
11351 return dependent_type_p (TREE_TYPE (type));
11352 else if (TREE_CODE (type) == FUNCTION_TYPE
11353 || TREE_CODE (type) == METHOD_TYPE)
11355 tree arg_type;
11357 if (dependent_type_p (TREE_TYPE (type)))
11358 return true;
11359 for (arg_type = TYPE_ARG_TYPES (type);
11360 arg_type;
11361 arg_type = TREE_CHAIN (arg_type))
11362 if (dependent_type_p (TREE_VALUE (arg_type)))
11363 return true;
11364 return false;
11366 /* -- an array type constructed from any dependent type or whose
11367 size is specified by a constant expression that is
11368 value-dependent. */
11369 if (TREE_CODE (type) == ARRAY_TYPE)
11371 if (TYPE_DOMAIN (type)
11372 && ((value_dependent_expression_p
11373 (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
11374 || (type_dependent_expression_p
11375 (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
11376 return true;
11377 return dependent_type_p (TREE_TYPE (type));
11379 /* -- a template-id in which either the template name is a template
11380 parameter or any of the template arguments is a dependent type or
11381 an expression that is type-dependent or value-dependent.
11383 This language seems somewhat confused; for example, it does not
11384 discuss template template arguments. Therefore, we use the
11385 definition for dependent template arguments in [temp.dep.temp]. */
11386 if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
11387 && (dependent_template_id_p
11388 (CLASSTYPE_TI_TEMPLATE (type),
11389 CLASSTYPE_TI_ARGS (type))))
11390 return true;
11391 else if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
11392 return true;
11393 /* All TYPEOF_TYPEs are dependent; if the argument of the `typeof'
11394 expression is not type-dependent, then it should already been
11395 have resolved. */
11396 if (TREE_CODE (type) == TYPEOF_TYPE)
11397 return true;
11398 /* The standard does not specifically mention types that are local
11399 to template functions or local classes, but they should be
11400 considered dependent too. For example:
11402 template <int I> void f() {
11403 enum E { a = I };
11404 S<sizeof (E)> s;
11407 The size of `E' cannot be known until the value of `I' has been
11408 determined. Therefore, `E' must be considered dependent. */
11409 scope = TYPE_CONTEXT (type);
11410 if (scope && TYPE_P (scope))
11411 return dependent_type_p (scope);
11412 else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
11413 return type_dependent_expression_p (scope);
11415 /* Other types are non-dependent. */
11416 return false;
11419 /* Returns TRUE if TYPE is dependent, in the sense of
11420 [temp.dep.type]. */
11422 bool
11423 dependent_type_p (tree type)
11425 /* If there are no template parameters in scope, then there can't be
11426 any dependent types. */
11427 if (!processing_template_decl)
11428 return false;
11430 /* If the type is NULL, we have not computed a type for the entity
11431 in question; in that case, the type is dependent. */
11432 if (!type)
11433 return true;
11435 /* Erroneous types can be considered non-dependent. */
11436 if (type == error_mark_node)
11437 return false;
11439 /* If we have not already computed the appropriate value for TYPE,
11440 do so now. */
11441 if (!TYPE_DEPENDENT_P_VALID (type))
11443 TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
11444 TYPE_DEPENDENT_P_VALID (type) = 1;
11447 return TYPE_DEPENDENT_P (type);
11450 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION. */
11452 static bool
11453 dependent_scope_ref_p (tree expression, bool criterion (tree))
11455 tree scope;
11456 tree name;
11458 my_friendly_assert (TREE_CODE (expression) == SCOPE_REF, 20030714);
11460 if (!TYPE_P (TREE_OPERAND (expression, 0)))
11461 return true;
11463 scope = TREE_OPERAND (expression, 0);
11464 name = TREE_OPERAND (expression, 1);
11466 /* [temp.dep.expr]
11468 An id-expression is type-dependent if it contains a
11469 nested-name-specifier that contains a class-name that names a
11470 dependent type. */
11471 /* The suggested resolution to Core Issue 2 implies that if the
11472 qualifying type is the current class, then we must peek
11473 inside it. */
11474 if (DECL_P (name)
11475 && currently_open_class (scope)
11476 && !criterion (name))
11477 return false;
11478 if (dependent_type_p (scope))
11479 return true;
11481 return false;
11484 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
11485 [temp.dep.constexpr] */
11487 bool
11488 value_dependent_expression_p (tree expression)
11490 if (!processing_template_decl)
11491 return false;
11493 /* A name declared with a dependent type. */
11494 if (TREE_CODE (expression) == LOOKUP_EXPR
11495 || (DECL_P (expression)
11496 && type_dependent_expression_p (expression)))
11497 return true;
11498 /* A non-type template parameter. */
11499 if ((TREE_CODE (expression) == CONST_DECL
11500 && DECL_TEMPLATE_PARM_P (expression))
11501 || TREE_CODE (expression) == TEMPLATE_PARM_INDEX)
11502 return true;
11503 /* A constant with integral or enumeration type and is initialized
11504 with an expression that is value-dependent. */
11505 if (TREE_CODE (expression) == VAR_DECL
11506 && DECL_INITIAL (expression)
11507 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
11508 && value_dependent_expression_p (DECL_INITIAL (expression)))
11509 return true;
11510 /* These expressions are value-dependent if the type to which the
11511 cast occurs is dependent or the expression being casted is
11512 value-dependent. */
11513 if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
11514 || TREE_CODE (expression) == STATIC_CAST_EXPR
11515 || TREE_CODE (expression) == CONST_CAST_EXPR
11516 || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
11517 || TREE_CODE (expression) == CAST_EXPR)
11519 if (dependent_type_p (TREE_TYPE (expression)))
11520 return true;
11521 /* A functional cast has a list of operands. */
11522 expression = TREE_OPERAND (expression, 0);
11523 if (TREE_CODE (expression) == TREE_LIST)
11527 if (value_dependent_expression_p (TREE_VALUE (expression)))
11528 return true;
11529 expression = TREE_CHAIN (expression);
11531 while (expression);
11532 return false;
11534 else
11535 return value_dependent_expression_p (expression);
11537 /* A `sizeof' expression is value-dependent if the operand is
11538 type-dependent. */
11539 if (TREE_CODE (expression) == SIZEOF_EXPR
11540 || TREE_CODE (expression) == ALIGNOF_EXPR)
11542 expression = TREE_OPERAND (expression, 0);
11543 if (TYPE_P (expression))
11544 return dependent_type_p (expression);
11545 return type_dependent_expression_p (expression);
11547 if (TREE_CODE (expression) == SCOPE_REF)
11548 return dependent_scope_ref_p (expression, value_dependent_expression_p);
11549 /* A constant expression is value-dependent if any subexpression is
11550 value-dependent. */
11551 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (expression))))
11553 switch (TREE_CODE_CLASS (TREE_CODE (expression)))
11555 case '1':
11556 return (value_dependent_expression_p
11557 (TREE_OPERAND (expression, 0)));
11558 case '<':
11559 case '2':
11560 return ((value_dependent_expression_p
11561 (TREE_OPERAND (expression, 0)))
11562 || (value_dependent_expression_p
11563 (TREE_OPERAND (expression, 1))));
11564 case 'e':
11566 int i;
11567 for (i = 0; i < first_rtl_op (TREE_CODE (expression)); ++i)
11568 /* In some cases, some of the operands may be missing.
11569 (For example, in the case of PREDECREMENT_EXPR, the
11570 amount to increment by may be missing.) That doesn't
11571 make the expression dependent. */
11572 if (TREE_OPERAND (expression, i)
11573 && (value_dependent_expression_p
11574 (TREE_OPERAND (expression, i))))
11575 return true;
11576 return false;
11581 /* The expression is not value-dependent. */
11582 return false;
11585 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
11586 [temp.dep.expr]. */
11588 bool
11589 type_dependent_expression_p (tree expression)
11591 if (!processing_template_decl)
11592 return false;
11594 if (expression == error_mark_node)
11595 return false;
11597 /* Some expression forms are never type-dependent. */
11598 if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
11599 || TREE_CODE (expression) == SIZEOF_EXPR
11600 || TREE_CODE (expression) == ALIGNOF_EXPR
11601 || TREE_CODE (expression) == TYPEID_EXPR
11602 || TREE_CODE (expression) == DELETE_EXPR
11603 || TREE_CODE (expression) == VEC_DELETE_EXPR
11604 || TREE_CODE (expression) == THROW_EXPR)
11605 return false;
11607 /* The types of these expressions depends only on the type to which
11608 the cast occurs. */
11609 if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
11610 || TREE_CODE (expression) == STATIC_CAST_EXPR
11611 || TREE_CODE (expression) == CONST_CAST_EXPR
11612 || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
11613 || TREE_CODE (expression) == CAST_EXPR)
11614 return dependent_type_p (TREE_TYPE (expression));
11616 /* The types of these expressions depends only on the type created
11617 by the expression. */
11618 if (TREE_CODE (expression) == NEW_EXPR
11619 || TREE_CODE (expression) == VEC_NEW_EXPR)
11621 /* For NEW_EXPR tree nodes created inside a template, either
11622 the object type itself or a TREE_LIST may appear as the
11623 operand 1. */
11624 tree type = TREE_OPERAND (expression, 1);
11625 if (TREE_CODE (type) == TREE_LIST)
11626 /* This is an array type. We need to check array dimensions
11627 as well. */
11628 return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
11629 || value_dependent_expression_p
11630 (TREE_OPERAND (TREE_VALUE (type), 1));
11631 else
11632 return dependent_type_p (type);
11635 if (TREE_CODE (expression) == SCOPE_REF
11636 && dependent_scope_ref_p (expression,
11637 type_dependent_expression_p))
11638 return true;
11640 if (TREE_CODE (expression) == FUNCTION_DECL
11641 && DECL_LANG_SPECIFIC (expression)
11642 && DECL_TEMPLATE_INFO (expression)
11643 && (dependent_template_id_p
11644 (DECL_TI_TEMPLATE (expression),
11645 INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
11646 return true;
11648 if (TREE_TYPE (expression) == unknown_type_node)
11650 if (TREE_CODE (expression) == ADDR_EXPR)
11651 return type_dependent_expression_p (TREE_OPERAND (expression, 0));
11652 if (TREE_CODE (expression) == BASELINK)
11653 expression = BASELINK_FUNCTIONS (expression);
11654 if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
11656 if (any_dependent_template_arguments_p (TREE_OPERAND (expression,
11657 1)))
11658 return true;
11659 expression = TREE_OPERAND (expression, 0);
11661 if (TREE_CODE (expression) == OVERLOAD)
11663 while (expression)
11665 if (type_dependent_expression_p (OVL_CURRENT (expression)))
11666 return true;
11667 expression = OVL_NEXT (expression);
11669 return false;
11671 abort ();
11674 return (dependent_type_p (TREE_TYPE (expression)));
11677 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
11678 contains a type-dependent expression. */
11680 bool
11681 any_type_dependent_arguments_p (tree args)
11683 while (args)
11685 tree arg = TREE_VALUE (args);
11687 if (type_dependent_expression_p (arg))
11688 return true;
11689 args = TREE_CHAIN (args);
11691 return false;
11694 /* Returns TRUE if the ARG (a template argument) is dependent. */
11696 static bool
11697 dependent_template_arg_p (tree arg)
11699 if (!processing_template_decl)
11700 return false;
11702 if (TREE_CODE (arg) == TEMPLATE_DECL
11703 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11704 return dependent_template_p (arg);
11705 else if (TYPE_P (arg))
11706 return dependent_type_p (arg);
11707 else
11708 return (type_dependent_expression_p (arg)
11709 || value_dependent_expression_p (arg));
11712 /* Returns true if ARGS (a collection of template arguments) contains
11713 any dependent arguments. */
11715 bool
11716 any_dependent_template_arguments_p (tree args)
11718 if (!args)
11719 return false;
11721 my_friendly_assert (TREE_CODE (args) == TREE_LIST
11722 || TREE_CODE (args) == TREE_VEC,
11723 20030707);
11725 if (TREE_CODE (args) == TREE_LIST)
11727 while (args)
11729 if (dependent_template_arg_p (TREE_VALUE (args)))
11730 return true;
11731 args = TREE_CHAIN (args);
11734 else
11736 int i;
11737 for (i = 0; i < TREE_VEC_LENGTH (args); ++i)
11738 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
11739 return true;
11742 return false;
11745 /* Returns TRUE if the template TMPL is dependent. */
11747 bool
11748 dependent_template_p (tree tmpl)
11750 /* Template template parameters are dependent. */
11751 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
11752 || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
11753 return true;
11754 /* So are qualified names that have not been looked up. */
11755 if (TREE_CODE (tmpl) == SCOPE_REF)
11756 return true;
11757 /* So are member templates of dependent classes. */
11758 if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
11759 return dependent_type_p (DECL_CONTEXT (tmpl));
11760 return false;
11763 /* Returns TRUE if the specialization TMPL<ARGS> is dependent. */
11765 bool
11766 dependent_template_id_p (tree tmpl, tree args)
11768 return (dependent_template_p (tmpl)
11769 || any_dependent_template_arguments_p (args));
11772 /* TYPE is a TYPENAME_TYPE. Returns the ordinary TYPE to which the
11773 TYPENAME_TYPE corresponds. Returns ERROR_MARK_NODE if no such TYPE
11774 can be found. Note that this function peers inside uninstantiated
11775 templates and therefore should be used only in extremely limited
11776 situations. */
11778 tree
11779 resolve_typename_type (tree type, bool only_current_p)
11781 tree scope;
11782 tree name;
11783 tree decl;
11784 int quals;
11786 my_friendly_assert (TREE_CODE (type) == TYPENAME_TYPE,
11787 20010702);
11789 scope = TYPE_CONTEXT (type);
11790 name = TYPE_IDENTIFIER (type);
11792 /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
11793 it first before we can figure out what NAME refers to. */
11794 if (TREE_CODE (scope) == TYPENAME_TYPE)
11795 scope = resolve_typename_type (scope, only_current_p);
11796 /* If we don't know what SCOPE refers to, then we cannot resolve the
11797 TYPENAME_TYPE. */
11798 if (scope == error_mark_node || TREE_CODE (scope) == TYPENAME_TYPE)
11799 return error_mark_node;
11800 /* If the SCOPE is a template type parameter, we have no way of
11801 resolving the name. */
11802 if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
11803 return type;
11804 /* If the SCOPE is not the current instantiation, there's no reason
11805 to look inside it. */
11806 if (only_current_p && !currently_open_class (scope))
11807 return error_mark_node;
11808 /* If SCOPE is a partial instantiation, it will not have a valid
11809 TYPE_FIELDS list, so use the original template. */
11810 scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
11811 /* Enter the SCOPE so that name lookup will be resolved as if we
11812 were in the class definition. In particular, SCOPE will no
11813 longer be considered a dependent type. */
11814 push_scope (scope);
11815 /* Look up the declaration. */
11816 decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
11817 /* Obtain the set of qualifiers applied to the TYPE. */
11818 quals = cp_type_quals (type);
11819 /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
11820 find a TEMPLATE_DECL. Otherwise, we want to find a TYPE_DECL. */
11821 if (!decl)
11822 type = error_mark_node;
11823 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
11824 && TREE_CODE (decl) == TYPE_DECL)
11825 type = TREE_TYPE (decl);
11826 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
11827 && DECL_CLASS_TEMPLATE_P (decl))
11829 tree tmpl;
11830 tree args;
11831 /* Obtain the template and the arguments. */
11832 tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
11833 args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
11834 /* Instantiate the template. */
11835 type = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
11836 /*entering_scope=*/0,
11837 tf_error);
11839 else
11840 type = error_mark_node;
11841 /* Qualify the resulting type. */
11842 if (type != error_mark_node && quals)
11843 type = cp_build_qualified_type (type, quals);
11844 /* Leave the SCOPE. */
11845 pop_scope (scope);
11847 return type;
11850 /* EXPR is an expression which is not type-dependent. Return a proxy
11851 for EXPR that can be used to compute the types of larger
11852 expressions containing EXPR. */
11854 tree
11855 build_non_dependent_expr (tree expr)
11857 /* Preserve null pointer constants so that the type of things like
11858 "p == 0" where "p" is a pointer can be determined. */
11859 if (null_ptr_cst_p (expr))
11860 return expr;
11861 /* Preserve OVERLOADs; the functions must be available to resolve
11862 types. */
11863 if (TREE_CODE (expr) == OVERLOAD)
11864 return expr;
11865 /* Otherwise, build a NON_DEPENDENT_EXPR.
11867 REFERENCE_TYPEs are not stripped for expressions in templates
11868 because doing so would play havoc with mangling. Consider, for
11869 example:
11871 template <typename T> void f<T& g>() { g(); }
11873 In the body of "f", the expression for "g" will have
11874 REFERENCE_TYPE, even though the standard says that it should
11875 not. The reason is that we must preserve the syntactic form of
11876 the expression so that mangling (say) "f<g>" inside the body of
11877 "f" works out correctly. Therefore, the REFERENCE_TYPE is
11878 stripped here. */
11879 return build (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)));
11882 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
11883 Return a new TREE_LIST with the various arguments replaced with
11884 equivalent non-dependent expressions. */
11886 tree
11887 build_non_dependent_args (tree args)
11889 tree a;
11890 tree new_args;
11892 new_args = NULL_TREE;
11893 for (a = args; a; a = TREE_CHAIN (a))
11894 new_args = tree_cons (NULL_TREE,
11895 build_non_dependent_expr (TREE_VALUE (a)),
11896 new_args);
11897 return nreverse (new_args);
11900 #include "gt-cp-pt.h"