Import stripped gcc-4.0.1 sources.
[dragonfly.git] / contrib / gcc-4.0 / gcc / cp / pt.c
blobb5b4f9eaa56a67707844bc782dbdc34413ea8f96
1 /* Handle parameterized types (templates) for GNU C++.
2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
4 Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
5 Rewritten by Jason Merrill (jason@cygnus.com).
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
12 any later version.
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING. If not, write to
21 the Free Software Foundation, 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 "pointer-set.h"
36 #include "flags.h"
37 #include "cp-tree.h"
38 #include "tree-inline.h"
39 #include "decl.h"
40 #include "output.h"
41 #include "except.h"
42 #include "toplev.h"
43 #include "rtl.h"
44 #include "timevar.h"
45 #include "tree-iterator.h"
47 /* The type of functions taking a tree, and some additional data, and
48 returning an int. */
49 typedef int (*tree_fn_t) (tree, void*);
51 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
52 instantiations have been deferred, either because their definitions
53 were not yet available, or because we were putting off doing the work.
54 The TREE_PURPOSE of each entry is either a DECL (for a function or
55 static data member), or a TYPE (for a class) indicating what we are
56 hoping to instantiate. The TREE_VALUE is not used. */
57 static GTY(()) tree pending_templates;
58 static GTY(()) tree last_pending_template;
60 int processing_template_parmlist;
61 static int template_header_count;
63 static GTY(()) tree saved_trees;
64 static GTY(()) varray_type inline_parm_levels;
65 static size_t inline_parm_levels_used;
67 static GTY(()) tree current_tinst_level;
69 static GTY(()) tree saved_access_scope;
71 /* Live only within one (recursive) call to tsubst_expr. We use
72 this to pass the statement expression node from the STMT_EXPR
73 to the EXPR_STMT that is its result. */
74 static tree cur_stmt_expr;
76 /* A map from local variable declarations in the body of the template
77 presently being instantiated to the corresponding instantiated
78 local variables. */
79 static htab_t local_specializations;
81 #define UNIFY_ALLOW_NONE 0
82 #define UNIFY_ALLOW_MORE_CV_QUAL 1
83 #define UNIFY_ALLOW_LESS_CV_QUAL 2
84 #define UNIFY_ALLOW_DERIVED 4
85 #define UNIFY_ALLOW_INTEGER 8
86 #define UNIFY_ALLOW_OUTER_LEVEL 16
87 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
88 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
89 #define UNIFY_ALLOW_MAX_CORRECTION 128
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, bool);
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 tree get_class_bindings (tree, tree, tree);
104 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t, int);
105 static void tsubst_enum (tree, tree, tree);
106 static tree add_to_template_args (tree, tree);
107 static tree add_outermost_template_args (tree, tree);
108 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
109 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*);
110 static int type_unification_real (tree, tree, tree, tree,
111 int, unification_kind_t, int, int);
112 static void note_template_header (int);
113 static tree convert_nontype_argument_function (tree, tree);
114 static tree convert_nontype_argument (tree, tree);
115 static tree convert_template_argument (tree, tree, tree,
116 tsubst_flags_t, int, tree);
117 static tree get_bindings_overload (tree, tree, tree);
118 static int for_each_template_parm (tree, tree_fn_t, void*,
119 struct pointer_set_t*);
120 static tree build_template_parm_index (int, int, int, tree, tree);
121 static int inline_needs_template_parms (tree);
122 static void push_inline_template_parms_recursive (tree, int);
123 static tree retrieve_local_specialization (tree);
124 static void register_local_specialization (tree, tree);
125 static tree reduce_template_parm_level (tree, tree, int);
126 static int mark_template_parm (tree, void *);
127 static int template_parm_this_level_p (tree, void *);
128 static tree tsubst_friend_function (tree, tree);
129 static tree tsubst_friend_class (tree, tree);
130 static int can_complete_type_without_circularity (tree);
131 static tree get_bindings (tree, tree, tree);
132 static tree get_bindings_real (tree, tree, tree, int, int, int);
133 static int template_decl_level (tree);
134 static int check_cv_quals_for_unify (int, tree, tree);
135 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
136 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
137 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
138 static void regenerate_decl_from_template (tree, tree);
139 static tree most_specialized (tree, tree, tree);
140 static tree most_specialized_class (tree, tree);
141 static int template_class_depth_real (tree, int);
142 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
143 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
144 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
145 static void check_specialization_scope (void);
146 static tree process_partial_specialization (tree);
147 static void set_current_access_from_decl (tree);
148 static void check_default_tmpl_args (tree, tree, int, int);
149 static tree tsubst_call_declarator_parms (tree, tree, tsubst_flags_t, tree);
150 static tree get_template_base (tree, tree, tree, tree);
151 static int verify_class_unification (tree, tree, tree);
152 static tree try_class_unification (tree, tree, tree, tree);
153 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
154 tree, tree);
155 static tree determine_specialization (tree, tree, tree *, int, int);
156 static int template_args_equal (tree, tree);
157 static void tsubst_default_arguments (tree);
158 static tree for_each_template_parm_r (tree *, int *, void *);
159 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
160 static void copy_default_args_to_explicit_spec (tree);
161 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
162 static int eq_local_specializations (const void *, const void *);
163 static bool dependent_type_p_r (tree);
164 static tree tsubst (tree, tree, tsubst_flags_t, tree);
165 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree);
166 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
168 /* Make the current scope suitable for access checking when we are
169 processing T. T can be FUNCTION_DECL for instantiated function
170 template, or VAR_DECL for static member variable (need by
171 instantiate_decl). */
173 static void
174 push_access_scope (tree t)
176 gcc_assert (TREE_CODE (t) == FUNCTION_DECL
177 || TREE_CODE (t) == VAR_DECL);
179 if (DECL_FRIEND_CONTEXT (t))
180 push_nested_class (DECL_FRIEND_CONTEXT (t));
181 else if (DECL_CLASS_SCOPE_P (t))
182 push_nested_class (DECL_CONTEXT (t));
183 else
184 push_to_top_level ();
186 if (TREE_CODE (t) == FUNCTION_DECL)
188 saved_access_scope = tree_cons
189 (NULL_TREE, current_function_decl, saved_access_scope);
190 current_function_decl = t;
194 /* Restore the scope set up by push_access_scope. T is the node we
195 are processing. */
197 static void
198 pop_access_scope (tree t)
200 if (TREE_CODE (t) == FUNCTION_DECL)
202 current_function_decl = TREE_VALUE (saved_access_scope);
203 saved_access_scope = TREE_CHAIN (saved_access_scope);
206 if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
207 pop_nested_class ();
208 else
209 pop_from_top_level ();
212 /* Do any processing required when DECL (a member template
213 declaration) is finished. Returns the TEMPLATE_DECL corresponding
214 to DECL, unless it is a specialization, in which case the DECL
215 itself is returned. */
217 tree
218 finish_member_template_decl (tree decl)
220 if (decl == error_mark_node)
221 return error_mark_node;
223 gcc_assert (DECL_P (decl));
225 if (TREE_CODE (decl) == TYPE_DECL)
227 tree type;
229 type = TREE_TYPE (decl);
230 if (IS_AGGR_TYPE (type)
231 && CLASSTYPE_TEMPLATE_INFO (type)
232 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
234 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
235 check_member_template (tmpl);
236 return tmpl;
238 return NULL_TREE;
240 else if (TREE_CODE (decl) == FIELD_DECL)
241 error ("data member %qD cannot be a member template", decl);
242 else if (DECL_TEMPLATE_INFO (decl))
244 if (!DECL_TEMPLATE_SPECIALIZATION (decl))
246 check_member_template (DECL_TI_TEMPLATE (decl));
247 return DECL_TI_TEMPLATE (decl);
249 else
250 return decl;
252 else
253 error ("invalid member template declaration %qD", decl);
255 return error_mark_node;
258 /* Returns the template nesting level of the indicated class TYPE.
260 For example, in:
261 template <class T>
262 struct A
264 template <class U>
265 struct B {};
268 A<T>::B<U> has depth two, while A<T> has depth one.
269 Both A<T>::B<int> and A<int>::B<U> have depth one, if
270 COUNT_SPECIALIZATIONS is 0 or if they are instantiations, not
271 specializations.
273 This function is guaranteed to return 0 if passed NULL_TREE so
274 that, for example, `template_class_depth (current_class_type)' is
275 always safe. */
277 static int
278 template_class_depth_real (tree type, int count_specializations)
280 int depth;
282 for (depth = 0;
283 type && TREE_CODE (type) != NAMESPACE_DECL;
284 type = (TREE_CODE (type) == FUNCTION_DECL)
285 ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
287 if (TREE_CODE (type) != FUNCTION_DECL)
289 if (CLASSTYPE_TEMPLATE_INFO (type)
290 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type))
291 && ((count_specializations
292 && CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
293 || uses_template_parms (CLASSTYPE_TI_ARGS (type))))
294 ++depth;
296 else
298 if (DECL_TEMPLATE_INFO (type)
299 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (type))
300 && ((count_specializations
301 && DECL_TEMPLATE_SPECIALIZATION (type))
302 || uses_template_parms (DECL_TI_ARGS (type))))
303 ++depth;
307 return depth;
310 /* Returns the template nesting level of the indicated class TYPE.
311 Like template_class_depth_real, but instantiations do not count in
312 the depth. */
314 int
315 template_class_depth (tree type)
317 return template_class_depth_real (type, /*count_specializations=*/0);
320 /* Returns 1 if processing DECL as part of do_pending_inlines
321 needs us to push template parms. */
323 static int
324 inline_needs_template_parms (tree decl)
326 if (! DECL_TEMPLATE_INFO (decl))
327 return 0;
329 return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
330 > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
333 /* Subroutine of maybe_begin_member_template_processing.
334 Push the template parms in PARMS, starting from LEVELS steps into the
335 chain, and ending at the beginning, since template parms are listed
336 innermost first. */
338 static void
339 push_inline_template_parms_recursive (tree parmlist, int levels)
341 tree parms = TREE_VALUE (parmlist);
342 int i;
344 if (levels > 1)
345 push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
347 ++processing_template_decl;
348 current_template_parms
349 = tree_cons (size_int (processing_template_decl),
350 parms, current_template_parms);
351 TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
353 begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
354 NULL);
355 for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
357 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
358 gcc_assert (DECL_P (parm));
360 switch (TREE_CODE (parm))
362 case TYPE_DECL:
363 case TEMPLATE_DECL:
364 pushdecl (parm);
365 break;
367 case PARM_DECL:
369 /* Make a CONST_DECL as is done in process_template_parm.
370 It is ugly that we recreate this here; the original
371 version built in process_template_parm is no longer
372 available. */
373 tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
374 TREE_TYPE (parm));
375 DECL_ARTIFICIAL (decl) = 1;
376 TREE_CONSTANT (decl) = 1;
377 TREE_INVARIANT (decl) = 1;
378 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 gcc_unreachable ();
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 /* Return a new template argument vector which contains all of ARGS,
446 but has as its innermost set of arguments the EXTRA_ARGS. */
448 static tree
449 add_to_template_args (tree args, tree extra_args)
451 tree new_args;
452 int extra_depth;
453 int i;
454 int j;
456 extra_depth = TMPL_ARGS_DEPTH (extra_args);
457 new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
459 for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
460 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
462 for (j = 1; j <= extra_depth; ++j, ++i)
463 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
465 return new_args;
468 /* Like add_to_template_args, but only the outermost ARGS are added to
469 the EXTRA_ARGS. In particular, all but TMPL_ARGS_DEPTH
470 (EXTRA_ARGS) levels are added. This function is used to combine
471 the template arguments from a partial instantiation with the
472 template arguments used to attain the full instantiation from the
473 partial instantiation. */
475 static tree
476 add_outermost_template_args (tree args, tree extra_args)
478 tree new_args;
480 /* If there are more levels of EXTRA_ARGS than there are ARGS,
481 something very fishy is going on. */
482 gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
484 /* If *all* the new arguments will be the EXTRA_ARGS, just return
485 them. */
486 if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
487 return extra_args;
489 /* For the moment, we make ARGS look like it contains fewer levels. */
490 TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
492 new_args = add_to_template_args (args, extra_args);
494 /* Now, we restore ARGS to its full dimensions. */
495 TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
497 return new_args;
500 /* Return the N levels of innermost template arguments from the ARGS. */
502 tree
503 get_innermost_template_args (tree args, int n)
505 tree new_args;
506 int extra_levels;
507 int i;
509 gcc_assert (n >= 0);
511 /* If N is 1, just return the innermost set of template arguments. */
512 if (n == 1)
513 return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
515 /* If we're not removing anything, just return the arguments we were
516 given. */
517 extra_levels = TMPL_ARGS_DEPTH (args) - n;
518 gcc_assert (extra_levels >= 0);
519 if (extra_levels == 0)
520 return args;
522 /* Make a new set of arguments, not containing the outer arguments. */
523 new_args = make_tree_vec (n);
524 for (i = 1; i <= n; ++i)
525 SET_TMPL_ARGS_LEVEL (new_args, i,
526 TMPL_ARGS_LEVEL (args, i + extra_levels));
528 return new_args;
531 /* We've got a template header coming up; push to a new level for storing
532 the parms. */
534 void
535 begin_template_parm_list (void)
537 /* We use a non-tag-transparent scope here, which causes pushtag to
538 put tags in this scope, rather than in the enclosing class or
539 namespace scope. This is the right thing, since we want
540 TEMPLATE_DECLS, and not TYPE_DECLS for template classes. For a
541 global template class, push_template_decl handles putting the
542 TEMPLATE_DECL into top-level scope. For a nested template class,
543 e.g.:
545 template <class T> struct S1 {
546 template <class T> struct S2 {};
549 pushtag contains special code to call pushdecl_with_scope on the
550 TEMPLATE_DECL for S2. */
551 begin_scope (sk_template_parms, NULL);
552 ++processing_template_decl;
553 ++processing_template_parmlist;
554 note_template_header (0);
557 /* This routine is called when a specialization is declared. If it is
558 invalid to declare a specialization here, an error is reported. */
560 static void
561 check_specialization_scope (void)
563 tree scope = current_scope ();
565 /* [temp.expl.spec]
567 An explicit specialization shall be declared in the namespace of
568 which the template is a member, or, for member templates, in the
569 namespace of which the enclosing class or enclosing class
570 template is a member. An explicit specialization of a member
571 function, member class or static data member of a class template
572 shall be declared in the namespace of which the class template
573 is a member. */
574 if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
575 error ("explicit specialization in non-namespace scope %qD", scope);
577 /* [temp.expl.spec]
579 In an explicit specialization declaration for a member of a class
580 template or a member template that appears in namespace scope,
581 the member template and some of its enclosing class templates may
582 remain unspecialized, except that the declaration shall not
583 explicitly specialize a class member template if its enclosing
584 class templates are not explicitly specialized as well. */
585 if (current_template_parms)
586 error ("enclosing class templates are not explicitly specialized");
589 /* We've just seen template <>. */
591 void
592 begin_specialization (void)
594 begin_scope (sk_template_spec, NULL);
595 note_template_header (1);
596 check_specialization_scope ();
599 /* Called at then end of processing a declaration preceded by
600 template<>. */
602 void
603 end_specialization (void)
605 finish_scope ();
606 reset_specialization ();
609 /* Any template <>'s that we have seen thus far are not referring to a
610 function specialization. */
612 void
613 reset_specialization (void)
615 processing_specialization = 0;
616 template_header_count = 0;
619 /* We've just seen a template header. If SPECIALIZATION is nonzero,
620 it was of the form template <>. */
622 static void
623 note_template_header (int specialization)
625 processing_specialization = specialization;
626 template_header_count++;
629 /* We're beginning an explicit instantiation. */
631 void
632 begin_explicit_instantiation (void)
634 gcc_assert (!processing_explicit_instantiation);
635 processing_explicit_instantiation = true;
639 void
640 end_explicit_instantiation (void)
642 gcc_assert (processing_explicit_instantiation);
643 processing_explicit_instantiation = false;
646 /* A explicit specialization or partial specialization TMPL is being
647 declared. Check that the namespace in which the specialization is
648 occurring is permissible. Returns false iff it is invalid to
649 specialize TMPL in the current namespace. */
651 static bool
652 check_specialization_namespace (tree tmpl)
654 tree tpl_ns = decl_namespace_context (tmpl);
656 /* [tmpl.expl.spec]
658 An explicit specialization shall be declared in the namespace of
659 which the template is a member, or, for member templates, in the
660 namespace of which the enclosing class or enclosing class
661 template is a member. An explicit specialization of a member
662 function, member class or static data member of a class template
663 shall be declared in the namespace of which the class template is
664 a member. */
665 if (is_associated_namespace (current_namespace, tpl_ns))
666 /* Same or super-using namespace. */
667 return true;
668 else
670 pedwarn ("specialization of %qD in different namespace", tmpl);
671 cp_pedwarn_at (" from definition of %q#D", tmpl);
672 return false;
676 /* The TYPE is being declared. If it is a template type, that means it
677 is a partial specialization. Do appropriate error-checking. */
679 void
680 maybe_process_partial_specialization (tree type)
682 /* TYPE maybe an ERROR_MARK_NODE. */
683 tree context = TYPE_P (type) ? TYPE_CONTEXT (type) : NULL_TREE;
685 if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
687 /* This is for ordinary explicit specialization and partial
688 specialization of a template class such as:
690 template <> class C<int>;
694 template <class T> class C<T*>;
696 Make sure that `C<int>' and `C<T*>' are implicit instantiations. */
698 if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
699 && !COMPLETE_TYPE_P (type))
701 check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
702 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
703 if (processing_template_decl)
704 push_template_decl (TYPE_MAIN_DECL (type));
706 else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
707 error ("specialization of %qT after instantiation", type);
709 else if (CLASS_TYPE_P (type)
710 && !CLASSTYPE_USE_TEMPLATE (type)
711 && CLASSTYPE_TEMPLATE_INFO (type)
712 && context && CLASS_TYPE_P (context)
713 && CLASSTYPE_TEMPLATE_INFO (context))
715 /* This is for an explicit specialization of member class
716 template according to [temp.expl.spec/18]:
718 template <> template <class U> class C<int>::D;
720 The context `C<int>' must be an implicit instantiation.
721 Otherwise this is just a member class template declared
722 earlier like:
724 template <> class C<int> { template <class U> class D; };
725 template <> template <class U> class C<int>::D;
727 In the first case, `C<int>::D' is a specialization of `C<T>::D'
728 while in the second case, `C<int>::D' is a primary template
729 and `C<T>::D' may not exist. */
731 if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
732 && !COMPLETE_TYPE_P (type))
734 tree t;
736 if (current_namespace
737 != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
739 pedwarn ("specializing %q#T in different namespace", type);
740 cp_pedwarn_at (" from definition of %q#D",
741 CLASSTYPE_TI_TEMPLATE (type));
744 /* Check for invalid specialization after instantiation:
746 template <> template <> class C<int>::D<int>;
747 template <> template <class U> class C<int>::D; */
749 for (t = DECL_TEMPLATE_INSTANTIATIONS
750 (most_general_template (CLASSTYPE_TI_TEMPLATE (type)));
751 t; t = TREE_CHAIN (t))
752 if (TREE_VALUE (t) != type
753 && TYPE_CONTEXT (TREE_VALUE (t)) == context)
754 error ("specialization %qT after instantiation %qT",
755 type, TREE_VALUE (t));
757 /* Mark TYPE as a specialization. And as a result, we only
758 have one level of template argument for the innermost
759 class template. */
760 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
761 CLASSTYPE_TI_ARGS (type)
762 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
765 else if (processing_specialization)
766 error ("explicit specialization of non-template %qT", type);
769 /* Returns nonzero if we can optimize the retrieval of specializations
770 for TMPL, a TEMPLATE_DECL. In particular, for such a template, we
771 do not use DECL_TEMPLATE_SPECIALIZATIONS at all. */
773 static inline bool
774 optimize_specialization_lookup_p (tree tmpl)
776 return (DECL_FUNCTION_TEMPLATE_P (tmpl)
777 && DECL_CLASS_SCOPE_P (tmpl)
778 /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
779 parameter. */
780 && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
781 /* The optimized lookup depends on the fact that the
782 template arguments for the member function template apply
783 purely to the containing class, which is not true if the
784 containing class is an explicit or partial
785 specialization. */
786 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
787 && !DECL_MEMBER_TEMPLATE_P (tmpl)
788 && !DECL_CONV_FN_P (tmpl)
789 /* It is possible to have a template that is not a member
790 template and is not a member of a template class:
792 template <typename T>
793 struct S { friend A::f(); };
795 Here, the friend function is a template, but the context does
796 not have template information. The optimized lookup relies
797 on having ARGS be the template arguments for both the class
798 and the function template. */
799 && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
802 /* Retrieve the specialization (in the sense of [temp.spec] - a
803 specialization is either an instantiation or an explicit
804 specialization) of TMPL for the given template ARGS. If there is
805 no such specialization, return NULL_TREE. The ARGS are a vector of
806 arguments, or a vector of vectors of arguments, in the case of
807 templates with more than one level of parameters.
809 If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
810 then we search for a partial specialization matching ARGS. This
811 parameter is ignored if TMPL is not a class template. */
813 static tree
814 retrieve_specialization (tree tmpl, tree args,
815 bool class_specializations_p)
817 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
819 /* There should be as many levels of arguments as there are
820 levels of parameters. */
821 gcc_assert (TMPL_ARGS_DEPTH (args)
822 == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
824 if (optimize_specialization_lookup_p (tmpl))
826 tree class_template;
827 tree class_specialization;
828 VEC(tree) *methods;
829 tree fns;
830 int idx;
832 /* The template arguments actually apply to the containing
833 class. Find the class specialization with those
834 arguments. */
835 class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
836 class_specialization
837 = retrieve_specialization (class_template, args,
838 /*class_specializations_p=*/false);
839 if (!class_specialization)
840 return NULL_TREE;
841 /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
842 for the specialization. */
843 idx = class_method_index_for_fn (class_specialization, tmpl);
844 if (idx == -1)
845 return NULL_TREE;
846 /* Iterate through the methods with the indicated name, looking
847 for the one that has an instance of TMPL. */
848 methods = CLASSTYPE_METHOD_VEC (class_specialization);
849 for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
851 tree fn = OVL_CURRENT (fns);
852 if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl)
853 return fn;
855 return NULL_TREE;
857 else
859 tree *sp;
860 tree *head;
862 /* Class templates store their instantiations on the
863 DECL_TEMPLATE_INSTANTIATIONS list; other templates use the
864 DECL_TEMPLATE_SPECIALIZATIONS list. */
865 if (!class_specializations_p
866 && TREE_CODE (DECL_TEMPLATE_RESULT (tmpl)) == TYPE_DECL)
867 sp = &DECL_TEMPLATE_INSTANTIATIONS (tmpl);
868 else
869 sp = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
870 head = sp;
871 /* Iterate through the list until we find a matching template. */
872 while (*sp != NULL_TREE)
874 tree spec = *sp;
876 if (comp_template_args (TREE_PURPOSE (spec), args))
878 /* Use the move-to-front heuristic to speed up future
879 searches. */
880 if (spec != *head)
882 *sp = TREE_CHAIN (*sp);
883 TREE_CHAIN (spec) = *head;
884 *head = spec;
886 return TREE_VALUE (spec);
888 sp = &TREE_CHAIN (spec);
892 return NULL_TREE;
895 /* Like retrieve_specialization, but for local declarations. */
897 static tree
898 retrieve_local_specialization (tree tmpl)
900 tree spec = htab_find_with_hash (local_specializations, tmpl,
901 htab_hash_pointer (tmpl));
902 return spec ? TREE_PURPOSE (spec) : NULL_TREE;
905 /* Returns nonzero iff DECL is a specialization of TMPL. */
908 is_specialization_of (tree decl, tree tmpl)
910 tree t;
912 if (TREE_CODE (decl) == FUNCTION_DECL)
914 for (t = decl;
915 t != NULL_TREE;
916 t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
917 if (t == tmpl)
918 return 1;
920 else
922 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
924 for (t = TREE_TYPE (decl);
925 t != NULL_TREE;
926 t = CLASSTYPE_USE_TEMPLATE (t)
927 ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
928 if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
929 return 1;
932 return 0;
935 /* Returns nonzero iff DECL is a specialization of friend declaration
936 FRIEND according to [temp.friend]. */
938 bool
939 is_specialization_of_friend (tree decl, tree friend)
941 bool need_template = true;
942 int template_depth;
944 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
945 || TREE_CODE (decl) == TYPE_DECL);
947 /* For [temp.friend/6] when FRIEND is an ordinary member function
948 of a template class, we want to check if DECL is a specialization
949 if this. */
950 if (TREE_CODE (friend) == FUNCTION_DECL
951 && DECL_TEMPLATE_INFO (friend)
952 && !DECL_USE_TEMPLATE (friend))
954 /* We want a TEMPLATE_DECL for `is_specialization_of'. */
955 friend = DECL_TI_TEMPLATE (friend);
956 need_template = false;
958 else if (TREE_CODE (friend) == TEMPLATE_DECL
959 && !PRIMARY_TEMPLATE_P (friend))
960 need_template = false;
962 /* There is nothing to do if this is not a template friend. */
963 if (TREE_CODE (friend) != TEMPLATE_DECL)
964 return false;
966 if (is_specialization_of (decl, friend))
967 return true;
969 /* [temp.friend/6]
970 A member of a class template may be declared to be a friend of a
971 non-template class. In this case, the corresponding member of
972 every specialization of the class template is a friend of the
973 class granting friendship.
975 For example, given a template friend declaration
977 template <class T> friend void A<T>::f();
979 the member function below is considered a friend
981 template <> struct A<int> {
982 void f();
985 For this type of template friend, TEMPLATE_DEPTH below will be
986 nonzero. To determine if DECL is a friend of FRIEND, we first
987 check if the enclosing class is a specialization of another. */
989 template_depth = template_class_depth (DECL_CONTEXT (friend));
990 if (template_depth
991 && DECL_CLASS_SCOPE_P (decl)
992 && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
993 CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend))))
995 /* Next, we check the members themselves. In order to handle
996 a few tricky cases, such as when FRIEND's are
998 template <class T> friend void A<T>::g(T t);
999 template <class T> template <T t> friend void A<T>::h();
1001 and DECL's are
1003 void A<int>::g(int);
1004 template <int> void A<int>::h();
1006 we need to figure out ARGS, the template arguments from
1007 the context of DECL. This is required for template substitution
1008 of `T' in the function parameter of `g' and template parameter
1009 of `h' in the above examples. Here ARGS corresponds to `int'. */
1011 tree context = DECL_CONTEXT (decl);
1012 tree args = NULL_TREE;
1013 int current_depth = 0;
1015 while (current_depth < template_depth)
1017 if (CLASSTYPE_TEMPLATE_INFO (context))
1019 if (current_depth == 0)
1020 args = TYPE_TI_ARGS (context);
1021 else
1022 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1023 current_depth++;
1025 context = TYPE_CONTEXT (context);
1028 if (TREE_CODE (decl) == FUNCTION_DECL)
1030 bool is_template;
1031 tree friend_type;
1032 tree decl_type;
1033 tree friend_args_type;
1034 tree decl_args_type;
1036 /* Make sure that both DECL and FRIEND are templates or
1037 non-templates. */
1038 is_template = DECL_TEMPLATE_INFO (decl)
1039 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1040 if (need_template ^ is_template)
1041 return false;
1042 else if (is_template)
1044 /* If both are templates, check template parameter list. */
1045 tree friend_parms
1046 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1047 args, tf_none);
1048 if (!comp_template_parms
1049 (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1050 friend_parms))
1051 return false;
1053 decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1055 else
1056 decl_type = TREE_TYPE (decl);
1058 friend_type = tsubst_function_type (TREE_TYPE (friend), args,
1059 tf_none, NULL_TREE);
1060 if (friend_type == error_mark_node)
1061 return false;
1063 /* Check if return types match. */
1064 if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1065 return false;
1067 /* Check if function parameter types match, ignoring the
1068 `this' parameter. */
1069 friend_args_type = TYPE_ARG_TYPES (friend_type);
1070 decl_args_type = TYPE_ARG_TYPES (decl_type);
1071 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend))
1072 friend_args_type = TREE_CHAIN (friend_args_type);
1073 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1074 decl_args_type = TREE_CHAIN (decl_args_type);
1076 return compparms (decl_args_type, friend_args_type);
1078 else
1080 /* DECL is a TYPE_DECL */
1081 bool is_template;
1082 tree decl_type = TREE_TYPE (decl);
1084 /* Make sure that both DECL and FRIEND are templates or
1085 non-templates. */
1086 is_template
1087 = CLASSTYPE_TEMPLATE_INFO (decl_type)
1088 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1090 if (need_template ^ is_template)
1091 return false;
1092 else if (is_template)
1094 tree friend_parms;
1095 /* If both are templates, check the name of the two
1096 TEMPLATE_DECL's first because is_friend didn't. */
1097 if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1098 != DECL_NAME (friend))
1099 return false;
1101 /* Now check template parameter list. */
1102 friend_parms
1103 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1104 args, tf_none);
1105 return comp_template_parms
1106 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1107 friend_parms);
1109 else
1110 return (DECL_NAME (decl)
1111 == DECL_NAME (friend));
1114 return false;
1117 /* Register the specialization SPEC as a specialization of TMPL with
1118 the indicated ARGS. Returns SPEC, or an equivalent prior
1119 declaration, if available. */
1121 static tree
1122 register_specialization (tree spec, tree tmpl, tree args)
1124 tree fn;
1126 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
1128 if (TREE_CODE (spec) == FUNCTION_DECL
1129 && uses_template_parms (DECL_TI_ARGS (spec)))
1130 /* This is the FUNCTION_DECL for a partial instantiation. Don't
1131 register it; we want the corresponding TEMPLATE_DECL instead.
1132 We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1133 the more obvious `uses_template_parms (spec)' to avoid problems
1134 with default function arguments. In particular, given
1135 something like this:
1137 template <class T> void f(T t1, T t = T())
1139 the default argument expression is not substituted for in an
1140 instantiation unless and until it is actually needed. */
1141 return spec;
1143 /* There should be as many levels of arguments as there are
1144 levels of parameters. */
1145 gcc_assert (TMPL_ARGS_DEPTH (args)
1146 == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
1148 fn = retrieve_specialization (tmpl, args,
1149 /*class_specializations_p=*/false);
1150 /* We can sometimes try to re-register a specialization that we've
1151 already got. In particular, regenerate_decl_from_template calls
1152 duplicate_decls which will update the specialization list. But,
1153 we'll still get called again here anyhow. It's more convenient
1154 to simply allow this than to try to prevent it. */
1155 if (fn == spec)
1156 return spec;
1157 else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1159 if (DECL_TEMPLATE_INSTANTIATION (fn))
1161 if (TREE_USED (fn)
1162 || DECL_EXPLICIT_INSTANTIATION (fn))
1164 error ("specialization of %qD after instantiation",
1165 fn);
1166 return spec;
1168 else
1170 /* This situation should occur only if the first
1171 specialization is an implicit instantiation, the
1172 second is an explicit specialization, and the
1173 implicit instantiation has not yet been used. That
1174 situation can occur if we have implicitly
1175 instantiated a member function and then specialized
1176 it later.
1178 We can also wind up here if a friend declaration that
1179 looked like an instantiation turns out to be a
1180 specialization:
1182 template <class T> void foo(T);
1183 class S { friend void foo<>(int) };
1184 template <> void foo(int);
1186 We transform the existing DECL in place so that any
1187 pointers to it become pointers to the updated
1188 declaration.
1190 If there was a definition for the template, but not
1191 for the specialization, we want this to look as if
1192 there were no definition, and vice versa. */
1193 DECL_INITIAL (fn) = NULL_TREE;
1194 duplicate_decls (spec, fn);
1196 return fn;
1199 else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1201 if (!duplicate_decls (spec, fn) && DECL_INITIAL (spec))
1202 /* Dup decl failed, but this is a new definition. Set the
1203 line number so any errors match this new
1204 definition. */
1205 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1207 return fn;
1211 /* A specialization must be declared in the same namespace as the
1212 template it is specializing. */
1213 if (DECL_TEMPLATE_SPECIALIZATION (spec)
1214 && !check_specialization_namespace (tmpl))
1215 DECL_CONTEXT (spec) = decl_namespace_context (tmpl);
1217 if (!optimize_specialization_lookup_p (tmpl))
1218 DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
1219 = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
1221 return spec;
1224 /* Unregister the specialization SPEC as a specialization of TMPL.
1225 Replace it with NEW_SPEC, if NEW_SPEC is non-NULL. Returns true
1226 if the SPEC was listed as a specialization of TMPL. */
1228 bool
1229 reregister_specialization (tree spec, tree tmpl, tree new_spec)
1231 tree* s;
1233 for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
1234 *s != NULL_TREE;
1235 s = &TREE_CHAIN (*s))
1236 if (TREE_VALUE (*s) == spec)
1238 if (!new_spec)
1239 *s = TREE_CHAIN (*s);
1240 else
1241 TREE_VALUE (*s) = new_spec;
1242 return 1;
1245 return 0;
1248 /* Compare an entry in the local specializations hash table P1 (which
1249 is really a pointer to a TREE_LIST) with P2 (which is really a
1250 DECL). */
1252 static int
1253 eq_local_specializations (const void *p1, const void *p2)
1255 return TREE_VALUE ((tree) p1) == (tree) p2;
1258 /* Hash P1, an entry in the local specializations table. */
1260 static hashval_t
1261 hash_local_specialization (const void* p1)
1263 return htab_hash_pointer (TREE_VALUE ((tree) p1));
1266 /* Like register_specialization, but for local declarations. We are
1267 registering SPEC, an instantiation of TMPL. */
1269 static void
1270 register_local_specialization (tree spec, tree tmpl)
1272 void **slot;
1274 slot = htab_find_slot_with_hash (local_specializations, tmpl,
1275 htab_hash_pointer (tmpl), INSERT);
1276 *slot = build_tree_list (spec, tmpl);
1279 /* Print the list of candidate FNS in an error message. */
1281 void
1282 print_candidates (tree fns)
1284 tree fn;
1286 const char *str = "candidates are:";
1288 for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1290 tree f;
1292 for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
1293 cp_error_at ("%s %+#D", str, OVL_CURRENT (f));
1294 str = " ";
1298 /* Returns the template (one of the functions given by TEMPLATE_ID)
1299 which can be specialized to match the indicated DECL with the
1300 explicit template args given in TEMPLATE_ID. The DECL may be
1301 NULL_TREE if none is available. In that case, the functions in
1302 TEMPLATE_ID are non-members.
1304 If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1305 specialization of a member template.
1307 The TEMPLATE_COUNT is the number of references to qualifying
1308 template classes that appeared in the name of the function. See
1309 check_explicit_specialization for a more accurate description.
1311 The template args (those explicitly specified and those deduced)
1312 are output in a newly created vector *TARGS_OUT.
1314 If it is impossible to determine the result, an error message is
1315 issued. The error_mark_node is returned to indicate failure. */
1317 static tree
1318 determine_specialization (tree template_id,
1319 tree decl,
1320 tree* targs_out,
1321 int need_member_template,
1322 int template_count)
1324 tree fns;
1325 tree targs;
1326 tree explicit_targs;
1327 tree candidates = NULL_TREE;
1328 tree templates = NULL_TREE;
1329 int header_count;
1330 struct cp_binding_level *b;
1332 *targs_out = NULL_TREE;
1334 if (template_id == error_mark_node)
1335 return error_mark_node;
1337 fns = TREE_OPERAND (template_id, 0);
1338 explicit_targs = TREE_OPERAND (template_id, 1);
1340 if (fns == error_mark_node)
1341 return error_mark_node;
1343 /* Check for baselinks. */
1344 if (BASELINK_P (fns))
1345 fns = BASELINK_FUNCTIONS (fns);
1347 if (!is_overloaded_fn (fns))
1349 error ("%qD is not a function template", fns);
1350 return error_mark_node;
1353 /* Count the number of template headers specified for this
1354 specialization. */
1355 header_count = 0;
1356 for (b = current_binding_level;
1357 b->kind == sk_template_parms;
1358 b = b->level_chain)
1359 ++header_count;
1361 for (; fns; fns = OVL_NEXT (fns))
1363 tree fn = OVL_CURRENT (fns);
1365 if (TREE_CODE (fn) == TEMPLATE_DECL)
1367 tree decl_arg_types;
1368 tree fn_arg_types;
1370 /* DECL might be a specialization of FN. */
1372 /* Adjust the type of DECL in case FN is a static member. */
1373 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1374 if (DECL_STATIC_FUNCTION_P (fn)
1375 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1376 decl_arg_types = TREE_CHAIN (decl_arg_types);
1378 /* Check that the number of function parameters matches.
1379 For example,
1380 template <class T> void f(int i = 0);
1381 template <> void f<int>();
1382 The specialization f<int> is invalid but is not caught
1383 by get_bindings below. */
1385 fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1386 if (list_length (fn_arg_types) != list_length (decl_arg_types))
1387 continue;
1389 /* For a non-static member function, we need to make sure that
1390 the const qualification is the same. This can be done by
1391 checking the 'this' in the argument list. */
1392 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1393 && !same_type_p (TREE_VALUE (fn_arg_types),
1394 TREE_VALUE (decl_arg_types)))
1395 continue;
1397 /* In case of explicit specialization, we need to check if
1398 the number of template headers appearing in the specialization
1399 is correct. This is usually done in check_explicit_specialization,
1400 but the check done there cannot be exhaustive when specializing
1401 member functions. Consider the following code:
1403 template <> void A<int>::f(int);
1404 template <> template <> void A<int>::f(int);
1406 Assuming that A<int> is not itself an explicit specialization
1407 already, the first line specializes "f" which is a non-template
1408 member function, whilst the second line specializes "f" which
1409 is a template member function. So both lines are syntactically
1410 correct, and check_explicit_specialization does not reject
1411 them.
1413 Here, we can do better, as we are matching the specialization
1414 against the declarations. We count the number of template
1415 headers, and we check if they match TEMPLATE_COUNT + 1
1416 (TEMPLATE_COUNT is the number of qualifying template classes,
1417 plus there must be another header for the member template
1418 itself).
1420 Notice that if header_count is zero, this is not a
1421 specialization but rather a template instantiation, so there
1422 is no check we can perform here. */
1423 if (header_count && header_count != template_count + 1)
1424 continue;
1426 /* Check that the number of template arguments at the
1427 innermost level for DECL is the same as for FN. */
1428 if (current_binding_level->kind == sk_template_parms
1429 && !current_binding_level->explicit_spec_p
1430 && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1431 != TREE_VEC_LENGTH (TREE_VALUE (current_template_parms))))
1432 continue;
1434 /* See whether this function might be a specialization of this
1435 template. */
1436 targs = get_bindings (fn, decl, explicit_targs);
1438 if (!targs)
1439 /* We cannot deduce template arguments that when used to
1440 specialize TMPL will produce DECL. */
1441 continue;
1443 /* Save this template, and the arguments deduced. */
1444 templates = tree_cons (targs, fn, templates);
1446 else if (need_member_template)
1447 /* FN is an ordinary member function, and we need a
1448 specialization of a member template. */
1450 else if (TREE_CODE (fn) != FUNCTION_DECL)
1451 /* We can get IDENTIFIER_NODEs here in certain erroneous
1452 cases. */
1454 else if (!DECL_FUNCTION_MEMBER_P (fn))
1455 /* This is just an ordinary non-member function. Nothing can
1456 be a specialization of that. */
1458 else if (DECL_ARTIFICIAL (fn))
1459 /* Cannot specialize functions that are created implicitly. */
1461 else
1463 tree decl_arg_types;
1465 /* This is an ordinary member function. However, since
1466 we're here, we can assume it's enclosing class is a
1467 template class. For example,
1469 template <typename T> struct S { void f(); };
1470 template <> void S<int>::f() {}
1472 Here, S<int>::f is a non-template, but S<int> is a
1473 template class. If FN has the same type as DECL, we
1474 might be in business. */
1476 if (!DECL_TEMPLATE_INFO (fn))
1477 /* Its enclosing class is an explicit specialization
1478 of a template class. This is not a candidate. */
1479 continue;
1481 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1482 TREE_TYPE (TREE_TYPE (fn))))
1483 /* The return types differ. */
1484 continue;
1486 /* Adjust the type of DECL in case FN is a static member. */
1487 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1488 if (DECL_STATIC_FUNCTION_P (fn)
1489 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1490 decl_arg_types = TREE_CHAIN (decl_arg_types);
1492 if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1493 decl_arg_types))
1494 /* They match! */
1495 candidates = tree_cons (NULL_TREE, fn, candidates);
1499 if (templates && TREE_CHAIN (templates))
1501 /* We have:
1503 [temp.expl.spec]
1505 It is possible for a specialization with a given function
1506 signature to be instantiated from more than one function
1507 template. In such cases, explicit specification of the
1508 template arguments must be used to uniquely identify the
1509 function template specialization being specialized.
1511 Note that here, there's no suggestion that we're supposed to
1512 determine which of the candidate templates is most
1513 specialized. However, we, also have:
1515 [temp.func.order]
1517 Partial ordering of overloaded function template
1518 declarations is used in the following contexts to select
1519 the function template to which a function template
1520 specialization refers:
1522 -- when an explicit specialization refers to a function
1523 template.
1525 So, we do use the partial ordering rules, at least for now.
1526 This extension can only serve to make invalid programs valid,
1527 so it's safe. And, there is strong anecdotal evidence that
1528 the committee intended the partial ordering rules to apply;
1529 the EDG front-end has that behavior, and John Spicer claims
1530 that the committee simply forgot to delete the wording in
1531 [temp.expl.spec]. */
1532 tree tmpl = most_specialized (templates, decl, explicit_targs);
1533 if (tmpl && tmpl != error_mark_node)
1535 targs = get_bindings (tmpl, decl, explicit_targs);
1536 templates = tree_cons (targs, tmpl, NULL_TREE);
1540 if (templates == NULL_TREE && candidates == NULL_TREE)
1542 cp_error_at ("template-id %qD for %q+D does not match any template "
1543 "declaration",
1544 template_id, decl);
1545 return error_mark_node;
1547 else if ((templates && TREE_CHAIN (templates))
1548 || (candidates && TREE_CHAIN (candidates))
1549 || (templates && candidates))
1551 cp_error_at ("ambiguous template specialization %qD for %q+D",
1552 template_id, decl);
1553 chainon (candidates, templates);
1554 print_candidates (candidates);
1555 return error_mark_node;
1558 /* We have one, and exactly one, match. */
1559 if (candidates)
1561 /* It was a specialization of an ordinary member function in a
1562 template class. */
1563 *targs_out = copy_node (DECL_TI_ARGS (TREE_VALUE (candidates)));
1564 return DECL_TI_TEMPLATE (TREE_VALUE (candidates));
1567 /* It was a specialization of a template. */
1568 targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
1569 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1571 *targs_out = copy_node (targs);
1572 SET_TMPL_ARGS_LEVEL (*targs_out,
1573 TMPL_ARGS_DEPTH (*targs_out),
1574 TREE_PURPOSE (templates));
1576 else
1577 *targs_out = TREE_PURPOSE (templates);
1578 return TREE_VALUE (templates);
1581 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1582 but with the default argument values filled in from those in the
1583 TMPL_TYPES. */
1585 static tree
1586 copy_default_args_to_explicit_spec_1 (tree spec_types,
1587 tree tmpl_types)
1589 tree new_spec_types;
1591 if (!spec_types)
1592 return NULL_TREE;
1594 if (spec_types == void_list_node)
1595 return void_list_node;
1597 /* Substitute into the rest of the list. */
1598 new_spec_types =
1599 copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1600 TREE_CHAIN (tmpl_types));
1602 /* Add the default argument for this parameter. */
1603 return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1604 TREE_VALUE (spec_types),
1605 new_spec_types);
1608 /* DECL is an explicit specialization. Replicate default arguments
1609 from the template it specializes. (That way, code like:
1611 template <class T> void f(T = 3);
1612 template <> void f(double);
1613 void g () { f (); }
1615 works, as required.) An alternative approach would be to look up
1616 the correct default arguments at the call-site, but this approach
1617 is consistent with how implicit instantiations are handled. */
1619 static void
1620 copy_default_args_to_explicit_spec (tree decl)
1622 tree tmpl;
1623 tree spec_types;
1624 tree tmpl_types;
1625 tree new_spec_types;
1626 tree old_type;
1627 tree new_type;
1628 tree t;
1629 tree object_type = NULL_TREE;
1630 tree in_charge = NULL_TREE;
1631 tree vtt = NULL_TREE;
1633 /* See if there's anything we need to do. */
1634 tmpl = DECL_TI_TEMPLATE (decl);
1635 tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1636 for (t = tmpl_types; t; t = TREE_CHAIN (t))
1637 if (TREE_PURPOSE (t))
1638 break;
1639 if (!t)
1640 return;
1642 old_type = TREE_TYPE (decl);
1643 spec_types = TYPE_ARG_TYPES (old_type);
1645 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1647 /* Remove the this pointer, but remember the object's type for
1648 CV quals. */
1649 object_type = TREE_TYPE (TREE_VALUE (spec_types));
1650 spec_types = TREE_CHAIN (spec_types);
1651 tmpl_types = TREE_CHAIN (tmpl_types);
1653 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
1655 /* DECL may contain more parameters than TMPL due to the extra
1656 in-charge parameter in constructors and destructors. */
1657 in_charge = spec_types;
1658 spec_types = TREE_CHAIN (spec_types);
1660 if (DECL_HAS_VTT_PARM_P (decl))
1662 vtt = spec_types;
1663 spec_types = TREE_CHAIN (spec_types);
1667 /* Compute the merged default arguments. */
1668 new_spec_types =
1669 copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1671 /* Compute the new FUNCTION_TYPE. */
1672 if (object_type)
1674 if (vtt)
1675 new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
1676 TREE_VALUE (vtt),
1677 new_spec_types);
1679 if (in_charge)
1680 /* Put the in-charge parameter back. */
1681 new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1682 TREE_VALUE (in_charge),
1683 new_spec_types);
1685 new_type = build_method_type_directly (object_type,
1686 TREE_TYPE (old_type),
1687 new_spec_types);
1689 else
1690 new_type = build_function_type (TREE_TYPE (old_type),
1691 new_spec_types);
1692 new_type = cp_build_type_attribute_variant (new_type,
1693 TYPE_ATTRIBUTES (old_type));
1694 new_type = build_exception_variant (new_type,
1695 TYPE_RAISES_EXCEPTIONS (old_type));
1696 TREE_TYPE (decl) = new_type;
1699 /* Check to see if the function just declared, as indicated in
1700 DECLARATOR, and in DECL, is a specialization of a function
1701 template. We may also discover that the declaration is an explicit
1702 instantiation at this point.
1704 Returns DECL, or an equivalent declaration that should be used
1705 instead if all goes well. Issues an error message if something is
1706 amiss. Returns error_mark_node if the error is not easily
1707 recoverable.
1709 FLAGS is a bitmask consisting of the following flags:
1711 2: The function has a definition.
1712 4: The function is a friend.
1714 The TEMPLATE_COUNT is the number of references to qualifying
1715 template classes that appeared in the name of the function. For
1716 example, in
1718 template <class T> struct S { void f(); };
1719 void S<int>::f();
1721 the TEMPLATE_COUNT would be 1. However, explicitly specialized
1722 classes are not counted in the TEMPLATE_COUNT, so that in
1724 template <class T> struct S {};
1725 template <> struct S<int> { void f(); }
1726 template <> void S<int>::f();
1728 the TEMPLATE_COUNT would be 0. (Note that this declaration is
1729 invalid; there should be no template <>.)
1731 If the function is a specialization, it is marked as such via
1732 DECL_TEMPLATE_SPECIALIZATION. Furthermore, its DECL_TEMPLATE_INFO
1733 is set up correctly, and it is added to the list of specializations
1734 for that template. */
1736 tree
1737 check_explicit_specialization (tree declarator,
1738 tree decl,
1739 int template_count,
1740 int flags)
1742 int have_def = flags & 2;
1743 int is_friend = flags & 4;
1744 int specialization = 0;
1745 int explicit_instantiation = 0;
1746 int member_specialization = 0;
1747 tree ctype = DECL_CLASS_CONTEXT (decl);
1748 tree dname = DECL_NAME (decl);
1749 tmpl_spec_kind tsk;
1751 if (is_friend)
1753 if (!processing_specialization)
1754 tsk = tsk_none;
1755 else
1756 tsk = tsk_excessive_parms;
1758 else
1759 tsk = current_tmpl_spec_kind (template_count);
1761 switch (tsk)
1763 case tsk_none:
1764 if (processing_specialization)
1766 specialization = 1;
1767 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1769 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1771 if (is_friend)
1772 /* This could be something like:
1774 template <class T> void f(T);
1775 class S { friend void f<>(int); } */
1776 specialization = 1;
1777 else
1779 /* This case handles bogus declarations like template <>
1780 template <class T> void f<int>(); */
1782 error ("template-id %qD in declaration of primary template",
1783 declarator);
1784 return decl;
1787 break;
1789 case tsk_invalid_member_spec:
1790 /* The error has already been reported in
1791 check_specialization_scope. */
1792 return error_mark_node;
1794 case tsk_invalid_expl_inst:
1795 error ("template parameter list used in explicit instantiation");
1797 /* Fall through. */
1799 case tsk_expl_inst:
1800 if (have_def)
1801 error ("definition provided for explicit instantiation");
1803 explicit_instantiation = 1;
1804 break;
1806 case tsk_excessive_parms:
1807 case tsk_insufficient_parms:
1808 if (tsk == tsk_excessive_parms)
1809 error ("too many template parameter lists in declaration of %qD",
1810 decl);
1811 else if (template_header_count)
1812 error("too few template parameter lists in declaration of %qD", decl);
1813 else
1814 error("explicit specialization of %qD must be introduced by "
1815 "%<template <>%>", decl);
1817 /* Fall through. */
1818 case tsk_expl_spec:
1819 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1820 if (ctype)
1821 member_specialization = 1;
1822 else
1823 specialization = 1;
1824 break;
1826 case tsk_template:
1827 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1829 /* This case handles bogus declarations like template <>
1830 template <class T> void f<int>(); */
1832 if (uses_template_parms (declarator))
1833 error ("function template partial specialization %qD "
1834 "is not allowed", declarator);
1835 else
1836 error ("template-id %qD in declaration of primary template",
1837 declarator);
1838 return decl;
1841 if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1842 /* This is a specialization of a member template, without
1843 specialization the containing class. Something like:
1845 template <class T> struct S {
1846 template <class U> void f (U);
1848 template <> template <class U> void S<int>::f(U) {}
1850 That's a specialization -- but of the entire template. */
1851 specialization = 1;
1852 break;
1854 default:
1855 gcc_unreachable ();
1858 if (specialization || member_specialization)
1860 tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
1861 for (; t; t = TREE_CHAIN (t))
1862 if (TREE_PURPOSE (t))
1864 pedwarn
1865 ("default argument specified in explicit specialization");
1866 break;
1868 if (current_lang_name == lang_name_c)
1869 error ("template specialization with C linkage");
1872 if (specialization || member_specialization || explicit_instantiation)
1874 tree tmpl = NULL_TREE;
1875 tree targs = NULL_TREE;
1877 /* Make sure that the declarator is a TEMPLATE_ID_EXPR. */
1878 if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
1880 tree fns;
1882 gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
1883 if (ctype)
1884 fns = dname;
1885 else
1887 /* If there is no class context, the explicit instantiation
1888 must be at namespace scope. */
1889 gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
1891 /* Find the namespace binding, using the declaration
1892 context. */
1893 fns = namespace_binding (dname, CP_DECL_CONTEXT (decl));
1894 if (!fns || !is_overloaded_fn (fns))
1896 error ("%qD is not a template function", dname);
1897 fns = error_mark_node;
1901 declarator = lookup_template_function (fns, NULL_TREE);
1904 if (declarator == error_mark_node)
1905 return error_mark_node;
1907 if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
1909 if (!explicit_instantiation)
1910 /* A specialization in class scope. This is invalid,
1911 but the error will already have been flagged by
1912 check_specialization_scope. */
1913 return error_mark_node;
1914 else
1916 /* It's not valid to write an explicit instantiation in
1917 class scope, e.g.:
1919 class C { template void f(); }
1921 This case is caught by the parser. However, on
1922 something like:
1924 template class C { void f(); };
1926 (which is invalid) we can get here. The error will be
1927 issued later. */
1931 return decl;
1933 else if (ctype != NULL_TREE
1934 && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
1935 IDENTIFIER_NODE))
1937 /* Find the list of functions in ctype that have the same
1938 name as the declared function. */
1939 tree name = TREE_OPERAND (declarator, 0);
1940 tree fns = NULL_TREE;
1941 int idx;
1943 if (constructor_name_p (name, ctype))
1945 int is_constructor = DECL_CONSTRUCTOR_P (decl);
1947 if (is_constructor ? !TYPE_HAS_CONSTRUCTOR (ctype)
1948 : !CLASSTYPE_DESTRUCTORS (ctype))
1950 /* From [temp.expl.spec]:
1952 If such an explicit specialization for the member
1953 of a class template names an implicitly-declared
1954 special member function (clause _special_), the
1955 program is ill-formed.
1957 Similar language is found in [temp.explicit]. */
1958 error ("specialization of implicitly-declared special member function");
1959 return error_mark_node;
1962 name = is_constructor ? ctor_identifier : dtor_identifier;
1965 if (!DECL_CONV_FN_P (decl))
1967 idx = lookup_fnfields_1 (ctype, name);
1968 if (idx >= 0)
1969 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
1971 else
1973 VEC(tree) *methods;
1974 tree ovl;
1976 /* For a type-conversion operator, we cannot do a
1977 name-based lookup. We might be looking for `operator
1978 int' which will be a specialization of `operator T'.
1979 So, we find *all* the conversion operators, and then
1980 select from them. */
1981 fns = NULL_TREE;
1983 methods = CLASSTYPE_METHOD_VEC (ctype);
1984 if (methods)
1985 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
1986 VEC_iterate (tree, methods, idx, ovl);
1987 ++idx)
1989 if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
1990 /* There are no more conversion functions. */
1991 break;
1993 /* Glue all these conversion functions together
1994 with those we already have. */
1995 for (; ovl; ovl = OVL_NEXT (ovl))
1996 fns = ovl_cons (OVL_CURRENT (ovl), fns);
2000 if (fns == NULL_TREE)
2002 error ("no member function %qD declared in %qT", name, ctype);
2003 return error_mark_node;
2005 else
2006 TREE_OPERAND (declarator, 0) = fns;
2009 /* Figure out what exactly is being specialized at this point.
2010 Note that for an explicit instantiation, even one for a
2011 member function, we cannot tell apriori whether the
2012 instantiation is for a member template, or just a member
2013 function of a template class. Even if a member template is
2014 being instantiated, the member template arguments may be
2015 elided if they can be deduced from the rest of the
2016 declaration. */
2017 tmpl = determine_specialization (declarator, decl,
2018 &targs,
2019 member_specialization,
2020 template_count);
2022 if (!tmpl || tmpl == error_mark_node)
2023 /* We couldn't figure out what this declaration was
2024 specializing. */
2025 return error_mark_node;
2026 else
2028 tree gen_tmpl = most_general_template (tmpl);
2030 if (explicit_instantiation)
2032 /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2033 is done by do_decl_instantiation later. */
2035 int arg_depth = TMPL_ARGS_DEPTH (targs);
2036 int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2038 if (arg_depth > parm_depth)
2040 /* If TMPL is not the most general template (for
2041 example, if TMPL is a friend template that is
2042 injected into namespace scope), then there will
2043 be too many levels of TARGS. Remove some of them
2044 here. */
2045 int i;
2046 tree new_targs;
2048 new_targs = make_tree_vec (parm_depth);
2049 for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2050 TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2051 = TREE_VEC_ELT (targs, i);
2052 targs = new_targs;
2055 return instantiate_template (tmpl, targs, tf_error);
2058 /* If we thought that the DECL was a member function, but it
2059 turns out to be specializing a static member function,
2060 make DECL a static member function as well. */
2061 if (DECL_STATIC_FUNCTION_P (tmpl)
2062 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2063 revert_static_member_fn (decl);
2065 /* If this is a specialization of a member template of a
2066 template class. In we want to return the TEMPLATE_DECL,
2067 not the specialization of it. */
2068 if (tsk == tsk_template)
2070 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2071 DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
2072 if (have_def)
2074 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2075 DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl))
2076 = DECL_SOURCE_LOCATION (decl);
2077 /* We want to use the argument list specified in the
2078 definition, not in the original declaration. */
2079 DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (tmpl))
2080 = DECL_ARGUMENTS (decl);
2082 return tmpl;
2085 /* Set up the DECL_TEMPLATE_INFO for DECL. */
2086 DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
2088 /* Inherit default function arguments from the template
2089 DECL is specializing. */
2090 copy_default_args_to_explicit_spec (decl);
2092 /* This specialization has the same protection as the
2093 template it specializes. */
2094 TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2095 TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2097 if (is_friend && !have_def)
2098 /* This is not really a declaration of a specialization.
2099 It's just the name of an instantiation. But, it's not
2100 a request for an instantiation, either. */
2101 SET_DECL_IMPLICIT_INSTANTIATION (decl);
2102 else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2103 /* This is indeed a specialization. In case of constructors
2104 and destructors, we need in-charge and not-in-charge
2105 versions in V3 ABI. */
2106 clone_function_decl (decl, /*update_method_vec_p=*/0);
2108 /* Register this specialization so that we can find it
2109 again. */
2110 decl = register_specialization (decl, gen_tmpl, targs);
2114 return decl;
2117 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2118 parameters. These are represented in the same format used for
2119 DECL_TEMPLATE_PARMS. */
2122 comp_template_parms (tree parms1, tree parms2)
2124 tree p1;
2125 tree p2;
2127 if (parms1 == parms2)
2128 return 1;
2130 for (p1 = parms1, p2 = parms2;
2131 p1 != NULL_TREE && p2 != NULL_TREE;
2132 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2134 tree t1 = TREE_VALUE (p1);
2135 tree t2 = TREE_VALUE (p2);
2136 int i;
2138 gcc_assert (TREE_CODE (t1) == TREE_VEC);
2139 gcc_assert (TREE_CODE (t2) == TREE_VEC);
2141 if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2142 return 0;
2144 for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2146 tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2147 tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2149 if (TREE_CODE (parm1) != TREE_CODE (parm2))
2150 return 0;
2152 if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM)
2153 continue;
2154 else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2155 return 0;
2159 if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2160 /* One set of parameters has more parameters lists than the
2161 other. */
2162 return 0;
2164 return 1;
2167 /* Complain if DECL shadows a template parameter.
2169 [temp.local]: A template-parameter shall not be redeclared within its
2170 scope (including nested scopes). */
2172 void
2173 check_template_shadow (tree decl)
2175 tree olddecl;
2177 /* If we're not in a template, we can't possibly shadow a template
2178 parameter. */
2179 if (!current_template_parms)
2180 return;
2182 /* Figure out what we're shadowing. */
2183 if (TREE_CODE (decl) == OVERLOAD)
2184 decl = OVL_CURRENT (decl);
2185 olddecl = innermost_non_namespace_value (DECL_NAME (decl));
2187 /* If there's no previous binding for this name, we're not shadowing
2188 anything, let alone a template parameter. */
2189 if (!olddecl)
2190 return;
2192 /* If we're not shadowing a template parameter, we're done. Note
2193 that OLDDECL might be an OVERLOAD (or perhaps even an
2194 ERROR_MARK), so we can't just blithely assume it to be a _DECL
2195 node. */
2196 if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
2197 return;
2199 /* We check for decl != olddecl to avoid bogus errors for using a
2200 name inside a class. We check TPFI to avoid duplicate errors for
2201 inline member templates. */
2202 if (decl == olddecl
2203 || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
2204 return;
2206 cp_error_at ("declaration of %q#D", decl);
2207 cp_error_at (" shadows template parm %q#D", olddecl);
2210 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
2211 ORIG_LEVEL, DECL, and TYPE. */
2213 static tree
2214 build_template_parm_index (int index,
2215 int level,
2216 int orig_level,
2217 tree decl,
2218 tree type)
2220 tree t = make_node (TEMPLATE_PARM_INDEX);
2221 TEMPLATE_PARM_IDX (t) = index;
2222 TEMPLATE_PARM_LEVEL (t) = level;
2223 TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
2224 TEMPLATE_PARM_DECL (t) = decl;
2225 TREE_TYPE (t) = type;
2226 TREE_CONSTANT (t) = TREE_CONSTANT (decl);
2227 TREE_INVARIANT (t) = TREE_INVARIANT (decl);
2228 TREE_READONLY (t) = TREE_READONLY (decl);
2230 return t;
2233 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
2234 TEMPLATE_PARM_LEVEL has been decreased by LEVELS. If such a
2235 TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2236 new one is created. */
2238 static tree
2239 reduce_template_parm_level (tree index, tree type, int levels)
2241 if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
2242 || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
2243 != TEMPLATE_PARM_LEVEL (index) - levels))
2245 tree orig_decl = TEMPLATE_PARM_DECL (index);
2246 tree decl, t;
2248 decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
2249 TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
2250 TREE_INVARIANT (decl) = TREE_INVARIANT (orig_decl);
2251 TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2252 DECL_ARTIFICIAL (decl) = 1;
2253 SET_DECL_TEMPLATE_PARM_P (decl);
2255 t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
2256 TEMPLATE_PARM_LEVEL (index) - levels,
2257 TEMPLATE_PARM_ORIG_LEVEL (index),
2258 decl, type);
2259 TEMPLATE_PARM_DESCENDANTS (index) = t;
2261 /* Template template parameters need this. */
2262 DECL_TEMPLATE_PARMS (decl)
2263 = DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index));
2266 return TEMPLATE_PARM_DESCENDANTS (index);
2269 /* Process information from new template parameter NEXT and append it to the
2270 LIST being built. This new parameter is a non-type parameter iff
2271 IS_NON_TYPE is true. */
2273 tree
2274 process_template_parm (tree list, tree next, bool is_non_type)
2276 tree parm;
2277 tree decl = 0;
2278 tree defval;
2279 int idx;
2281 parm = next;
2282 gcc_assert (TREE_CODE (parm) == TREE_LIST);
2283 defval = TREE_PURPOSE (parm);
2285 if (list)
2287 tree p = TREE_VALUE (tree_last (list));
2289 if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
2290 idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
2291 else
2292 idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
2293 ++idx;
2295 else
2296 idx = 0;
2298 if (is_non_type)
2300 parm = TREE_VALUE (parm);
2302 SET_DECL_TEMPLATE_PARM_P (parm);
2304 /* [temp.param]
2306 The top-level cv-qualifiers on the template-parameter are
2307 ignored when determining its type. */
2308 TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
2310 /* A template parameter is not modifiable. */
2311 TREE_CONSTANT (parm) = 1;
2312 TREE_INVARIANT (parm) = 1;
2313 TREE_READONLY (parm) = 1;
2314 if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
2315 TREE_TYPE (parm) = void_type_node;
2316 decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
2317 TREE_CONSTANT (decl) = 1;
2318 TREE_INVARIANT (decl) = 1;
2319 TREE_READONLY (decl) = 1;
2320 DECL_INITIAL (parm) = DECL_INITIAL (decl)
2321 = build_template_parm_index (idx, processing_template_decl,
2322 processing_template_decl,
2323 decl, TREE_TYPE (parm));
2325 else
2327 tree t;
2328 parm = TREE_VALUE (TREE_VALUE (parm));
2330 if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
2332 t = make_aggr_type (TEMPLATE_TEMPLATE_PARM);
2333 /* This is for distinguishing between real templates and template
2334 template parameters */
2335 TREE_TYPE (parm) = t;
2336 TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
2337 decl = parm;
2339 else
2341 t = make_aggr_type (TEMPLATE_TYPE_PARM);
2342 /* parm is either IDENTIFIER_NODE or NULL_TREE. */
2343 decl = build_decl (TYPE_DECL, parm, t);
2346 TYPE_NAME (t) = decl;
2347 TYPE_STUB_DECL (t) = decl;
2348 parm = decl;
2349 TEMPLATE_TYPE_PARM_INDEX (t)
2350 = build_template_parm_index (idx, processing_template_decl,
2351 processing_template_decl,
2352 decl, TREE_TYPE (parm));
2354 DECL_ARTIFICIAL (decl) = 1;
2355 SET_DECL_TEMPLATE_PARM_P (decl);
2356 pushdecl (decl);
2357 parm = build_tree_list (defval, parm);
2358 return chainon (list, parm);
2361 /* The end of a template parameter list has been reached. Process the
2362 tree list into a parameter vector, converting each parameter into a more
2363 useful form. Type parameters are saved as IDENTIFIER_NODEs, and others
2364 as PARM_DECLs. */
2366 tree
2367 end_template_parm_list (tree parms)
2369 int nparms;
2370 tree parm, next;
2371 tree saved_parmlist = make_tree_vec (list_length (parms));
2373 current_template_parms
2374 = tree_cons (size_int (processing_template_decl),
2375 saved_parmlist, current_template_parms);
2377 for (parm = parms, nparms = 0; parm; parm = next, nparms++)
2379 next = TREE_CHAIN (parm);
2380 TREE_VEC_ELT (saved_parmlist, nparms) = parm;
2381 TREE_CHAIN (parm) = NULL_TREE;
2384 --processing_template_parmlist;
2386 return saved_parmlist;
2389 /* end_template_decl is called after a template declaration is seen. */
2391 void
2392 end_template_decl (void)
2394 reset_specialization ();
2396 if (! processing_template_decl)
2397 return;
2399 /* This matches the pushlevel in begin_template_parm_list. */
2400 finish_scope ();
2402 --processing_template_decl;
2403 current_template_parms = TREE_CHAIN (current_template_parms);
2406 /* Given a template argument vector containing the template PARMS.
2407 The innermost PARMS are given first. */
2409 tree
2410 current_template_args (void)
2412 tree header;
2413 tree args = NULL_TREE;
2414 int length = TMPL_PARMS_DEPTH (current_template_parms);
2415 int l = length;
2417 /* If there is only one level of template parameters, we do not
2418 create a TREE_VEC of TREE_VECs. Instead, we return a single
2419 TREE_VEC containing the arguments. */
2420 if (length > 1)
2421 args = make_tree_vec (length);
2423 for (header = current_template_parms; header; header = TREE_CHAIN (header))
2425 tree a = copy_node (TREE_VALUE (header));
2426 int i;
2428 TREE_TYPE (a) = NULL_TREE;
2429 for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
2431 tree t = TREE_VEC_ELT (a, i);
2433 /* T will be a list if we are called from within a
2434 begin/end_template_parm_list pair, but a vector directly
2435 if within a begin/end_member_template_processing pair. */
2436 if (TREE_CODE (t) == TREE_LIST)
2438 t = TREE_VALUE (t);
2440 if (TREE_CODE (t) == TYPE_DECL
2441 || TREE_CODE (t) == TEMPLATE_DECL)
2442 t = TREE_TYPE (t);
2443 else
2444 t = DECL_INITIAL (t);
2445 TREE_VEC_ELT (a, i) = t;
2449 if (length > 1)
2450 TREE_VEC_ELT (args, --l) = a;
2451 else
2452 args = a;
2455 return args;
2458 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
2459 template PARMS. If MEMBER_TEMPLATE_P is true, the new template is
2460 a member template. Used by push_template_decl below. */
2462 static tree
2463 build_template_decl (tree decl, tree parms, bool member_template_p)
2465 tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
2466 DECL_TEMPLATE_PARMS (tmpl) = parms;
2467 DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
2468 DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
2469 if (DECL_LANG_SPECIFIC (decl))
2471 DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
2472 DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
2473 DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
2474 DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
2475 DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
2476 if (DECL_OVERLOADED_OPERATOR_P (decl))
2477 SET_OVERLOADED_OPERATOR_CODE (tmpl,
2478 DECL_OVERLOADED_OPERATOR_P (decl));
2481 return tmpl;
2484 struct template_parm_data
2486 /* The level of the template parameters we are currently
2487 processing. */
2488 int level;
2490 /* The index of the specialization argument we are currently
2491 processing. */
2492 int current_arg;
2494 /* An array whose size is the number of template parameters. The
2495 elements are nonzero if the parameter has been used in any one
2496 of the arguments processed so far. */
2497 int* parms;
2499 /* An array whose size is the number of template arguments. The
2500 elements are nonzero if the argument makes use of template
2501 parameters of this level. */
2502 int* arg_uses_template_parms;
2505 /* Subroutine of push_template_decl used to see if each template
2506 parameter in a partial specialization is used in the explicit
2507 argument list. If T is of the LEVEL given in DATA (which is
2508 treated as a template_parm_data*), then DATA->PARMS is marked
2509 appropriately. */
2511 static int
2512 mark_template_parm (tree t, void* data)
2514 int level;
2515 int idx;
2516 struct template_parm_data* tpd = (struct template_parm_data*) data;
2518 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
2520 level = TEMPLATE_PARM_LEVEL (t);
2521 idx = TEMPLATE_PARM_IDX (t);
2523 else
2525 level = TEMPLATE_TYPE_LEVEL (t);
2526 idx = TEMPLATE_TYPE_IDX (t);
2529 if (level == tpd->level)
2531 tpd->parms[idx] = 1;
2532 tpd->arg_uses_template_parms[tpd->current_arg] = 1;
2535 /* Return zero so that for_each_template_parm will continue the
2536 traversal of the tree; we want to mark *every* template parm. */
2537 return 0;
2540 /* Process the partial specialization DECL. */
2542 static tree
2543 process_partial_specialization (tree decl)
2545 tree type = TREE_TYPE (decl);
2546 tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
2547 tree specargs = CLASSTYPE_TI_ARGS (type);
2548 tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
2549 tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
2550 tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
2551 int nargs = TREE_VEC_LENGTH (inner_args);
2552 int ntparms = TREE_VEC_LENGTH (inner_parms);
2553 int i;
2554 int did_error_intro = 0;
2555 struct template_parm_data tpd;
2556 struct template_parm_data tpd2;
2558 /* We check that each of the template parameters given in the
2559 partial specialization is used in the argument list to the
2560 specialization. For example:
2562 template <class T> struct S;
2563 template <class T> struct S<T*>;
2565 The second declaration is OK because `T*' uses the template
2566 parameter T, whereas
2568 template <class T> struct S<int>;
2570 is no good. Even trickier is:
2572 template <class T>
2573 struct S1
2575 template <class U>
2576 struct S2;
2577 template <class U>
2578 struct S2<T>;
2581 The S2<T> declaration is actually invalid; it is a
2582 full-specialization. Of course,
2584 template <class U>
2585 struct S2<T (*)(U)>;
2587 or some such would have been OK. */
2588 tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
2589 tpd.parms = alloca (sizeof (int) * ntparms);
2590 memset (tpd.parms, 0, sizeof (int) * ntparms);
2592 tpd.arg_uses_template_parms = alloca (sizeof (int) * nargs);
2593 memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
2594 for (i = 0; i < nargs; ++i)
2596 tpd.current_arg = i;
2597 for_each_template_parm (TREE_VEC_ELT (inner_args, i),
2598 &mark_template_parm,
2599 &tpd,
2600 NULL);
2602 for (i = 0; i < ntparms; ++i)
2603 if (tpd.parms[i] == 0)
2605 /* One of the template parms was not used in the
2606 specialization. */
2607 if (!did_error_intro)
2609 error ("template parameters not used in partial specialization:");
2610 did_error_intro = 1;
2613 error (" %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
2616 /* [temp.class.spec]
2618 The argument list of the specialization shall not be identical to
2619 the implicit argument list of the primary template. */
2620 if (comp_template_args
2621 (inner_args,
2622 INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
2623 (maintmpl)))))
2624 error ("partial specialization %qT does not specialize any template arguments", type);
2626 /* [temp.class.spec]
2628 A partially specialized non-type argument expression shall not
2629 involve template parameters of the partial specialization except
2630 when the argument expression is a simple identifier.
2632 The type of a template parameter corresponding to a specialized
2633 non-type argument shall not be dependent on a parameter of the
2634 specialization. */
2635 gcc_assert (nargs == DECL_NTPARMS (maintmpl));
2636 tpd2.parms = 0;
2637 for (i = 0; i < nargs; ++i)
2639 tree arg = TREE_VEC_ELT (inner_args, i);
2640 if (/* These first two lines are the `non-type' bit. */
2641 !TYPE_P (arg)
2642 && TREE_CODE (arg) != TEMPLATE_DECL
2643 /* This next line is the `argument expression is not just a
2644 simple identifier' condition and also the `specialized
2645 non-type argument' bit. */
2646 && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
2648 if (tpd.arg_uses_template_parms[i])
2649 error ("template argument %qE involves template parameter(s)", arg);
2650 else
2652 /* Look at the corresponding template parameter,
2653 marking which template parameters its type depends
2654 upon. */
2655 tree type =
2656 TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (main_inner_parms,
2657 i)));
2659 if (!tpd2.parms)
2661 /* We haven't yet initialized TPD2. Do so now. */
2662 tpd2.arg_uses_template_parms
2663 = alloca (sizeof (int) * nargs);
2664 /* The number of parameters here is the number in the
2665 main template, which, as checked in the assertion
2666 above, is NARGS. */
2667 tpd2.parms = alloca (sizeof (int) * nargs);
2668 tpd2.level =
2669 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
2672 /* Mark the template parameters. But this time, we're
2673 looking for the template parameters of the main
2674 template, not in the specialization. */
2675 tpd2.current_arg = i;
2676 tpd2.arg_uses_template_parms[i] = 0;
2677 memset (tpd2.parms, 0, sizeof (int) * nargs);
2678 for_each_template_parm (type,
2679 &mark_template_parm,
2680 &tpd2,
2681 NULL);
2683 if (tpd2.arg_uses_template_parms [i])
2685 /* The type depended on some template parameters.
2686 If they are fully specialized in the
2687 specialization, that's OK. */
2688 int j;
2689 for (j = 0; j < nargs; ++j)
2690 if (tpd2.parms[j] != 0
2691 && tpd.arg_uses_template_parms [j])
2693 error ("type %qT of template argument %qE depends "
2694 "on template parameter(s)",
2695 type,
2696 arg);
2697 break;
2704 if (retrieve_specialization (maintmpl, specargs,
2705 /*class_specializations_p=*/true))
2706 /* We've already got this specialization. */
2707 return decl;
2709 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
2710 = tree_cons (inner_args, inner_parms,
2711 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
2712 TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
2713 return decl;
2716 /* Check that a template declaration's use of default arguments is not
2717 invalid. Here, PARMS are the template parameters. IS_PRIMARY is
2718 nonzero if DECL is the thing declared by a primary template.
2719 IS_PARTIAL is nonzero if DECL is a partial specialization. */
2721 static void
2722 check_default_tmpl_args (tree decl, tree parms, int is_primary, int is_partial)
2724 const char *msg;
2725 int last_level_to_check;
2726 tree parm_level;
2728 /* [temp.param]
2730 A default template-argument shall not be specified in a
2731 function template declaration or a function template definition, nor
2732 in the template-parameter-list of the definition of a member of a
2733 class template. */
2735 if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
2736 /* You can't have a function template declaration in a local
2737 scope, nor you can you define a member of a class template in a
2738 local scope. */
2739 return;
2741 if (current_class_type
2742 && !TYPE_BEING_DEFINED (current_class_type)
2743 && DECL_LANG_SPECIFIC (decl)
2744 /* If this is either a friend defined in the scope of the class
2745 or a member function. */
2746 && (DECL_FUNCTION_MEMBER_P (decl)
2747 ? same_type_p (DECL_CONTEXT (decl), current_class_type)
2748 : DECL_FRIEND_CONTEXT (decl)
2749 ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
2750 : false)
2751 /* And, if it was a member function, it really was defined in
2752 the scope of the class. */
2753 && (!DECL_FUNCTION_MEMBER_P (decl)
2754 || DECL_INITIALIZED_IN_CLASS_P (decl)))
2755 /* We already checked these parameters when the template was
2756 declared, so there's no need to do it again now. This function
2757 was defined in class scope, but we're processing it's body now
2758 that the class is complete. */
2759 return;
2761 /* [temp.param]
2763 If a template-parameter has a default template-argument, all
2764 subsequent template-parameters shall have a default
2765 template-argument supplied. */
2766 for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
2768 tree inner_parms = TREE_VALUE (parm_level);
2769 int ntparms = TREE_VEC_LENGTH (inner_parms);
2770 int seen_def_arg_p = 0;
2771 int i;
2773 for (i = 0; i < ntparms; ++i)
2775 tree parm = TREE_VEC_ELT (inner_parms, i);
2776 if (TREE_PURPOSE (parm))
2777 seen_def_arg_p = 1;
2778 else if (seen_def_arg_p)
2780 error ("no default argument for %qD", TREE_VALUE (parm));
2781 /* For better subsequent error-recovery, we indicate that
2782 there should have been a default argument. */
2783 TREE_PURPOSE (parm) = error_mark_node;
2788 if (TREE_CODE (decl) != TYPE_DECL || is_partial || !is_primary)
2789 /* For an ordinary class template, default template arguments are
2790 allowed at the innermost level, e.g.:
2791 template <class T = int>
2792 struct S {};
2793 but, in a partial specialization, they're not allowed even
2794 there, as we have in [temp.class.spec]:
2796 The template parameter list of a specialization shall not
2797 contain default template argument values.
2799 So, for a partial specialization, or for a function template,
2800 we look at all of them. */
2802 else
2803 /* But, for a primary class template that is not a partial
2804 specialization we look at all template parameters except the
2805 innermost ones. */
2806 parms = TREE_CHAIN (parms);
2808 /* Figure out what error message to issue. */
2809 if (TREE_CODE (decl) == FUNCTION_DECL)
2810 msg = "default template arguments may not be used in function templates";
2811 else if (is_partial)
2812 msg = "default template arguments may not be used in partial specializations";
2813 else
2814 msg = "default argument for template parameter for class enclosing %qD";
2816 if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
2817 /* If we're inside a class definition, there's no need to
2818 examine the parameters to the class itself. On the one
2819 hand, they will be checked when the class is defined, and,
2820 on the other, default arguments are valid in things like:
2821 template <class T = double>
2822 struct S { template <class U> void f(U); };
2823 Here the default argument for `S' has no bearing on the
2824 declaration of `f'. */
2825 last_level_to_check = template_class_depth (current_class_type) + 1;
2826 else
2827 /* Check everything. */
2828 last_level_to_check = 0;
2830 for (parm_level = parms;
2831 parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
2832 parm_level = TREE_CHAIN (parm_level))
2834 tree inner_parms = TREE_VALUE (parm_level);
2835 int i;
2836 int ntparms;
2838 ntparms = TREE_VEC_LENGTH (inner_parms);
2839 for (i = 0; i < ntparms; ++i)
2840 if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
2842 if (msg)
2844 error (msg, decl);
2845 msg = 0;
2848 /* Clear out the default argument so that we are not
2849 confused later. */
2850 TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
2853 /* At this point, if we're still interested in issuing messages,
2854 they must apply to classes surrounding the object declared. */
2855 if (msg)
2856 msg = "default argument for template parameter for class enclosing %qD";
2860 /* Worker for push_template_decl_real, called via
2861 for_each_template_parm. DATA is really an int, indicating the
2862 level of the parameters we are interested in. If T is a template
2863 parameter of that level, return nonzero. */
2865 static int
2866 template_parm_this_level_p (tree t, void* data)
2868 int this_level = *(int *)data;
2869 int level;
2871 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
2872 level = TEMPLATE_PARM_LEVEL (t);
2873 else
2874 level = TEMPLATE_TYPE_LEVEL (t);
2875 return level == this_level;
2878 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
2879 parameters given by current_template_args, or reuses a
2880 previously existing one, if appropriate. Returns the DECL, or an
2881 equivalent one, if it is replaced via a call to duplicate_decls.
2883 If IS_FRIEND is nonzero, DECL is a friend declaration. */
2885 tree
2886 push_template_decl_real (tree decl, int is_friend)
2888 tree tmpl;
2889 tree args;
2890 tree info;
2891 tree ctx;
2892 int primary;
2893 int is_partial;
2894 int new_template_p = 0;
2895 /* True if the template is a member template, in the sense of
2896 [temp.mem]. */
2897 bool member_template_p = false;
2899 if (decl == error_mark_node)
2900 return decl;
2902 /* See if this is a partial specialization. */
2903 is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
2904 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
2905 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
2907 is_friend |= (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl));
2909 if (is_friend)
2910 /* For a friend, we want the context of the friend function, not
2911 the type of which it is a friend. */
2912 ctx = DECL_CONTEXT (decl);
2913 else if (CP_DECL_CONTEXT (decl)
2914 && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
2915 /* In the case of a virtual function, we want the class in which
2916 it is defined. */
2917 ctx = CP_DECL_CONTEXT (decl);
2918 else
2919 /* Otherwise, if we're currently defining some class, the DECL
2920 is assumed to be a member of the class. */
2921 ctx = current_scope ();
2923 if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
2924 ctx = NULL_TREE;
2926 if (!DECL_CONTEXT (decl))
2927 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2929 /* See if this is a primary template. */
2930 primary = template_parm_scope_p ();
2932 if (primary)
2934 if (DECL_CLASS_SCOPE_P (decl))
2935 member_template_p = true;
2936 if (current_lang_name == lang_name_c)
2937 error ("template with C linkage");
2938 else if (TREE_CODE (decl) == TYPE_DECL
2939 && ANON_AGGRNAME_P (DECL_NAME (decl)))
2940 error ("template class without a name");
2941 else if (TREE_CODE (decl) == FUNCTION_DECL)
2943 if (DECL_DESTRUCTOR_P (decl))
2945 /* [temp.mem]
2947 A destructor shall not be a member template. */
2948 error ("destructor %qD declared as member template", decl);
2949 return error_mark_node;
2951 if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
2952 && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
2953 || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
2954 || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
2955 || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
2956 == void_list_node)))
2958 /* [basic.stc.dynamic.allocation]
2960 An allocation function can be a function
2961 template. ... Template allocation functions shall
2962 have two or more parameters. */
2963 error ("invalid template declaration of %qD", decl);
2964 return decl;
2967 else if ((DECL_IMPLICIT_TYPEDEF_P (decl)
2968 && CLASS_TYPE_P (TREE_TYPE (decl)))
2969 || (TREE_CODE (decl) == VAR_DECL && ctx && CLASS_TYPE_P (ctx)))
2970 /* OK */;
2971 else
2973 error ("template declaration of %q#D", decl);
2974 return error_mark_node;
2978 /* Check to see that the rules regarding the use of default
2979 arguments are not being violated. */
2980 check_default_tmpl_args (decl, current_template_parms,
2981 primary, is_partial);
2983 if (is_partial)
2984 return process_partial_specialization (decl);
2986 args = current_template_args ();
2988 if (!ctx
2989 || TREE_CODE (ctx) == FUNCTION_DECL
2990 || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
2991 || (is_friend && !DECL_TEMPLATE_INFO (decl)))
2993 if (DECL_LANG_SPECIFIC (decl)
2994 && DECL_TEMPLATE_INFO (decl)
2995 && DECL_TI_TEMPLATE (decl))
2996 tmpl = DECL_TI_TEMPLATE (decl);
2997 /* If DECL is a TYPE_DECL for a class-template, then there won't
2998 be DECL_LANG_SPECIFIC. The information equivalent to
2999 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead. */
3000 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3001 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3002 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3004 /* Since a template declaration already existed for this
3005 class-type, we must be redeclaring it here. Make sure
3006 that the redeclaration is valid. */
3007 redeclare_class_template (TREE_TYPE (decl),
3008 current_template_parms);
3009 /* We don't need to create a new TEMPLATE_DECL; just use the
3010 one we already had. */
3011 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3013 else
3015 tmpl = build_template_decl (decl, current_template_parms,
3016 member_template_p);
3017 new_template_p = 1;
3019 if (DECL_LANG_SPECIFIC (decl)
3020 && DECL_TEMPLATE_SPECIALIZATION (decl))
3022 /* A specialization of a member template of a template
3023 class. */
3024 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3025 DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
3026 DECL_TEMPLATE_INFO (decl) = NULL_TREE;
3030 else
3032 tree a, t, current, parms;
3033 int i;
3035 if (TREE_CODE (decl) == TYPE_DECL)
3037 if ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (decl)))
3038 || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
3039 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3040 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3041 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3042 else
3044 error ("%qD does not declare a template type", decl);
3045 return decl;
3048 else if (!DECL_LANG_SPECIFIC (decl) || !DECL_TEMPLATE_INFO (decl))
3050 error ("template definition of non-template %q#D", decl);
3051 return decl;
3053 else
3054 tmpl = DECL_TI_TEMPLATE (decl);
3056 if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3057 && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
3058 && DECL_TEMPLATE_SPECIALIZATION (decl)
3059 && DECL_MEMBER_TEMPLATE_P (tmpl))
3061 tree new_tmpl;
3063 /* The declaration is a specialization of a member
3064 template, declared outside the class. Therefore, the
3065 innermost template arguments will be NULL, so we
3066 replace them with the arguments determined by the
3067 earlier call to check_explicit_specialization. */
3068 args = DECL_TI_ARGS (decl);
3070 new_tmpl
3071 = build_template_decl (decl, current_template_parms,
3072 member_template_p);
3073 DECL_TEMPLATE_RESULT (new_tmpl) = decl;
3074 TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
3075 DECL_TI_TEMPLATE (decl) = new_tmpl;
3076 SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
3077 DECL_TEMPLATE_INFO (new_tmpl)
3078 = tree_cons (tmpl, args, NULL_TREE);
3080 register_specialization (new_tmpl,
3081 most_general_template (tmpl),
3082 args);
3083 return decl;
3086 /* Make sure the template headers we got make sense. */
3088 parms = DECL_TEMPLATE_PARMS (tmpl);
3089 i = TMPL_PARMS_DEPTH (parms);
3090 if (TMPL_ARGS_DEPTH (args) != i)
3092 error ("expected %d levels of template parms for %q#D, got %d",
3093 i, decl, TMPL_ARGS_DEPTH (args));
3095 else
3096 for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
3098 a = TMPL_ARGS_LEVEL (args, i);
3099 t = INNERMOST_TEMPLATE_PARMS (parms);
3101 if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
3103 if (current == decl)
3104 error ("got %d template parameters for %q#D",
3105 TREE_VEC_LENGTH (a), decl);
3106 else
3107 error ("got %d template parameters for %q#T",
3108 TREE_VEC_LENGTH (a), current);
3109 error (" but %d required", TREE_VEC_LENGTH (t));
3112 /* Perhaps we should also check that the parms are used in the
3113 appropriate qualifying scopes in the declarator? */
3115 if (current == decl)
3116 current = ctx;
3117 else
3118 current = TYPE_CONTEXT (current);
3122 DECL_TEMPLATE_RESULT (tmpl) = decl;
3123 TREE_TYPE (tmpl) = TREE_TYPE (decl);
3125 /* Push template declarations for global functions and types. Note
3126 that we do not try to push a global template friend declared in a
3127 template class; such a thing may well depend on the template
3128 parameters of the class. */
3129 if (new_template_p && !ctx
3130 && !(is_friend && template_class_depth (current_class_type) > 0))
3132 tmpl = pushdecl_namespace_level (tmpl);
3133 if (tmpl == error_mark_node)
3134 return error_mark_node;
3136 /* Hide template friend classes that haven't been declared yet. */
3137 if (is_friend && TREE_CODE (decl) == TYPE_DECL)
3139 DECL_ANTICIPATED (tmpl) = 1;
3140 DECL_FRIEND_P (tmpl) = 1;
3144 if (primary)
3146 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
3147 if (DECL_CONV_FN_P (tmpl))
3149 int depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
3151 /* It is a conversion operator. See if the type converted to
3152 depends on innermost template operands. */
3154 if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
3155 depth))
3156 DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
3160 /* The DECL_TI_ARGS of DECL contains full set of arguments referring
3161 back to its most general template. If TMPL is a specialization,
3162 ARGS may only have the innermost set of arguments. Add the missing
3163 argument levels if necessary. */
3164 if (DECL_TEMPLATE_INFO (tmpl))
3165 args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
3167 info = tree_cons (tmpl, args, NULL_TREE);
3169 if (DECL_IMPLICIT_TYPEDEF_P (decl))
3171 SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
3172 if ((!ctx || TREE_CODE (ctx) != FUNCTION_DECL)
3173 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
3174 /* Don't change the name if we've already set it up. */
3175 && !IDENTIFIER_TEMPLATE (DECL_NAME (decl)))
3176 DECL_NAME (decl) = classtype_mangled_name (TREE_TYPE (decl));
3178 else if (DECL_LANG_SPECIFIC (decl))
3179 DECL_TEMPLATE_INFO (decl) = info;
3181 return DECL_TEMPLATE_RESULT (tmpl);
3184 tree
3185 push_template_decl (tree decl)
3187 return push_template_decl_real (decl, 0);
3190 /* Called when a class template TYPE is redeclared with the indicated
3191 template PARMS, e.g.:
3193 template <class T> struct S;
3194 template <class T> struct S {}; */
3196 void
3197 redeclare_class_template (tree type, tree parms)
3199 tree tmpl;
3200 tree tmpl_parms;
3201 int i;
3203 if (!TYPE_TEMPLATE_INFO (type))
3205 error ("%qT is not a template type", type);
3206 return;
3209 tmpl = TYPE_TI_TEMPLATE (type);
3210 if (!PRIMARY_TEMPLATE_P (tmpl))
3211 /* The type is nested in some template class. Nothing to worry
3212 about here; there are no new template parameters for the nested
3213 type. */
3214 return;
3216 if (!parms)
3218 error ("template specifiers not specified in declaration of %qD",
3219 tmpl);
3220 return;
3223 parms = INNERMOST_TEMPLATE_PARMS (parms);
3224 tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
3226 if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
3228 cp_error_at ("previous declaration %qD", tmpl);
3229 error ("used %d template parameter(s) instead of %d",
3230 TREE_VEC_LENGTH (tmpl_parms),
3231 TREE_VEC_LENGTH (parms));
3232 return;
3235 for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
3237 tree tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
3238 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
3239 tree tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
3240 tree parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
3242 /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
3243 TEMPLATE_DECL. */
3244 if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
3245 || (TREE_CODE (tmpl_parm) != TYPE_DECL
3246 && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm))))
3248 cp_error_at ("template parameter %q#D", tmpl_parm);
3249 error ("redeclared here as %q#D", parm);
3250 return;
3253 if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
3255 /* We have in [temp.param]:
3257 A template-parameter may not be given default arguments
3258 by two different declarations in the same scope. */
3259 error ("redefinition of default argument for %q#D", parm);
3260 error ("%J original definition appeared here", tmpl_parm);
3261 return;
3264 if (parm_default != NULL_TREE)
3265 /* Update the previous template parameters (which are the ones
3266 that will really count) with the new default value. */
3267 TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
3268 else if (tmpl_default != NULL_TREE)
3269 /* Update the new parameters, too; they'll be used as the
3270 parameters for any members. */
3271 TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
3275 /* Simplify EXPR if it is a non-dependent expression. Returns the
3276 (possibly simplified) expression. */
3278 tree
3279 fold_non_dependent_expr (tree expr)
3281 /* If we're in a template, but EXPR isn't value dependent, simplify
3282 it. We're supposed to treat:
3284 template <typename T> void f(T[1 + 1]);
3285 template <typename T> void f(T[2]);
3287 as two declarations of the same function, for example. */
3288 if (processing_template_decl
3289 && !type_dependent_expression_p (expr)
3290 && !value_dependent_expression_p (expr))
3292 HOST_WIDE_INT saved_processing_template_decl;
3294 saved_processing_template_decl = processing_template_decl;
3295 processing_template_decl = 0;
3296 expr = tsubst_copy_and_build (expr,
3297 /*args=*/NULL_TREE,
3298 tf_error,
3299 /*in_decl=*/NULL_TREE,
3300 /*function_p=*/false);
3301 processing_template_decl = saved_processing_template_decl;
3303 return expr;
3306 /* EXPR is an expression which is used in a constant-expression context.
3307 For instance, it could be a VAR_DECL with a constant initializer.
3308 Extract the innest constant expression.
3310 This is basically a more powerful version of
3311 integral_constant_value, which can be used also in templates where
3312 initializers can maintain a syntactic rather than semantic form
3313 (even if they are non-dependent, for access-checking purposes). */
3315 tree
3316 fold_decl_constant_value (tree expr)
3318 tree const_expr = expr;
3321 expr = fold_non_dependent_expr (const_expr);
3322 const_expr = integral_constant_value (expr);
3324 while (expr != const_expr);
3326 return expr;
3329 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
3330 must be a function or a pointer-to-function type, as specified
3331 in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
3332 and check that the resulting function has external linkage. */
3334 static tree
3335 convert_nontype_argument_function (tree type, tree expr)
3337 tree fns = expr;
3338 tree fn, fn_no_ptr;
3340 fn = instantiate_type (type, fns, tf_none);
3341 if (fn == error_mark_node)
3342 return error_mark_node;
3344 fn_no_ptr = fn;
3345 if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
3346 fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
3348 /* [temp.arg.nontype]/1
3350 A template-argument for a non-type, non-template template-parameter
3351 shall be one of:
3352 [...]
3353 -- the address of an object or function with external linkage. */
3354 if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
3356 error ("%qE is not a valid template argument for type %qT "
3357 "because function %qD has not external linkage",
3358 expr, type, fn_no_ptr);
3359 return NULL_TREE;
3362 return fn;
3365 /* Attempt to convert the non-type template parameter EXPR to the
3366 indicated TYPE. If the conversion is successful, return the
3367 converted value. If the conversion is unsuccessful, return
3368 NULL_TREE if we issued an error message, or error_mark_node if we
3369 did not. We issue error messages for out-and-out bad template
3370 parameters, but not simply because the conversion failed, since we
3371 might be just trying to do argument deduction. Both TYPE and EXPR
3372 must be non-dependent.
3374 The conversion follows the special rules described in
3375 [temp.arg.nontype], and it is much more strict than an implicit
3376 conversion.
3378 This function is called twice for each template argument (see
3379 lookup_template_class for a more accurate description of this
3380 problem). This means that we need to handle expressions which
3381 are not valid in a C++ source, but can be created from the
3382 first call (for instance, casts to perform conversions). These
3383 hacks can go away after we fix the double coercion problem. */
3385 static tree
3386 convert_nontype_argument (tree type, tree expr)
3388 tree expr_type;
3390 /* Detect immediately string literals as invalid non-type argument.
3391 This special-case is not needed for correctness (we would easily
3392 catch this later), but only to provide better diagnostic for this
3393 common user mistake. As suggested by DR 100, we do not mention
3394 linkage issues in the diagnostic as this is not the point. */
3395 if (TREE_CODE (expr) == STRING_CST)
3397 error ("%qE is not a valid template argument for type %qT "
3398 "because string literals can never be used in this context",
3399 expr, type);
3400 return NULL_TREE;
3403 /* If we are in a template, EXPR may be non-dependent, but still
3404 have a syntactic, rather than semantic, form. For example, EXPR
3405 might be a SCOPE_REF, rather than the VAR_DECL to which the
3406 SCOPE_REF refers. Preserving the qualifying scope is necessary
3407 so that access checking can be performed when the template is
3408 instantiated -- but here we need the resolved form so that we can
3409 convert the argument. */
3410 expr = fold_non_dependent_expr (expr);
3411 expr_type = TREE_TYPE (expr);
3413 /* HACK: Due to double coercion, we can get a
3414 NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
3415 which is the tree that we built on the first call (see
3416 below when coercing to reference to object or to reference to
3417 function). We just strip everything and get to the arg.
3418 See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
3419 for examples. */
3420 if (TREE_CODE (expr) == NOP_EXPR)
3422 if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
3424 /* ??? Maybe we could use convert_from_reference here, but we
3425 would need to relax its constraints because the NOP_EXPR
3426 could actually change the type to something more cv-qualified,
3427 and this is not folded by convert_from_reference. */
3428 tree addr = TREE_OPERAND (expr, 0);
3429 gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
3430 gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
3431 gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
3432 gcc_assert (same_type_ignoring_top_level_qualifiers_p
3433 (TREE_TYPE (expr_type),
3434 TREE_TYPE (TREE_TYPE (addr))));
3436 expr = TREE_OPERAND (addr, 0);
3437 expr_type = TREE_TYPE (expr);
3440 /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
3441 parameter is a pointer to object, through decay and
3442 qualification conversion. Let's strip everything. */
3443 else if (TYPE_PTROBV_P (type))
3445 STRIP_NOPS (expr);
3446 gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
3447 gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
3448 /* Skip the ADDR_EXPR only if it is part of the decay for
3449 an array. Otherwise, it is part of the original argument
3450 in the source code. */
3451 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
3452 expr = TREE_OPERAND (expr, 0);
3453 expr_type = TREE_TYPE (expr);
3457 /* [temp.arg.nontype]/5, bullet 1
3459 For a non-type template-parameter of integral or enumeration type,
3460 integral promotions (_conv.prom_) and integral conversions
3461 (_conv.integral_) are applied. */
3462 if (INTEGRAL_TYPE_P (type))
3464 if (!INTEGRAL_TYPE_P (expr_type))
3465 return error_mark_node;
3467 expr = fold_decl_constant_value (expr);
3468 /* Notice that there are constant expressions like '4 % 0' which
3469 do not fold into integer constants. */
3470 if (TREE_CODE (expr) != INTEGER_CST)
3472 error ("%qE is not a valid template argument for type %qT "
3473 "because it is a non-constant expression", expr, type);
3474 return NULL_TREE;
3477 /* At this point, an implicit conversion does what we want,
3478 because we already know that the expression is of integral
3479 type. */
3480 expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
3481 if (expr == error_mark_node)
3482 return error_mark_node;
3484 /* Conversion was allowed: fold it to a bare integer constant. */
3485 expr = fold (expr);
3487 /* [temp.arg.nontype]/5, bullet 2
3489 For a non-type template-parameter of type pointer to object,
3490 qualification conversions (_conv.qual_) and the array-to-pointer
3491 conversion (_conv.array_) are applied. */
3492 else if (TYPE_PTROBV_P (type))
3494 /* [temp.arg.nontype]/1 (TC1 version, DR 49):
3496 A template-argument for a non-type, non-template template-parameter
3497 shall be one of: [...]
3499 -- the name of a non-type template-parameter;
3500 -- the address of an object or function with external linkage, [...]
3501 expressed as "& id-expression" where the & is optional if the name
3502 refers to a function or array, or if the corresponding
3503 template-parameter is a reference.
3505 Here, we do not care about functions, as they are invalid anyway
3506 for a parameter of type pointer-to-object. */
3507 bool constant_address_p =
3508 (TREE_CODE (expr) == ADDR_EXPR
3509 || TREE_CODE (expr_type) == ARRAY_TYPE
3510 || (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr)));
3512 expr = decay_conversion (expr);
3513 if (expr == error_mark_node)
3514 return error_mark_node;
3516 expr = perform_qualification_conversions (type, expr);
3517 if (expr == error_mark_node)
3518 return error_mark_node;
3520 if (!constant_address_p)
3522 error ("%qE is not a valid template argument for type %qT "
3523 "because it is not a constant pointer", expr, type);
3524 return NULL_TREE;
3527 /* [temp.arg.nontype]/5, bullet 3
3529 For a non-type template-parameter of type reference to object, no
3530 conversions apply. The type referred to by the reference may be more
3531 cv-qualified than the (otherwise identical) type of the
3532 template-argument. The template-parameter is bound directly to the
3533 template-argument, which must be an lvalue. */
3534 else if (TYPE_REF_OBJ_P (type))
3536 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
3537 expr_type))
3538 return error_mark_node;
3540 if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
3542 error ("%qE is not a valid template argument for type %qT "
3543 "because of conflicts in cv-qualification", expr, type);
3544 return NULL_TREE;
3547 if (!real_lvalue_p (expr))
3549 error ("%qE is not a valid template argument for type %qT "
3550 "because it is not a lvalue", expr, type);
3551 return NULL_TREE;
3554 /* [temp.arg.nontype]/1
3556 A template-argument for a non-type, non-template template-parameter
3557 shall be one of: [...]
3559 -- the address of an object or function with external linkage. */
3560 if (!DECL_EXTERNAL_LINKAGE_P (expr))
3562 error ("%qE is not a valid template argument for type %qT "
3563 "because object %qD has not external linkage",
3564 expr, type, expr);
3565 return NULL_TREE;
3568 expr = build_nop (type, build_address (expr));
3570 /* [temp.arg.nontype]/5, bullet 4
3572 For a non-type template-parameter of type pointer to function, only
3573 the function-to-pointer conversion (_conv.func_) is applied. If the
3574 template-argument represents a set of overloaded functions (or a
3575 pointer to such), the matching function is selected from the set
3576 (_over.over_). */
3577 else if (TYPE_PTRFN_P (type))
3579 /* If the argument is a template-id, we might not have enough
3580 context information to decay the pointer.
3581 ??? Why static5.C requires decay and subst1.C works fine
3582 even without it? */
3583 if (!type_unknown_p (expr_type))
3585 expr = decay_conversion (expr);
3586 if (expr == error_mark_node)
3587 return error_mark_node;
3590 expr = convert_nontype_argument_function (type, expr);
3591 if (!expr || expr == error_mark_node)
3592 return expr;
3594 /* [temp.arg.nontype]/5, bullet 5
3596 For a non-type template-parameter of type reference to function, no
3597 conversions apply. If the template-argument represents a set of
3598 overloaded functions, the matching function is selected from the set
3599 (_over.over_). */
3600 else if (TYPE_REFFN_P (type))
3602 if (TREE_CODE (expr) == ADDR_EXPR)
3604 error ("%qE is not a valid template argument for type %qT "
3605 "because it is a pointer", expr, type);
3606 inform ("try using %qE instead", TREE_OPERAND (expr, 0));
3607 return NULL_TREE;
3610 expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
3611 if (!expr || expr == error_mark_node)
3612 return expr;
3614 expr = build_nop(type, build_address (expr));
3616 /* [temp.arg.nontype]/5, bullet 6
3618 For a non-type template-parameter of type pointer to member function,
3619 no conversions apply. If the template-argument represents a set of
3620 overloaded member functions, the matching member function is selected
3621 from the set (_over.over_). */
3622 else if (TYPE_PTRMEMFUNC_P (type))
3624 expr = instantiate_type (type, expr, tf_none);
3625 if (expr == error_mark_node)
3626 return error_mark_node;
3628 /* There is no way to disable standard conversions in
3629 resolve_address_of_overloaded_function (called by
3630 instantiate_type). It is possible that the call succeeded by
3631 converting &B::I to &D::I (where B is a base of D), so we need
3632 to reject this conversion here.
3634 Actually, even if there was a way to disable standard conversions,
3635 it would still be better to reject them here so that we can
3636 provide a superior diagnostic. */
3637 if (!same_type_p (TREE_TYPE (expr), type))
3639 /* Make sure we are just one standard conversion off. */
3640 gcc_assert (can_convert (type, TREE_TYPE (expr)));
3641 error ("%qE is not a valid template argument for type %qT "
3642 "because it is of type %qT", expr, type,
3643 TREE_TYPE (expr));
3644 inform ("standard conversions are not allowed in this context");
3645 return NULL_TREE;
3648 /* [temp.arg.nontype]/5, bullet 7
3650 For a non-type template-parameter of type pointer to data member,
3651 qualification conversions (_conv.qual_) are applied. */
3652 else if (TYPE_PTRMEM_P (type))
3654 expr = perform_qualification_conversions (type, expr);
3655 if (expr == error_mark_node)
3656 return expr;
3658 /* A template non-type parameter must be one of the above. */
3659 else
3660 gcc_unreachable ();
3662 /* Sanity check: did we actually convert the argument to the
3663 right type? */
3664 gcc_assert (same_type_p (type, TREE_TYPE (expr)));
3665 return expr;
3669 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
3670 template template parameters. Both PARM_PARMS and ARG_PARMS are
3671 vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
3672 or PARM_DECL.
3674 ARG_PARMS may contain more parameters than PARM_PARMS. If this is
3675 the case, then extra parameters must have default arguments.
3677 Consider the example:
3678 template <class T, class Allocator = allocator> class vector;
3679 template<template <class U> class TT> class C;
3681 C<vector> is a valid instantiation. PARM_PARMS for the above code
3682 contains a TYPE_DECL (for U), ARG_PARMS contains two TYPE_DECLs (for
3683 T and Allocator) and OUTER_ARGS contains the argument that is used to
3684 substitute the TT parameter. */
3686 static int
3687 coerce_template_template_parms (tree parm_parms,
3688 tree arg_parms,
3689 tsubst_flags_t complain,
3690 tree in_decl,
3691 tree outer_args)
3693 int nparms, nargs, i;
3694 tree parm, arg;
3696 gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
3697 gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
3699 nparms = TREE_VEC_LENGTH (parm_parms);
3700 nargs = TREE_VEC_LENGTH (arg_parms);
3702 /* The rule here is opposite of coerce_template_parms. */
3703 if (nargs < nparms
3704 || (nargs > nparms
3705 && TREE_PURPOSE (TREE_VEC_ELT (arg_parms, nparms)) == NULL_TREE))
3706 return 0;
3708 for (i = 0; i < nparms; ++i)
3710 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
3711 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
3713 if (arg == NULL_TREE || arg == error_mark_node
3714 || parm == NULL_TREE || parm == error_mark_node)
3715 return 0;
3717 if (TREE_CODE (arg) != TREE_CODE (parm))
3718 return 0;
3720 switch (TREE_CODE (parm))
3722 case TYPE_DECL:
3723 break;
3725 case TEMPLATE_DECL:
3726 /* We encounter instantiations of templates like
3727 template <template <template <class> class> class TT>
3728 class C; */
3730 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3731 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3733 if (!coerce_template_template_parms
3734 (parmparm, argparm, complain, in_decl, outer_args))
3735 return 0;
3737 break;
3739 case PARM_DECL:
3740 /* The tsubst call is used to handle cases such as
3742 template <int> class C {};
3743 template <class T, template <T> class TT> class D {};
3744 D<int, C> d;
3746 i.e. the parameter list of TT depends on earlier parameters. */
3747 if (!dependent_type_p (TREE_TYPE (arg))
3748 && !same_type_p
3749 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
3750 TREE_TYPE (arg)))
3751 return 0;
3752 break;
3754 default:
3755 gcc_unreachable ();
3758 return 1;
3761 /* Convert the indicated template ARG as necessary to match the
3762 indicated template PARM. Returns the converted ARG, or
3763 error_mark_node if the conversion was unsuccessful. Error and
3764 warning messages are issued under control of COMPLAIN. This
3765 conversion is for the Ith parameter in the parameter list. ARGS is
3766 the full set of template arguments deduced so far. */
3768 static tree
3769 convert_template_argument (tree parm,
3770 tree arg,
3771 tree args,
3772 tsubst_flags_t complain,
3773 int i,
3774 tree in_decl)
3776 tree val;
3777 tree inner_args;
3778 int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
3780 inner_args = INNERMOST_TEMPLATE_ARGS (args);
3782 if (TREE_CODE (arg) == TREE_LIST
3783 && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
3785 /* The template argument was the name of some
3786 member function. That's usually
3787 invalid, but static members are OK. In any
3788 case, grab the underlying fields/functions
3789 and issue an error later if required. */
3790 arg = TREE_VALUE (arg);
3791 TREE_TYPE (arg) = unknown_type_node;
3794 requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
3795 requires_type = (TREE_CODE (parm) == TYPE_DECL
3796 || requires_tmpl_type);
3798 is_tmpl_type = ((TREE_CODE (arg) == TEMPLATE_DECL
3799 && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
3800 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3801 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
3803 if (is_tmpl_type
3804 && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3805 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
3806 arg = TYPE_STUB_DECL (arg);
3808 is_type = TYPE_P (arg) || is_tmpl_type;
3810 if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
3811 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
3813 pedwarn ("to refer to a type member of a template parameter, "
3814 "use %<typename %E%>", arg);
3816 arg = make_typename_type (TREE_OPERAND (arg, 0),
3817 TREE_OPERAND (arg, 1),
3818 typename_type,
3819 complain & tf_error);
3820 is_type = 1;
3822 if (is_type != requires_type)
3824 if (in_decl)
3826 if (complain & tf_error)
3828 error ("type/value mismatch at argument %d in template "
3829 "parameter list for %qD",
3830 i + 1, in_decl);
3831 if (is_type)
3832 error (" expected a constant of type %qT, got %qT",
3833 TREE_TYPE (parm),
3834 (is_tmpl_type ? DECL_NAME (arg) : arg));
3835 else if (requires_tmpl_type)
3836 error (" expected a class template, got %qE", arg);
3837 else
3838 error (" expected a type, got %qE", arg);
3841 return error_mark_node;
3843 if (is_tmpl_type ^ requires_tmpl_type)
3845 if (in_decl && (complain & tf_error))
3847 error ("type/value mismatch at argument %d in template "
3848 "parameter list for %qD",
3849 i + 1, in_decl);
3850 if (is_tmpl_type)
3851 error (" expected a type, got %qT", DECL_NAME (arg));
3852 else
3853 error (" expected a class template, got %qT", arg);
3855 return error_mark_node;
3858 if (is_type)
3860 if (requires_tmpl_type)
3862 if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
3863 /* The number of argument required is not known yet.
3864 Just accept it for now. */
3865 val = TREE_TYPE (arg);
3866 else
3868 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3869 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3871 if (coerce_template_template_parms (parmparm, argparm,
3872 complain, in_decl,
3873 inner_args))
3875 val = arg;
3877 /* TEMPLATE_TEMPLATE_PARM node is preferred over
3878 TEMPLATE_DECL. */
3879 if (val != error_mark_node
3880 && DECL_TEMPLATE_TEMPLATE_PARM_P (val))
3881 val = TREE_TYPE (val);
3883 else
3885 if (in_decl && (complain & tf_error))
3887 error ("type/value mismatch at argument %d in "
3888 "template parameter list for %qD",
3889 i + 1, in_decl);
3890 error (" expected a template of type %qD, got %qD",
3891 parm, arg);
3894 val = error_mark_node;
3898 else
3899 val = arg;
3901 else
3903 tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
3905 if (invalid_nontype_parm_type_p (t, complain))
3906 return error_mark_node;
3908 if (!uses_template_parms (arg) && !uses_template_parms (t))
3909 /* We used to call digest_init here. However, digest_init
3910 will report errors, which we don't want when complain
3911 is zero. More importantly, digest_init will try too
3912 hard to convert things: for example, `0' should not be
3913 converted to pointer type at this point according to
3914 the standard. Accepting this is not merely an
3915 extension, since deciding whether or not these
3916 conversions can occur is part of determining which
3917 function template to call, or whether a given explicit
3918 argument specification is valid. */
3919 val = convert_nontype_argument (t, arg);
3920 else
3921 val = arg;
3923 if (val == NULL_TREE)
3924 val = error_mark_node;
3925 else if (val == error_mark_node && (complain & tf_error))
3926 error ("could not convert template argument %qE to %qT", arg, t);
3929 return val;
3932 /* Convert all template arguments to their appropriate types, and
3933 return a vector containing the innermost resulting template
3934 arguments. If any error occurs, return error_mark_node. Error and
3935 warning messages are issued under control of COMPLAIN.
3937 If REQUIRE_ALL_ARGUMENTS is nonzero, all arguments must be
3938 provided in ARGLIST, or else trailing parameters must have default
3939 values. If REQUIRE_ALL_ARGUMENTS is zero, we will attempt argument
3940 deduction for any unspecified trailing arguments. */
3942 static tree
3943 coerce_template_parms (tree parms,
3944 tree args,
3945 tree in_decl,
3946 tsubst_flags_t complain,
3947 int require_all_arguments)
3949 int nparms, nargs, i, lost = 0;
3950 tree inner_args;
3951 tree new_args;
3952 tree new_inner_args;
3954 inner_args = INNERMOST_TEMPLATE_ARGS (args);
3955 nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
3956 nparms = TREE_VEC_LENGTH (parms);
3958 if (nargs > nparms
3959 || (nargs < nparms
3960 && require_all_arguments
3961 && TREE_PURPOSE (TREE_VEC_ELT (parms, nargs)) == NULL_TREE))
3963 if (complain & tf_error)
3965 error ("wrong number of template arguments (%d, should be %d)",
3966 nargs, nparms);
3968 if (in_decl)
3969 cp_error_at ("provided for %qD", in_decl);
3972 return error_mark_node;
3975 new_inner_args = make_tree_vec (nparms);
3976 new_args = add_outermost_template_args (args, new_inner_args);
3977 for (i = 0; i < nparms; i++)
3979 tree arg;
3980 tree parm;
3982 /* Get the Ith template parameter. */
3983 parm = TREE_VEC_ELT (parms, i);
3985 /* Calculate the Ith argument. */
3986 if (i < nargs)
3987 arg = TREE_VEC_ELT (inner_args, i);
3988 else if (require_all_arguments)
3989 /* There must be a default arg in this case. */
3990 arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
3991 complain, in_decl);
3992 else
3993 break;
3995 gcc_assert (arg);
3996 if (arg == error_mark_node)
3998 if (complain & tf_error)
3999 error ("template argument %d is invalid", i + 1);
4001 else
4002 arg = convert_template_argument (TREE_VALUE (parm),
4003 arg, new_args, complain, i,
4004 in_decl);
4006 if (arg == error_mark_node)
4007 lost++;
4008 TREE_VEC_ELT (new_inner_args, i) = arg;
4011 if (lost)
4012 return error_mark_node;
4014 return new_inner_args;
4017 /* Returns 1 if template args OT and NT are equivalent. */
4019 static int
4020 template_args_equal (tree ot, tree nt)
4022 if (nt == ot)
4023 return 1;
4025 if (TREE_CODE (nt) == TREE_VEC)
4026 /* For member templates */
4027 return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
4028 else if (TYPE_P (nt))
4029 return TYPE_P (ot) && same_type_p (ot, nt);
4030 else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
4031 return 0;
4032 else
4033 return cp_tree_equal (ot, nt);
4036 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
4037 of template arguments. Returns 0 otherwise. */
4040 comp_template_args (tree oldargs, tree newargs)
4042 int i;
4044 if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
4045 return 0;
4047 for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
4049 tree nt = TREE_VEC_ELT (newargs, i);
4050 tree ot = TREE_VEC_ELT (oldargs, i);
4052 if (! template_args_equal (ot, nt))
4053 return 0;
4055 return 1;
4058 /* Given class template name and parameter list, produce a user-friendly name
4059 for the instantiation. */
4061 static char *
4062 mangle_class_name_for_template (const char* name, tree parms, tree arglist)
4064 static struct obstack scratch_obstack;
4065 static char *scratch_firstobj;
4066 int i, nparms;
4068 if (!scratch_firstobj)
4069 gcc_obstack_init (&scratch_obstack);
4070 else
4071 obstack_free (&scratch_obstack, scratch_firstobj);
4072 scratch_firstobj = obstack_alloc (&scratch_obstack, 1);
4074 #define ccat(C) obstack_1grow (&scratch_obstack, (C));
4075 #define cat(S) obstack_grow (&scratch_obstack, (S), strlen (S))
4077 cat (name);
4078 ccat ('<');
4079 nparms = TREE_VEC_LENGTH (parms);
4080 arglist = INNERMOST_TEMPLATE_ARGS (arglist);
4081 gcc_assert (nparms == TREE_VEC_LENGTH (arglist));
4082 for (i = 0; i < nparms; i++)
4084 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4085 tree arg = TREE_VEC_ELT (arglist, i);
4087 if (i)
4088 ccat (',');
4090 if (TREE_CODE (parm) == TYPE_DECL)
4092 cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
4093 continue;
4095 else if (TREE_CODE (parm) == TEMPLATE_DECL)
4097 if (TREE_CODE (arg) == TEMPLATE_DECL)
4099 /* Already substituted with real template. Just output
4100 the template name here */
4101 tree context = DECL_CONTEXT (arg);
4102 if (context)
4104 /* The template may be defined in a namespace, or
4105 may be a member template. */
4106 gcc_assert (TREE_CODE (context) == NAMESPACE_DECL
4107 || CLASS_TYPE_P (context));
4108 cat (decl_as_string (DECL_CONTEXT (arg),
4109 TFF_PLAIN_IDENTIFIER));
4110 cat ("::");
4112 cat (IDENTIFIER_POINTER (DECL_NAME (arg)));
4114 else
4115 /* Output the parameter declaration. */
4116 cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
4117 continue;
4119 else
4120 gcc_assert (TREE_CODE (parm) == PARM_DECL);
4122 /* No need to check arglist against parmlist here; we did that
4123 in coerce_template_parms, called from lookup_template_class. */
4124 cat (expr_as_string (arg, TFF_PLAIN_IDENTIFIER));
4127 char *bufp = obstack_next_free (&scratch_obstack);
4128 int offset = 0;
4129 while (bufp[offset - 1] == ' ')
4130 offset--;
4131 obstack_blank_fast (&scratch_obstack, offset);
4133 /* B<C<char> >, not B<C<char>> */
4134 if (bufp[offset - 1] == '>')
4135 ccat (' ');
4137 ccat ('>');
4138 ccat ('\0');
4139 return (char *) obstack_base (&scratch_obstack);
4142 static tree
4143 classtype_mangled_name (tree t)
4145 if (CLASSTYPE_TEMPLATE_INFO (t)
4146 /* Specializations have already had their names set up in
4147 lookup_template_class. */
4148 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
4150 tree tmpl = most_general_template (CLASSTYPE_TI_TEMPLATE (t));
4152 /* For non-primary templates, the template parameters are
4153 implicit from their surrounding context. */
4154 if (PRIMARY_TEMPLATE_P (tmpl))
4156 tree name = DECL_NAME (tmpl);
4157 char *mangled_name = mangle_class_name_for_template
4158 (IDENTIFIER_POINTER (name),
4159 DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
4160 CLASSTYPE_TI_ARGS (t));
4161 tree id = get_identifier (mangled_name);
4162 IDENTIFIER_TEMPLATE (id) = name;
4163 return id;
4167 return TYPE_IDENTIFIER (t);
4170 static void
4171 add_pending_template (tree d)
4173 tree ti = (TYPE_P (d)
4174 ? CLASSTYPE_TEMPLATE_INFO (d)
4175 : DECL_TEMPLATE_INFO (d));
4176 tree pt;
4177 int level;
4179 if (TI_PENDING_TEMPLATE_FLAG (ti))
4180 return;
4182 /* We are called both from instantiate_decl, where we've already had a
4183 tinst_level pushed, and instantiate_template, where we haven't.
4184 Compensate. */
4185 level = !(current_tinst_level && TINST_DECL (current_tinst_level) == d);
4187 if (level)
4188 push_tinst_level (d);
4190 pt = tree_cons (current_tinst_level, d, NULL_TREE);
4191 if (last_pending_template)
4192 TREE_CHAIN (last_pending_template) = pt;
4193 else
4194 pending_templates = pt;
4196 last_pending_template = pt;
4198 TI_PENDING_TEMPLATE_FLAG (ti) = 1;
4200 if (level)
4201 pop_tinst_level ();
4205 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
4206 ARGLIST. Valid choices for FNS are given in the cp-tree.def
4207 documentation for TEMPLATE_ID_EXPR. */
4209 tree
4210 lookup_template_function (tree fns, tree arglist)
4212 tree type;
4214 if (fns == error_mark_node || arglist == error_mark_node)
4215 return error_mark_node;
4217 gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
4218 gcc_assert (fns && (is_overloaded_fn (fns)
4219 || TREE_CODE (fns) == IDENTIFIER_NODE));
4221 if (BASELINK_P (fns))
4223 BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
4224 unknown_type_node,
4225 BASELINK_FUNCTIONS (fns),
4226 arglist);
4227 return fns;
4230 type = TREE_TYPE (fns);
4231 if (TREE_CODE (fns) == OVERLOAD || !type)
4232 type = unknown_type_node;
4234 return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
4237 /* Within the scope of a template class S<T>, the name S gets bound
4238 (in build_self_reference) to a TYPE_DECL for the class, not a
4239 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
4240 or one of its enclosing classes, and that type is a template,
4241 return the associated TEMPLATE_DECL. Otherwise, the original
4242 DECL is returned. */
4244 tree
4245 maybe_get_template_decl_from_type_decl (tree decl)
4247 return (decl != NULL_TREE
4248 && TREE_CODE (decl) == TYPE_DECL
4249 && DECL_ARTIFICIAL (decl)
4250 && CLASS_TYPE_P (TREE_TYPE (decl))
4251 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
4252 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
4255 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
4256 parameters, find the desired type.
4258 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
4260 IN_DECL, if non-NULL, is the template declaration we are trying to
4261 instantiate.
4263 If ENTERING_SCOPE is nonzero, we are about to enter the scope of
4264 the class we are looking up.
4266 Issue error and warning messages under control of COMPLAIN.
4268 If the template class is really a local class in a template
4269 function, then the FUNCTION_CONTEXT is the function in which it is
4270 being instantiated.
4272 ??? Note that this function is currently called *twice* for each
4273 template-id: the first time from the parser, while creating the
4274 incomplete type (finish_template_type), and the second type during the
4275 real instantiation (instantiate_template_class). This is surely something
4276 that we want to avoid. It also causes some problems with argument
4277 coercion (see convert_nontype_argument for more information on this). */
4279 tree
4280 lookup_template_class (tree d1,
4281 tree arglist,
4282 tree in_decl,
4283 tree context,
4284 int entering_scope,
4285 tsubst_flags_t complain)
4287 tree template = NULL_TREE, parmlist;
4288 tree t;
4290 timevar_push (TV_NAME_LOOKUP);
4292 if (TREE_CODE (d1) == IDENTIFIER_NODE)
4294 tree value = innermost_non_namespace_value (d1);
4295 if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
4296 template = value;
4297 else
4299 if (context)
4300 push_decl_namespace (context);
4301 template = lookup_name (d1, /*prefer_type=*/0);
4302 template = maybe_get_template_decl_from_type_decl (template);
4303 if (context)
4304 pop_decl_namespace ();
4306 if (template)
4307 context = DECL_CONTEXT (template);
4309 else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
4311 tree type = TREE_TYPE (d1);
4313 /* If we are declaring a constructor, say A<T>::A<T>, we will get
4314 an implicit typename for the second A. Deal with it. */
4315 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
4316 type = TREE_TYPE (type);
4318 if (CLASSTYPE_TEMPLATE_INFO (type))
4320 template = CLASSTYPE_TI_TEMPLATE (type);
4321 d1 = DECL_NAME (template);
4324 else if (TREE_CODE (d1) == ENUMERAL_TYPE
4325 || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
4327 template = TYPE_TI_TEMPLATE (d1);
4328 d1 = DECL_NAME (template);
4330 else if (TREE_CODE (d1) == TEMPLATE_DECL
4331 && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
4333 template = d1;
4334 d1 = DECL_NAME (template);
4335 context = DECL_CONTEXT (template);
4338 /* Issue an error message if we didn't find a template. */
4339 if (! template)
4341 if (complain & tf_error)
4342 error ("%qT is not a template", d1);
4343 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4346 if (TREE_CODE (template) != TEMPLATE_DECL
4347 /* Make sure it's a user visible template, if it was named by
4348 the user. */
4349 || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (template)
4350 && !PRIMARY_TEMPLATE_P (template)))
4352 if (complain & tf_error)
4354 error ("non-template type %qT used as a template", d1);
4355 if (in_decl)
4356 cp_error_at ("for template declaration %qD", in_decl);
4358 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4361 complain &= ~tf_user;
4363 if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
4365 /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
4366 template arguments */
4368 tree parm;
4369 tree arglist2;
4371 parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
4373 /* Consider an example where a template template parameter declared as
4375 template <class T, class U = std::allocator<T> > class TT
4377 The template parameter level of T and U are one level larger than
4378 of TT. To proper process the default argument of U, say when an
4379 instantiation `TT<int>' is seen, we need to build the full
4380 arguments containing {int} as the innermost level. Outer levels,
4381 available when not appearing as default template argument, can be
4382 obtained from `current_template_args ()'.
4384 Suppose that TT is later substituted with std::vector. The above
4385 instantiation is `TT<int, std::allocator<T> >' with TT at
4386 level 1, and T at level 2, while the template arguments at level 1
4387 becomes {std::vector} and the inner level 2 is {int}. */
4389 if (current_template_parms)
4390 arglist = add_to_template_args (current_template_args (), arglist);
4392 arglist2 = coerce_template_parms (parmlist, arglist, template,
4393 complain, /*require_all_args=*/1);
4394 if (arglist2 == error_mark_node
4395 || (!uses_template_parms (arglist2)
4396 && check_instantiated_args (template, arglist2, complain)))
4397 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4399 parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
4400 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
4402 else
4404 tree template_type = TREE_TYPE (template);
4405 tree gen_tmpl;
4406 tree type_decl;
4407 tree found = NULL_TREE;
4408 int arg_depth;
4409 int parm_depth;
4410 int is_partial_instantiation;
4412 gen_tmpl = most_general_template (template);
4413 parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
4414 parm_depth = TMPL_PARMS_DEPTH (parmlist);
4415 arg_depth = TMPL_ARGS_DEPTH (arglist);
4417 if (arg_depth == 1 && parm_depth > 1)
4419 /* We've been given an incomplete set of template arguments.
4420 For example, given:
4422 template <class T> struct S1 {
4423 template <class U> struct S2 {};
4424 template <class U> struct S2<U*> {};
4427 we will be called with an ARGLIST of `U*', but the
4428 TEMPLATE will be `template <class T> template
4429 <class U> struct S1<T>::S2'. We must fill in the missing
4430 arguments. */
4431 arglist
4432 = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
4433 arglist);
4434 arg_depth = TMPL_ARGS_DEPTH (arglist);
4437 /* Now we should have enough arguments. */
4438 gcc_assert (parm_depth == arg_depth);
4440 /* From here on, we're only interested in the most general
4441 template. */
4442 template = gen_tmpl;
4444 /* Calculate the BOUND_ARGS. These will be the args that are
4445 actually tsubst'd into the definition to create the
4446 instantiation. */
4447 if (parm_depth > 1)
4449 /* We have multiple levels of arguments to coerce, at once. */
4450 int i;
4451 int saved_depth = TMPL_ARGS_DEPTH (arglist);
4453 tree bound_args = make_tree_vec (parm_depth);
4455 for (i = saved_depth,
4456 t = DECL_TEMPLATE_PARMS (template);
4457 i > 0 && t != NULL_TREE;
4458 --i, t = TREE_CHAIN (t))
4460 tree a = coerce_template_parms (TREE_VALUE (t),
4461 arglist, template,
4462 complain, /*require_all_args=*/1);
4464 /* Don't process further if one of the levels fails. */
4465 if (a == error_mark_node)
4467 /* Restore the ARGLIST to its full size. */
4468 TREE_VEC_LENGTH (arglist) = saved_depth;
4469 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4472 SET_TMPL_ARGS_LEVEL (bound_args, i, a);
4474 /* We temporarily reduce the length of the ARGLIST so
4475 that coerce_template_parms will see only the arguments
4476 corresponding to the template parameters it is
4477 examining. */
4478 TREE_VEC_LENGTH (arglist)--;
4481 /* Restore the ARGLIST to its full size. */
4482 TREE_VEC_LENGTH (arglist) = saved_depth;
4484 arglist = bound_args;
4486 else
4487 arglist
4488 = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
4489 INNERMOST_TEMPLATE_ARGS (arglist),
4490 template,
4491 complain, /*require_all_args=*/1);
4493 if (arglist == error_mark_node)
4494 /* We were unable to bind the arguments. */
4495 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4497 /* In the scope of a template class, explicit references to the
4498 template class refer to the type of the template, not any
4499 instantiation of it. For example, in:
4501 template <class T> class C { void f(C<T>); }
4503 the `C<T>' is just the same as `C'. Outside of the
4504 class, however, such a reference is an instantiation. */
4505 if (comp_template_args (TYPE_TI_ARGS (template_type),
4506 arglist))
4508 found = template_type;
4510 if (!entering_scope && PRIMARY_TEMPLATE_P (template))
4512 tree ctx;
4514 for (ctx = current_class_type;
4515 ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
4516 ctx = (TYPE_P (ctx)
4517 ? TYPE_CONTEXT (ctx)
4518 : DECL_CONTEXT (ctx)))
4519 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
4520 goto found_ctx;
4522 /* We're not in the scope of the class, so the
4523 TEMPLATE_TYPE is not the type we want after all. */
4524 found = NULL_TREE;
4525 found_ctx:;
4528 if (found)
4529 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4531 /* If we already have this specialization, return it. */
4532 found = retrieve_specialization (template, arglist,
4533 /*class_specializations_p=*/false);
4534 if (found)
4535 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4537 /* This type is a "partial instantiation" if any of the template
4538 arguments still involve template parameters. Note that we set
4539 IS_PARTIAL_INSTANTIATION for partial specializations as
4540 well. */
4541 is_partial_instantiation = uses_template_parms (arglist);
4543 /* If the deduced arguments are invalid, then the binding
4544 failed. */
4545 if (!is_partial_instantiation
4546 && check_instantiated_args (template,
4547 INNERMOST_TEMPLATE_ARGS (arglist),
4548 complain))
4549 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4551 if (!is_partial_instantiation
4552 && !PRIMARY_TEMPLATE_P (template)
4553 && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
4555 found = xref_tag_from_type (TREE_TYPE (template),
4556 DECL_NAME (template),
4557 /*tag_scope=*/ts_global);
4558 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4561 context = tsubst (DECL_CONTEXT (template), arglist,
4562 complain, in_decl);
4563 if (!context)
4564 context = global_namespace;
4566 /* Create the type. */
4567 if (TREE_CODE (template_type) == ENUMERAL_TYPE)
4569 if (!is_partial_instantiation)
4571 set_current_access_from_decl (TYPE_NAME (template_type));
4572 t = start_enum (TYPE_IDENTIFIER (template_type));
4574 else
4575 /* We don't want to call start_enum for this type, since
4576 the values for the enumeration constants may involve
4577 template parameters. And, no one should be interested
4578 in the enumeration constants for such a type. */
4579 t = make_node (ENUMERAL_TYPE);
4581 else
4583 t = make_aggr_type (TREE_CODE (template_type));
4584 CLASSTYPE_DECLARED_CLASS (t)
4585 = CLASSTYPE_DECLARED_CLASS (template_type);
4586 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
4587 TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
4589 /* A local class. Make sure the decl gets registered properly. */
4590 if (context == current_function_decl)
4591 pushtag (DECL_NAME (template), t, /*tag_scope=*/ts_current);
4594 /* If we called start_enum or pushtag above, this information
4595 will already be set up. */
4596 if (!TYPE_NAME (t))
4598 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
4600 type_decl = create_implicit_typedef (DECL_NAME (template), t);
4601 DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
4602 TYPE_STUB_DECL (t) = type_decl;
4603 DECL_SOURCE_LOCATION (type_decl)
4604 = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
4606 else
4607 type_decl = TYPE_NAME (t);
4609 TREE_PRIVATE (type_decl)
4610 = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
4611 TREE_PROTECTED (type_decl)
4612 = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
4613 DECL_IN_SYSTEM_HEADER (type_decl)
4614 = DECL_IN_SYSTEM_HEADER (template);
4616 /* Set up the template information. We have to figure out which
4617 template is the immediate parent if this is a full
4618 instantiation. */
4619 if (parm_depth == 1 || is_partial_instantiation
4620 || !PRIMARY_TEMPLATE_P (template))
4621 /* This case is easy; there are no member templates involved. */
4622 found = template;
4623 else
4625 /* This is a full instantiation of a member template. Look
4626 for a partial instantiation of which this is an instance. */
4628 for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
4629 found; found = TREE_CHAIN (found))
4631 int success;
4632 tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
4634 /* We only want partial instantiations, here, not
4635 specializations or full instantiations. */
4636 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
4637 || !uses_template_parms (TREE_VALUE (found)))
4638 continue;
4640 /* Temporarily reduce by one the number of levels in the
4641 ARGLIST and in FOUND so as to avoid comparing the
4642 last set of arguments. */
4643 TREE_VEC_LENGTH (arglist)--;
4644 TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
4646 /* See if the arguments match. If they do, then TMPL is
4647 the partial instantiation we want. */
4648 success = comp_template_args (TREE_PURPOSE (found), arglist);
4650 /* Restore the argument vectors to their full size. */
4651 TREE_VEC_LENGTH (arglist)++;
4652 TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
4654 if (success)
4656 found = tmpl;
4657 break;
4661 if (!found)
4663 /* There was no partial instantiation. This happens
4664 where C<T> is a member template of A<T> and it's used
4665 in something like
4667 template <typename T> struct B { A<T>::C<int> m; };
4668 B<float>;
4670 Create the partial instantiation.
4672 TREE_VEC_LENGTH (arglist)--;
4673 found = tsubst (template, arglist, complain, NULL_TREE);
4674 TREE_VEC_LENGTH (arglist)++;
4678 SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
4679 DECL_TEMPLATE_INSTANTIATIONS (template)
4680 = tree_cons (arglist, t,
4681 DECL_TEMPLATE_INSTANTIATIONS (template));
4683 if (TREE_CODE (t) == ENUMERAL_TYPE
4684 && !is_partial_instantiation)
4685 /* Now that the type has been registered on the instantiations
4686 list, we set up the enumerators. Because the enumeration
4687 constants may involve the enumeration type itself, we make
4688 sure to register the type first, and then create the
4689 constants. That way, doing tsubst_expr for the enumeration
4690 constants won't result in recursive calls here; we'll find
4691 the instantiation and exit above. */
4692 tsubst_enum (template_type, t, arglist);
4694 /* Reset the name of the type, now that CLASSTYPE_TEMPLATE_INFO
4695 is set up. */
4696 if (TREE_CODE (t) != ENUMERAL_TYPE)
4697 DECL_NAME (type_decl) = classtype_mangled_name (t);
4698 if (is_partial_instantiation)
4699 /* If the type makes use of template parameters, the
4700 code that generates debugging information will crash. */
4701 DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
4703 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
4705 timevar_pop (TV_NAME_LOOKUP);
4708 struct pair_fn_data
4710 tree_fn_t fn;
4711 void *data;
4712 struct pointer_set_t *visited;
4715 /* Called from for_each_template_parm via walk_tree. */
4717 static tree
4718 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
4720 tree t = *tp;
4721 struct pair_fn_data *pfd = (struct pair_fn_data *) d;
4722 tree_fn_t fn = pfd->fn;
4723 void *data = pfd->data;
4725 if (TYPE_P (t)
4726 && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited))
4727 return error_mark_node;
4729 switch (TREE_CODE (t))
4731 case RECORD_TYPE:
4732 if (TYPE_PTRMEMFUNC_P (t))
4733 break;
4734 /* Fall through. */
4736 case UNION_TYPE:
4737 case ENUMERAL_TYPE:
4738 if (!TYPE_TEMPLATE_INFO (t))
4739 *walk_subtrees = 0;
4740 else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
4741 fn, data, pfd->visited))
4742 return error_mark_node;
4743 break;
4745 case METHOD_TYPE:
4746 /* Since we're not going to walk subtrees, we have to do this
4747 explicitly here. */
4748 if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
4749 pfd->visited))
4750 return error_mark_node;
4751 /* Fall through. */
4753 case FUNCTION_TYPE:
4754 /* Check the return type. */
4755 if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
4756 return error_mark_node;
4758 /* Check the parameter types. Since default arguments are not
4759 instantiated until they are needed, the TYPE_ARG_TYPES may
4760 contain expressions that involve template parameters. But,
4761 no-one should be looking at them yet. And, once they're
4762 instantiated, they don't contain template parameters, so
4763 there's no point in looking at them then, either. */
4765 tree parm;
4767 for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
4768 if (for_each_template_parm (TREE_VALUE (parm), fn, data,
4769 pfd->visited))
4770 return error_mark_node;
4772 /* Since we've already handled the TYPE_ARG_TYPES, we don't
4773 want walk_tree walking into them itself. */
4774 *walk_subtrees = 0;
4776 break;
4778 case TYPEOF_TYPE:
4779 if (for_each_template_parm (TYPE_FIELDS (t), fn, data,
4780 pfd->visited))
4781 return error_mark_node;
4782 break;
4784 case FUNCTION_DECL:
4785 case VAR_DECL:
4786 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
4787 && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
4788 pfd->visited))
4789 return error_mark_node;
4790 /* Fall through. */
4792 case PARM_DECL:
4793 case CONST_DECL:
4794 if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
4795 && for_each_template_parm (DECL_INITIAL (t), fn, data,
4796 pfd->visited))
4797 return error_mark_node;
4798 if (DECL_CONTEXT (t)
4799 && for_each_template_parm (DECL_CONTEXT (t), fn, data,
4800 pfd->visited))
4801 return error_mark_node;
4802 break;
4804 case BOUND_TEMPLATE_TEMPLATE_PARM:
4805 /* Record template parameters such as `T' inside `TT<T>'. */
4806 if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited))
4807 return error_mark_node;
4808 /* Fall through. */
4810 case TEMPLATE_TEMPLATE_PARM:
4811 case TEMPLATE_TYPE_PARM:
4812 case TEMPLATE_PARM_INDEX:
4813 if (fn && (*fn)(t, data))
4814 return error_mark_node;
4815 else if (!fn)
4816 return error_mark_node;
4817 break;
4819 case TEMPLATE_DECL:
4820 /* A template template parameter is encountered. */
4821 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
4822 && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
4823 return error_mark_node;
4825 /* Already substituted template template parameter */
4826 *walk_subtrees = 0;
4827 break;
4829 case TYPENAME_TYPE:
4830 if (!fn
4831 || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
4832 data, pfd->visited))
4833 return error_mark_node;
4834 break;
4836 case CONSTRUCTOR:
4837 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
4838 && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
4839 (TREE_TYPE (t)), fn, data,
4840 pfd->visited))
4841 return error_mark_node;
4842 break;
4844 case INDIRECT_REF:
4845 case COMPONENT_REF:
4846 /* If there's no type, then this thing must be some expression
4847 involving template parameters. */
4848 if (!fn && !TREE_TYPE (t))
4849 return error_mark_node;
4850 break;
4852 case MODOP_EXPR:
4853 case CAST_EXPR:
4854 case REINTERPRET_CAST_EXPR:
4855 case CONST_CAST_EXPR:
4856 case STATIC_CAST_EXPR:
4857 case DYNAMIC_CAST_EXPR:
4858 case ARROW_EXPR:
4859 case DOTSTAR_EXPR:
4860 case TYPEID_EXPR:
4861 case PSEUDO_DTOR_EXPR:
4862 if (!fn)
4863 return error_mark_node;
4864 break;
4866 case BASELINK:
4867 /* If we do not handle this case specially, we end up walking
4868 the BINFO hierarchy, which is circular, and therefore
4869 confuses walk_tree. */
4870 *walk_subtrees = 0;
4871 if (for_each_template_parm (BASELINK_FUNCTIONS (*tp), fn, data,
4872 pfd->visited))
4873 return error_mark_node;
4874 break;
4876 default:
4877 break;
4880 /* We didn't find any template parameters we liked. */
4881 return NULL_TREE;
4884 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
4885 BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
4886 call FN with the parameter and the DATA.
4887 If FN returns nonzero, the iteration is terminated, and
4888 for_each_template_parm returns 1. Otherwise, the iteration
4889 continues. If FN never returns a nonzero value, the value
4890 returned by for_each_template_parm is 0. If FN is NULL, it is
4891 considered to be the function which always returns 1. */
4893 static int
4894 for_each_template_parm (tree t, tree_fn_t fn, void* data,
4895 struct pointer_set_t *visited)
4897 struct pair_fn_data pfd;
4898 int result;
4900 /* Set up. */
4901 pfd.fn = fn;
4902 pfd.data = data;
4904 /* Walk the tree. (Conceptually, we would like to walk without
4905 duplicates, but for_each_template_parm_r recursively calls
4906 for_each_template_parm, so we would need to reorganize a fair
4907 bit to use walk_tree_without_duplicates, so we keep our own
4908 visited list.) */
4909 if (visited)
4910 pfd.visited = visited;
4911 else
4912 pfd.visited = pointer_set_create ();
4913 result = walk_tree (&t,
4914 for_each_template_parm_r,
4915 &pfd,
4916 pfd.visited) != NULL_TREE;
4918 /* Clean up. */
4919 if (!visited)
4921 pointer_set_destroy (pfd.visited);
4922 pfd.visited = 0;
4925 return result;
4928 /* Returns true if T depends on any template parameter. */
4931 uses_template_parms (tree t)
4933 bool dependent_p;
4934 int saved_processing_template_decl;
4936 saved_processing_template_decl = processing_template_decl;
4937 if (!saved_processing_template_decl)
4938 processing_template_decl = 1;
4939 if (TYPE_P (t))
4940 dependent_p = dependent_type_p (t);
4941 else if (TREE_CODE (t) == TREE_VEC)
4942 dependent_p = any_dependent_template_arguments_p (t);
4943 else if (TREE_CODE (t) == TREE_LIST)
4944 dependent_p = (uses_template_parms (TREE_VALUE (t))
4945 || uses_template_parms (TREE_CHAIN (t)));
4946 else if (DECL_P (t)
4947 || EXPR_P (t)
4948 || TREE_CODE (t) == TEMPLATE_PARM_INDEX
4949 || TREE_CODE (t) == OVERLOAD
4950 || TREE_CODE (t) == BASELINK
4951 || CONSTANT_CLASS_P (t))
4952 dependent_p = (type_dependent_expression_p (t)
4953 || value_dependent_expression_p (t));
4954 else
4956 gcc_assert (t == error_mark_node);
4957 dependent_p = false;
4960 processing_template_decl = saved_processing_template_decl;
4962 return dependent_p;
4965 /* Returns true if T depends on any template parameter with level LEVEL. */
4968 uses_template_parms_level (tree t, int level)
4970 return for_each_template_parm (t, template_parm_this_level_p, &level, NULL);
4973 static int tinst_depth;
4974 extern int max_tinst_depth;
4975 #ifdef GATHER_STATISTICS
4976 int depth_reached;
4977 #endif
4978 static int tinst_level_tick;
4979 static int last_template_error_tick;
4981 /* We're starting to instantiate D; record the template instantiation context
4982 for diagnostics and to restore it later. */
4985 push_tinst_level (tree d)
4987 tree new;
4989 if (tinst_depth >= max_tinst_depth)
4991 /* If the instantiation in question still has unbound template parms,
4992 we don't really care if we can't instantiate it, so just return.
4993 This happens with base instantiation for implicit `typename'. */
4994 if (uses_template_parms (d))
4995 return 0;
4997 last_template_error_tick = tinst_level_tick;
4998 error ("template instantiation depth exceeds maximum of %d (use "
4999 "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
5000 max_tinst_depth, d);
5002 print_instantiation_context ();
5004 return 0;
5007 new = make_node (TINST_LEVEL);
5008 TINST_DECL (new) = d;
5009 TINST_LOCATION (new) = input_location;
5010 TINST_IN_SYSTEM_HEADER_P (new) = in_system_header;
5011 TREE_CHAIN (new) = current_tinst_level;
5012 current_tinst_level = new;
5014 ++tinst_depth;
5015 #ifdef GATHER_STATISTICS
5016 if (tinst_depth > depth_reached)
5017 depth_reached = tinst_depth;
5018 #endif
5020 ++tinst_level_tick;
5021 return 1;
5024 /* We're done instantiating this template; return to the instantiation
5025 context. */
5027 void
5028 pop_tinst_level (void)
5030 tree old = current_tinst_level;
5032 /* Restore the filename and line number stashed away when we started
5033 this instantiation. */
5034 input_location = TINST_LOCATION (old);
5035 in_system_header = TINST_IN_SYSTEM_HEADER_P (old);
5036 current_tinst_level = TREE_CHAIN (old);
5037 --tinst_depth;
5038 ++tinst_level_tick;
5041 /* We're instantiating a deferred template; restore the template
5042 instantiation context in which the instantiation was requested, which
5043 is one step out from LEVEL. */
5045 static void
5046 reopen_tinst_level (tree level)
5048 tree t;
5050 tinst_depth = 0;
5051 for (t = level; t; t = TREE_CHAIN (t))
5052 ++tinst_depth;
5054 current_tinst_level = level;
5055 pop_tinst_level ();
5058 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
5059 vector of template arguments, as for tsubst.
5061 Returns an appropriate tsubst'd friend declaration. */
5063 static tree
5064 tsubst_friend_function (tree decl, tree args)
5066 tree new_friend;
5068 if (TREE_CODE (decl) == FUNCTION_DECL
5069 && DECL_TEMPLATE_INSTANTIATION (decl)
5070 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
5071 /* This was a friend declared with an explicit template
5072 argument list, e.g.:
5074 friend void f<>(T);
5076 to indicate that f was a template instantiation, not a new
5077 function declaration. Now, we have to figure out what
5078 instantiation of what template. */
5080 tree template_id, arglist, fns;
5081 tree new_args;
5082 tree tmpl;
5083 tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
5085 /* Friend functions are looked up in the containing namespace scope.
5086 We must enter that scope, to avoid finding member functions of the
5087 current cless with same name. */
5088 push_nested_namespace (ns);
5089 fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
5090 tf_error | tf_warning, NULL_TREE);
5091 pop_nested_namespace (ns);
5092 arglist = tsubst (DECL_TI_ARGS (decl), args,
5093 tf_error | tf_warning, NULL_TREE);
5094 template_id = lookup_template_function (fns, arglist);
5096 new_friend = tsubst (decl, args, tf_error | tf_warning, NULL_TREE);
5097 tmpl = determine_specialization (template_id, new_friend,
5098 &new_args,
5099 /*need_member_template=*/0,
5100 TREE_VEC_LENGTH (args));
5101 return instantiate_template (tmpl, new_args, tf_error);
5104 new_friend = tsubst (decl, args, tf_error | tf_warning, NULL_TREE);
5106 /* The NEW_FRIEND will look like an instantiation, to the
5107 compiler, but is not an instantiation from the point of view of
5108 the language. For example, we might have had:
5110 template <class T> struct S {
5111 template <class U> friend void f(T, U);
5114 Then, in S<int>, template <class U> void f(int, U) is not an
5115 instantiation of anything. */
5116 if (new_friend == error_mark_node)
5117 return error_mark_node;
5119 DECL_USE_TEMPLATE (new_friend) = 0;
5120 if (TREE_CODE (decl) == TEMPLATE_DECL)
5122 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
5123 DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
5124 = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
5127 /* The mangled name for the NEW_FRIEND is incorrect. The function
5128 is not a template instantiation and should not be mangled like
5129 one. Therefore, we forget the mangling here; we'll recompute it
5130 later if we need it. */
5131 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
5133 SET_DECL_RTL (new_friend, NULL_RTX);
5134 SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
5137 if (DECL_NAMESPACE_SCOPE_P (new_friend))
5139 tree old_decl;
5140 tree new_friend_template_info;
5141 tree new_friend_result_template_info;
5142 tree ns;
5143 int new_friend_is_defn;
5145 /* We must save some information from NEW_FRIEND before calling
5146 duplicate decls since that function will free NEW_FRIEND if
5147 possible. */
5148 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
5149 new_friend_is_defn =
5150 (DECL_INITIAL (DECL_TEMPLATE_RESULT
5151 (template_for_substitution (new_friend)))
5152 != NULL_TREE);
5153 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
5155 /* This declaration is a `primary' template. */
5156 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
5158 new_friend_result_template_info
5159 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
5161 else
5162 new_friend_result_template_info = NULL_TREE;
5164 /* Inside pushdecl_namespace_level, we will push into the
5165 current namespace. However, the friend function should go
5166 into the namespace of the template. */
5167 ns = decl_namespace_context (new_friend);
5168 push_nested_namespace (ns);
5169 old_decl = pushdecl_namespace_level (new_friend);
5170 pop_nested_namespace (ns);
5172 if (old_decl != new_friend)
5174 /* This new friend declaration matched an existing
5175 declaration. For example, given:
5177 template <class T> void f(T);
5178 template <class U> class C {
5179 template <class T> friend void f(T) {}
5182 the friend declaration actually provides the definition
5183 of `f', once C has been instantiated for some type. So,
5184 old_decl will be the out-of-class template declaration,
5185 while new_friend is the in-class definition.
5187 But, if `f' was called before this point, the
5188 instantiation of `f' will have DECL_TI_ARGS corresponding
5189 to `T' but not to `U', references to which might appear
5190 in the definition of `f'. Previously, the most general
5191 template for an instantiation of `f' was the out-of-class
5192 version; now it is the in-class version. Therefore, we
5193 run through all specialization of `f', adding to their
5194 DECL_TI_ARGS appropriately. In particular, they need a
5195 new set of outer arguments, corresponding to the
5196 arguments for this class instantiation.
5198 The same situation can arise with something like this:
5200 friend void f(int);
5201 template <class T> class C {
5202 friend void f(T) {}
5205 when `C<int>' is instantiated. Now, `f(int)' is defined
5206 in the class. */
5208 if (!new_friend_is_defn)
5209 /* On the other hand, if the in-class declaration does
5210 *not* provide a definition, then we don't want to alter
5211 existing definitions. We can just leave everything
5212 alone. */
5214 else
5216 /* Overwrite whatever template info was there before, if
5217 any, with the new template information pertaining to
5218 the declaration. */
5219 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
5221 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
5222 reregister_specialization (new_friend,
5223 most_general_template (old_decl),
5224 old_decl);
5225 else
5227 tree t;
5228 tree new_friend_args;
5230 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
5231 = new_friend_result_template_info;
5233 new_friend_args = TI_ARGS (new_friend_template_info);
5234 for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
5235 t != NULL_TREE;
5236 t = TREE_CHAIN (t))
5238 tree spec = TREE_VALUE (t);
5240 DECL_TI_ARGS (spec)
5241 = add_outermost_template_args (new_friend_args,
5242 DECL_TI_ARGS (spec));
5245 /* Now, since specializations are always supposed to
5246 hang off of the most general template, we must move
5247 them. */
5248 t = most_general_template (old_decl);
5249 if (t != old_decl)
5251 DECL_TEMPLATE_SPECIALIZATIONS (t)
5252 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
5253 DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
5254 DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
5259 /* The information from NEW_FRIEND has been merged into OLD_DECL
5260 by duplicate_decls. */
5261 new_friend = old_decl;
5264 else
5266 tree context = DECL_CONTEXT (new_friend);
5267 bool dependent_p;
5269 /* In the code
5270 template <class T> class C {
5271 template <class U> friend void C1<U>::f (); // case 1
5272 friend void C2<T>::f (); // case 2
5274 we only need to make sure CONTEXT is a complete type for
5275 case 2. To distinguish between the two cases, we note that
5276 CONTEXT of case 1 remains dependent type after tsubst while
5277 this isn't true for case 2. */
5278 ++processing_template_decl;
5279 dependent_p = dependent_type_p (context);
5280 --processing_template_decl;
5282 if (!dependent_p
5283 && !complete_type_or_else (context, NULL_TREE))
5284 return error_mark_node;
5286 if (COMPLETE_TYPE_P (context))
5288 /* Check to see that the declaration is really present, and,
5289 possibly obtain an improved declaration. */
5290 tree fn = check_classfn (context,
5291 new_friend, NULL_TREE);
5293 if (fn)
5294 new_friend = fn;
5298 return new_friend;
5301 /* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
5302 template arguments, as for tsubst.
5304 Returns an appropriate tsubst'd friend type or error_mark_node on
5305 failure. */
5307 static tree
5308 tsubst_friend_class (tree friend_tmpl, tree args)
5310 tree friend_type;
5311 tree tmpl;
5312 tree context;
5314 context = DECL_CONTEXT (friend_tmpl);
5316 if (context)
5318 if (TREE_CODE (context) == NAMESPACE_DECL)
5319 push_nested_namespace (context);
5320 else
5321 push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
5324 /* First, we look for a class template. */
5325 tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/0);
5327 /* But, if we don't find one, it might be because we're in a
5328 situation like this:
5330 template <class T>
5331 struct S {
5332 template <class U>
5333 friend struct S;
5336 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
5337 for `S<int>', not the TEMPLATE_DECL. */
5338 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5340 tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/1);
5341 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
5344 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
5346 /* The friend template has already been declared. Just
5347 check to see that the declarations match, and install any new
5348 default parameters. We must tsubst the default parameters,
5349 of course. We only need the innermost template parameters
5350 because that is all that redeclare_class_template will look
5351 at. */
5352 if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
5353 > TMPL_ARGS_DEPTH (args))
5355 tree parms;
5356 parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
5357 args, tf_error | tf_warning);
5358 redeclare_class_template (TREE_TYPE (tmpl), parms);
5361 friend_type = TREE_TYPE (tmpl);
5363 else
5365 /* The friend template has not already been declared. In this
5366 case, the instantiation of the template class will cause the
5367 injection of this template into the global scope. */
5368 tmpl = tsubst (friend_tmpl, args, tf_error | tf_warning, NULL_TREE);
5370 /* The new TMPL is not an instantiation of anything, so we
5371 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
5372 the new type because that is supposed to be the corresponding
5373 template decl, i.e., TMPL. */
5374 DECL_USE_TEMPLATE (tmpl) = 0;
5375 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
5376 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
5377 CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
5378 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
5380 /* Inject this template into the global scope. */
5381 friend_type = TREE_TYPE (pushdecl_top_level (tmpl));
5384 if (context)
5386 if (TREE_CODE (context) == NAMESPACE_DECL)
5387 pop_nested_namespace (context);
5388 else
5389 pop_nested_class ();
5392 return friend_type;
5395 /* Returns zero if TYPE cannot be completed later due to circularity.
5396 Otherwise returns one. */
5398 static int
5399 can_complete_type_without_circularity (tree type)
5401 if (type == NULL_TREE || type == error_mark_node)
5402 return 0;
5403 else if (COMPLETE_TYPE_P (type))
5404 return 1;
5405 else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
5406 return can_complete_type_without_circularity (TREE_TYPE (type));
5407 else if (CLASS_TYPE_P (type)
5408 && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
5409 return 0;
5410 else
5411 return 1;
5414 tree
5415 instantiate_class_template (tree type)
5417 tree template, args, pattern, t, member;
5418 tree typedecl;
5419 tree pbinfo;
5420 tree base_list;
5422 if (type == error_mark_node)
5423 return error_mark_node;
5425 if (TYPE_BEING_DEFINED (type)
5426 || COMPLETE_TYPE_P (type)
5427 || dependent_type_p (type))
5428 return type;
5430 /* Figure out which template is being instantiated. */
5431 template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
5432 gcc_assert (TREE_CODE (template) == TEMPLATE_DECL);
5434 /* Figure out which arguments are being used to do the
5435 instantiation. */
5436 args = CLASSTYPE_TI_ARGS (type);
5438 /* Determine what specialization of the original template to
5439 instantiate. */
5440 t = most_specialized_class (template, args);
5441 if (t == error_mark_node)
5443 const char *str = "candidates are:";
5444 error ("ambiguous class template instantiation for %q#T", type);
5445 for (t = DECL_TEMPLATE_SPECIALIZATIONS (template); t;
5446 t = TREE_CHAIN (t))
5448 if (get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args))
5450 cp_error_at ("%s %+#T", str, TREE_TYPE (t));
5451 str = " ";
5454 TYPE_BEING_DEFINED (type) = 1;
5455 return error_mark_node;
5458 if (t)
5459 pattern = TREE_TYPE (t);
5460 else
5461 pattern = TREE_TYPE (template);
5463 /* If the template we're instantiating is incomplete, then clearly
5464 there's nothing we can do. */
5465 if (!COMPLETE_TYPE_P (pattern))
5466 return type;
5468 /* If we've recursively instantiated too many templates, stop. */
5469 if (! push_tinst_level (type))
5470 return type;
5472 /* Now we're really doing the instantiation. Mark the type as in
5473 the process of being defined. */
5474 TYPE_BEING_DEFINED (type) = 1;
5476 /* We may be in the middle of deferred access check. Disable
5477 it now. */
5478 push_deferring_access_checks (dk_no_deferred);
5480 push_to_top_level ();
5482 if (t)
5484 /* This TYPE is actually an instantiation of a partial
5485 specialization. We replace the innermost set of ARGS with
5486 the arguments appropriate for substitution. For example,
5487 given:
5489 template <class T> struct S {};
5490 template <class T> struct S<T*> {};
5492 and supposing that we are instantiating S<int*>, ARGS will
5493 present be {int*} but we need {int}. */
5494 tree inner_args
5495 = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t),
5496 args);
5498 /* If there were multiple levels in ARGS, replacing the
5499 innermost level would alter CLASSTYPE_TI_ARGS, which we don't
5500 want, so we make a copy first. */
5501 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
5503 args = copy_node (args);
5504 SET_TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args), inner_args);
5506 else
5507 args = inner_args;
5510 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
5512 /* Set the input location to the template definition. This is needed
5513 if tsubsting causes an error. */
5514 typedecl = TYPE_MAIN_DECL (type);
5515 input_location = DECL_SOURCE_LOCATION (typedecl);
5516 in_system_header = DECL_IN_SYSTEM_HEADER (typedecl);
5518 TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
5519 TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
5520 TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
5521 TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
5522 TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
5523 TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
5524 TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
5525 TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
5526 TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
5527 TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
5528 TYPE_PACKED (type) = TYPE_PACKED (pattern);
5529 TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
5530 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
5531 TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
5532 if (ANON_AGGR_TYPE_P (pattern))
5533 SET_ANON_AGGR_TYPE_P (type);
5535 pbinfo = TYPE_BINFO (pattern);
5537 /* We should never instantiate a nested class before its enclosing
5538 class; we need to look up the nested class by name before we can
5539 instantiate it, and that lookup should instantiate the enclosing
5540 class. */
5541 gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
5542 || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
5543 || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
5545 base_list = NULL_TREE;
5546 if (BINFO_N_BASE_BINFOS (pbinfo))
5548 tree pbase_binfo;
5549 tree context = TYPE_CONTEXT (type);
5550 tree pushed_scope;
5551 int i;
5553 /* We must enter the scope containing the type, as that is where
5554 the accessibility of types named in dependent bases are
5555 looked up from. */
5556 pushed_scope = push_scope (context ? context : global_namespace);
5558 /* Substitute into each of the bases to determine the actual
5559 basetypes. */
5560 for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
5562 tree base;
5563 tree access = BINFO_BASE_ACCESS (pbinfo, i);
5565 /* Substitute to figure out the base class. */
5566 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, NULL_TREE);
5567 if (base == error_mark_node)
5568 continue;
5570 base_list = tree_cons (access, base, base_list);
5571 if (BINFO_VIRTUAL_P (pbase_binfo))
5572 TREE_TYPE (base_list) = integer_type_node;
5575 /* The list is now in reverse order; correct that. */
5576 base_list = nreverse (base_list);
5578 if (pushed_scope)
5579 pop_scope (pushed_scope);
5581 /* Now call xref_basetypes to set up all the base-class
5582 information. */
5583 xref_basetypes (type, base_list);
5586 /* Now that our base classes are set up, enter the scope of the
5587 class, so that name lookups into base classes, etc. will work
5588 correctly. This is precisely analogous to what we do in
5589 begin_class_definition when defining an ordinary non-template
5590 class. */
5591 pushclass (type);
5593 /* Now members are processed in the order of declaration. */
5594 for (member = CLASSTYPE_DECL_LIST (pattern);
5595 member; member = TREE_CHAIN (member))
5597 tree t = TREE_VALUE (member);
5599 if (TREE_PURPOSE (member))
5601 if (TYPE_P (t))
5603 /* Build new CLASSTYPE_NESTED_UTDS. */
5605 tree tag = t;
5606 tree name = TYPE_IDENTIFIER (tag);
5607 tree newtag;
5608 bool class_template_p;
5610 class_template_p = (TREE_CODE (tag) != ENUMERAL_TYPE
5611 && TYPE_LANG_SPECIFIC (tag)
5612 && CLASSTYPE_IS_TEMPLATE (tag));
5613 /* If the member is a class template, then -- even after
5614 substitution -- there may be dependent types in the
5615 template argument list for the class. We increment
5616 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
5617 that function will assume that no types are dependent
5618 when outside of a template. */
5619 if (class_template_p)
5620 ++processing_template_decl;
5621 newtag = tsubst (tag, args, tf_error, NULL_TREE);
5622 if (class_template_p)
5623 --processing_template_decl;
5624 if (newtag == error_mark_node)
5625 continue;
5627 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
5629 if (class_template_p)
5630 /* Unfortunately, lookup_template_class sets
5631 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
5632 instantiation (i.e., for the type of a member
5633 template class nested within a template class.)
5634 This behavior is required for
5635 maybe_process_partial_specialization to work
5636 correctly, but is not accurate in this case;
5637 the TAG is not an instantiation of anything.
5638 (The corresponding TEMPLATE_DECL is an
5639 instantiation, but the TYPE is not.) */
5640 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
5642 /* Now, we call pushtag to put this NEWTAG into the scope of
5643 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
5644 pushtag calling push_template_decl. We don't have to do
5645 this for enums because it will already have been done in
5646 tsubst_enum. */
5647 if (name)
5648 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
5649 pushtag (name, newtag, /*tag_scope=*/ts_current);
5652 else if (TREE_CODE (t) == FUNCTION_DECL
5653 || DECL_FUNCTION_TEMPLATE_P (t))
5655 /* Build new TYPE_METHODS. */
5656 tree r;
5658 if (TREE_CODE (t) == TEMPLATE_DECL)
5659 ++processing_template_decl;
5660 r = tsubst (t, args, tf_error, NULL_TREE);
5661 if (TREE_CODE (t) == TEMPLATE_DECL)
5662 --processing_template_decl;
5663 set_current_access_from_decl (r);
5664 grok_special_member_properties (r);
5665 finish_member_declaration (r);
5667 else
5669 /* Build new TYPE_FIELDS. */
5671 if (TREE_CODE (t) != CONST_DECL)
5673 tree r;
5675 /* The the file and line for this declaration, to
5676 assist in error message reporting. Since we
5677 called push_tinst_level above, we don't need to
5678 restore these. */
5679 input_location = DECL_SOURCE_LOCATION (t);
5681 if (TREE_CODE (t) == TEMPLATE_DECL)
5682 ++processing_template_decl;
5683 r = tsubst (t, args, tf_error | tf_warning, NULL_TREE);
5684 if (TREE_CODE (t) == TEMPLATE_DECL)
5685 --processing_template_decl;
5686 if (TREE_CODE (r) == VAR_DECL)
5688 tree init;
5690 if (DECL_INITIALIZED_IN_CLASS_P (r))
5691 init = tsubst_expr (DECL_INITIAL (t), args,
5692 tf_error | tf_warning, NULL_TREE);
5693 else
5694 init = NULL_TREE;
5696 finish_static_data_member_decl
5697 (r, init, /*asmspec_tree=*/NULL_TREE, /*flags=*/0);
5699 if (DECL_INITIALIZED_IN_CLASS_P (r))
5700 check_static_variable_definition (r, TREE_TYPE (r));
5702 else if (TREE_CODE (r) == FIELD_DECL)
5704 /* Determine whether R has a valid type and can be
5705 completed later. If R is invalid, then it is
5706 replaced by error_mark_node so that it will not be
5707 added to TYPE_FIELDS. */
5708 tree rtype = TREE_TYPE (r);
5709 if (can_complete_type_without_circularity (rtype))
5710 complete_type (rtype);
5712 if (!COMPLETE_TYPE_P (rtype))
5714 cxx_incomplete_type_error (r, rtype);
5715 r = error_mark_node;
5719 /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
5720 such a thing will already have been added to the field
5721 list by tsubst_enum in finish_member_declaration in the
5722 CLASSTYPE_NESTED_UTDS case above. */
5723 if (!(TREE_CODE (r) == TYPE_DECL
5724 && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
5725 && DECL_ARTIFICIAL (r)))
5727 set_current_access_from_decl (r);
5728 finish_member_declaration (r);
5733 else
5735 if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
5737 /* Build new CLASSTYPE_FRIEND_CLASSES. */
5739 tree friend_type = t;
5740 bool adjust_processing_template_decl = false;
5742 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5744 friend_type = tsubst_friend_class (friend_type, args);
5745 adjust_processing_template_decl = true;
5747 else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
5749 friend_type = tsubst (friend_type, args,
5750 tf_error | tf_warning, NULL_TREE);
5751 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5752 friend_type = TREE_TYPE (friend_type);
5753 adjust_processing_template_decl = true;
5755 else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
5757 friend_type = tsubst (friend_type, args,
5758 tf_error | tf_warning, NULL_TREE);
5759 /* Bump processing_template_decl for correct
5760 dependent_type_p calculation. */
5761 ++processing_template_decl;
5762 if (dependent_type_p (friend_type))
5763 adjust_processing_template_decl = true;
5764 --processing_template_decl;
5766 else if (uses_template_parms (friend_type))
5767 friend_type = tsubst (friend_type, args,
5768 tf_error | tf_warning, NULL_TREE);
5769 else if (CLASSTYPE_USE_TEMPLATE (friend_type))
5770 friend_type = friend_type;
5771 else
5773 tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
5775 /* The call to xref_tag_from_type does injection for friend
5776 classes. */
5777 push_nested_namespace (ns);
5778 friend_type =
5779 xref_tag_from_type (friend_type, NULL_TREE,
5780 /*tag_scope=*/ts_global);
5781 pop_nested_namespace (ns);
5784 if (adjust_processing_template_decl)
5785 /* Trick make_friend_class into realizing that the friend
5786 we're adding is a template, not an ordinary class. It's
5787 important that we use make_friend_class since it will
5788 perform some error-checking and output cross-reference
5789 information. */
5790 ++processing_template_decl;
5792 if (friend_type != error_mark_node)
5793 make_friend_class (type, friend_type, /*complain=*/false);
5795 if (adjust_processing_template_decl)
5796 --processing_template_decl;
5798 else
5800 /* Build new DECL_FRIENDLIST. */
5801 tree r;
5803 /* The the file and line for this declaration, to
5804 assist in error message reporting. Since we
5805 called push_tinst_level above, we don't need to
5806 restore these. */
5807 input_location = DECL_SOURCE_LOCATION (t);
5809 if (TREE_CODE (t) == TEMPLATE_DECL)
5811 ++processing_template_decl;
5812 push_deferring_access_checks (dk_no_check);
5815 r = tsubst_friend_function (t, args);
5816 add_friend (type, r, /*complain=*/false);
5817 if (TREE_CODE (t) == TEMPLATE_DECL)
5819 pop_deferring_access_checks ();
5820 --processing_template_decl;
5826 /* Set the file and line number information to whatever is given for
5827 the class itself. This puts error messages involving generated
5828 implicit functions at a predictable point, and the same point
5829 that would be used for non-template classes. */
5830 input_location = DECL_SOURCE_LOCATION (typedecl);
5832 unreverse_member_declarations (type);
5833 finish_struct_1 (type);
5834 TYPE_BEING_DEFINED (type) = 0;
5836 /* Now that the class is complete, instantiate default arguments for
5837 any member functions. We don't do this earlier because the
5838 default arguments may reference members of the class. */
5839 if (!PRIMARY_TEMPLATE_P (template))
5840 for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
5841 if (TREE_CODE (t) == FUNCTION_DECL
5842 /* Implicitly generated member functions will not have template
5843 information; they are not instantiations, but instead are
5844 created "fresh" for each instantiation. */
5845 && DECL_TEMPLATE_INFO (t))
5846 tsubst_default_arguments (t);
5848 popclass ();
5849 pop_from_top_level ();
5850 pop_deferring_access_checks ();
5851 pop_tinst_level ();
5853 /* The vtable for a template class can be emitted in any translation
5854 unit in which the class is instantiated. When there is no key
5855 method, however, finish_struct_1 will already have added TYPE to
5856 the keyed_classes list. */
5857 if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
5858 keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
5860 return type;
5863 static tree
5864 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
5866 tree r;
5868 if (!t)
5869 r = t;
5870 else if (TYPE_P (t))
5871 r = tsubst (t, args, complain, in_decl);
5872 else
5874 r = tsubst_expr (t, args, complain, in_decl);
5876 if (!uses_template_parms (r))
5878 /* Sometimes, one of the args was an expression involving a
5879 template constant parameter, like N - 1. Now that we've
5880 tsubst'd, we might have something like 2 - 1. This will
5881 confuse lookup_template_class, so we do constant folding
5882 here. We have to unset processing_template_decl, to fool
5883 tsubst_copy_and_build() into building an actual tree. */
5885 /* If the TREE_TYPE of ARG is not NULL_TREE, ARG is already
5886 as simple as it's going to get, and trying to reprocess
5887 the trees will break. Once tsubst_expr et al DTRT for
5888 non-dependent exprs, this code can go away, as the type
5889 will always be set. */
5890 if (!TREE_TYPE (r))
5892 int saved_processing_template_decl = processing_template_decl;
5893 processing_template_decl = 0;
5894 r = tsubst_copy_and_build (r, /*args=*/NULL_TREE,
5895 tf_error, /*in_decl=*/NULL_TREE,
5896 /*function_p=*/false);
5897 processing_template_decl = saved_processing_template_decl;
5899 r = fold (r);
5902 return r;
5905 /* Substitute ARGS into the vector or list of template arguments T. */
5907 static tree
5908 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
5910 int len = TREE_VEC_LENGTH (t);
5911 int need_new = 0, i;
5912 tree *elts = alloca (len * sizeof (tree));
5914 for (i = 0; i < len; i++)
5916 tree orig_arg = TREE_VEC_ELT (t, i);
5917 tree new_arg;
5919 if (TREE_CODE (orig_arg) == TREE_VEC)
5920 new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
5921 else
5922 new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
5924 if (new_arg == error_mark_node)
5925 return error_mark_node;
5927 elts[i] = new_arg;
5928 if (new_arg != orig_arg)
5929 need_new = 1;
5932 if (!need_new)
5933 return t;
5935 t = make_tree_vec (len);
5936 for (i = 0; i < len; i++)
5937 TREE_VEC_ELT (t, i) = elts[i];
5939 return t;
5942 /* Return the result of substituting ARGS into the template parameters
5943 given by PARMS. If there are m levels of ARGS and m + n levels of
5944 PARMS, then the result will contain n levels of PARMS. For
5945 example, if PARMS is `template <class T> template <class U>
5946 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
5947 result will be `template <int*, double, class V>'. */
5949 static tree
5950 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
5952 tree r = NULL_TREE;
5953 tree* new_parms;
5955 for (new_parms = &r;
5956 TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
5957 new_parms = &(TREE_CHAIN (*new_parms)),
5958 parms = TREE_CHAIN (parms))
5960 tree new_vec =
5961 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
5962 int i;
5964 for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
5966 tree tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
5967 tree default_value = TREE_PURPOSE (tuple);
5968 tree parm_decl = TREE_VALUE (tuple);
5970 parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
5971 default_value = tsubst_template_arg (default_value, args,
5972 complain, NULL_TREE);
5974 tuple = build_tree_list (default_value, parm_decl);
5975 TREE_VEC_ELT (new_vec, i) = tuple;
5978 *new_parms =
5979 tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
5980 - TMPL_ARGS_DEPTH (args)),
5981 new_vec, NULL_TREE);
5984 return r;
5987 /* Substitute the ARGS into the indicated aggregate (or enumeration)
5988 type T. If T is not an aggregate or enumeration type, it is
5989 handled as if by tsubst. IN_DECL is as for tsubst. If
5990 ENTERING_SCOPE is nonzero, T is the context for a template which
5991 we are presently tsubst'ing. Return the substituted value. */
5993 static tree
5994 tsubst_aggr_type (tree t,
5995 tree args,
5996 tsubst_flags_t complain,
5997 tree in_decl,
5998 int entering_scope)
6000 if (t == NULL_TREE)
6001 return NULL_TREE;
6003 switch (TREE_CODE (t))
6005 case RECORD_TYPE:
6006 if (TYPE_PTRMEMFUNC_P (t))
6007 return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
6009 /* Else fall through. */
6010 case ENUMERAL_TYPE:
6011 case UNION_TYPE:
6012 if (TYPE_TEMPLATE_INFO (t))
6014 tree argvec;
6015 tree context;
6016 tree r;
6018 /* First, determine the context for the type we are looking
6019 up. */
6020 context = TYPE_CONTEXT (t);
6021 if (context)
6022 context = tsubst_aggr_type (context, args, complain,
6023 in_decl, /*entering_scope=*/1);
6025 /* Then, figure out what arguments are appropriate for the
6026 type we are trying to find. For example, given:
6028 template <class T> struct S;
6029 template <class T, class U> void f(T, U) { S<U> su; }
6031 and supposing that we are instantiating f<int, double>,
6032 then our ARGS will be {int, double}, but, when looking up
6033 S we only want {double}. */
6034 argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
6035 complain, in_decl);
6036 if (argvec == error_mark_node)
6037 return error_mark_node;
6039 r = lookup_template_class (t, argvec, in_decl, context,
6040 entering_scope, complain);
6042 return cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
6044 else
6045 /* This is not a template type, so there's nothing to do. */
6046 return t;
6048 default:
6049 return tsubst (t, args, complain, in_decl);
6053 /* Substitute into the default argument ARG (a default argument for
6054 FN), which has the indicated TYPE. */
6056 tree
6057 tsubst_default_argument (tree fn, tree type, tree arg)
6059 tree saved_class_ptr = NULL_TREE;
6060 tree saved_class_ref = NULL_TREE;
6062 /* This default argument came from a template. Instantiate the
6063 default argument here, not in tsubst. In the case of
6064 something like:
6066 template <class T>
6067 struct S {
6068 static T t();
6069 void f(T = t());
6072 we must be careful to do name lookup in the scope of S<T>,
6073 rather than in the current class. */
6074 push_access_scope (fn);
6075 /* The default argument expression should not be considered to be
6076 within the scope of FN. Since push_access_scope sets
6077 current_function_decl, we must explicitly clear it here. */
6078 current_function_decl = NULL_TREE;
6079 /* The "this" pointer is not valid in a default argument. */
6080 if (cfun)
6082 saved_class_ptr = current_class_ptr;
6083 cp_function_chain->x_current_class_ptr = NULL_TREE;
6084 saved_class_ref = current_class_ref;
6085 cp_function_chain->x_current_class_ref = NULL_TREE;
6088 push_deferring_access_checks(dk_no_deferred);
6089 arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
6090 tf_error | tf_warning, NULL_TREE);
6091 pop_deferring_access_checks();
6093 /* Restore the "this" pointer. */
6094 if (cfun)
6096 cp_function_chain->x_current_class_ptr = saved_class_ptr;
6097 cp_function_chain->x_current_class_ref = saved_class_ref;
6100 pop_access_scope (fn);
6102 /* Make sure the default argument is reasonable. */
6103 arg = check_default_argument (type, arg);
6105 return arg;
6108 /* Substitute into all the default arguments for FN. */
6110 static void
6111 tsubst_default_arguments (tree fn)
6113 tree arg;
6114 tree tmpl_args;
6116 tmpl_args = DECL_TI_ARGS (fn);
6118 /* If this function is not yet instantiated, we certainly don't need
6119 its default arguments. */
6120 if (uses_template_parms (tmpl_args))
6121 return;
6123 for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
6124 arg;
6125 arg = TREE_CHAIN (arg))
6126 if (TREE_PURPOSE (arg))
6127 TREE_PURPOSE (arg) = tsubst_default_argument (fn,
6128 TREE_VALUE (arg),
6129 TREE_PURPOSE (arg));
6132 /* Substitute the ARGS into the T, which is a _DECL. Return the
6133 result of the substitution. Issue error and warning messages under
6134 control of COMPLAIN. */
6136 static tree
6137 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
6139 location_t saved_loc;
6140 tree r = NULL_TREE;
6141 tree in_decl = t;
6143 /* Set the filename and linenumber to improve error-reporting. */
6144 saved_loc = input_location;
6145 input_location = DECL_SOURCE_LOCATION (t);
6147 switch (TREE_CODE (t))
6149 case TEMPLATE_DECL:
6151 /* We can get here when processing a member function template,
6152 member class template, and template template parameter of
6153 a template class. */
6154 tree decl = DECL_TEMPLATE_RESULT (t);
6155 tree spec;
6156 tree tmpl_args;
6157 tree full_args;
6159 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
6161 /* Template template parameter is treated here. */
6162 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6163 if (new_type == error_mark_node)
6164 return error_mark_node;
6166 r = copy_decl (t);
6167 TREE_CHAIN (r) = NULL_TREE;
6168 TREE_TYPE (r) = new_type;
6169 DECL_TEMPLATE_RESULT (r)
6170 = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
6171 DECL_TEMPLATE_PARMS (r)
6172 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
6173 complain);
6174 TYPE_NAME (new_type) = r;
6175 break;
6178 /* We might already have an instance of this template.
6179 The ARGS are for the surrounding class type, so the
6180 full args contain the tsubst'd args for the context,
6181 plus the innermost args from the template decl. */
6182 tmpl_args = DECL_CLASS_TEMPLATE_P (t)
6183 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
6184 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
6185 full_args = tsubst_template_args (tmpl_args, args,
6186 complain, in_decl);
6188 /* tsubst_template_args doesn't copy the vector if
6189 nothing changed. But, *something* should have
6190 changed. */
6191 gcc_assert (full_args != tmpl_args);
6193 spec = retrieve_specialization (t, full_args,
6194 /*class_specializations_p=*/true);
6195 if (spec != NULL_TREE)
6197 r = spec;
6198 break;
6201 /* Make a new template decl. It will be similar to the
6202 original, but will record the current template arguments.
6203 We also create a new function declaration, which is just
6204 like the old one, but points to this new template, rather
6205 than the old one. */
6206 r = copy_decl (t);
6207 gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
6208 TREE_CHAIN (r) = NULL_TREE;
6210 DECL_CONTEXT (r)
6211 = tsubst_aggr_type (DECL_CONTEXT (t), args,
6212 complain, in_decl,
6213 /*entering_scope=*/1);
6214 DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
6216 if (TREE_CODE (decl) == TYPE_DECL)
6218 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6219 if (new_type == error_mark_node)
6220 return error_mark_node;
6222 TREE_TYPE (r) = new_type;
6223 CLASSTYPE_TI_TEMPLATE (new_type) = r;
6224 DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
6225 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
6227 else
6229 tree new_decl = tsubst (decl, args, complain, in_decl);
6230 if (new_decl == error_mark_node)
6231 return error_mark_node;
6233 DECL_TEMPLATE_RESULT (r) = new_decl;
6234 DECL_TI_TEMPLATE (new_decl) = r;
6235 TREE_TYPE (r) = TREE_TYPE (new_decl);
6236 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
6239 SET_DECL_IMPLICIT_INSTANTIATION (r);
6240 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
6241 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
6243 /* The template parameters for this new template are all the
6244 template parameters for the old template, except the
6245 outermost level of parameters. */
6246 DECL_TEMPLATE_PARMS (r)
6247 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
6248 complain);
6250 if (PRIMARY_TEMPLATE_P (t))
6251 DECL_PRIMARY_TEMPLATE (r) = r;
6253 if (TREE_CODE (decl) != TYPE_DECL)
6254 /* Record this non-type partial instantiation. */
6255 register_specialization (r, t,
6256 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)));
6258 break;
6260 case FUNCTION_DECL:
6262 tree ctx;
6263 tree argvec = NULL_TREE;
6264 tree *friends;
6265 tree gen_tmpl;
6266 tree type;
6267 int member;
6268 int args_depth;
6269 int parms_depth;
6271 /* Nobody should be tsubst'ing into non-template functions. */
6272 gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
6274 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
6276 tree spec;
6277 bool dependent_p;
6279 /* If T is not dependent, just return it. We have to
6280 increment PROCESSING_TEMPLATE_DECL because
6281 value_dependent_expression_p assumes that nothing is
6282 dependent when PROCESSING_TEMPLATE_DECL is zero. */
6283 ++processing_template_decl;
6284 dependent_p = value_dependent_expression_p (t);
6285 --processing_template_decl;
6286 if (!dependent_p)
6287 return t;
6289 /* Calculate the most general template of which R is a
6290 specialization, and the complete set of arguments used to
6291 specialize R. */
6292 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
6293 argvec = tsubst_template_args (DECL_TI_ARGS
6294 (DECL_TEMPLATE_RESULT (gen_tmpl)),
6295 args, complain, in_decl);
6297 /* Check to see if we already have this specialization. */
6298 spec = retrieve_specialization (gen_tmpl, argvec,
6299 /*class_specializations_p=*/false);
6301 if (spec)
6303 r = spec;
6304 break;
6307 /* We can see more levels of arguments than parameters if
6308 there was a specialization of a member template, like
6309 this:
6311 template <class T> struct S { template <class U> void f(); }
6312 template <> template <class U> void S<int>::f(U);
6314 Here, we'll be substituting into the specialization,
6315 because that's where we can find the code we actually
6316 want to generate, but we'll have enough arguments for
6317 the most general template.
6319 We also deal with the peculiar case:
6321 template <class T> struct S {
6322 template <class U> friend void f();
6324 template <class U> void f() {}
6325 template S<int>;
6326 template void f<double>();
6328 Here, the ARGS for the instantiation of will be {int,
6329 double}. But, we only need as many ARGS as there are
6330 levels of template parameters in CODE_PATTERN. We are
6331 careful not to get fooled into reducing the ARGS in
6332 situations like:
6334 template <class T> struct S { template <class U> void f(U); }
6335 template <class T> template <> void S<T>::f(int) {}
6337 which we can spot because the pattern will be a
6338 specialization in this case. */
6339 args_depth = TMPL_ARGS_DEPTH (args);
6340 parms_depth =
6341 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
6342 if (args_depth > parms_depth
6343 && !DECL_TEMPLATE_SPECIALIZATION (t))
6344 args = get_innermost_template_args (args, parms_depth);
6346 else
6348 /* This special case arises when we have something like this:
6350 template <class T> struct S {
6351 friend void f<int>(int, double);
6354 Here, the DECL_TI_TEMPLATE for the friend declaration
6355 will be an IDENTIFIER_NODE. We are being called from
6356 tsubst_friend_function, and we want only to create a
6357 new decl (R) with appropriate types so that we can call
6358 determine_specialization. */
6359 gen_tmpl = NULL_TREE;
6362 if (DECL_CLASS_SCOPE_P (t))
6364 if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
6365 member = 2;
6366 else
6367 member = 1;
6368 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
6369 complain, t, /*entering_scope=*/1);
6371 else
6373 member = 0;
6374 ctx = DECL_CONTEXT (t);
6376 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6377 if (type == error_mark_node)
6378 return error_mark_node;
6380 /* We do NOT check for matching decls pushed separately at this
6381 point, as they may not represent instantiations of this
6382 template, and in any case are considered separate under the
6383 discrete model. */
6384 r = copy_decl (t);
6385 DECL_USE_TEMPLATE (r) = 0;
6386 TREE_TYPE (r) = type;
6387 /* Clear out the mangled name and RTL for the instantiation. */
6388 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
6389 SET_DECL_RTL (r, NULL_RTX);
6390 DECL_INITIAL (r) = NULL_TREE;
6391 DECL_CONTEXT (r) = ctx;
6393 if (member && DECL_CONV_FN_P (r))
6394 /* Type-conversion operator. Reconstruct the name, in
6395 case it's the name of one of the template's parameters. */
6396 DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
6398 DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
6399 complain, t);
6400 DECL_RESULT (r) = NULL_TREE;
6402 TREE_STATIC (r) = 0;
6403 TREE_PUBLIC (r) = TREE_PUBLIC (t);
6404 DECL_EXTERNAL (r) = 1;
6405 /* If this is an instantiation of a function with internal
6406 linkage, we already know what object file linkage will be
6407 assigned to the instantiation. */
6408 DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
6409 DECL_DEFER_OUTPUT (r) = 0;
6410 TREE_CHAIN (r) = NULL_TREE;
6411 DECL_PENDING_INLINE_INFO (r) = 0;
6412 DECL_PENDING_INLINE_P (r) = 0;
6413 DECL_SAVED_TREE (r) = NULL_TREE;
6414 TREE_USED (r) = 0;
6415 if (DECL_CLONED_FUNCTION (r))
6417 DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
6418 args, complain, t);
6419 TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
6420 TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
6423 /* Set up the DECL_TEMPLATE_INFO for R. There's no need to do
6424 this in the special friend case mentioned above where
6425 GEN_TMPL is NULL. */
6426 if (gen_tmpl)
6428 DECL_TEMPLATE_INFO (r)
6429 = tree_cons (gen_tmpl, argvec, NULL_TREE);
6430 SET_DECL_IMPLICIT_INSTANTIATION (r);
6431 register_specialization (r, gen_tmpl, argvec);
6433 /* We're not supposed to instantiate default arguments
6434 until they are called, for a template. But, for a
6435 declaration like:
6437 template <class T> void f ()
6438 { extern void g(int i = T()); }
6440 we should do the substitution when the template is
6441 instantiated. We handle the member function case in
6442 instantiate_class_template since the default arguments
6443 might refer to other members of the class. */
6444 if (!member
6445 && !PRIMARY_TEMPLATE_P (gen_tmpl)
6446 && !uses_template_parms (argvec))
6447 tsubst_default_arguments (r);
6450 /* Copy the list of befriending classes. */
6451 for (friends = &DECL_BEFRIENDING_CLASSES (r);
6452 *friends;
6453 friends = &TREE_CHAIN (*friends))
6455 *friends = copy_node (*friends);
6456 TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
6457 args, complain,
6458 in_decl);
6461 if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
6463 maybe_retrofit_in_chrg (r);
6464 if (DECL_CONSTRUCTOR_P (r))
6465 grok_ctor_properties (ctx, r);
6466 /* If this is an instantiation of a member template, clone it.
6467 If it isn't, that'll be handled by
6468 clone_constructors_and_destructors. */
6469 if (PRIMARY_TEMPLATE_P (gen_tmpl))
6470 clone_function_decl (r, /*update_method_vec_p=*/0);
6472 else if (IDENTIFIER_OPNAME_P (DECL_NAME (r)))
6473 grok_op_properties (r, (complain & tf_error) != 0);
6475 if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
6476 SET_DECL_FRIEND_CONTEXT (r,
6477 tsubst (DECL_FRIEND_CONTEXT (t),
6478 args, complain, in_decl));
6480 break;
6482 case PARM_DECL:
6484 tree type;
6486 r = copy_node (t);
6487 if (DECL_TEMPLATE_PARM_P (t))
6488 SET_DECL_TEMPLATE_PARM_P (r);
6490 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6491 type = type_decays_to (type);
6492 TREE_TYPE (r) = type;
6493 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
6495 if (DECL_INITIAL (r))
6497 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
6498 DECL_INITIAL (r) = TREE_TYPE (r);
6499 else
6500 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
6501 complain, in_decl);
6504 DECL_CONTEXT (r) = NULL_TREE;
6506 if (!DECL_TEMPLATE_PARM_P (r))
6507 DECL_ARG_TYPE (r) = type_passed_as (type);
6508 if (TREE_CHAIN (t))
6509 TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
6510 complain, TREE_CHAIN (t));
6512 break;
6514 case FIELD_DECL:
6516 tree type;
6518 r = copy_decl (t);
6519 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6520 if (type == error_mark_node)
6521 return error_mark_node;
6522 TREE_TYPE (r) = type;
6523 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
6525 /* We don't have to set DECL_CONTEXT here; it is set by
6526 finish_member_declaration. */
6527 DECL_INITIAL (r) = tsubst_expr (DECL_INITIAL (t), args,
6528 complain, in_decl);
6529 TREE_CHAIN (r) = NULL_TREE;
6530 if (VOID_TYPE_P (type))
6531 cp_error_at ("instantiation of %qD as type %qT", r, type);
6533 break;
6535 case USING_DECL:
6537 r = copy_node (t);
6538 /* It is not a dependent using decl any more. */
6539 TREE_TYPE (r) = void_type_node;
6540 DECL_INITIAL (r)
6541 = tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
6542 DECL_NAME (r)
6543 = tsubst_copy (DECL_NAME (t), args, complain, in_decl);
6544 TREE_CHAIN (r) = NULL_TREE;
6546 break;
6548 case TYPE_DECL:
6549 case VAR_DECL:
6551 tree argvec = NULL_TREE;
6552 tree gen_tmpl = NULL_TREE;
6553 tree spec;
6554 tree tmpl = NULL_TREE;
6555 tree ctx;
6556 tree type = NULL_TREE;
6557 int local_p;
6559 if (TREE_CODE (t) == TYPE_DECL)
6561 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6562 if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
6563 || t == TYPE_MAIN_DECL (TREE_TYPE (t)))
6565 /* If this is the canonical decl, we don't have to
6566 mess with instantiations, and often we can't (for
6567 typename, template type parms and such). Note that
6568 TYPE_NAME is not correct for the above test if
6569 we've copied the type for a typedef. */
6570 r = TYPE_NAME (type);
6571 break;
6575 /* Assume this is a non-local variable. */
6576 local_p = 0;
6578 if (TYPE_P (CP_DECL_CONTEXT (t)))
6579 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
6580 complain,
6581 in_decl, /*entering_scope=*/1);
6582 else if (DECL_NAMESPACE_SCOPE_P (t))
6583 ctx = DECL_CONTEXT (t);
6584 else
6586 /* Subsequent calls to pushdecl will fill this in. */
6587 ctx = NULL_TREE;
6588 local_p = 1;
6591 /* Check to see if we already have this specialization. */
6592 if (!local_p)
6594 tmpl = DECL_TI_TEMPLATE (t);
6595 gen_tmpl = most_general_template (tmpl);
6596 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
6597 spec = retrieve_specialization (gen_tmpl, argvec,
6598 /*class_specializations_p=*/false);
6600 else
6601 spec = retrieve_local_specialization (t);
6603 if (spec)
6605 r = spec;
6606 break;
6609 r = copy_decl (t);
6610 if (TREE_CODE (r) == VAR_DECL)
6612 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6613 if (type == error_mark_node)
6614 return error_mark_node;
6615 type = complete_type (type);
6616 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
6617 = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
6618 type = check_var_type (DECL_NAME (r), type);
6620 else if (DECL_SELF_REFERENCE_P (t))
6621 SET_DECL_SELF_REFERENCE_P (r);
6622 TREE_TYPE (r) = type;
6623 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
6624 DECL_CONTEXT (r) = ctx;
6625 /* Clear out the mangled name and RTL for the instantiation. */
6626 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
6627 SET_DECL_RTL (r, NULL_RTX);
6629 /* Don't try to expand the initializer until someone tries to use
6630 this variable; otherwise we run into circular dependencies. */
6631 DECL_INITIAL (r) = NULL_TREE;
6632 SET_DECL_RTL (r, NULL_RTX);
6633 DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
6635 /* Even if the original location is out of scope, the newly
6636 substituted one is not. */
6637 if (TREE_CODE (r) == VAR_DECL)
6639 DECL_DEAD_FOR_LOCAL (r) = 0;
6640 DECL_INITIALIZED_P (r) = 0;
6643 if (!local_p)
6645 /* A static data member declaration is always marked
6646 external when it is declared in-class, even if an
6647 initializer is present. We mimic the non-template
6648 processing here. */
6649 DECL_EXTERNAL (r) = 1;
6651 register_specialization (r, gen_tmpl, argvec);
6652 DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
6653 SET_DECL_IMPLICIT_INSTANTIATION (r);
6655 else
6656 register_local_specialization (r, t);
6658 TREE_CHAIN (r) = NULL_TREE;
6659 layout_decl (r, 0);
6661 break;
6663 default:
6664 gcc_unreachable ();
6667 /* Restore the file and line information. */
6668 input_location = saved_loc;
6670 return r;
6673 /* Substitute into the ARG_TYPES of a function type. */
6675 static tree
6676 tsubst_arg_types (tree arg_types,
6677 tree args,
6678 tsubst_flags_t complain,
6679 tree in_decl)
6681 tree remaining_arg_types;
6682 tree type;
6684 if (!arg_types || arg_types == void_list_node)
6685 return arg_types;
6687 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
6688 args, complain, in_decl);
6689 if (remaining_arg_types == error_mark_node)
6690 return error_mark_node;
6692 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
6693 if (type == error_mark_node)
6694 return error_mark_node;
6695 if (VOID_TYPE_P (type))
6697 if (complain & tf_error)
6699 error ("invalid parameter type %qT", type);
6700 if (in_decl)
6701 cp_error_at ("in declaration %qD", in_decl);
6703 return error_mark_node;
6706 /* Do array-to-pointer, function-to-pointer conversion, and ignore
6707 top-level qualifiers as required. */
6708 type = TYPE_MAIN_VARIANT (type_decays_to (type));
6710 /* Note that we do not substitute into default arguments here. The
6711 standard mandates that they be instantiated only when needed,
6712 which is done in build_over_call. */
6713 return hash_tree_cons (TREE_PURPOSE (arg_types), type,
6714 remaining_arg_types);
6718 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
6719 *not* handle the exception-specification for FNTYPE, because the
6720 initial substitution of explicitly provided template parameters
6721 during argument deduction forbids substitution into the
6722 exception-specification:
6724 [temp.deduct]
6726 All references in the function type of the function template to the
6727 corresponding template parameters are replaced by the specified tem-
6728 plate argument values. If a substitution in a template parameter or
6729 in the function type of the function template results in an invalid
6730 type, type deduction fails. [Note: The equivalent substitution in
6731 exception specifications is done only when the function is instanti-
6732 ated, at which point a program is ill-formed if the substitution
6733 results in an invalid type.] */
6735 static tree
6736 tsubst_function_type (tree t,
6737 tree args,
6738 tsubst_flags_t complain,
6739 tree in_decl)
6741 tree return_type;
6742 tree arg_types;
6743 tree fntype;
6745 /* The TYPE_CONTEXT is not used for function/method types. */
6746 gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
6748 /* Substitute the return type. */
6749 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6750 if (return_type == error_mark_node)
6751 return error_mark_node;
6752 /* The standard does not presently indicate that creation of a
6753 function type with an invalid return type is a deduction failure.
6754 However, that is clearly analogous to creating an array of "void"
6755 or a reference to a reference. This is core issue #486. */
6756 if (TREE_CODE (return_type) == ARRAY_TYPE
6757 || TREE_CODE (return_type) == FUNCTION_TYPE)
6759 if (complain & tf_error)
6761 if (TREE_CODE (return_type) == ARRAY_TYPE)
6762 error ("function returning an array");
6763 else
6764 error ("function returning a function");
6766 return error_mark_node;
6769 /* Substitute the argument types. */
6770 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
6771 complain, in_decl);
6772 if (arg_types == error_mark_node)
6773 return error_mark_node;
6775 /* Construct a new type node and return it. */
6776 if (TREE_CODE (t) == FUNCTION_TYPE)
6777 fntype = build_function_type (return_type, arg_types);
6778 else
6780 tree r = TREE_TYPE (TREE_VALUE (arg_types));
6781 if (! IS_AGGR_TYPE (r))
6783 /* [temp.deduct]
6785 Type deduction may fail for any of the following
6786 reasons:
6788 -- Attempting to create "pointer to member of T" when T
6789 is not a class type. */
6790 if (complain & tf_error)
6791 error ("creating pointer to member function of non-class type %qT",
6793 return error_mark_node;
6796 fntype = build_method_type_directly (r, return_type,
6797 TREE_CHAIN (arg_types));
6799 fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
6800 fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
6802 return fntype;
6805 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE. Substitute the template
6806 ARGS into that specification, and return the substituted
6807 specification. If there is no specification, return NULL_TREE. */
6809 static tree
6810 tsubst_exception_specification (tree fntype,
6811 tree args,
6812 tsubst_flags_t complain,
6813 tree in_decl)
6815 tree specs;
6816 tree new_specs;
6818 specs = TYPE_RAISES_EXCEPTIONS (fntype);
6819 new_specs = NULL_TREE;
6820 if (specs)
6822 if (! TREE_VALUE (specs))
6823 new_specs = specs;
6824 else
6825 while (specs)
6827 tree spec;
6828 spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
6829 if (spec == error_mark_node)
6830 return spec;
6831 new_specs = add_exception_specifier (new_specs, spec, complain);
6832 specs = TREE_CHAIN (specs);
6835 return new_specs;
6838 /* Substitute into the PARMS of a call-declarator. */
6840 static tree
6841 tsubst_call_declarator_parms (tree parms,
6842 tree args,
6843 tsubst_flags_t complain,
6844 tree in_decl)
6846 tree new_parms;
6847 tree type;
6848 tree defarg;
6850 if (!parms || parms == void_list_node)
6851 return parms;
6853 new_parms = tsubst_call_declarator_parms (TREE_CHAIN (parms),
6854 args, complain, in_decl);
6856 /* Figure out the type of this parameter. */
6857 type = tsubst (TREE_VALUE (parms), args, complain, in_decl);
6859 /* Figure out the default argument as well. Note that we use
6860 tsubst_expr since the default argument is really an expression. */
6861 defarg = tsubst_expr (TREE_PURPOSE (parms), args, complain, in_decl);
6863 /* Chain this parameter on to the front of those we have already
6864 processed. We don't use hash_tree_cons because that function
6865 doesn't check TREE_PARMLIST. */
6866 new_parms = tree_cons (defarg, type, new_parms);
6868 return new_parms;
6871 /* Take the tree structure T and replace template parameters used
6872 therein with the argument vector ARGS. IN_DECL is an associated
6873 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
6874 Issue error and warning messages under control of COMPLAIN. Note
6875 that we must be relatively non-tolerant of extensions here, in
6876 order to preserve conformance; if we allow substitutions that
6877 should not be allowed, we may allow argument deductions that should
6878 not succeed, and therefore report ambiguous overload situations
6879 where there are none. In theory, we could allow the substitution,
6880 but indicate that it should have failed, and allow our caller to
6881 make sure that the right thing happens, but we don't try to do this
6882 yet.
6884 This function is used for dealing with types, decls and the like;
6885 for expressions, use tsubst_expr or tsubst_copy. */
6887 static tree
6888 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
6890 tree type, r;
6892 if (t == NULL_TREE || t == error_mark_node
6893 || t == integer_type_node
6894 || t == void_type_node
6895 || t == char_type_node
6896 || t == unknown_type_node
6897 || TREE_CODE (t) == NAMESPACE_DECL)
6898 return t;
6900 if (DECL_P (t))
6901 return tsubst_decl (t, args, complain);
6903 if (TREE_CODE (t) == IDENTIFIER_NODE)
6904 type = IDENTIFIER_TYPE_VALUE (t);
6905 else
6906 type = TREE_TYPE (t);
6908 gcc_assert (type != unknown_type_node);
6910 if (type
6911 && TREE_CODE (t) != TYPENAME_TYPE
6912 && TREE_CODE (t) != IDENTIFIER_NODE
6913 && TREE_CODE (t) != FUNCTION_TYPE
6914 && TREE_CODE (t) != METHOD_TYPE)
6915 type = tsubst (type, args, complain, in_decl);
6916 if (type == error_mark_node)
6917 return error_mark_node;
6919 switch (TREE_CODE (t))
6921 case RECORD_TYPE:
6922 case UNION_TYPE:
6923 case ENUMERAL_TYPE:
6924 return tsubst_aggr_type (t, args, complain, in_decl,
6925 /*entering_scope=*/0);
6927 case ERROR_MARK:
6928 case IDENTIFIER_NODE:
6929 case VOID_TYPE:
6930 case REAL_TYPE:
6931 case COMPLEX_TYPE:
6932 case VECTOR_TYPE:
6933 case BOOLEAN_TYPE:
6934 case INTEGER_CST:
6935 case REAL_CST:
6936 case STRING_CST:
6937 return t;
6939 case INTEGER_TYPE:
6940 if (t == integer_type_node)
6941 return t;
6943 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
6944 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
6945 return t;
6948 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
6950 /* The array dimension behaves like a non-type template arg,
6951 in that we want to fold it as much as possible. */
6952 max = tsubst_template_arg (omax, args, complain, in_decl);
6953 max = fold_decl_constant_value (max);
6955 if (integer_zerop (omax))
6957 /* Still allow an explicit array of size zero. */
6958 if (pedantic)
6959 pedwarn ("creating array with size zero");
6961 else if (integer_zerop (max)
6962 || (TREE_CODE (max) == INTEGER_CST
6963 && INT_CST_LT (max, integer_zero_node)))
6965 /* [temp.deduct]
6967 Type deduction may fail for any of the following
6968 reasons:
6970 Attempting to create an array with a size that is
6971 zero or negative. */
6972 if (complain & tf_error)
6973 error ("creating array with size zero (%qE)", max);
6975 return error_mark_node;
6978 return compute_array_index_type (NULL_TREE, max);
6981 case TEMPLATE_TYPE_PARM:
6982 case TEMPLATE_TEMPLATE_PARM:
6983 case BOUND_TEMPLATE_TEMPLATE_PARM:
6984 case TEMPLATE_PARM_INDEX:
6986 int idx;
6987 int level;
6988 int levels;
6989 tree arg = NULL_TREE;
6991 r = NULL_TREE;
6993 gcc_assert (TREE_VEC_LENGTH (args) > 0);
6994 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
6995 || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
6996 || TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
6998 idx = TEMPLATE_TYPE_IDX (t);
6999 level = TEMPLATE_TYPE_LEVEL (t);
7001 else
7003 idx = TEMPLATE_PARM_IDX (t);
7004 level = TEMPLATE_PARM_LEVEL (t);
7007 levels = TMPL_ARGS_DEPTH (args);
7008 if (level <= levels)
7009 arg = TMPL_ARG (args, level, idx);
7011 if (arg == error_mark_node)
7012 return error_mark_node;
7013 else if (arg != NULL_TREE)
7015 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
7017 gcc_assert (TYPE_P (arg));
7018 return cp_build_qualified_type_real
7019 (arg, cp_type_quals (arg) | cp_type_quals (t),
7020 complain | tf_ignore_bad_quals);
7022 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
7024 /* We are processing a type constructed from a
7025 template template parameter. */
7026 tree argvec = tsubst (TYPE_TI_ARGS (t),
7027 args, complain, in_decl);
7028 if (argvec == error_mark_node)
7029 return error_mark_node;
7031 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
7032 are resolving nested-types in the signature of a
7033 member function templates. Otherwise ARG is a
7034 TEMPLATE_DECL and is the real template to be
7035 instantiated. */
7036 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
7037 arg = TYPE_NAME (arg);
7039 r = lookup_template_class (arg,
7040 argvec, in_decl,
7041 DECL_CONTEXT (arg),
7042 /*entering_scope=*/0,
7043 complain);
7044 return cp_build_qualified_type_real
7045 (r, TYPE_QUALS (t), complain);
7047 else
7048 /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX. */
7049 return arg;
7052 if (level == 1)
7053 /* This can happen during the attempted tsubst'ing in
7054 unify. This means that we don't yet have any information
7055 about the template parameter in question. */
7056 return t;
7058 /* If we get here, we must have been looking at a parm for a
7059 more deeply nested template. Make a new version of this
7060 template parameter, but with a lower level. */
7061 switch (TREE_CODE (t))
7063 case TEMPLATE_TYPE_PARM:
7064 case TEMPLATE_TEMPLATE_PARM:
7065 case BOUND_TEMPLATE_TEMPLATE_PARM:
7066 if (cp_type_quals (t))
7068 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
7069 r = cp_build_qualified_type_real
7070 (r, cp_type_quals (t),
7071 complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
7072 ? tf_ignore_bad_quals : 0));
7074 else
7076 r = copy_type (t);
7077 TEMPLATE_TYPE_PARM_INDEX (r)
7078 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
7079 r, levels);
7080 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
7081 TYPE_MAIN_VARIANT (r) = r;
7082 TYPE_POINTER_TO (r) = NULL_TREE;
7083 TYPE_REFERENCE_TO (r) = NULL_TREE;
7085 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
7087 tree argvec = tsubst (TYPE_TI_ARGS (t), args,
7088 complain, in_decl);
7089 if (argvec == error_mark_node)
7090 return error_mark_node;
7092 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
7093 = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
7096 break;
7098 case TEMPLATE_PARM_INDEX:
7099 r = reduce_template_parm_level (t, type, levels);
7100 break;
7102 default:
7103 gcc_unreachable ();
7106 return r;
7109 case TREE_LIST:
7111 tree purpose, value, chain;
7113 if (t == void_list_node)
7114 return t;
7116 purpose = TREE_PURPOSE (t);
7117 if (purpose)
7119 purpose = tsubst (purpose, args, complain, in_decl);
7120 if (purpose == error_mark_node)
7121 return error_mark_node;
7123 value = TREE_VALUE (t);
7124 if (value)
7126 value = tsubst (value, args, complain, in_decl);
7127 if (value == error_mark_node)
7128 return error_mark_node;
7130 chain = TREE_CHAIN (t);
7131 if (chain && chain != void_type_node)
7133 chain = tsubst (chain, args, complain, in_decl);
7134 if (chain == error_mark_node)
7135 return error_mark_node;
7137 if (purpose == TREE_PURPOSE (t)
7138 && value == TREE_VALUE (t)
7139 && chain == TREE_CHAIN (t))
7140 return t;
7141 return hash_tree_cons (purpose, value, chain);
7144 case TREE_BINFO:
7145 /* We should never be tsubsting a binfo. */
7146 gcc_unreachable ();
7148 case TREE_VEC:
7149 /* A vector of template arguments. */
7150 gcc_assert (!type);
7151 return tsubst_template_args (t, args, complain, in_decl);
7153 case POINTER_TYPE:
7154 case REFERENCE_TYPE:
7156 enum tree_code code;
7158 if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
7159 return t;
7161 code = TREE_CODE (t);
7164 /* [temp.deduct]
7166 Type deduction may fail for any of the following
7167 reasons:
7169 -- Attempting to create a pointer to reference type.
7170 -- Attempting to create a reference to a reference type or
7171 a reference to void. */
7172 if (TREE_CODE (type) == REFERENCE_TYPE
7173 || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
7175 static location_t last_loc;
7177 /* We keep track of the last time we issued this error
7178 message to avoid spewing a ton of messages during a
7179 single bad template instantiation. */
7180 if (complain & tf_error
7181 #ifdef USE_MAPPED_LOCATION
7182 && last_loc != input_location
7183 #else
7184 && (last_loc.line != input_line
7185 || last_loc.file != input_filename)
7186 #endif
7189 if (TREE_CODE (type) == VOID_TYPE)
7190 error ("forming reference to void");
7191 else
7192 error ("forming %s to reference type %qT",
7193 (code == POINTER_TYPE) ? "pointer" : "reference",
7194 type);
7195 last_loc = input_location;
7198 return error_mark_node;
7200 else if (code == POINTER_TYPE)
7202 r = build_pointer_type (type);
7203 if (TREE_CODE (type) == METHOD_TYPE)
7204 r = build_ptrmemfunc_type (r);
7206 else
7207 r = build_reference_type (type);
7208 r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7210 if (r != error_mark_node)
7211 /* Will this ever be needed for TYPE_..._TO values? */
7212 layout_type (r);
7214 return r;
7216 case OFFSET_TYPE:
7218 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
7219 if (r == error_mark_node || !IS_AGGR_TYPE (r))
7221 /* [temp.deduct]
7223 Type deduction may fail for any of the following
7224 reasons:
7226 -- Attempting to create "pointer to member of T" when T
7227 is not a class type. */
7228 if (complain & tf_error)
7229 error ("creating pointer to member of non-class type %qT", r);
7230 return error_mark_node;
7232 if (TREE_CODE (type) == REFERENCE_TYPE)
7234 if (complain & tf_error)
7235 error ("creating pointer to member reference type %qT", type);
7237 return error_mark_node;
7239 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
7240 if (TREE_CODE (type) == FUNCTION_TYPE)
7242 /* The type of the implicit object parameter gets its
7243 cv-qualifiers from the FUNCTION_TYPE. */
7244 tree method_type;
7245 tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
7246 cp_type_quals (type));
7247 tree memptr;
7248 method_type = build_method_type_directly (this_type,
7249 TREE_TYPE (type),
7250 TYPE_ARG_TYPES (type));
7251 memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
7252 return cp_build_qualified_type_real (memptr, cp_type_quals (t),
7253 complain);
7255 else
7256 return cp_build_qualified_type_real (build_ptrmem_type (r, type),
7257 TYPE_QUALS (t),
7258 complain);
7260 case FUNCTION_TYPE:
7261 case METHOD_TYPE:
7263 tree fntype;
7264 tree specs;
7265 fntype = tsubst_function_type (t, args, complain, in_decl);
7266 if (fntype == error_mark_node)
7267 return error_mark_node;
7269 /* Substitute the exception specification. */
7270 specs = tsubst_exception_specification (t, args, complain,
7271 in_decl);
7272 if (specs)
7273 fntype = build_exception_variant (fntype, specs);
7274 return fntype;
7276 case ARRAY_TYPE:
7278 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
7279 if (domain == error_mark_node)
7280 return error_mark_node;
7282 /* As an optimization, we avoid regenerating the array type if
7283 it will obviously be the same as T. */
7284 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
7285 return t;
7287 /* These checks should match the ones in grokdeclarator.
7289 [temp.deduct]
7291 The deduction may fail for any of the following reasons:
7293 -- Attempting to create an array with an element type that
7294 is void, a function type, or a reference type, or [DR337]
7295 an abstract class type. */
7296 if (TREE_CODE (type) == VOID_TYPE
7297 || TREE_CODE (type) == FUNCTION_TYPE
7298 || TREE_CODE (type) == REFERENCE_TYPE)
7300 if (complain & tf_error)
7301 error ("creating array of %qT", type);
7302 return error_mark_node;
7304 if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
7306 if (complain & tf_error)
7307 error ("creating array of %qT, which is an abstract class type",
7308 type);
7309 return error_mark_node;
7312 r = build_cplus_array_type (type, domain);
7313 return r;
7316 case PLUS_EXPR:
7317 case MINUS_EXPR:
7319 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7320 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
7322 if (e1 == error_mark_node || e2 == error_mark_node)
7323 return error_mark_node;
7325 return fold (build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2));
7328 case NEGATE_EXPR:
7329 case NOP_EXPR:
7331 tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7332 if (e == error_mark_node)
7333 return error_mark_node;
7335 return fold (build1 (TREE_CODE (t), TREE_TYPE (t), e));
7338 case TYPENAME_TYPE:
7340 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
7341 in_decl, /*entering_scope=*/1);
7342 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
7343 complain, in_decl);
7345 if (ctx == error_mark_node || f == error_mark_node)
7346 return error_mark_node;
7348 if (!IS_AGGR_TYPE (ctx))
7350 if (complain & tf_error)
7351 error ("%qT is not a class, struct, or union type", ctx);
7352 return error_mark_node;
7354 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
7356 /* Normally, make_typename_type does not require that the CTX
7357 have complete type in order to allow things like:
7359 template <class T> struct S { typename S<T>::X Y; };
7361 But, such constructs have already been resolved by this
7362 point, so here CTX really should have complete type, unless
7363 it's a partial instantiation. */
7364 ctx = complete_type (ctx);
7365 if (!COMPLETE_TYPE_P (ctx))
7367 if (complain & tf_error)
7368 cxx_incomplete_type_error (NULL_TREE, ctx);
7369 return error_mark_node;
7373 f = make_typename_type (ctx, f, typename_type,
7374 (complain & tf_error) | tf_keep_type_decl);
7375 if (f == error_mark_node)
7376 return f;
7377 if (TREE_CODE (f) == TYPE_DECL)
7379 complain |= tf_ignore_bad_quals;
7380 f = TREE_TYPE (f);
7383 if (TREE_CODE (f) != TYPENAME_TYPE)
7385 if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
7386 error ("%qT resolves to %qT, which is not an enumeration type",
7387 t, f);
7388 else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
7389 error ("%qT resolves to %qT, which is is not a class type",
7390 t, f);
7393 return cp_build_qualified_type_real
7394 (f, cp_type_quals (f) | cp_type_quals (t), complain);
7397 case UNBOUND_CLASS_TEMPLATE:
7399 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
7400 in_decl, /*entering_scope=*/1);
7401 tree name = TYPE_IDENTIFIER (t);
7402 tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
7404 if (ctx == error_mark_node || name == error_mark_node)
7405 return error_mark_node;
7407 if (parm_list)
7408 parm_list = tsubst_template_parms (parm_list, args, complain);
7409 return make_unbound_class_template (ctx, name, parm_list, complain);
7412 case INDIRECT_REF:
7413 case ADDR_EXPR:
7414 case CALL_EXPR:
7415 gcc_unreachable ();
7417 case ARRAY_REF:
7419 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7420 tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl);
7421 if (e1 == error_mark_node || e2 == error_mark_node)
7422 return error_mark_node;
7424 return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
7427 case SCOPE_REF:
7429 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7430 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
7431 if (e1 == error_mark_node || e2 == error_mark_node)
7432 return error_mark_node;
7434 return build_nt (TREE_CODE (t), e1, e2);
7437 case TYPEOF_TYPE:
7439 tree type;
7441 type = finish_typeof (tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
7442 complain, in_decl));
7443 return cp_build_qualified_type_real (type,
7444 cp_type_quals (t)
7445 | cp_type_quals (type),
7446 complain);
7449 default:
7450 sorry ("use of %qs in template",
7451 tree_code_name [(int) TREE_CODE (t)]);
7452 return error_mark_node;
7456 /* Like tsubst_expr for a BASELINK. OBJECT_TYPE, if non-NULL, is the
7457 type of the expression on the left-hand side of the "." or "->"
7458 operator. */
7460 static tree
7461 tsubst_baselink (tree baselink, tree object_type,
7462 tree args, tsubst_flags_t complain, tree in_decl)
7464 tree name;
7465 tree qualifying_scope;
7466 tree fns;
7467 tree template_args = 0;
7468 bool template_id_p = false;
7470 /* A baselink indicates a function from a base class. The
7471 BASELINK_ACCESS_BINFO and BASELINK_BINFO are going to have
7472 non-dependent types; otherwise, the lookup could not have
7473 succeeded. However, they may indicate bases of the template
7474 class, rather than the instantiated class.
7476 In addition, lookups that were not ambiguous before may be
7477 ambiguous now. Therefore, we perform the lookup again. */
7478 qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
7479 fns = BASELINK_FUNCTIONS (baselink);
7480 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7482 template_id_p = true;
7483 template_args = TREE_OPERAND (fns, 1);
7484 fns = TREE_OPERAND (fns, 0);
7485 if (template_args)
7486 template_args = tsubst_template_args (template_args, args,
7487 complain, in_decl);
7489 name = DECL_NAME (get_first_fn (fns));
7490 baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
7492 /* If lookup found a single function, mark it as used at this
7493 point. (If it lookup found multiple functions the one selected
7494 later by overload resolution will be marked as used at that
7495 point.) */
7496 if (BASELINK_P (baselink))
7497 fns = BASELINK_FUNCTIONS (baselink);
7498 if (!template_id_p && !really_overloaded_fn (fns))
7499 mark_used (OVL_CURRENT (fns));
7501 /* Add back the template arguments, if present. */
7502 if (BASELINK_P (baselink) && template_id_p)
7503 BASELINK_FUNCTIONS (baselink)
7504 = build_nt (TEMPLATE_ID_EXPR,
7505 BASELINK_FUNCTIONS (baselink),
7506 template_args);
7508 if (!object_type)
7509 object_type = current_class_type;
7510 return adjust_result_of_qualified_name_lookup (baselink,
7511 qualifying_scope,
7512 object_type);
7515 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID. DONE is
7516 true if the qualified-id will be a postfix-expression in-and-of
7517 itself; false if more of the postfix-expression follows the
7518 QUALIFIED_ID. ADDRESS_P is true if the qualified-id is the operand
7519 of "&". */
7521 static tree
7522 tsubst_qualified_id (tree qualified_id, tree args,
7523 tsubst_flags_t complain, tree in_decl,
7524 bool done, bool address_p)
7526 tree expr;
7527 tree scope;
7528 tree name;
7529 bool is_template;
7530 tree template_args;
7532 gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
7534 /* Figure out what name to look up. */
7535 name = TREE_OPERAND (qualified_id, 1);
7536 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
7538 is_template = true;
7539 template_args = TREE_OPERAND (name, 1);
7540 if (template_args)
7541 template_args = tsubst_template_args (template_args, args,
7542 complain, in_decl);
7543 name = TREE_OPERAND (name, 0);
7545 else
7547 is_template = false;
7548 template_args = NULL_TREE;
7551 /* Substitute into the qualifying scope. When there are no ARGS, we
7552 are just trying to simplify a non-dependent expression. In that
7553 case the qualifying scope may be dependent, and, in any case,
7554 substituting will not help. */
7555 scope = TREE_OPERAND (qualified_id, 0);
7556 if (args)
7558 scope = tsubst (scope, args, complain, in_decl);
7559 expr = tsubst_copy (name, args, complain, in_decl);
7561 else
7562 expr = name;
7564 if (dependent_type_p (scope))
7565 return build_nt (SCOPE_REF, scope, expr);
7567 if (!BASELINK_P (name) && !DECL_P (expr))
7569 expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
7570 if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
7571 ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
7573 if (complain & tf_error)
7575 error ("dependent-name %qE is parsed as a non-type, but "
7576 "instantiation yields a type", qualified_id);
7577 inform ("say %<typename %E%> if a type is meant", qualified_id);
7579 return error_mark_node;
7583 if (DECL_P (expr))
7585 check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
7586 scope);
7587 /* Remember that there was a reference to this entity. */
7588 mark_used (expr);
7591 if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
7593 if (complain & tf_error)
7594 qualified_name_lookup_error (scope,
7595 TREE_OPERAND (qualified_id, 1),
7596 expr);
7597 return error_mark_node;
7600 if (is_template)
7601 expr = lookup_template_function (expr, template_args);
7603 if (expr == error_mark_node && complain & tf_error)
7604 qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
7605 expr);
7606 else if (TYPE_P (scope))
7608 expr = (adjust_result_of_qualified_name_lookup
7609 (expr, scope, current_class_type));
7610 expr = finish_qualified_id_expr (scope, expr, done, address_p);
7613 expr = convert_from_reference (expr);
7615 return expr;
7618 /* Like tsubst, but deals with expressions. This function just replaces
7619 template parms; to finish processing the resultant expression, use
7620 tsubst_expr. */
7622 static tree
7623 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7625 enum tree_code code;
7626 tree r;
7628 if (t == NULL_TREE || t == error_mark_node)
7629 return t;
7631 code = TREE_CODE (t);
7633 switch (code)
7635 case PARM_DECL:
7636 r = retrieve_local_specialization (t);
7637 gcc_assert (r != NULL);
7638 mark_used (r);
7639 return r;
7641 case CONST_DECL:
7643 tree enum_type;
7644 tree v;
7646 if (DECL_TEMPLATE_PARM_P (t))
7647 return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
7648 /* There is no need to substitute into namespace-scope
7649 enumerators. */
7650 if (DECL_NAMESPACE_SCOPE_P (t))
7651 return t;
7652 /* If ARGS is NULL, then T is known to be non-dependent. */
7653 if (args == NULL_TREE)
7654 return integral_constant_value (t);
7656 /* Unfortunately, we cannot just call lookup_name here.
7657 Consider:
7659 template <int I> int f() {
7660 enum E { a = I };
7661 struct S { void g() { E e = a; } };
7664 When we instantiate f<7>::S::g(), say, lookup_name is not
7665 clever enough to find f<7>::a. */
7666 enum_type
7667 = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
7668 /*entering_scope=*/0);
7670 for (v = TYPE_VALUES (enum_type);
7671 v != NULL_TREE;
7672 v = TREE_CHAIN (v))
7673 if (TREE_PURPOSE (v) == DECL_NAME (t))
7674 return TREE_VALUE (v);
7676 /* We didn't find the name. That should never happen; if
7677 name-lookup found it during preliminary parsing, we
7678 should find it again here during instantiation. */
7679 gcc_unreachable ();
7681 return t;
7683 case FIELD_DECL:
7684 if (DECL_CONTEXT (t))
7686 tree ctx;
7688 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
7689 /*entering_scope=*/1);
7690 if (ctx != DECL_CONTEXT (t))
7692 tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
7693 if (!r)
7695 if (complain & tf_error)
7696 error ("using invalid field %qD", t);
7697 return error_mark_node;
7699 return r;
7703 return t;
7705 case VAR_DECL:
7706 case FUNCTION_DECL:
7707 if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
7708 || local_variable_p (t))
7709 t = tsubst (t, args, complain, in_decl);
7710 mark_used (t);
7711 return t;
7713 case BASELINK:
7714 return tsubst_baselink (t, current_class_type, args, complain, in_decl);
7716 case TEMPLATE_DECL:
7717 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7718 return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
7719 args, complain, in_decl);
7720 else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
7721 return tsubst (t, args, complain, in_decl);
7722 else if (DECL_CLASS_SCOPE_P (t)
7723 && uses_template_parms (DECL_CONTEXT (t)))
7725 /* Template template argument like the following example need
7726 special treatment:
7728 template <template <class> class TT> struct C {};
7729 template <class T> struct D {
7730 template <class U> struct E {};
7731 C<E> c; // #1
7733 D<int> d; // #2
7735 We are processing the template argument `E' in #1 for
7736 the template instantiation #2. Originally, `E' is a
7737 TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT. Now we
7738 have to substitute this with one having context `D<int>'. */
7740 tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
7741 return lookup_field (context, DECL_NAME(t), 0, false);
7743 else
7744 /* Ordinary template template argument. */
7745 return t;
7747 case CAST_EXPR:
7748 case REINTERPRET_CAST_EXPR:
7749 case CONST_CAST_EXPR:
7750 case STATIC_CAST_EXPR:
7751 case DYNAMIC_CAST_EXPR:
7752 case NOP_EXPR:
7753 return build1
7754 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7755 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
7757 case INDIRECT_REF:
7758 case NEGATE_EXPR:
7759 case TRUTH_NOT_EXPR:
7760 case BIT_NOT_EXPR:
7761 case ADDR_EXPR:
7762 case CONVERT_EXPR: /* Unary + */
7763 case SIZEOF_EXPR:
7764 case ALIGNOF_EXPR:
7765 case ARROW_EXPR:
7766 case THROW_EXPR:
7767 case TYPEID_EXPR:
7768 case REALPART_EXPR:
7769 case IMAGPART_EXPR:
7770 return build1
7771 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7772 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
7774 case COMPONENT_REF:
7776 tree object;
7777 tree name;
7779 object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
7780 name = TREE_OPERAND (t, 1);
7781 if (TREE_CODE (name) == BIT_NOT_EXPR)
7783 name = tsubst_copy (TREE_OPERAND (name, 0), args,
7784 complain, in_decl);
7785 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7787 else if (TREE_CODE (name) == SCOPE_REF
7788 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
7790 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
7791 complain, in_decl);
7792 name = TREE_OPERAND (name, 1);
7793 name = tsubst_copy (TREE_OPERAND (name, 0), args,
7794 complain, in_decl);
7795 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7796 name = build_nt (SCOPE_REF, base, name);
7798 else if (TREE_CODE (name) == BASELINK)
7799 name = tsubst_baselink (name,
7800 non_reference (TREE_TYPE (object)),
7801 args, complain,
7802 in_decl);
7803 else
7804 name = tsubst_copy (name, args, complain, in_decl);
7805 return build_nt (COMPONENT_REF, object, name, NULL_TREE);
7808 case PLUS_EXPR:
7809 case MINUS_EXPR:
7810 case MULT_EXPR:
7811 case TRUNC_DIV_EXPR:
7812 case CEIL_DIV_EXPR:
7813 case FLOOR_DIV_EXPR:
7814 case ROUND_DIV_EXPR:
7815 case EXACT_DIV_EXPR:
7816 case BIT_AND_EXPR:
7817 case BIT_IOR_EXPR:
7818 case BIT_XOR_EXPR:
7819 case TRUNC_MOD_EXPR:
7820 case FLOOR_MOD_EXPR:
7821 case TRUTH_ANDIF_EXPR:
7822 case TRUTH_ORIF_EXPR:
7823 case TRUTH_AND_EXPR:
7824 case TRUTH_OR_EXPR:
7825 case RSHIFT_EXPR:
7826 case LSHIFT_EXPR:
7827 case RROTATE_EXPR:
7828 case LROTATE_EXPR:
7829 case EQ_EXPR:
7830 case NE_EXPR:
7831 case MAX_EXPR:
7832 case MIN_EXPR:
7833 case LE_EXPR:
7834 case GE_EXPR:
7835 case LT_EXPR:
7836 case GT_EXPR:
7837 case COMPOUND_EXPR:
7838 case SCOPE_REF:
7839 case DOTSTAR_EXPR:
7840 case MEMBER_REF:
7841 case PREDECREMENT_EXPR:
7842 case PREINCREMENT_EXPR:
7843 case POSTDECREMENT_EXPR:
7844 case POSTINCREMENT_EXPR:
7845 return build_nt
7846 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7847 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
7849 case ARRAY_REF:
7850 return build_nt
7851 (ARRAY_REF,
7852 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7853 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7854 NULL_TREE, NULL_TREE);
7856 case CALL_EXPR:
7857 return build_nt (code,
7858 tsubst_copy (TREE_OPERAND (t, 0), args,
7859 complain, in_decl),
7860 tsubst_copy (TREE_OPERAND (t, 1), args, complain,
7861 in_decl),
7862 NULL_TREE);
7864 case COND_EXPR:
7865 case MODOP_EXPR:
7866 case PSEUDO_DTOR_EXPR:
7868 r = build_nt
7869 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7870 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7871 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
7872 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
7873 return r;
7876 case NEW_EXPR:
7878 r = build_nt
7879 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7880 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7881 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
7882 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
7883 return r;
7886 case DELETE_EXPR:
7888 r = build_nt
7889 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7890 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
7891 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
7892 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
7893 return r;
7896 case TEMPLATE_ID_EXPR:
7898 /* Substituted template arguments */
7899 tree fn = TREE_OPERAND (t, 0);
7900 tree targs = TREE_OPERAND (t, 1);
7902 fn = tsubst_copy (fn, args, complain, in_decl);
7903 if (targs)
7904 targs = tsubst_template_args (targs, args, complain, in_decl);
7906 return lookup_template_function (fn, targs);
7909 case TREE_LIST:
7911 tree purpose, value, chain;
7913 if (t == void_list_node)
7914 return t;
7916 purpose = TREE_PURPOSE (t);
7917 if (purpose)
7918 purpose = tsubst_copy (purpose, args, complain, in_decl);
7919 value = TREE_VALUE (t);
7920 if (value)
7921 value = tsubst_copy (value, args, complain, in_decl);
7922 chain = TREE_CHAIN (t);
7923 if (chain && chain != void_type_node)
7924 chain = tsubst_copy (chain, args, complain, in_decl);
7925 if (purpose == TREE_PURPOSE (t)
7926 && value == TREE_VALUE (t)
7927 && chain == TREE_CHAIN (t))
7928 return t;
7929 return tree_cons (purpose, value, chain);
7932 case RECORD_TYPE:
7933 case UNION_TYPE:
7934 case ENUMERAL_TYPE:
7935 case INTEGER_TYPE:
7936 case TEMPLATE_TYPE_PARM:
7937 case TEMPLATE_TEMPLATE_PARM:
7938 case BOUND_TEMPLATE_TEMPLATE_PARM:
7939 case TEMPLATE_PARM_INDEX:
7940 case POINTER_TYPE:
7941 case REFERENCE_TYPE:
7942 case OFFSET_TYPE:
7943 case FUNCTION_TYPE:
7944 case METHOD_TYPE:
7945 case ARRAY_TYPE:
7946 case TYPENAME_TYPE:
7947 case UNBOUND_CLASS_TEMPLATE:
7948 case TYPEOF_TYPE:
7949 case TYPE_DECL:
7950 return tsubst (t, args, complain, in_decl);
7952 case IDENTIFIER_NODE:
7953 if (IDENTIFIER_TYPENAME_P (t))
7955 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7956 return mangle_conv_op_name_for_type (new_type);
7958 else
7959 return t;
7961 case CONSTRUCTOR:
7963 r = build_constructor
7964 (tsubst (TREE_TYPE (t), args, complain, in_decl),
7965 tsubst_copy (CONSTRUCTOR_ELTS (t), args, complain, in_decl));
7966 TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
7967 return r;
7970 case VA_ARG_EXPR:
7971 return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
7972 in_decl),
7973 tsubst (TREE_TYPE (t), args, complain, in_decl));
7975 case CLEANUP_POINT_EXPR:
7976 /* We shouldn't have built any of these during initial template
7977 generation. Instead, they should be built during instantiation
7978 in response to the saved STMT_IS_FULL_EXPR_P setting. */
7979 gcc_unreachable ();
7981 default:
7982 return t;
7986 /* Like tsubst_copy for expressions, etc. but also does semantic
7987 processing. */
7989 static tree
7990 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7992 tree stmt, tmp;
7994 if (t == NULL_TREE || t == error_mark_node)
7995 return t;
7997 if (EXPR_HAS_LOCATION (t))
7998 input_location = EXPR_LOCATION (t);
7999 if (STATEMENT_CODE_P (TREE_CODE (t)))
8000 current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
8002 switch (TREE_CODE (t))
8004 case STATEMENT_LIST:
8006 tree_stmt_iterator i;
8007 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
8008 tsubst_expr (tsi_stmt (i), args, complain, in_decl);
8009 break;
8012 case CTOR_INITIALIZER:
8013 finish_mem_initializers (tsubst_initializer_list
8014 (TREE_OPERAND (t, 0), args));
8015 break;
8017 case RETURN_EXPR:
8018 finish_return_stmt (tsubst_expr (TREE_OPERAND (t, 0),
8019 args, complain, in_decl));
8020 break;
8022 case EXPR_STMT:
8023 tmp = tsubst_expr (EXPR_STMT_EXPR (t), args, complain, in_decl);
8024 if (EXPR_STMT_STMT_EXPR_RESULT (t))
8025 finish_stmt_expr_expr (tmp, cur_stmt_expr);
8026 else
8027 finish_expr_stmt (tmp);
8028 break;
8030 case USING_STMT:
8031 do_using_directive (tsubst_expr (USING_STMT_NAMESPACE (t),
8032 args, complain, in_decl));
8033 break;
8035 case DECL_EXPR:
8037 tree decl;
8038 tree init;
8040 decl = DECL_EXPR_DECL (t);
8041 if (TREE_CODE (decl) == LABEL_DECL)
8042 finish_label_decl (DECL_NAME (decl));
8043 else if (TREE_CODE (decl) == USING_DECL)
8045 tree scope = DECL_INITIAL (decl);
8046 tree name = DECL_NAME (decl);
8047 tree decl;
8049 scope = tsubst_expr (scope, args, complain, in_decl);
8050 decl = lookup_qualified_name (scope, name,
8051 /*is_type_p=*/false,
8052 /*complain=*/false);
8053 if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
8054 qualified_name_lookup_error (scope, name, decl);
8055 else
8056 do_local_using_decl (decl, scope, name);
8058 else
8060 init = DECL_INITIAL (decl);
8061 decl = tsubst (decl, args, complain, in_decl);
8062 if (decl != error_mark_node)
8064 if (init)
8065 DECL_INITIAL (decl) = error_mark_node;
8066 /* By marking the declaration as instantiated, we avoid
8067 trying to instantiate it. Since instantiate_decl can't
8068 handle local variables, and since we've already done
8069 all that needs to be done, that's the right thing to
8070 do. */
8071 if (TREE_CODE (decl) == VAR_DECL)
8072 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
8073 if (TREE_CODE (decl) == VAR_DECL
8074 && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
8075 /* Anonymous aggregates are a special case. */
8076 finish_anon_union (decl);
8077 else
8079 maybe_push_decl (decl);
8080 if (TREE_CODE (decl) == VAR_DECL
8081 && DECL_PRETTY_FUNCTION_P (decl))
8083 /* For __PRETTY_FUNCTION__ we have to adjust the
8084 initializer. */
8085 const char *const name
8086 = cxx_printable_name (current_function_decl, 2);
8087 init = cp_fname_init (name, &TREE_TYPE (decl));
8089 else
8090 init = tsubst_expr (init, args, complain, in_decl);
8091 cp_finish_decl (decl, init, NULL_TREE, 0);
8096 /* A DECL_EXPR can also be used as an expression, in the condition
8097 clause of an if/for/while construct. */
8098 return decl;
8101 case FOR_STMT:
8102 stmt = begin_for_stmt ();
8103 tsubst_expr (FOR_INIT_STMT (t), args, complain, in_decl);
8104 finish_for_init_stmt (stmt);
8105 tmp = tsubst_expr (FOR_COND (t), args, complain, in_decl);
8106 finish_for_cond (tmp, stmt);
8107 tmp = tsubst_expr (FOR_EXPR (t), args, complain, in_decl);
8108 finish_for_expr (tmp, stmt);
8109 tsubst_expr (FOR_BODY (t), args, complain, in_decl);
8110 finish_for_stmt (stmt);
8111 break;
8113 case WHILE_STMT:
8114 stmt = begin_while_stmt ();
8115 tmp = tsubst_expr (WHILE_COND (t), args, complain, in_decl);
8116 finish_while_stmt_cond (tmp, stmt);
8117 tsubst_expr (WHILE_BODY (t), args, complain, in_decl);
8118 finish_while_stmt (stmt);
8119 break;
8121 case DO_STMT:
8122 stmt = begin_do_stmt ();
8123 tsubst_expr (DO_BODY (t), args, complain, in_decl);
8124 finish_do_body (stmt);
8125 tmp = tsubst_expr (DO_COND (t), args, complain, in_decl);
8126 finish_do_stmt (tmp, stmt);
8127 break;
8129 case IF_STMT:
8130 stmt = begin_if_stmt ();
8131 tmp = tsubst_expr (IF_COND (t), args, complain, in_decl);
8132 finish_if_stmt_cond (tmp, stmt);
8133 tsubst_expr (THEN_CLAUSE (t), args, complain, in_decl);
8134 finish_then_clause (stmt);
8136 if (ELSE_CLAUSE (t))
8138 begin_else_clause (stmt);
8139 tsubst_expr (ELSE_CLAUSE (t), args, complain, in_decl);
8140 finish_else_clause (stmt);
8143 finish_if_stmt (stmt);
8144 break;
8146 case BIND_EXPR:
8147 if (BIND_EXPR_BODY_BLOCK (t))
8148 stmt = begin_function_body ();
8149 else
8150 stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
8151 ? BCS_TRY_BLOCK : 0);
8153 tsubst_expr (BIND_EXPR_BODY (t), args, complain, in_decl);
8155 if (BIND_EXPR_BODY_BLOCK (t))
8156 finish_function_body (stmt);
8157 else
8158 finish_compound_stmt (stmt);
8159 break;
8161 case BREAK_STMT:
8162 finish_break_stmt ();
8163 break;
8165 case CONTINUE_STMT:
8166 finish_continue_stmt ();
8167 break;
8169 case SWITCH_STMT:
8170 stmt = begin_switch_stmt ();
8171 tmp = tsubst_expr (SWITCH_STMT_COND (t), args, complain, in_decl);
8172 finish_switch_cond (tmp, stmt);
8173 tsubst_expr (SWITCH_STMT_BODY (t), args, complain, in_decl);
8174 finish_switch_stmt (stmt);
8175 break;
8177 case CASE_LABEL_EXPR:
8178 finish_case_label (tsubst_expr (CASE_LOW (t), args, complain, in_decl),
8179 tsubst_expr (CASE_HIGH (t), args, complain,
8180 in_decl));
8181 break;
8183 case LABEL_EXPR:
8184 finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
8185 break;
8187 case GOTO_EXPR:
8188 tmp = GOTO_DESTINATION (t);
8189 if (TREE_CODE (tmp) != LABEL_DECL)
8190 /* Computed goto's must be tsubst'd into. On the other hand,
8191 non-computed gotos must not be; the identifier in question
8192 will have no binding. */
8193 tmp = tsubst_expr (tmp, args, complain, in_decl);
8194 else
8195 tmp = DECL_NAME (tmp);
8196 finish_goto_stmt (tmp);
8197 break;
8199 case ASM_EXPR:
8200 tmp = finish_asm_stmt
8201 (ASM_VOLATILE_P (t),
8202 tsubst_expr (ASM_STRING (t), args, complain, in_decl),
8203 tsubst_expr (ASM_OUTPUTS (t), args, complain, in_decl),
8204 tsubst_expr (ASM_INPUTS (t), args, complain, in_decl),
8205 tsubst_expr (ASM_CLOBBERS (t), args, complain, in_decl));
8207 tree asm_expr = tmp;
8208 if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
8209 asm_expr = TREE_OPERAND (asm_expr, 0);
8210 ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
8212 break;
8214 case TRY_BLOCK:
8215 if (CLEANUP_P (t))
8217 stmt = begin_try_block ();
8218 tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
8219 finish_cleanup_try_block (stmt);
8220 finish_cleanup (tsubst_expr (TRY_HANDLERS (t), args,
8221 complain, in_decl),
8222 stmt);
8224 else
8226 if (FN_TRY_BLOCK_P (t))
8227 stmt = begin_function_try_block ();
8228 else
8229 stmt = begin_try_block ();
8231 tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
8233 if (FN_TRY_BLOCK_P (t))
8234 finish_function_try_block (stmt);
8235 else
8236 finish_try_block (stmt);
8238 tsubst_expr (TRY_HANDLERS (t), args, complain, in_decl);
8239 if (FN_TRY_BLOCK_P (t))
8240 finish_function_handler_sequence (stmt);
8241 else
8242 finish_handler_sequence (stmt);
8244 break;
8246 case HANDLER:
8248 tree decl;
8250 stmt = begin_handler ();
8251 if (HANDLER_PARMS (t))
8253 decl = HANDLER_PARMS (t);
8254 decl = tsubst (decl, args, complain, in_decl);
8255 /* Prevent instantiate_decl from trying to instantiate
8256 this variable. We've already done all that needs to be
8257 done. */
8258 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
8260 else
8261 decl = NULL_TREE;
8262 finish_handler_parms (decl, stmt);
8263 tsubst_expr (HANDLER_BODY (t), args, complain, in_decl);
8264 finish_handler (stmt);
8266 break;
8268 case TAG_DEFN:
8269 tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
8270 break;
8272 default:
8273 gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
8275 return tsubst_copy_and_build (t, args, complain, in_decl,
8276 /*function_p=*/false);
8279 return NULL_TREE;
8282 /* T is a postfix-expression that is not being used in a function
8283 call. Return the substituted version of T. */
8285 static tree
8286 tsubst_non_call_postfix_expression (tree t, tree args,
8287 tsubst_flags_t complain,
8288 tree in_decl)
8290 if (TREE_CODE (t) == SCOPE_REF)
8291 t = tsubst_qualified_id (t, args, complain, in_decl,
8292 /*done=*/false, /*address_p=*/false);
8293 else
8294 t = tsubst_copy_and_build (t, args, complain, in_decl,
8295 /*function_p=*/false);
8297 return t;
8300 /* Like tsubst but deals with expressions and performs semantic
8301 analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
8303 tree
8304 tsubst_copy_and_build (tree t,
8305 tree args,
8306 tsubst_flags_t complain,
8307 tree in_decl,
8308 bool function_p)
8310 #define RECUR(NODE) \
8311 tsubst_copy_and_build (NODE, args, complain, in_decl, /*function_p=*/false)
8313 tree op1;
8315 if (t == NULL_TREE || t == error_mark_node)
8316 return t;
8318 switch (TREE_CODE (t))
8320 case USING_DECL:
8321 t = DECL_NAME (t);
8322 /* Fall through. */
8323 case IDENTIFIER_NODE:
8325 tree decl;
8326 cp_id_kind idk;
8327 tree qualifying_class;
8328 bool non_integral_constant_expression_p;
8329 const char *error_msg;
8331 if (IDENTIFIER_TYPENAME_P (t))
8333 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8334 t = mangle_conv_op_name_for_type (new_type);
8337 /* Look up the name. */
8338 decl = lookup_name (t, 0);
8340 /* By convention, expressions use ERROR_MARK_NODE to indicate
8341 failure, not NULL_TREE. */
8342 if (decl == NULL_TREE)
8343 decl = error_mark_node;
8345 decl = finish_id_expression (t, decl, NULL_TREE,
8346 &idk,
8347 &qualifying_class,
8348 /*integral_constant_expression_p=*/false,
8349 /*allow_non_integral_constant_expression_p=*/false,
8350 &non_integral_constant_expression_p,
8351 &error_msg);
8352 if (error_msg)
8353 error (error_msg);
8354 if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
8355 decl = unqualified_name_lookup_error (decl);
8356 return decl;
8359 case TEMPLATE_ID_EXPR:
8361 tree object;
8362 tree template = RECUR (TREE_OPERAND (t, 0));
8363 tree targs = TREE_OPERAND (t, 1);
8365 if (targs)
8366 targs = tsubst_template_args (targs, args, complain, in_decl);
8368 if (TREE_CODE (template) == COMPONENT_REF)
8370 object = TREE_OPERAND (template, 0);
8371 template = TREE_OPERAND (template, 1);
8373 else
8374 object = NULL_TREE;
8375 template = lookup_template_function (template, targs);
8377 if (object)
8378 return build3 (COMPONENT_REF, TREE_TYPE (template),
8379 object, template, NULL_TREE);
8380 else
8381 return template;
8384 case INDIRECT_REF:
8386 tree r = RECUR (TREE_OPERAND (t, 0));
8388 if (REFERENCE_REF_P (t))
8390 /* A type conversion to reference type will be enclosed in
8391 such an indirect ref, but the substitution of the cast
8392 will have also added such an indirect ref. */
8393 if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
8394 r = convert_from_reference (r);
8396 else
8397 r = build_x_indirect_ref (r, "unary *");
8398 return r;
8401 case NOP_EXPR:
8402 return build_nop
8403 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8404 RECUR (TREE_OPERAND (t, 0)));
8406 case CAST_EXPR:
8407 return build_functional_cast
8408 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8409 RECUR (TREE_OPERAND (t, 0)));
8411 case REINTERPRET_CAST_EXPR:
8412 return build_reinterpret_cast
8413 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8414 RECUR (TREE_OPERAND (t, 0)));
8416 case CONST_CAST_EXPR:
8417 return build_const_cast
8418 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8419 RECUR (TREE_OPERAND (t, 0)));
8421 case DYNAMIC_CAST_EXPR:
8422 return build_dynamic_cast
8423 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8424 RECUR (TREE_OPERAND (t, 0)));
8426 case STATIC_CAST_EXPR:
8427 return build_static_cast
8428 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8429 RECUR (TREE_OPERAND (t, 0)));
8431 case POSTDECREMENT_EXPR:
8432 case POSTINCREMENT_EXPR:
8433 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8434 args, complain, in_decl);
8435 return build_x_unary_op (TREE_CODE (t), op1);
8437 case PREDECREMENT_EXPR:
8438 case PREINCREMENT_EXPR:
8439 case NEGATE_EXPR:
8440 case BIT_NOT_EXPR:
8441 case ABS_EXPR:
8442 case TRUTH_NOT_EXPR:
8443 case CONVERT_EXPR: /* Unary + */
8444 case REALPART_EXPR:
8445 case IMAGPART_EXPR:
8446 return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
8448 case ADDR_EXPR:
8449 op1 = TREE_OPERAND (t, 0);
8450 if (TREE_CODE (op1) == SCOPE_REF)
8451 op1 = tsubst_qualified_id (op1, args, complain, in_decl,
8452 /*done=*/true, /*address_p=*/true);
8453 else
8454 op1 = tsubst_non_call_postfix_expression (op1, args, complain,
8455 in_decl);
8456 if (TREE_CODE (op1) == LABEL_DECL)
8457 return finish_label_address_expr (DECL_NAME (op1));
8458 return build_x_unary_op (ADDR_EXPR, op1);
8460 case PLUS_EXPR:
8461 case MINUS_EXPR:
8462 case MULT_EXPR:
8463 case TRUNC_DIV_EXPR:
8464 case CEIL_DIV_EXPR:
8465 case FLOOR_DIV_EXPR:
8466 case ROUND_DIV_EXPR:
8467 case EXACT_DIV_EXPR:
8468 case BIT_AND_EXPR:
8469 case BIT_IOR_EXPR:
8470 case BIT_XOR_EXPR:
8471 case TRUNC_MOD_EXPR:
8472 case FLOOR_MOD_EXPR:
8473 case TRUTH_ANDIF_EXPR:
8474 case TRUTH_ORIF_EXPR:
8475 case TRUTH_AND_EXPR:
8476 case TRUTH_OR_EXPR:
8477 case RSHIFT_EXPR:
8478 case LSHIFT_EXPR:
8479 case RROTATE_EXPR:
8480 case LROTATE_EXPR:
8481 case EQ_EXPR:
8482 case NE_EXPR:
8483 case MAX_EXPR:
8484 case MIN_EXPR:
8485 case LE_EXPR:
8486 case GE_EXPR:
8487 case LT_EXPR:
8488 case GT_EXPR:
8489 case MEMBER_REF:
8490 case DOTSTAR_EXPR:
8491 return build_x_binary_op
8492 (TREE_CODE (t),
8493 RECUR (TREE_OPERAND (t, 0)),
8494 RECUR (TREE_OPERAND (t, 1)),
8495 /*overloaded_p=*/NULL);
8497 case SCOPE_REF:
8498 return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
8499 /*address_p=*/false);
8500 case ARRAY_REF:
8501 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8502 args, complain, in_decl);
8503 return build_x_binary_op (ARRAY_REF, op1, RECUR (TREE_OPERAND (t, 1)),
8504 /*overloaded_p=*/NULL);
8506 case SIZEOF_EXPR:
8507 case ALIGNOF_EXPR:
8508 op1 = TREE_OPERAND (t, 0);
8509 if (!args)
8511 /* When there are no ARGS, we are trying to evaluate a
8512 non-dependent expression from the parser. Trying to do
8513 the substitutions may not work. */
8514 if (!TYPE_P (op1))
8515 op1 = TREE_TYPE (op1);
8517 else
8519 ++skip_evaluation;
8520 op1 = RECUR (op1);
8521 --skip_evaluation;
8523 if (TYPE_P (op1))
8524 return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
8525 else
8526 return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
8528 case MODOP_EXPR:
8530 tree r = build_x_modify_expr
8531 (RECUR (TREE_OPERAND (t, 0)),
8532 TREE_CODE (TREE_OPERAND (t, 1)),
8533 RECUR (TREE_OPERAND (t, 2)));
8534 /* TREE_NO_WARNING must be set if either the expression was
8535 parenthesized or it uses an operator such as >>= rather
8536 than plain assignment. In the former case, it was already
8537 set and must be copied. In the latter case,
8538 build_x_modify_expr sets it and it must not be reset
8539 here. */
8540 if (TREE_NO_WARNING (t))
8541 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
8542 return r;
8545 case ARROW_EXPR:
8546 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8547 args, complain, in_decl);
8548 /* Remember that there was a reference to this entity. */
8549 if (DECL_P (op1))
8550 mark_used (op1);
8551 return build_x_arrow (op1);
8553 case NEW_EXPR:
8554 return build_new
8555 (RECUR (TREE_OPERAND (t, 0)),
8556 RECUR (TREE_OPERAND (t, 1)),
8557 RECUR (TREE_OPERAND (t, 2)),
8558 RECUR (TREE_OPERAND (t, 3)),
8559 NEW_EXPR_USE_GLOBAL (t));
8561 case DELETE_EXPR:
8562 return delete_sanity
8563 (RECUR (TREE_OPERAND (t, 0)),
8564 RECUR (TREE_OPERAND (t, 1)),
8565 DELETE_EXPR_USE_VEC (t),
8566 DELETE_EXPR_USE_GLOBAL (t));
8568 case COMPOUND_EXPR:
8569 return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
8570 RECUR (TREE_OPERAND (t, 1)));
8572 case CALL_EXPR:
8574 tree function;
8575 tree call_args;
8576 bool qualified_p;
8577 bool koenig_p;
8579 function = TREE_OPERAND (t, 0);
8580 /* When we parsed the expression, we determined whether or
8581 not Koenig lookup should be performed. */
8582 koenig_p = KOENIG_LOOKUP_P (t);
8583 if (TREE_CODE (function) == SCOPE_REF)
8585 qualified_p = true;
8586 function = tsubst_qualified_id (function, args, complain, in_decl,
8587 /*done=*/false,
8588 /*address_p=*/false);
8590 else
8592 qualified_p = (TREE_CODE (function) == COMPONENT_REF
8593 && (TREE_CODE (TREE_OPERAND (function, 1))
8594 == SCOPE_REF));
8595 function = tsubst_copy_and_build (function, args, complain,
8596 in_decl,
8597 !qualified_p);
8598 if (BASELINK_P (function))
8599 qualified_p = true;
8602 call_args = RECUR (TREE_OPERAND (t, 1));
8604 /* We do not perform argument-dependent lookup if normal
8605 lookup finds a non-function, in accordance with the
8606 expected resolution of DR 218. */
8607 if (koenig_p
8608 && ((is_overloaded_fn (function)
8609 /* If lookup found a member function, the Koenig lookup is
8610 not appropriate, even if an unqualified-name was used
8611 to denote the function. */
8612 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
8613 || TREE_CODE (function) == IDENTIFIER_NODE))
8614 function = perform_koenig_lookup (function, call_args);
8616 if (TREE_CODE (function) == IDENTIFIER_NODE)
8618 unqualified_name_lookup_error (function);
8619 return error_mark_node;
8622 /* Remember that there was a reference to this entity. */
8623 if (DECL_P (function))
8624 mark_used (function);
8626 if (TREE_CODE (function) == OFFSET_REF)
8627 return build_offset_ref_call_from_tree (function, call_args);
8628 if (TREE_CODE (function) == COMPONENT_REF)
8630 if (!BASELINK_P (TREE_OPERAND (function, 1)))
8631 return finish_call_expr (function, call_args,
8632 /*disallow_virtual=*/false,
8633 /*koenig_p=*/false);
8634 else
8635 return (build_new_method_call
8636 (TREE_OPERAND (function, 0),
8637 TREE_OPERAND (function, 1),
8638 call_args, NULL_TREE,
8639 qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL));
8641 return finish_call_expr (function, call_args,
8642 /*disallow_virtual=*/qualified_p,
8643 koenig_p);
8646 case COND_EXPR:
8647 return build_x_conditional_expr
8648 (RECUR (TREE_OPERAND (t, 0)),
8649 RECUR (TREE_OPERAND (t, 1)),
8650 RECUR (TREE_OPERAND (t, 2)));
8652 case PSEUDO_DTOR_EXPR:
8653 return finish_pseudo_destructor_expr
8654 (RECUR (TREE_OPERAND (t, 0)),
8655 RECUR (TREE_OPERAND (t, 1)),
8656 RECUR (TREE_OPERAND (t, 2)));
8658 case TREE_LIST:
8660 tree purpose, value, chain;
8662 if (t == void_list_node)
8663 return t;
8665 purpose = TREE_PURPOSE (t);
8666 if (purpose)
8667 purpose = RECUR (purpose);
8668 value = TREE_VALUE (t);
8669 if (value)
8670 value = RECUR (value);
8671 chain = TREE_CHAIN (t);
8672 if (chain && chain != void_type_node)
8673 chain = RECUR (chain);
8674 if (purpose == TREE_PURPOSE (t)
8675 && value == TREE_VALUE (t)
8676 && chain == TREE_CHAIN (t))
8677 return t;
8678 return tree_cons (purpose, value, chain);
8681 case COMPONENT_REF:
8683 tree object;
8684 tree member;
8686 object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8687 args, complain, in_decl);
8688 /* Remember that there was a reference to this entity. */
8689 if (DECL_P (object))
8690 mark_used (object);
8692 member = TREE_OPERAND (t, 1);
8693 if (BASELINK_P (member))
8694 member = tsubst_baselink (member,
8695 non_reference (TREE_TYPE (object)),
8696 args, complain, in_decl);
8697 else
8698 member = tsubst_copy (member, args, complain, in_decl);
8700 if (member == error_mark_node)
8701 return error_mark_node;
8702 else if (!CLASS_TYPE_P (TREE_TYPE (object)))
8704 if (TREE_CODE (member) == BIT_NOT_EXPR)
8705 return finish_pseudo_destructor_expr (object,
8706 NULL_TREE,
8707 TREE_TYPE (object));
8708 else if (TREE_CODE (member) == SCOPE_REF
8709 && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
8710 return finish_pseudo_destructor_expr (object,
8711 object,
8712 TREE_TYPE (object));
8714 else if (TREE_CODE (member) == SCOPE_REF
8715 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
8717 tree tmpl;
8718 tree args;
8720 /* Lookup the template functions now that we know what the
8721 scope is. */
8722 tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
8723 args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
8724 member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
8725 /*is_type_p=*/false,
8726 /*complain=*/false);
8727 if (BASELINK_P (member))
8729 BASELINK_FUNCTIONS (member)
8730 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
8731 args);
8732 member = (adjust_result_of_qualified_name_lookup
8733 (member, BINFO_TYPE (BASELINK_BINFO (member)),
8734 TREE_TYPE (object)));
8736 else
8738 qualified_name_lookup_error (TREE_TYPE (object), tmpl,
8739 member);
8740 return error_mark_node;
8743 else if (TREE_CODE (member) == SCOPE_REF
8744 && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
8745 && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
8747 if (complain & tf_error)
8749 if (TYPE_P (TREE_OPERAND (member, 0)))
8750 error ("%qT is not a class or namespace",
8751 TREE_OPERAND (member, 0));
8752 else
8753 error ("%qD is not a class or namespace",
8754 TREE_OPERAND (member, 0));
8756 return error_mark_node;
8758 else if (TREE_CODE (member) == FIELD_DECL)
8759 return finish_non_static_data_member (member, object, NULL_TREE);
8761 return finish_class_member_access_expr (object, member);
8764 case THROW_EXPR:
8765 return build_throw
8766 (RECUR (TREE_OPERAND (t, 0)));
8768 case CONSTRUCTOR:
8770 tree r;
8771 tree elts;
8772 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8773 bool purpose_p;
8775 /* digest_init will do the wrong thing if we let it. */
8776 if (type && TYPE_PTRMEMFUNC_P (type))
8777 return t;
8779 r = NULL_TREE;
8780 /* We do not want to process the purpose of aggregate
8781 initializers as they are identifier nodes which will be
8782 looked up by digest_init. */
8783 purpose_p = !(type && IS_AGGR_TYPE (type));
8784 for (elts = CONSTRUCTOR_ELTS (t);
8785 elts;
8786 elts = TREE_CHAIN (elts))
8788 tree purpose = TREE_PURPOSE (elts);
8789 tree value = TREE_VALUE (elts);
8791 if (purpose && purpose_p)
8792 purpose = RECUR (purpose);
8793 value = RECUR (value);
8794 r = tree_cons (purpose, value, r);
8797 r = build_constructor (NULL_TREE, nreverse (r));
8798 TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
8800 if (type)
8801 return digest_init (type, r, 0);
8802 return r;
8805 case TYPEID_EXPR:
8807 tree operand_0 = RECUR (TREE_OPERAND (t, 0));
8808 if (TYPE_P (operand_0))
8809 return get_typeid (operand_0);
8810 return build_typeid (operand_0);
8813 case VAR_DECL:
8814 if (!args)
8815 return t;
8816 /* Fall through */
8818 case PARM_DECL:
8820 tree r = tsubst_copy (t, args, complain, in_decl);
8822 if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
8823 /* If the original type was a reference, we'll be wrapped in
8824 the appropriate INDIRECT_REF. */
8825 r = convert_from_reference (r);
8826 return r;
8829 case VA_ARG_EXPR:
8830 return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
8831 tsubst_copy (TREE_TYPE (t), args, complain,
8832 in_decl));
8834 case OFFSETOF_EXPR:
8835 return fold_offsetof (RECUR (TREE_OPERAND (t, 0)));
8837 case STMT_EXPR:
8839 tree old_stmt_expr = cur_stmt_expr;
8840 tree stmt_expr = begin_stmt_expr ();
8842 cur_stmt_expr = stmt_expr;
8843 tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl);
8844 stmt_expr = finish_stmt_expr (stmt_expr, false);
8845 cur_stmt_expr = old_stmt_expr;
8847 return stmt_expr;
8850 case CONST_DECL:
8851 t = tsubst_copy (t, args, complain, in_decl);
8852 /* As in finish_id_expression, we resolve enumeration constants
8853 to their underlying values. */
8854 if (TREE_CODE (t) == CONST_DECL)
8855 return DECL_INITIAL (t);
8856 return t;
8858 default:
8859 return tsubst_copy (t, args, complain, in_decl);
8862 #undef RECUR
8865 /* Verify that the instantiated ARGS are valid. For type arguments,
8866 make sure that the type's linkage is ok. For non-type arguments,
8867 make sure they are constants if they are integral or enumerations.
8868 Emit an error under control of COMPLAIN, and return TRUE on error. */
8870 static bool
8871 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
8873 int ix, len = DECL_NTPARMS (tmpl);
8874 bool result = false;
8875 bool error_p = complain & tf_error;
8877 for (ix = 0; ix != len; ix++)
8879 tree t = TREE_VEC_ELT (args, ix);
8881 if (TYPE_P (t))
8883 /* [basic.link]: A name with no linkage (notably, the name
8884 of a class or enumeration declared in a local scope)
8885 shall not be used to declare an entity with linkage.
8886 This implies that names with no linkage cannot be used as
8887 template arguments. */
8888 tree nt = no_linkage_check (t, /*relaxed_p=*/false);
8890 if (nt)
8892 if (TYPE_ANONYMOUS_P (nt))
8893 error ("%qT is/uses anonymous type", t);
8894 else
8895 error ("%qT uses local type %qT", t, nt);
8896 result = true;
8897 error_p = true;
8899 /* In order to avoid all sorts of complications, we do not
8900 allow variably-modified types as template arguments. */
8901 else if (variably_modified_type_p (t, NULL_TREE))
8903 if (complain & tf_error)
8904 error ("%qT is a variably modified type", t);
8905 result = true;
8908 /* A non-type argument of integral or enumerated type must be a
8909 constant. */
8910 else if (TREE_TYPE (t)
8911 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
8912 && !TREE_CONSTANT (t))
8914 if (complain & tf_error)
8915 error ("integral expression %qE is not constant", t);
8916 result = true;
8919 if (result && error_p)
8920 error (" trying to instantiate %qD", tmpl);
8921 return result;
8924 /* Instantiate the indicated variable or function template TMPL with
8925 the template arguments in TARG_PTR. */
8927 tree
8928 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
8930 tree fndecl;
8931 tree gen_tmpl;
8932 tree spec;
8934 if (tmpl == error_mark_node)
8935 return error_mark_node;
8937 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
8939 /* If this function is a clone, handle it specially. */
8940 if (DECL_CLONED_FUNCTION_P (tmpl))
8942 tree spec;
8943 tree clone;
8945 spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
8946 complain);
8947 if (spec == error_mark_node)
8948 return error_mark_node;
8950 /* Look for the clone. */
8951 FOR_EACH_CLONE (clone, spec)
8952 if (DECL_NAME (clone) == DECL_NAME (tmpl))
8953 return clone;
8954 /* We should always have found the clone by now. */
8955 gcc_unreachable ();
8956 return NULL_TREE;
8959 /* Check to see if we already have this specialization. */
8960 spec = retrieve_specialization (tmpl, targ_ptr,
8961 /*class_specializations_p=*/false);
8962 if (spec != NULL_TREE)
8963 return spec;
8965 gen_tmpl = most_general_template (tmpl);
8966 if (tmpl != gen_tmpl)
8968 /* The TMPL is a partial instantiation. To get a full set of
8969 arguments we must add the arguments used to perform the
8970 partial instantiation. */
8971 targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
8972 targ_ptr);
8974 /* Check to see if we already have this specialization. */
8975 spec = retrieve_specialization (gen_tmpl, targ_ptr,
8976 /*class_specializations_p=*/false);
8977 if (spec != NULL_TREE)
8978 return spec;
8981 if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
8982 complain))
8983 return error_mark_node;
8985 /* We are building a FUNCTION_DECL, during which the access of its
8986 parameters and return types have to be checked. However this
8987 FUNCTION_DECL which is the desired context for access checking
8988 is not built yet. We solve this chicken-and-egg problem by
8989 deferring all checks until we have the FUNCTION_DECL. */
8990 push_deferring_access_checks (dk_deferred);
8992 /* Substitute template parameters. */
8993 fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
8994 targ_ptr, complain, gen_tmpl);
8996 /* Now we know the specialization, compute access previously
8997 deferred. */
8998 push_access_scope (fndecl);
8999 perform_deferred_access_checks ();
9000 pop_access_scope (fndecl);
9001 pop_deferring_access_checks ();
9003 /* The DECL_TI_TEMPLATE should always be the immediate parent
9004 template, not the most general template. */
9005 DECL_TI_TEMPLATE (fndecl) = tmpl;
9007 /* If we've just instantiated the main entry point for a function,
9008 instantiate all the alternate entry points as well. We do this
9009 by cloning the instantiation of the main entry point, not by
9010 instantiating the template clones. */
9011 if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
9012 clone_function_decl (fndecl, /*update_method_vec_p=*/0);
9014 return fndecl;
9017 /* The FN is a TEMPLATE_DECL for a function. The ARGS are the
9018 arguments that are being used when calling it. TARGS is a vector
9019 into which the deduced template arguments are placed.
9021 Return zero for success, 2 for an incomplete match that doesn't resolve
9022 all the types, and 1 for complete failure. An error message will be
9023 printed only for an incomplete match.
9025 If FN is a conversion operator, or we are trying to produce a specific
9026 specialization, RETURN_TYPE is the return type desired.
9028 The EXPLICIT_TARGS are explicit template arguments provided via a
9029 template-id.
9031 The parameter STRICT is one of:
9033 DEDUCE_CALL:
9034 We are deducing arguments for a function call, as in
9035 [temp.deduct.call].
9037 DEDUCE_CONV:
9038 We are deducing arguments for a conversion function, as in
9039 [temp.deduct.conv].
9041 DEDUCE_EXACT:
9042 We are deducing arguments when doing an explicit instantiation
9043 as in [temp.explicit], when determining an explicit specialization
9044 as in [temp.expl.spec], or when taking the address of a function
9045 template, as in [temp.deduct.funcaddr].
9047 LEN is the number of parms to consider before returning success, or -1
9048 for all. This is used in partial ordering to avoid comparing parms for
9049 which no actual argument was passed, since they are not considered in
9050 overload resolution (and are explicitly excluded from consideration in
9051 partial ordering in [temp.func.order]/6). */
9054 fn_type_unification (tree fn,
9055 tree explicit_targs,
9056 tree targs,
9057 tree args,
9058 tree return_type,
9059 unification_kind_t strict,
9060 int len)
9062 tree parms;
9063 tree fntype;
9064 int result;
9066 gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
9068 fntype = TREE_TYPE (fn);
9069 if (explicit_targs)
9071 /* [temp.deduct]
9073 The specified template arguments must match the template
9074 parameters in kind (i.e., type, nontype, template), and there
9075 must not be more arguments than there are parameters;
9076 otherwise type deduction fails.
9078 Nontype arguments must match the types of the corresponding
9079 nontype template parameters, or must be convertible to the
9080 types of the corresponding nontype parameters as specified in
9081 _temp.arg.nontype_, otherwise type deduction fails.
9083 All references in the function type of the function template
9084 to the corresponding template parameters are replaced by the
9085 specified template argument values. If a substitution in a
9086 template parameter or in the function type of the function
9087 template results in an invalid type, type deduction fails. */
9088 int i;
9089 tree converted_args;
9090 bool incomplete;
9092 if (explicit_targs == error_mark_node)
9093 return 1;
9095 converted_args
9096 = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
9097 explicit_targs, NULL_TREE, tf_none,
9098 /*require_all_arguments=*/0));
9099 if (converted_args == error_mark_node)
9100 return 1;
9102 /* Substitute the explicit args into the function type. This is
9103 necessary so that, for instance, explicitly declared function
9104 arguments can match null pointed constants. If we were given
9105 an incomplete set of explicit args, we must not do semantic
9106 processing during substitution as we could create partial
9107 instantiations. */
9108 incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
9109 processing_template_decl += incomplete;
9110 fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
9111 processing_template_decl -= incomplete;
9113 if (fntype == error_mark_node)
9114 return 1;
9116 /* Place the explicitly specified arguments in TARGS. */
9117 for (i = NUM_TMPL_ARGS (converted_args); i--;)
9118 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
9121 parms = TYPE_ARG_TYPES (fntype);
9122 /* Never do unification on the 'this' parameter. */
9123 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
9124 parms = TREE_CHAIN (parms);
9126 if (return_type)
9128 /* We've been given a return type to match, prepend it. */
9129 parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
9130 args = tree_cons (NULL_TREE, return_type, args);
9131 if (len >= 0)
9132 ++len;
9135 /* We allow incomplete unification without an error message here
9136 because the standard doesn't seem to explicitly prohibit it. Our
9137 callers must be ready to deal with unification failures in any
9138 event. */
9139 result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
9140 targs, parms, args, /*subr=*/0,
9141 strict, /*allow_incomplete*/1, len);
9143 if (result == 0)
9144 /* All is well so far. Now, check:
9146 [temp.deduct]
9148 When all template arguments have been deduced, all uses of
9149 template parameters in nondeduced contexts are replaced with
9150 the corresponding deduced argument values. If the
9151 substitution results in an invalid type, as described above,
9152 type deduction fails. */
9153 if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
9154 == error_mark_node)
9155 return 1;
9157 return result;
9160 /* Adjust types before performing type deduction, as described in
9161 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
9162 sections are symmetric. PARM is the type of a function parameter
9163 or the return type of the conversion function. ARG is the type of
9164 the argument passed to the call, or the type of the value
9165 initialized with the result of the conversion function. */
9167 static int
9168 maybe_adjust_types_for_deduction (unification_kind_t strict,
9169 tree* parm,
9170 tree* arg)
9172 int result = 0;
9174 switch (strict)
9176 case DEDUCE_CALL:
9177 break;
9179 case DEDUCE_CONV:
9181 /* Swap PARM and ARG throughout the remainder of this
9182 function; the handling is precisely symmetric since PARM
9183 will initialize ARG rather than vice versa. */
9184 tree* temp = parm;
9185 parm = arg;
9186 arg = temp;
9187 break;
9190 case DEDUCE_EXACT:
9191 /* There is nothing to do in this case. */
9192 return 0;
9194 default:
9195 gcc_unreachable ();
9198 if (TREE_CODE (*parm) != REFERENCE_TYPE)
9200 /* [temp.deduct.call]
9202 If P is not a reference type:
9204 --If A is an array type, the pointer type produced by the
9205 array-to-pointer standard conversion (_conv.array_) is
9206 used in place of A for type deduction; otherwise,
9208 --If A is a function type, the pointer type produced by
9209 the function-to-pointer standard conversion
9210 (_conv.func_) is used in place of A for type deduction;
9211 otherwise,
9213 --If A is a cv-qualified type, the top level
9214 cv-qualifiers of A's type are ignored for type
9215 deduction. */
9216 if (TREE_CODE (*arg) == ARRAY_TYPE)
9217 *arg = build_pointer_type (TREE_TYPE (*arg));
9218 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
9219 *arg = build_pointer_type (*arg);
9220 else
9221 *arg = TYPE_MAIN_VARIANT (*arg);
9224 /* [temp.deduct.call]
9226 If P is a cv-qualified type, the top level cv-qualifiers
9227 of P's type are ignored for type deduction. If P is a
9228 reference type, the type referred to by P is used for
9229 type deduction. */
9230 *parm = TYPE_MAIN_VARIANT (*parm);
9231 if (TREE_CODE (*parm) == REFERENCE_TYPE)
9233 *parm = TREE_TYPE (*parm);
9234 result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9237 /* DR 322. For conversion deduction, remove a reference type on parm
9238 too (which has been swapped into ARG). */
9239 if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
9240 *arg = TREE_TYPE (*arg);
9242 return result;
9245 /* Most parms like fn_type_unification.
9247 If SUBR is 1, we're being called recursively (to unify the
9248 arguments of a function or method parameter of a function
9249 template). */
9251 static int
9252 type_unification_real (tree tparms,
9253 tree targs,
9254 tree xparms,
9255 tree xargs,
9256 int subr,
9257 unification_kind_t strict,
9258 int allow_incomplete,
9259 int xlen)
9261 tree parm, arg;
9262 int i;
9263 int ntparms = TREE_VEC_LENGTH (tparms);
9264 int sub_strict;
9265 int saw_undeduced = 0;
9266 tree parms, args;
9267 int len;
9269 gcc_assert (TREE_CODE (tparms) == TREE_VEC);
9270 gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
9271 gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
9272 gcc_assert (ntparms > 0);
9274 switch (strict)
9276 case DEDUCE_CALL:
9277 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
9278 | UNIFY_ALLOW_DERIVED);
9279 break;
9281 case DEDUCE_CONV:
9282 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
9283 break;
9285 case DEDUCE_EXACT:
9286 sub_strict = UNIFY_ALLOW_NONE;
9287 break;
9289 default:
9290 gcc_unreachable ();
9293 if (xlen == 0)
9294 return 0;
9296 again:
9297 parms = xparms;
9298 args = xargs;
9299 len = xlen;
9301 while (parms
9302 && parms != void_list_node
9303 && args
9304 && args != void_list_node)
9306 parm = TREE_VALUE (parms);
9307 parms = TREE_CHAIN (parms);
9308 arg = TREE_VALUE (args);
9309 args = TREE_CHAIN (args);
9311 if (arg == error_mark_node)
9312 return 1;
9313 if (arg == unknown_type_node)
9314 /* We can't deduce anything from this, but we might get all the
9315 template args from other function args. */
9316 continue;
9318 /* Conversions will be performed on a function argument that
9319 corresponds with a function parameter that contains only
9320 non-deducible template parameters and explicitly specified
9321 template parameters. */
9322 if (!uses_template_parms (parm))
9324 tree type;
9326 if (!TYPE_P (arg))
9327 type = TREE_TYPE (arg);
9328 else
9329 type = arg;
9331 if (strict == DEDUCE_EXACT)
9333 if (same_type_p (parm, type))
9334 continue;
9336 else
9337 /* It might work; we shouldn't check now, because we might
9338 get into infinite recursion. Overload resolution will
9339 handle it. */
9340 continue;
9342 return 1;
9345 if (!TYPE_P (arg))
9347 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
9348 if (type_unknown_p (arg))
9350 /* [temp.deduct.type] A template-argument can be deduced from
9351 a pointer to function or pointer to member function
9352 argument if the set of overloaded functions does not
9353 contain function templates and at most one of a set of
9354 overloaded functions provides a unique match. */
9356 if (resolve_overloaded_unification
9357 (tparms, targs, parm, arg, strict, sub_strict)
9358 != 0)
9359 return 1;
9360 continue;
9362 arg = TREE_TYPE (arg);
9363 if (arg == error_mark_node)
9364 return 1;
9368 int arg_strict = sub_strict;
9370 if (!subr)
9371 arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9373 if (unify (tparms, targs, parm, arg, arg_strict))
9374 return 1;
9377 /* Are we done with the interesting parms? */
9378 if (--len == 0)
9379 goto done;
9381 /* Fail if we've reached the end of the parm list, and more args
9382 are present, and the parm list isn't variadic. */
9383 if (args && args != void_list_node && parms == void_list_node)
9384 return 1;
9385 /* Fail if parms are left and they don't have default values. */
9386 if (parms
9387 && parms != void_list_node
9388 && TREE_PURPOSE (parms) == NULL_TREE)
9389 return 1;
9391 done:
9392 if (!subr)
9393 for (i = 0; i < ntparms; i++)
9394 if (TREE_VEC_ELT (targs, i) == NULL_TREE)
9396 tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
9398 /* If this is an undeduced nontype parameter that depends on
9399 a type parameter, try another pass; its type may have been
9400 deduced from a later argument than the one from which
9401 this parameter can be deduced. */
9402 if (TREE_CODE (tparm) == PARM_DECL
9403 && uses_template_parms (TREE_TYPE (tparm))
9404 && !saw_undeduced++)
9405 goto again;
9407 if (!allow_incomplete)
9408 error ("incomplete type unification");
9409 return 2;
9411 return 0;
9414 /* Subroutine of type_unification_real. Args are like the variables at the
9415 call site. ARG is an overloaded function (or template-id); we try
9416 deducing template args from each of the overloads, and if only one
9417 succeeds, we go with that. Modifies TARGS and returns 0 on success. */
9419 static int
9420 resolve_overloaded_unification (tree tparms,
9421 tree targs,
9422 tree parm,
9423 tree arg,
9424 unification_kind_t strict,
9425 int sub_strict)
9427 tree tempargs = copy_node (targs);
9428 int good = 0;
9429 bool addr_p;
9431 if (TREE_CODE (arg) == ADDR_EXPR)
9433 arg = TREE_OPERAND (arg, 0);
9434 addr_p = true;
9436 else
9437 addr_p = false;
9439 if (TREE_CODE (arg) == COMPONENT_REF)
9440 /* Handle `&x' where `x' is some static or non-static member
9441 function name. */
9442 arg = TREE_OPERAND (arg, 1);
9444 if (TREE_CODE (arg) == OFFSET_REF)
9445 arg = TREE_OPERAND (arg, 1);
9447 /* Strip baselink information. */
9448 if (BASELINK_P (arg))
9449 arg = BASELINK_FUNCTIONS (arg);
9451 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
9453 /* If we got some explicit template args, we need to plug them into
9454 the affected templates before we try to unify, in case the
9455 explicit args will completely resolve the templates in question. */
9457 tree expl_subargs = TREE_OPERAND (arg, 1);
9458 arg = TREE_OPERAND (arg, 0);
9460 for (; arg; arg = OVL_NEXT (arg))
9462 tree fn = OVL_CURRENT (arg);
9463 tree subargs, elem;
9465 if (TREE_CODE (fn) != TEMPLATE_DECL)
9466 continue;
9468 subargs = get_bindings_overload (fn, DECL_TEMPLATE_RESULT (fn),
9469 expl_subargs);
9470 if (subargs)
9472 elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
9473 good += try_one_overload (tparms, targs, tempargs, parm,
9474 elem, strict, sub_strict, addr_p);
9478 else
9480 gcc_assert (TREE_CODE (arg) == OVERLOAD
9481 || TREE_CODE (arg) == FUNCTION_DECL);
9483 for (; arg; arg = OVL_NEXT (arg))
9484 good += try_one_overload (tparms, targs, tempargs, parm,
9485 TREE_TYPE (OVL_CURRENT (arg)),
9486 strict, sub_strict, addr_p);
9489 /* [temp.deduct.type] A template-argument can be deduced from a pointer
9490 to function or pointer to member function argument if the set of
9491 overloaded functions does not contain function templates and at most
9492 one of a set of overloaded functions provides a unique match.
9494 So if we found multiple possibilities, we return success but don't
9495 deduce anything. */
9497 if (good == 1)
9499 int i = TREE_VEC_LENGTH (targs);
9500 for (; i--; )
9501 if (TREE_VEC_ELT (tempargs, i))
9502 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
9504 if (good)
9505 return 0;
9507 return 1;
9510 /* Subroutine of resolve_overloaded_unification; does deduction for a single
9511 overload. Fills TARGS with any deduced arguments, or error_mark_node if
9512 different overloads deduce different arguments for a given parm.
9513 ADDR_P is true if the expression for which deduction is being
9514 performed was of the form "& fn" rather than simply "fn".
9516 Returns 1 on success. */
9518 static int
9519 try_one_overload (tree tparms,
9520 tree orig_targs,
9521 tree targs,
9522 tree parm,
9523 tree arg,
9524 unification_kind_t strict,
9525 int sub_strict,
9526 bool addr_p)
9528 int nargs;
9529 tree tempargs;
9530 int i;
9532 /* [temp.deduct.type] A template-argument can be deduced from a pointer
9533 to function or pointer to member function argument if the set of
9534 overloaded functions does not contain function templates and at most
9535 one of a set of overloaded functions provides a unique match.
9537 So if this is a template, just return success. */
9539 if (uses_template_parms (arg))
9540 return 1;
9542 if (TREE_CODE (arg) == METHOD_TYPE)
9543 arg = build_ptrmemfunc_type (build_pointer_type (arg));
9544 else if (addr_p)
9545 arg = build_pointer_type (arg);
9547 sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9549 /* We don't copy orig_targs for this because if we have already deduced
9550 some template args from previous args, unify would complain when we
9551 try to deduce a template parameter for the same argument, even though
9552 there isn't really a conflict. */
9553 nargs = TREE_VEC_LENGTH (targs);
9554 tempargs = make_tree_vec (nargs);
9556 if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
9557 return 0;
9559 /* First make sure we didn't deduce anything that conflicts with
9560 explicitly specified args. */
9561 for (i = nargs; i--; )
9563 tree elt = TREE_VEC_ELT (tempargs, i);
9564 tree oldelt = TREE_VEC_ELT (orig_targs, i);
9566 if (elt == NULL_TREE)
9567 continue;
9568 else if (uses_template_parms (elt))
9570 /* Since we're unifying against ourselves, we will fill in template
9571 args used in the function parm list with our own template parms.
9572 Discard them. */
9573 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
9574 continue;
9576 else if (oldelt && ! template_args_equal (oldelt, elt))
9577 return 0;
9580 for (i = nargs; i--; )
9582 tree elt = TREE_VEC_ELT (tempargs, i);
9584 if (elt)
9585 TREE_VEC_ELT (targs, i) = elt;
9588 return 1;
9591 /* Verify that nondeduce template argument agrees with the type
9592 obtained from argument deduction. Return nonzero if the
9593 verification fails.
9595 For example:
9597 struct A { typedef int X; };
9598 template <class T, class U> struct C {};
9599 template <class T> struct C<T, typename T::X> {};
9601 Then with the instantiation `C<A, int>', we can deduce that
9602 `T' is `A' but unify () does not check whether `typename T::X'
9603 is `int'. This function ensure that they agree.
9605 TARGS, PARMS are the same as the arguments of unify.
9606 ARGS contains template arguments from all levels. */
9608 static int
9609 verify_class_unification (tree targs, tree parms, tree args)
9611 parms = tsubst (parms, add_outermost_template_args (args, targs),
9612 tf_none, NULL_TREE);
9613 if (parms == error_mark_node)
9614 return 1;
9616 return !comp_template_args (parms, INNERMOST_TEMPLATE_ARGS (args));
9619 /* PARM is a template class (perhaps with unbound template
9620 parameters). ARG is a fully instantiated type. If ARG can be
9621 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
9622 TARGS are as for unify. */
9624 static tree
9625 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
9627 tree copy_of_targs;
9629 if (!CLASSTYPE_TEMPLATE_INFO (arg)
9630 || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
9631 != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
9632 return NULL_TREE;
9634 /* We need to make a new template argument vector for the call to
9635 unify. If we used TARGS, we'd clutter it up with the result of
9636 the attempted unification, even if this class didn't work out.
9637 We also don't want to commit ourselves to all the unifications
9638 we've already done, since unification is supposed to be done on
9639 an argument-by-argument basis. In other words, consider the
9640 following pathological case:
9642 template <int I, int J, int K>
9643 struct S {};
9645 template <int I, int J>
9646 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
9648 template <int I, int J, int K>
9649 void f(S<I, J, K>, S<I, I, I>);
9651 void g() {
9652 S<0, 0, 0> s0;
9653 S<0, 1, 2> s2;
9655 f(s0, s2);
9658 Now, by the time we consider the unification involving `s2', we
9659 already know that we must have `f<0, 0, 0>'. But, even though
9660 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
9661 because there are two ways to unify base classes of S<0, 1, 2>
9662 with S<I, I, I>. If we kept the already deduced knowledge, we
9663 would reject the possibility I=1. */
9664 copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
9666 /* If unification failed, we're done. */
9667 if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
9668 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
9669 return NULL_TREE;
9671 return arg;
9674 /* Given a template type PARM and a class type ARG, find the unique
9675 base type in ARG that is an instance of PARM. We do not examine
9676 ARG itself; only its base-classes. If there is not exactly one
9677 appropriate base class, return NULL_TREE. PARM may be the type of
9678 a partial specialization, as well as a plain template type. Used
9679 by unify. */
9681 static tree
9682 get_template_base (tree tparms, tree targs, tree parm, tree arg)
9684 tree rval = NULL_TREE;
9685 tree binfo;
9687 gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
9689 binfo = TYPE_BINFO (complete_type (arg));
9690 if (!binfo)
9691 /* The type could not be completed. */
9692 return NULL_TREE;
9694 /* Walk in inheritance graph order. The search order is not
9695 important, and this avoids multiple walks of virtual bases. */
9696 for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
9698 tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
9700 if (r)
9702 /* If there is more than one satisfactory baseclass, then:
9704 [temp.deduct.call]
9706 If they yield more than one possible deduced A, the type
9707 deduction fails.
9709 applies. */
9710 if (rval && !same_type_p (r, rval))
9711 return NULL_TREE;
9713 rval = r;
9717 return rval;
9720 /* Returns the level of DECL, which declares a template parameter. */
9722 static int
9723 template_decl_level (tree decl)
9725 switch (TREE_CODE (decl))
9727 case TYPE_DECL:
9728 case TEMPLATE_DECL:
9729 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
9731 case PARM_DECL:
9732 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
9734 default:
9735 gcc_unreachable ();
9737 return 0;
9740 /* Decide whether ARG can be unified with PARM, considering only the
9741 cv-qualifiers of each type, given STRICT as documented for unify.
9742 Returns nonzero iff the unification is OK on that basis. */
9744 static int
9745 check_cv_quals_for_unify (int strict, tree arg, tree parm)
9747 int arg_quals = cp_type_quals (arg);
9748 int parm_quals = cp_type_quals (parm);
9750 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
9751 && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
9753 /* Although a CVR qualifier is ignored when being applied to a
9754 substituted template parameter ([8.3.2]/1 for example), that
9755 does not apply during deduction [14.8.2.4]/1, (even though
9756 that is not explicitly mentioned, [14.8.2.4]/9 indicates
9757 this). Except when we're allowing additional CV qualifiers
9758 at the outer level [14.8.2.1]/3,1st bullet. */
9759 if ((TREE_CODE (arg) == REFERENCE_TYPE
9760 || TREE_CODE (arg) == FUNCTION_TYPE
9761 || TREE_CODE (arg) == METHOD_TYPE)
9762 && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
9763 return 0;
9765 if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
9766 && (parm_quals & TYPE_QUAL_RESTRICT))
9767 return 0;
9770 if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
9771 && (arg_quals & parm_quals) != parm_quals)
9772 return 0;
9774 if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
9775 && (parm_quals & arg_quals) != arg_quals)
9776 return 0;
9778 return 1;
9781 /* Takes parameters as for type_unification. Returns 0 if the
9782 type deduction succeeds, 1 otherwise. The parameter STRICT is a
9783 bitwise or of the following flags:
9785 UNIFY_ALLOW_NONE:
9786 Require an exact match between PARM and ARG.
9787 UNIFY_ALLOW_MORE_CV_QUAL:
9788 Allow the deduced ARG to be more cv-qualified (by qualification
9789 conversion) than ARG.
9790 UNIFY_ALLOW_LESS_CV_QUAL:
9791 Allow the deduced ARG to be less cv-qualified than ARG.
9792 UNIFY_ALLOW_DERIVED:
9793 Allow the deduced ARG to be a template base class of ARG,
9794 or a pointer to a template base class of the type pointed to by
9795 ARG.
9796 UNIFY_ALLOW_INTEGER:
9797 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
9798 case for more information.
9799 UNIFY_ALLOW_OUTER_LEVEL:
9800 This is the outermost level of a deduction. Used to determine validity
9801 of qualification conversions. A valid qualification conversion must
9802 have const qualified pointers leading up to the inner type which
9803 requires additional CV quals, except at the outer level, where const
9804 is not required [conv.qual]. It would be normal to set this flag in
9805 addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
9806 UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
9807 This is the outermost level of a deduction, and PARM can be more CV
9808 qualified at this point.
9809 UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
9810 This is the outermost level of a deduction, and PARM can be less CV
9811 qualified at this point. */
9813 static int
9814 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
9816 int idx;
9817 tree targ;
9818 tree tparm;
9819 int strict_in = strict;
9821 /* I don't think this will do the right thing with respect to types.
9822 But the only case I've seen it in so far has been array bounds, where
9823 signedness is the only information lost, and I think that will be
9824 okay. */
9825 while (TREE_CODE (parm) == NOP_EXPR)
9826 parm = TREE_OPERAND (parm, 0);
9828 if (arg == error_mark_node)
9829 return 1;
9830 if (arg == unknown_type_node)
9831 /* We can't deduce anything from this, but we might get all the
9832 template args from other function args. */
9833 return 0;
9835 /* If PARM uses template parameters, then we can't bail out here,
9836 even if ARG == PARM, since we won't record unifications for the
9837 template parameters. We might need them if we're trying to
9838 figure out which of two things is more specialized. */
9839 if (arg == parm && !uses_template_parms (parm))
9840 return 0;
9842 /* Immediately reject some pairs that won't unify because of
9843 cv-qualification mismatches. */
9844 if (TREE_CODE (arg) == TREE_CODE (parm)
9845 && TYPE_P (arg)
9846 /* It is the elements of the array which hold the cv quals of an array
9847 type, and the elements might be template type parms. We'll check
9848 when we recurse. */
9849 && TREE_CODE (arg) != ARRAY_TYPE
9850 /* We check the cv-qualifiers when unifying with template type
9851 parameters below. We want to allow ARG `const T' to unify with
9852 PARM `T' for example, when computing which of two templates
9853 is more specialized, for example. */
9854 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
9855 && !check_cv_quals_for_unify (strict_in, arg, parm))
9856 return 1;
9858 if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
9859 && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
9860 strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
9861 strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
9862 strict &= ~UNIFY_ALLOW_DERIVED;
9863 strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9864 strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
9866 switch (TREE_CODE (parm))
9868 case TYPENAME_TYPE:
9869 case SCOPE_REF:
9870 case UNBOUND_CLASS_TEMPLATE:
9871 /* In a type which contains a nested-name-specifier, template
9872 argument values cannot be deduced for template parameters used
9873 within the nested-name-specifier. */
9874 return 0;
9876 case TEMPLATE_TYPE_PARM:
9877 case TEMPLATE_TEMPLATE_PARM:
9878 case BOUND_TEMPLATE_TEMPLATE_PARM:
9879 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
9881 if (TEMPLATE_TYPE_LEVEL (parm)
9882 != template_decl_level (tparm))
9883 /* The PARM is not one we're trying to unify. Just check
9884 to see if it matches ARG. */
9885 return (TREE_CODE (arg) == TREE_CODE (parm)
9886 && same_type_p (parm, arg)) ? 0 : 1;
9887 idx = TEMPLATE_TYPE_IDX (parm);
9888 targ = TREE_VEC_ELT (targs, idx);
9889 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
9891 /* Check for mixed types and values. */
9892 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
9893 && TREE_CODE (tparm) != TYPE_DECL)
9894 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
9895 && TREE_CODE (tparm) != TEMPLATE_DECL))
9896 return 1;
9898 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
9900 /* ARG must be constructed from a template class or a template
9901 template parameter. */
9902 if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
9903 && (TREE_CODE (arg) != RECORD_TYPE || !CLASSTYPE_TEMPLATE_INFO (arg)))
9904 return 1;
9907 tree parmtmpl = TYPE_TI_TEMPLATE (parm);
9908 tree parmvec = TYPE_TI_ARGS (parm);
9909 tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
9910 tree argtmplvec
9911 = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
9912 int i;
9914 /* The parameter and argument roles have to be switched here
9915 in order to handle default arguments properly. For example,
9916 template<template <class> class TT> void f(TT<int>)
9917 should be able to accept vector<int> which comes from
9918 template <class T, class Allocator = allocator>
9919 class vector. */
9921 if (coerce_template_parms (argtmplvec, parmvec, parmtmpl, 0, 1)
9922 == error_mark_node)
9923 return 1;
9925 /* Deduce arguments T, i from TT<T> or TT<i>.
9926 We check each element of PARMVEC and ARGVEC individually
9927 rather than the whole TREE_VEC since they can have
9928 different number of elements. */
9930 for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
9932 if (unify (tparms, targs,
9933 TREE_VEC_ELT (parmvec, i),
9934 TREE_VEC_ELT (argvec, i),
9935 UNIFY_ALLOW_NONE))
9936 return 1;
9939 arg = TYPE_TI_TEMPLATE (arg);
9941 /* Fall through to deduce template name. */
9944 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
9945 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
9947 /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>. */
9949 /* Simple cases: Value already set, does match or doesn't. */
9950 if (targ != NULL_TREE && template_args_equal (targ, arg))
9951 return 0;
9952 else if (targ)
9953 return 1;
9955 else
9957 /* If PARM is `const T' and ARG is only `int', we don't have
9958 a match unless we are allowing additional qualification.
9959 If ARG is `const int' and PARM is just `T' that's OK;
9960 that binds `const int' to `T'. */
9961 if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
9962 arg, parm))
9963 return 1;
9965 /* Consider the case where ARG is `const volatile int' and
9966 PARM is `const T'. Then, T should be `volatile int'. */
9967 arg = cp_build_qualified_type_real
9968 (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
9969 if (arg == error_mark_node)
9970 return 1;
9972 /* Simple cases: Value already set, does match or doesn't. */
9973 if (targ != NULL_TREE && same_type_p (targ, arg))
9974 return 0;
9975 else if (targ)
9976 return 1;
9978 /* Make sure that ARG is not a variable-sized array. (Note
9979 that were talking about variable-sized arrays (like
9980 `int[n]'), rather than arrays of unknown size (like
9981 `int[]').) We'll get very confused by such a type since
9982 the bound of the array will not be computable in an
9983 instantiation. Besides, such types are not allowed in
9984 ISO C++, so we can do as we please here. */
9985 if (variably_modified_type_p (arg, NULL_TREE))
9986 return 1;
9989 TREE_VEC_ELT (targs, idx) = arg;
9990 return 0;
9992 case TEMPLATE_PARM_INDEX:
9993 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
9995 if (TEMPLATE_PARM_LEVEL (parm)
9996 != template_decl_level (tparm))
9997 /* The PARM is not one we're trying to unify. Just check
9998 to see if it matches ARG. */
9999 return !(TREE_CODE (arg) == TREE_CODE (parm)
10000 && cp_tree_equal (parm, arg));
10002 idx = TEMPLATE_PARM_IDX (parm);
10003 targ = TREE_VEC_ELT (targs, idx);
10005 if (targ)
10006 return !cp_tree_equal (targ, arg);
10008 /* [temp.deduct.type] If, in the declaration of a function template
10009 with a non-type template-parameter, the non-type
10010 template-parameter is used in an expression in the function
10011 parameter-list and, if the corresponding template-argument is
10012 deduced, the template-argument type shall match the type of the
10013 template-parameter exactly, except that a template-argument
10014 deduced from an array bound may be of any integral type.
10015 The non-type parameter might use already deduced type parameters. */
10016 tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
10017 if (!TREE_TYPE (arg))
10018 /* Template-parameter dependent expression. Just accept it for now.
10019 It will later be processed in convert_template_argument. */
10021 else if (same_type_p (TREE_TYPE (arg), tparm))
10022 /* OK */;
10023 else if ((strict & UNIFY_ALLOW_INTEGER)
10024 && (TREE_CODE (tparm) == INTEGER_TYPE
10025 || TREE_CODE (tparm) == BOOLEAN_TYPE))
10026 /* Convert the ARG to the type of PARM; the deduced non-type
10027 template argument must exactly match the types of the
10028 corresponding parameter. */
10029 arg = fold (build_nop (TREE_TYPE (parm), arg));
10030 else if (uses_template_parms (tparm))
10031 /* We haven't deduced the type of this parameter yet. Try again
10032 later. */
10033 return 0;
10034 else
10035 return 1;
10037 TREE_VEC_ELT (targs, idx) = arg;
10038 return 0;
10040 case PTRMEM_CST:
10042 /* A pointer-to-member constant can be unified only with
10043 another constant. */
10044 if (TREE_CODE (arg) != PTRMEM_CST)
10045 return 1;
10047 /* Just unify the class member. It would be useless (and possibly
10048 wrong, depending on the strict flags) to unify also
10049 PTRMEM_CST_CLASS, because we want to be sure that both parm and
10050 arg refer to the same variable, even if through different
10051 classes. For instance:
10053 struct A { int x; };
10054 struct B : A { };
10056 Unification of &A::x and &B::x must succeed. */
10057 return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
10058 PTRMEM_CST_MEMBER (arg), strict);
10061 case POINTER_TYPE:
10063 if (TREE_CODE (arg) != POINTER_TYPE)
10064 return 1;
10066 /* [temp.deduct.call]
10068 A can be another pointer or pointer to member type that can
10069 be converted to the deduced A via a qualification
10070 conversion (_conv.qual_).
10072 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
10073 This will allow for additional cv-qualification of the
10074 pointed-to types if appropriate. */
10076 if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
10077 /* The derived-to-base conversion only persists through one
10078 level of pointers. */
10079 strict |= (strict_in & UNIFY_ALLOW_DERIVED);
10081 return unify (tparms, targs, TREE_TYPE (parm),
10082 TREE_TYPE (arg), strict);
10085 case REFERENCE_TYPE:
10086 if (TREE_CODE (arg) != REFERENCE_TYPE)
10087 return 1;
10088 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10089 strict & UNIFY_ALLOW_MORE_CV_QUAL);
10091 case ARRAY_TYPE:
10092 if (TREE_CODE (arg) != ARRAY_TYPE)
10093 return 1;
10094 if ((TYPE_DOMAIN (parm) == NULL_TREE)
10095 != (TYPE_DOMAIN (arg) == NULL_TREE))
10096 return 1;
10097 if (TYPE_DOMAIN (parm) != NULL_TREE)
10099 tree parm_max;
10100 tree arg_max;
10102 parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
10103 arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
10105 /* Our representation of array types uses "N - 1" as the
10106 TYPE_MAX_VALUE for an array with "N" elements, if "N" is
10107 not an integer constant. */
10108 if (TREE_CODE (parm_max) == MINUS_EXPR)
10110 arg_max = fold (build2 (PLUS_EXPR,
10111 integer_type_node,
10112 arg_max,
10113 TREE_OPERAND (parm_max, 1)));
10114 parm_max = TREE_OPERAND (parm_max, 0);
10117 if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
10118 return 1;
10120 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10121 strict & UNIFY_ALLOW_MORE_CV_QUAL);
10123 case REAL_TYPE:
10124 case COMPLEX_TYPE:
10125 case VECTOR_TYPE:
10126 case INTEGER_TYPE:
10127 case BOOLEAN_TYPE:
10128 case ENUMERAL_TYPE:
10129 case VOID_TYPE:
10130 if (TREE_CODE (arg) != TREE_CODE (parm))
10131 return 1;
10133 /* We have already checked cv-qualification at the top of the
10134 function. */
10135 if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
10136 return 1;
10138 /* As far as unification is concerned, this wins. Later checks
10139 will invalidate it if necessary. */
10140 return 0;
10142 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
10143 /* Type INTEGER_CST can come from ordinary constant template args. */
10144 case INTEGER_CST:
10145 while (TREE_CODE (arg) == NOP_EXPR)
10146 arg = TREE_OPERAND (arg, 0);
10148 if (TREE_CODE (arg) != INTEGER_CST)
10149 return 1;
10150 return !tree_int_cst_equal (parm, arg);
10152 case TREE_VEC:
10154 int i;
10155 if (TREE_CODE (arg) != TREE_VEC)
10156 return 1;
10157 if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
10158 return 1;
10159 for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
10160 if (unify (tparms, targs,
10161 TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
10162 UNIFY_ALLOW_NONE))
10163 return 1;
10164 return 0;
10167 case RECORD_TYPE:
10168 case UNION_TYPE:
10169 if (TREE_CODE (arg) != TREE_CODE (parm))
10170 return 1;
10172 if (TYPE_PTRMEMFUNC_P (parm))
10174 if (!TYPE_PTRMEMFUNC_P (arg))
10175 return 1;
10177 return unify (tparms, targs,
10178 TYPE_PTRMEMFUNC_FN_TYPE (parm),
10179 TYPE_PTRMEMFUNC_FN_TYPE (arg),
10180 strict);
10183 if (CLASSTYPE_TEMPLATE_INFO (parm))
10185 tree t = NULL_TREE;
10187 if (strict_in & UNIFY_ALLOW_DERIVED)
10189 /* First, we try to unify the PARM and ARG directly. */
10190 t = try_class_unification (tparms, targs,
10191 parm, arg);
10193 if (!t)
10195 /* Fallback to the special case allowed in
10196 [temp.deduct.call]:
10198 If P is a class, and P has the form
10199 template-id, then A can be a derived class of
10200 the deduced A. Likewise, if P is a pointer to
10201 a class of the form template-id, A can be a
10202 pointer to a derived class pointed to by the
10203 deduced A. */
10204 t = get_template_base (tparms, targs, parm, arg);
10206 if (!t)
10207 return 1;
10210 else if (CLASSTYPE_TEMPLATE_INFO (arg)
10211 && (CLASSTYPE_TI_TEMPLATE (parm)
10212 == CLASSTYPE_TI_TEMPLATE (arg)))
10213 /* Perhaps PARM is something like S<U> and ARG is S<int>.
10214 Then, we should unify `int' and `U'. */
10215 t = arg;
10216 else
10217 /* There's no chance of unification succeeding. */
10218 return 1;
10220 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
10221 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
10223 else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
10224 return 1;
10225 return 0;
10227 case METHOD_TYPE:
10228 case FUNCTION_TYPE:
10229 if (TREE_CODE (arg) != TREE_CODE (parm))
10230 return 1;
10232 if (unify (tparms, targs, TREE_TYPE (parm),
10233 TREE_TYPE (arg), UNIFY_ALLOW_NONE))
10234 return 1;
10235 return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
10236 TYPE_ARG_TYPES (arg), 1,
10237 DEDUCE_EXACT, 0, -1);
10239 case OFFSET_TYPE:
10240 /* Unify a pointer to member with a pointer to member function, which
10241 deduces the type of the member as a function type. */
10242 if (TYPE_PTRMEMFUNC_P (arg))
10244 tree method_type;
10245 tree fntype;
10246 cp_cv_quals cv_quals;
10248 /* Check top-level cv qualifiers */
10249 if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
10250 return 1;
10252 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
10253 TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
10254 return 1;
10256 /* Determine the type of the function we are unifying against. */
10257 method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
10258 fntype =
10259 build_function_type (TREE_TYPE (method_type),
10260 TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
10262 /* Extract the cv-qualifiers of the member function from the
10263 implicit object parameter and place them on the function
10264 type to be restored later. */
10265 cv_quals =
10266 cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
10267 fntype = build_qualified_type (fntype, cv_quals);
10268 return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
10271 if (TREE_CODE (arg) != OFFSET_TYPE)
10272 return 1;
10273 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
10274 TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
10275 return 1;
10276 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10277 strict);
10279 case CONST_DECL:
10280 if (DECL_TEMPLATE_PARM_P (parm))
10281 return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
10282 if (arg != integral_constant_value (parm))
10283 return 1;
10284 return 0;
10286 case FIELD_DECL:
10287 case TEMPLATE_DECL:
10288 /* Matched cases are handled by the ARG == PARM test above. */
10289 return 1;
10291 default:
10292 gcc_assert (EXPR_P (parm));
10294 /* We must be looking at an expression. This can happen with
10295 something like:
10297 template <int I>
10298 void foo(S<I>, S<I + 2>);
10300 This is a "nondeduced context":
10302 [deduct.type]
10304 The nondeduced contexts are:
10306 --A type that is a template-id in which one or more of
10307 the template-arguments is an expression that references
10308 a template-parameter.
10310 In these cases, we assume deduction succeeded, but don't
10311 actually infer any unifications. */
10313 if (!uses_template_parms (parm)
10314 && !template_args_equal (parm, arg))
10315 return 1;
10316 else
10317 return 0;
10321 /* Note that DECL can be defined in this translation unit, if
10322 required. */
10324 static void
10325 mark_definable (tree decl)
10327 tree clone;
10328 DECL_NOT_REALLY_EXTERN (decl) = 1;
10329 FOR_EACH_CLONE (clone, decl)
10330 DECL_NOT_REALLY_EXTERN (clone) = 1;
10333 /* Called if RESULT is explicitly instantiated, or is a member of an
10334 explicitly instantiated class. */
10336 void
10337 mark_decl_instantiated (tree result, int extern_p)
10339 SET_DECL_EXPLICIT_INSTANTIATION (result);
10341 /* If this entity has already been written out, it's too late to
10342 make any modifications. */
10343 if (TREE_ASM_WRITTEN (result))
10344 return;
10346 if (TREE_CODE (result) != FUNCTION_DECL)
10347 /* The TREE_PUBLIC flag for function declarations will have been
10348 set correctly by tsubst. */
10349 TREE_PUBLIC (result) = 1;
10351 /* This might have been set by an earlier implicit instantiation. */
10352 DECL_COMDAT (result) = 0;
10354 if (extern_p)
10355 DECL_NOT_REALLY_EXTERN (result) = 0;
10356 else
10358 mark_definable (result);
10359 /* Always make artificials weak. */
10360 if (DECL_ARTIFICIAL (result) && flag_weak)
10361 comdat_linkage (result);
10362 /* For WIN32 we also want to put explicit instantiations in
10363 linkonce sections. */
10364 else if (TREE_PUBLIC (result))
10365 maybe_make_one_only (result);
10368 /* If EXTERN_P, then this function will not be emitted -- unless
10369 followed by an explicit instantiation, at which point its linkage
10370 will be adjusted. If !EXTERN_P, then this function will be
10371 emitted here. In neither circumstance do we want
10372 import_export_decl to adjust the linkage. */
10373 DECL_INTERFACE_KNOWN (result) = 1;
10376 /* Given two function templates PAT1 and PAT2, return:
10378 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
10379 -1 if PAT2 is more specialized than PAT1.
10380 0 if neither is more specialized.
10382 LEN indicates the number of parameters we should consider
10383 (defaulted parameters should not be considered).
10385 The 1998 std underspecified function template partial ordering, and
10386 DR214 addresses the issue. We take pairs of arguments, one from
10387 each of the templates, and deduce them against eachother. One of
10388 the templates will be more specialized if all the *other*
10389 template's arguments deduce against its arguments and at least one
10390 of its arguments *does* *not* deduce against the other template's
10391 corresponding argument. Deduction is done as for class templates.
10392 The arguments used in deduction have reference and top level cv
10393 qualifiers removed. Iff both arguments were originally reference
10394 types *and* deduction succeeds in both directions, the template
10395 with the more cv-qualified argument wins for that pairing (if
10396 neither is more cv-qualified, they both are equal). Unlike regular
10397 deduction, after all the arguments have been deduced in this way,
10398 we do *not* verify the deduced template argument values can be
10399 substituted into non-deduced contexts, nor do we have to verify
10400 that all template arguments have been deduced. */
10403 more_specialized_fn (tree pat1, tree pat2, int len)
10405 tree decl1 = DECL_TEMPLATE_RESULT (pat1);
10406 tree decl2 = DECL_TEMPLATE_RESULT (pat2);
10407 tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
10408 tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
10409 tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
10410 tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
10411 tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
10412 tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
10413 int better1 = 0;
10414 int better2 = 0;
10416 /* If only one is a member function, they are unordered. */
10417 if (DECL_FUNCTION_MEMBER_P (decl1) != DECL_FUNCTION_MEMBER_P (decl2))
10418 return 0;
10420 /* Don't consider 'this' parameter. */
10421 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
10422 args1 = TREE_CHAIN (args1);
10423 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
10424 args2 = TREE_CHAIN (args2);
10426 /* If only one is a conversion operator, they are unordered. */
10427 if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
10428 return 0;
10430 /* Consider the return type for a conversion function */
10431 if (DECL_CONV_FN_P (decl1))
10433 args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
10434 args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
10435 len++;
10438 processing_template_decl++;
10440 while (len--)
10442 tree arg1 = TREE_VALUE (args1);
10443 tree arg2 = TREE_VALUE (args2);
10444 int deduce1, deduce2;
10445 int quals1 = -1;
10446 int quals2 = -1;
10448 if (TREE_CODE (arg1) == REFERENCE_TYPE)
10450 arg1 = TREE_TYPE (arg1);
10451 quals1 = cp_type_quals (arg1);
10454 if (TREE_CODE (arg2) == REFERENCE_TYPE)
10456 arg2 = TREE_TYPE (arg2);
10457 quals2 = cp_type_quals (arg2);
10460 if ((quals1 < 0) != (quals2 < 0))
10462 /* Only of the args is a reference, see if we should apply
10463 array/function pointer decay to it. This is not part of
10464 DR214, but is, IMHO, consistent with the deduction rules
10465 for the function call itself, and with our earlier
10466 implementation of the underspecified partial ordering
10467 rules. (nathan). */
10468 if (quals1 >= 0)
10470 switch (TREE_CODE (arg1))
10472 case ARRAY_TYPE:
10473 arg1 = TREE_TYPE (arg1);
10474 /* FALLTHROUGH. */
10475 case FUNCTION_TYPE:
10476 arg1 = build_pointer_type (arg1);
10477 break;
10479 default:
10480 break;
10483 else
10485 switch (TREE_CODE (arg2))
10487 case ARRAY_TYPE:
10488 arg2 = TREE_TYPE (arg2);
10489 /* FALLTHROUGH. */
10490 case FUNCTION_TYPE:
10491 arg2 = build_pointer_type (arg2);
10492 break;
10494 default:
10495 break;
10500 arg1 = TYPE_MAIN_VARIANT (arg1);
10501 arg2 = TYPE_MAIN_VARIANT (arg2);
10503 deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
10504 deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
10506 if (!deduce1)
10507 better2 = -1;
10508 if (!deduce2)
10509 better1 = -1;
10510 if (better1 < 0 && better2 < 0)
10511 /* We've failed to deduce something in either direction.
10512 These must be unordered. */
10513 break;
10515 if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
10517 /* Deduces in both directions, see if quals can
10518 disambiguate. Pretend the worse one failed to deduce. */
10519 if ((quals1 & quals2) == quals2)
10520 deduce1 = 0;
10521 if ((quals1 & quals2) == quals1)
10522 deduce2 = 0;
10524 if (deduce1 && !deduce2 && !better2)
10525 better2 = 1;
10526 if (deduce2 && !deduce1 && !better1)
10527 better1 = 1;
10529 args1 = TREE_CHAIN (args1);
10530 args2 = TREE_CHAIN (args2);
10533 processing_template_decl--;
10535 return (better1 > 0) - (better2 > 0);
10538 /* Given two class template specialization list nodes PAT1 and PAT2, return:
10540 1 if PAT1 is more specialized than PAT2 as described in [temp.class.order].
10541 -1 if PAT2 is more specialized than PAT1.
10542 0 if neither is more specialized.
10544 FULL_ARGS is the full set of template arguments that triggers this
10545 partial ordering. */
10548 more_specialized_class (tree pat1, tree pat2, tree full_args)
10550 tree targs;
10551 int winner = 0;
10553 /* Just like what happens for functions, if we are ordering between
10554 different class template specializations, we may encounter dependent
10555 types in the arguments, and we need our dependency check functions
10556 to behave correctly. */
10557 ++processing_template_decl;
10558 targs = get_class_bindings (TREE_VALUE (pat1), TREE_PURPOSE (pat1),
10559 add_outermost_template_args (full_args, TREE_PURPOSE (pat2)));
10560 if (targs)
10561 --winner;
10563 targs = get_class_bindings (TREE_VALUE (pat2), TREE_PURPOSE (pat2),
10564 add_outermost_template_args (full_args, TREE_PURPOSE (pat1)));
10565 if (targs)
10566 ++winner;
10567 --processing_template_decl;
10569 return winner;
10572 /* Return the template arguments that will produce the function signature
10573 DECL from the function template FN, with the explicit template
10574 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is 1, the return type must
10575 also match. Return NULL_TREE if no satisfactory arguments could be
10576 found. DEDUCE and LEN are passed through to fn_type_unification. */
10578 static tree
10579 get_bindings_real (tree fn,
10580 tree decl,
10581 tree explicit_args,
10582 int check_rettype,
10583 int deduce,
10584 int len)
10586 int ntparms = DECL_NTPARMS (fn);
10587 tree targs = make_tree_vec (ntparms);
10588 tree decl_type;
10589 tree decl_arg_types;
10590 int i;
10592 /* Substitute the explicit template arguments into the type of DECL.
10593 The call to fn_type_unification will handle substitution into the
10594 FN. */
10595 decl_type = TREE_TYPE (decl);
10596 if (explicit_args && uses_template_parms (decl_type))
10598 tree tmpl;
10599 tree converted_args;
10601 if (DECL_TEMPLATE_INFO (decl))
10602 tmpl = DECL_TI_TEMPLATE (decl);
10603 else
10604 /* We can get here for some invalid specializations. */
10605 return NULL_TREE;
10607 converted_args
10608 = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
10609 explicit_args, NULL_TREE,
10610 tf_none, /*require_all_arguments=*/0));
10611 if (converted_args == error_mark_node)
10612 return NULL_TREE;
10614 decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
10615 if (decl_type == error_mark_node)
10616 return NULL_TREE;
10619 decl_arg_types = TYPE_ARG_TYPES (decl_type);
10620 /* Never do unification on the 'this' parameter. */
10621 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10622 decl_arg_types = TREE_CHAIN (decl_arg_types);
10624 i = fn_type_unification (fn, explicit_args, targs,
10625 decl_arg_types,
10626 (check_rettype || DECL_CONV_FN_P (fn)
10627 ? TREE_TYPE (decl_type) : NULL_TREE),
10628 deduce, len);
10630 if (i != 0)
10631 return NULL_TREE;
10633 return targs;
10636 /* For most uses, we want to check the return type. */
10638 static tree
10639 get_bindings (tree fn, tree decl, tree explicit_args)
10641 return get_bindings_real (fn, decl, explicit_args, 1, DEDUCE_EXACT, -1);
10644 /* But for resolve_overloaded_unification, we only care about the parameter
10645 types. */
10647 static tree
10648 get_bindings_overload (tree fn, tree decl, tree explicit_args)
10650 return get_bindings_real (fn, decl, explicit_args, 0, DEDUCE_EXACT, -1);
10653 /* Return the innermost template arguments that, when applied to a
10654 template specialization whose innermost template parameters are
10655 TPARMS, and whose specialization arguments are PARMS, yield the
10656 ARGS.
10658 For example, suppose we have:
10660 template <class T, class U> struct S {};
10661 template <class T> struct S<T*, int> {};
10663 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
10664 {T}, the PARMS will be {T*, int} and the ARGS will be {double*,
10665 int}. The resulting vector will be {double}, indicating that `T'
10666 is bound to `double'. */
10668 static tree
10669 get_class_bindings (tree tparms, tree parms, tree args)
10671 int i, ntparms = TREE_VEC_LENGTH (tparms);
10672 tree vec = make_tree_vec (ntparms);
10674 if (unify (tparms, vec, parms, INNERMOST_TEMPLATE_ARGS (args),
10675 UNIFY_ALLOW_NONE))
10676 return NULL_TREE;
10678 for (i = 0; i < ntparms; ++i)
10679 if (! TREE_VEC_ELT (vec, i))
10680 return NULL_TREE;
10682 if (verify_class_unification (vec, parms, args))
10683 return NULL_TREE;
10685 return vec;
10688 /* In INSTANTIATIONS is a list of <INSTANTIATION, TEMPLATE> pairs.
10689 Pick the most specialized template, and return the corresponding
10690 instantiation, or if there is no corresponding instantiation, the
10691 template itself. If there is no most specialized template,
10692 error_mark_node is returned. If there are no templates at all,
10693 NULL_TREE is returned. */
10695 tree
10696 most_specialized_instantiation (tree instantiations)
10698 tree fn, champ;
10700 if (!instantiations)
10701 return NULL_TREE;
10703 ++processing_template_decl;
10705 champ = instantiations;
10706 for (fn = TREE_CHAIN (instantiations); fn; fn = TREE_CHAIN (fn))
10708 int fate = 0;
10710 if (get_bindings_real (TREE_VALUE (champ),
10711 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
10712 NULL_TREE, 0, DEDUCE_EXACT, -1))
10713 fate--;
10715 if (get_bindings_real (TREE_VALUE (fn),
10716 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
10717 NULL_TREE, 0, DEDUCE_EXACT, -1))
10718 fate++;
10720 if (fate != 1)
10722 if (!fate)
10723 /* Equally specialized, move to next function. If there
10724 is no next function, nothing's most specialized. */
10725 fn = TREE_CHAIN (fn);
10726 champ = fn;
10730 if (champ)
10731 /* Now verify that champ is better than everything earlier in the
10732 instantiation list. */
10733 for (fn = instantiations; fn != champ; fn = TREE_CHAIN (fn))
10734 if (get_bindings_real (TREE_VALUE (champ),
10735 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
10736 NULL_TREE, 0, DEDUCE_EXACT, -1)
10737 || !get_bindings_real (TREE_VALUE (fn),
10738 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
10739 NULL_TREE, 0, DEDUCE_EXACT, -1))
10741 champ = NULL_TREE;
10742 break;
10745 processing_template_decl--;
10747 if (!champ)
10748 return error_mark_node;
10750 return TREE_PURPOSE (champ) ? TREE_PURPOSE (champ) : TREE_VALUE (champ);
10753 /* Return the most specialized of the list of templates in FNS that can
10754 produce an instantiation matching DECL, given the explicit template
10755 arguments EXPLICIT_ARGS. */
10757 static tree
10758 most_specialized (tree fns, tree decl, tree explicit_args)
10760 tree candidates = NULL_TREE;
10761 tree fn, args;
10763 for (fn = fns; fn; fn = TREE_CHAIN (fn))
10765 tree candidate = TREE_VALUE (fn);
10767 args = get_bindings (candidate, decl, explicit_args);
10768 if (args)
10769 candidates = tree_cons (NULL_TREE, candidate, candidates);
10772 return most_specialized_instantiation (candidates);
10775 /* If DECL is a specialization of some template, return the most
10776 general such template. Otherwise, returns NULL_TREE.
10778 For example, given:
10780 template <class T> struct S { template <class U> void f(U); };
10782 if TMPL is `template <class U> void S<int>::f(U)' this will return
10783 the full template. This function will not trace past partial
10784 specializations, however. For example, given in addition:
10786 template <class T> struct S<T*> { template <class U> void f(U); };
10788 if TMPL is `template <class U> void S<int*>::f(U)' this will return
10789 `template <class T> template <class U> S<T*>::f(U)'. */
10791 tree
10792 most_general_template (tree decl)
10794 /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
10795 an immediate specialization. */
10796 if (TREE_CODE (decl) == FUNCTION_DECL)
10798 if (DECL_TEMPLATE_INFO (decl)) {
10799 decl = DECL_TI_TEMPLATE (decl);
10801 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
10802 template friend. */
10803 if (TREE_CODE (decl) != TEMPLATE_DECL)
10804 return NULL_TREE;
10805 } else
10806 return NULL_TREE;
10809 /* Look for more and more general templates. */
10810 while (DECL_TEMPLATE_INFO (decl))
10812 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
10813 (See cp-tree.h for details.) */
10814 if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
10815 break;
10817 if (CLASS_TYPE_P (TREE_TYPE (decl))
10818 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
10819 break;
10821 /* Stop if we run into an explicitly specialized class template. */
10822 if (!DECL_NAMESPACE_SCOPE_P (decl)
10823 && DECL_CONTEXT (decl)
10824 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
10825 break;
10827 decl = DECL_TI_TEMPLATE (decl);
10830 return decl;
10833 /* Return the most specialized of the class template specializations
10834 of TMPL which can produce an instantiation matching ARGS, or
10835 error_mark_node if the choice is ambiguous. */
10837 static tree
10838 most_specialized_class (tree tmpl, tree args)
10840 tree list = NULL_TREE;
10841 tree t;
10842 tree champ;
10843 int fate;
10845 tmpl = most_general_template (tmpl);
10846 for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
10848 tree spec_args
10849 = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args);
10850 if (spec_args)
10852 list = tree_cons (TREE_PURPOSE (t), TREE_VALUE (t), list);
10853 TREE_TYPE (list) = TREE_TYPE (t);
10857 if (! list)
10858 return NULL_TREE;
10860 t = list;
10861 champ = t;
10862 t = TREE_CHAIN (t);
10863 for (; t; t = TREE_CHAIN (t))
10865 fate = more_specialized_class (champ, t, args);
10866 if (fate == 1)
10868 else
10870 if (fate == 0)
10872 t = TREE_CHAIN (t);
10873 if (! t)
10874 return error_mark_node;
10876 champ = t;
10880 for (t = list; t && t != champ; t = TREE_CHAIN (t))
10882 fate = more_specialized_class (champ, t, args);
10883 if (fate != 1)
10884 return error_mark_node;
10887 return champ;
10890 /* Explicitly instantiate DECL. */
10892 void
10893 do_decl_instantiation (tree decl, tree storage)
10895 tree result = NULL_TREE;
10896 int extern_p = 0;
10898 if (!decl)
10899 /* An error occurred, for which grokdeclarator has already issued
10900 an appropriate message. */
10901 return;
10902 else if (! DECL_LANG_SPECIFIC (decl))
10904 error ("explicit instantiation of non-template %q#D", decl);
10905 return;
10907 else if (TREE_CODE (decl) == VAR_DECL)
10909 /* There is an asymmetry here in the way VAR_DECLs and
10910 FUNCTION_DECLs are handled by grokdeclarator. In the case of
10911 the latter, the DECL we get back will be marked as a
10912 template instantiation, and the appropriate
10913 DECL_TEMPLATE_INFO will be set up. This does not happen for
10914 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
10915 should handle VAR_DECLs as it currently handles
10916 FUNCTION_DECLs. */
10917 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
10918 if (!result || TREE_CODE (result) != VAR_DECL)
10920 error ("no matching template for %qD found", decl);
10921 return;
10924 else if (TREE_CODE (decl) != FUNCTION_DECL)
10926 error ("explicit instantiation of %q#D", decl);
10927 return;
10929 else
10930 result = decl;
10932 /* Check for various error cases. Note that if the explicit
10933 instantiation is valid the RESULT will currently be marked as an
10934 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
10935 until we get here. */
10937 if (DECL_TEMPLATE_SPECIALIZATION (result))
10939 /* DR 259 [temp.spec].
10941 Both an explicit instantiation and a declaration of an explicit
10942 specialization shall not appear in a program unless the explicit
10943 instantiation follows a declaration of the explicit specialization.
10945 For a given set of template parameters, if an explicit
10946 instantiation of a template appears after a declaration of an
10947 explicit specialization for that template, the explicit
10948 instantiation has no effect. */
10949 return;
10951 else if (DECL_EXPLICIT_INSTANTIATION (result))
10953 /* [temp.spec]
10955 No program shall explicitly instantiate any template more
10956 than once.
10958 We check DECL_NOT_REALLY_EXTERN so as not to complain when
10959 the first instantiation was `extern' and the second is not,
10960 and EXTERN_P for the opposite case. */
10961 if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
10962 pedwarn ("duplicate explicit instantiation of %q#D", result);
10963 /* If an "extern" explicit instantiation follows an ordinary
10964 explicit instantiation, the template is instantiated. */
10965 if (extern_p)
10966 return;
10968 else if (!DECL_IMPLICIT_INSTANTIATION (result))
10970 error ("no matching template for %qD found", result);
10971 return;
10973 else if (!DECL_TEMPLATE_INFO (result))
10975 pedwarn ("explicit instantiation of non-template %q#D", result);
10976 return;
10979 if (storage == NULL_TREE)
10981 else if (storage == ridpointers[(int) RID_EXTERN])
10983 if (pedantic && !in_system_header)
10984 pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
10985 "instantiations");
10986 extern_p = 1;
10988 else
10989 error ("storage class %qD applied to template instantiation", storage);
10991 mark_decl_instantiated (result, extern_p);
10992 if (! extern_p)
10993 instantiate_decl (result, /*defer_ok=*/1, /*undefined_ok=*/0);
10996 void
10997 mark_class_instantiated (tree t, int extern_p)
10999 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
11000 SET_CLASSTYPE_INTERFACE_KNOWN (t);
11001 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
11002 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
11003 if (! extern_p)
11005 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
11006 rest_of_type_compilation (t, 1);
11010 /* Called from do_type_instantiation through binding_table_foreach to
11011 do recursive instantiation for the type bound in ENTRY. */
11012 static void
11013 bt_instantiate_type_proc (binding_entry entry, void *data)
11015 tree storage = *(tree *) data;
11017 if (IS_AGGR_TYPE (entry->type)
11018 && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
11019 do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
11022 /* Called from do_type_instantiation to instantiate a member
11023 (a member function or a static member variable) of an
11024 explicitly instantiated class template. */
11025 static void
11026 instantiate_class_member (tree decl, int extern_p)
11028 mark_decl_instantiated (decl, extern_p);
11029 if (! extern_p)
11030 instantiate_decl (decl, /*defer_ok=*/1, /* undefined_ok=*/1);
11033 /* Perform an explicit instantiation of template class T. STORAGE, if
11034 non-null, is the RID for extern, inline or static. COMPLAIN is
11035 nonzero if this is called from the parser, zero if called recursively,
11036 since the standard is unclear (as detailed below). */
11038 void
11039 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
11041 int extern_p = 0;
11042 int nomem_p = 0;
11043 int static_p = 0;
11044 int previous_instantiation_extern_p = 0;
11046 if (TREE_CODE (t) == TYPE_DECL)
11047 t = TREE_TYPE (t);
11049 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
11051 error ("explicit instantiation of non-template type %qT", t);
11052 return;
11055 complete_type (t);
11057 if (!COMPLETE_TYPE_P (t))
11059 if (complain & tf_error)
11060 error ("explicit instantiation of %q#T before definition of template",
11062 return;
11065 if (storage != NULL_TREE)
11067 if (pedantic && !in_system_header)
11068 pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
11069 storage);
11071 if (storage == ridpointers[(int) RID_INLINE])
11072 nomem_p = 1;
11073 else if (storage == ridpointers[(int) RID_EXTERN])
11074 extern_p = 1;
11075 else if (storage == ridpointers[(int) RID_STATIC])
11076 static_p = 1;
11077 else
11079 error ("storage class %qD applied to template instantiation",
11080 storage);
11081 extern_p = 0;
11085 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
11087 /* DR 259 [temp.spec].
11089 Both an explicit instantiation and a declaration of an explicit
11090 specialization shall not appear in a program unless the explicit
11091 instantiation follows a declaration of the explicit specialization.
11093 For a given set of template parameters, if an explicit
11094 instantiation of a template appears after a declaration of an
11095 explicit specialization for that template, the explicit
11096 instantiation has no effect. */
11097 return;
11099 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
11101 /* [temp.spec]
11103 No program shall explicitly instantiate any template more
11104 than once.
11106 If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
11107 instantiation was `extern'. If EXTERN_P then the second is.
11108 These cases are OK. */
11109 previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
11111 if (!previous_instantiation_extern_p && !extern_p
11112 && (complain & tf_error))
11113 pedwarn ("duplicate explicit instantiation of %q#T", t);
11115 /* If we've already instantiated the template, just return now. */
11116 if (!CLASSTYPE_INTERFACE_ONLY (t))
11117 return;
11120 mark_class_instantiated (t, extern_p);
11122 if (nomem_p)
11123 return;
11126 tree tmp;
11128 /* In contrast to implicit instantiation, where only the
11129 declarations, and not the definitions, of members are
11130 instantiated, we have here:
11132 [temp.explicit]
11134 The explicit instantiation of a class template specialization
11135 implies the instantiation of all of its members not
11136 previously explicitly specialized in the translation unit
11137 containing the explicit instantiation.
11139 Of course, we can't instantiate member template classes, since
11140 we don't have any arguments for them. Note that the standard
11141 is unclear on whether the instantiation of the members are
11142 *explicit* instantiations or not. However, the most natural
11143 interpretation is that it should be an explicit instantiation. */
11145 if (! static_p)
11146 for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
11147 if (TREE_CODE (tmp) == FUNCTION_DECL
11148 && DECL_TEMPLATE_INSTANTIATION (tmp))
11149 instantiate_class_member (tmp, extern_p);
11151 for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
11152 if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
11153 instantiate_class_member (tmp, extern_p);
11155 if (CLASSTYPE_NESTED_UTDS (t))
11156 binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
11157 bt_instantiate_type_proc, &storage);
11161 /* Given a function DECL, which is a specialization of TMPL, modify
11162 DECL to be a re-instantiation of TMPL with the same template
11163 arguments. TMPL should be the template into which tsubst'ing
11164 should occur for DECL, not the most general template.
11166 One reason for doing this is a scenario like this:
11168 template <class T>
11169 void f(const T&, int i);
11171 void g() { f(3, 7); }
11173 template <class T>
11174 void f(const T& t, const int i) { }
11176 Note that when the template is first instantiated, with
11177 instantiate_template, the resulting DECL will have no name for the
11178 first parameter, and the wrong type for the second. So, when we go
11179 to instantiate the DECL, we regenerate it. */
11181 static void
11182 regenerate_decl_from_template (tree decl, tree tmpl)
11184 /* The arguments used to instantiate DECL, from the most general
11185 template. */
11186 tree args;
11187 tree code_pattern;
11189 args = DECL_TI_ARGS (decl);
11190 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
11192 /* Make sure that we can see identifiers, and compute access
11193 correctly. */
11194 push_access_scope (decl);
11196 if (TREE_CODE (decl) == FUNCTION_DECL)
11198 tree decl_parm;
11199 tree pattern_parm;
11200 tree specs;
11201 int args_depth;
11202 int parms_depth;
11204 args_depth = TMPL_ARGS_DEPTH (args);
11205 parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
11206 if (args_depth > parms_depth)
11207 args = get_innermost_template_args (args, parms_depth);
11209 specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
11210 args, tf_error, NULL_TREE);
11211 if (specs)
11212 TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
11213 specs);
11215 /* Merge parameter declarations. */
11216 decl_parm = skip_artificial_parms_for (decl,
11217 DECL_ARGUMENTS (decl));
11218 pattern_parm
11219 = skip_artificial_parms_for (code_pattern,
11220 DECL_ARGUMENTS (code_pattern));
11221 while (decl_parm)
11223 tree parm_type;
11224 tree attributes;
11226 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
11227 DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
11228 parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
11229 NULL_TREE);
11230 parm_type = type_decays_to (parm_type);
11231 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
11232 TREE_TYPE (decl_parm) = parm_type;
11233 attributes = DECL_ATTRIBUTES (pattern_parm);
11234 if (DECL_ATTRIBUTES (decl_parm) != attributes)
11236 DECL_ATTRIBUTES (decl_parm) = attributes;
11237 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
11239 decl_parm = TREE_CHAIN (decl_parm);
11240 pattern_parm = TREE_CHAIN (pattern_parm);
11243 /* Merge additional specifiers from the CODE_PATTERN. */
11244 if (DECL_DECLARED_INLINE_P (code_pattern)
11245 && !DECL_DECLARED_INLINE_P (decl))
11246 DECL_DECLARED_INLINE_P (decl) = 1;
11247 if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
11248 DECL_INLINE (decl) = 1;
11250 else if (TREE_CODE (decl) == VAR_DECL)
11252 if (!DECL_INITIALIZED_IN_CLASS_P (decl)
11253 && DECL_INITIAL (code_pattern))
11254 DECL_INITIAL (decl) =
11255 tsubst_expr (DECL_INITIAL (code_pattern), args,
11256 tf_error, DECL_TI_TEMPLATE (decl));
11258 else
11259 gcc_unreachable ();
11261 pop_access_scope (decl);
11264 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
11265 substituted to get DECL. */
11267 tree
11268 template_for_substitution (tree decl)
11270 tree tmpl = DECL_TI_TEMPLATE (decl);
11272 /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
11273 for the instantiation. This is not always the most general
11274 template. Consider, for example:
11276 template <class T>
11277 struct S { template <class U> void f();
11278 template <> void f<int>(); };
11280 and an instantiation of S<double>::f<int>. We want TD to be the
11281 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
11282 while (/* An instantiation cannot have a definition, so we need a
11283 more general template. */
11284 DECL_TEMPLATE_INSTANTIATION (tmpl)
11285 /* We must also deal with friend templates. Given:
11287 template <class T> struct S {
11288 template <class U> friend void f() {};
11291 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
11292 so far as the language is concerned, but that's still
11293 where we get the pattern for the instantiation from. On
11294 other hand, if the definition comes outside the class, say:
11296 template <class T> struct S {
11297 template <class U> friend void f();
11299 template <class U> friend void f() {}
11301 we don't need to look any further. That's what the check for
11302 DECL_INITIAL is for. */
11303 || (TREE_CODE (decl) == FUNCTION_DECL
11304 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
11305 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
11307 /* The present template, TD, should not be a definition. If it
11308 were a definition, we should be using it! Note that we
11309 cannot restructure the loop to just keep going until we find
11310 a template with a definition, since that might go too far if
11311 a specialization was declared, but not defined. */
11312 gcc_assert (TREE_CODE (decl) != VAR_DECL
11313 || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
11315 /* Fetch the more general template. */
11316 tmpl = DECL_TI_TEMPLATE (tmpl);
11319 return tmpl;
11322 /* Produce the definition of D, a _DECL generated from a template. If
11323 DEFER_OK is nonzero, then we don't have to actually do the
11324 instantiation now; we just have to do it sometime. Normally it is
11325 an error if this is an explicit instantiation but D is undefined.
11326 If UNDEFINED_OK is nonzero, then instead we treat it as an implicit
11327 instantiation. UNDEFINED_OK is nonzero only if we are being used
11328 to instantiate the members of an explicitly instantiated class
11329 template. */
11332 tree
11333 instantiate_decl (tree d, int defer_ok, int undefined_ok)
11335 tree tmpl = DECL_TI_TEMPLATE (d);
11336 tree gen_args;
11337 tree args;
11338 tree td;
11339 tree code_pattern;
11340 tree spec;
11341 tree gen_tmpl;
11342 int pattern_defined;
11343 int need_push;
11344 location_t saved_loc = input_location;
11346 /* This function should only be used to instantiate templates for
11347 functions and static member variables. */
11348 gcc_assert (TREE_CODE (d) == FUNCTION_DECL
11349 || TREE_CODE (d) == VAR_DECL);
11351 /* Variables are never deferred; if instantiation is required, they
11352 are instantiated right away. That allows for better code in the
11353 case that an expression refers to the value of the variable --
11354 if the variable has a constant value the referring expression can
11355 take advantage of that fact. */
11356 if (TREE_CODE (d) == VAR_DECL)
11357 defer_ok = 0;
11359 /* Don't instantiate cloned functions. Instead, instantiate the
11360 functions they cloned. */
11361 if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
11362 d = DECL_CLONED_FUNCTION (d);
11364 if (DECL_TEMPLATE_INSTANTIATED (d))
11365 /* D has already been instantiated. It might seem reasonable to
11366 check whether or not D is an explicit instantiation, and, if so,
11367 stop here. But when an explicit instantiation is deferred
11368 until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
11369 is set, even though we still need to do the instantiation. */
11370 return d;
11372 /* If we already have a specialization of this declaration, then
11373 there's no reason to instantiate it. Note that
11374 retrieve_specialization gives us both instantiations and
11375 specializations, so we must explicitly check
11376 DECL_TEMPLATE_SPECIALIZATION. */
11377 gen_tmpl = most_general_template (tmpl);
11378 gen_args = DECL_TI_ARGS (d);
11379 spec = retrieve_specialization (gen_tmpl, gen_args,
11380 /*class_specializations_p=*/false);
11381 if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
11382 return spec;
11384 /* This needs to happen before any tsubsting. */
11385 if (! push_tinst_level (d))
11386 return d;
11388 timevar_push (TV_PARSE);
11390 /* We may be in the middle of deferred access check. Disable it now. */
11391 push_deferring_access_checks (dk_no_deferred);
11393 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
11394 for the instantiation. */
11395 td = template_for_substitution (d);
11396 code_pattern = DECL_TEMPLATE_RESULT (td);
11398 if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
11399 || DECL_TEMPLATE_SPECIALIZATION (td))
11400 /* In the case of a friend template whose definition is provided
11401 outside the class, we may have too many arguments. Drop the
11402 ones we don't need. The same is true for specializations. */
11403 args = get_innermost_template_args
11404 (gen_args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td)));
11405 else
11406 args = gen_args;
11408 if (TREE_CODE (d) == FUNCTION_DECL)
11409 pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
11410 else
11411 pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
11412 /* Unless an explicit instantiation directive has already determined
11413 the linkage of D, remember that a definition is available for
11414 this entity. */
11415 if (pattern_defined
11416 && !DECL_INTERFACE_KNOWN (d)
11417 && !DECL_NOT_REALLY_EXTERN (d))
11418 mark_definable (d);
11420 input_location = DECL_SOURCE_LOCATION (d);
11422 if (! pattern_defined && DECL_EXPLICIT_INSTANTIATION (d) && undefined_ok)
11424 DECL_NOT_REALLY_EXTERN (d) = 0;
11425 SET_DECL_IMPLICIT_INSTANTIATION (d);
11428 if (!defer_ok)
11430 /* Recheck the substitutions to obtain any warning messages
11431 about ignoring cv qualifiers. */
11432 tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
11433 tree type = TREE_TYPE (gen);
11435 /* Make sure that we can see identifiers, and compute access
11436 correctly. D is already the target FUNCTION_DECL with the
11437 right context. */
11438 push_access_scope (d);
11440 if (TREE_CODE (gen) == FUNCTION_DECL)
11442 tsubst (DECL_ARGUMENTS (gen), gen_args, tf_error | tf_warning, d);
11443 tsubst (TYPE_RAISES_EXCEPTIONS (type), gen_args,
11444 tf_error | tf_warning, d);
11445 /* Don't simply tsubst the function type, as that will give
11446 duplicate warnings about poor parameter qualifications.
11447 The function arguments are the same as the decl_arguments
11448 without the top level cv qualifiers. */
11449 type = TREE_TYPE (type);
11451 tsubst (type, gen_args, tf_error | tf_warning, d);
11453 pop_access_scope (d);
11456 /* We should have set up DECL_INITIAL in instantiate_class_template
11457 for in-class definitions of static data members. */
11458 gcc_assert (!(TREE_CODE (d) == VAR_DECL
11459 && DECL_INITIALIZED_IN_CLASS_P (d)
11460 && DECL_INITIAL (d) == NULL_TREE));
11462 /* Do not instantiate templates that we know will be defined
11463 elsewhere. */
11464 if (DECL_INTERFACE_KNOWN (d)
11465 && DECL_REALLY_EXTERN (d)
11466 && ! (TREE_CODE (d) == FUNCTION_DECL
11467 && DECL_INLINE (d)))
11468 goto out;
11469 /* Defer all other templates, unless we have been explicitly
11470 forbidden from doing so. We restore the source position here
11471 because it's used by add_pending_template. */
11472 else if (! pattern_defined || defer_ok)
11474 input_location = saved_loc;
11476 if (at_eof && !pattern_defined
11477 && DECL_EXPLICIT_INSTANTIATION (d))
11478 /* [temp.explicit]
11480 The definition of a non-exported function template, a
11481 non-exported member function template, or a non-exported
11482 member function or static data member of a class template
11483 shall be present in every translation unit in which it is
11484 explicitly instantiated. */
11485 pedwarn
11486 ("explicit instantiation of %qD but no definition available", d);
11488 add_pending_template (d);
11489 goto out;
11491 /* Tell the repository that D is available in this translation unit
11492 -- and see if it is supposed to be instantiated here. */
11493 if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
11495 /* In a PCH file, despite the fact that the repository hasn't
11496 requested instantiation in the PCH it is still possible that
11497 an instantiation will be required in a file that includes the
11498 PCH. */
11499 if (pch_file)
11500 add_pending_template (d);
11501 /* Instantiate inline functions so that the inliner can do its
11502 job, even though we'll not be emitting a copy of this
11503 function. */
11504 if (!(TREE_CODE (d) == FUNCTION_DECL
11505 && flag_inline_trees
11506 && DECL_DECLARED_INLINE_P (d)))
11507 goto out;
11510 need_push = !cfun || !global_bindings_p ();
11511 if (need_push)
11512 push_to_top_level ();
11514 /* Mark D as instantiated so that recursive calls to
11515 instantiate_decl do not try to instantiate it again. */
11516 DECL_TEMPLATE_INSTANTIATED (d) = 1;
11518 /* Regenerate the declaration in case the template has been modified
11519 by a subsequent redeclaration. */
11520 regenerate_decl_from_template (d, td);
11522 /* We already set the file and line above. Reset them now in case
11523 they changed as a result of calling regenerate_decl_from_template. */
11524 input_location = DECL_SOURCE_LOCATION (d);
11526 if (TREE_CODE (d) == VAR_DECL)
11528 /* Clear out DECL_RTL; whatever was there before may not be right
11529 since we've reset the type of the declaration. */
11530 SET_DECL_RTL (d, NULL_RTX);
11531 DECL_IN_AGGR_P (d) = 0;
11533 /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
11534 initializer. That function will defer actual emission until
11535 we have a chance to determine linkage. */
11536 DECL_EXTERNAL (d) = 0;
11538 /* Enter the scope of D so that access-checking works correctly. */
11539 push_nested_class (DECL_CONTEXT (d));
11540 cp_finish_decl (d,
11541 (!DECL_INITIALIZED_IN_CLASS_P (d)
11542 ? DECL_INITIAL (d) : NULL_TREE),
11543 NULL_TREE, 0);
11544 pop_nested_class ();
11546 else if (TREE_CODE (d) == FUNCTION_DECL)
11548 htab_t saved_local_specializations;
11549 tree subst_decl;
11550 tree tmpl_parm;
11551 tree spec_parm;
11553 /* Save away the current list, in case we are instantiating one
11554 template from within the body of another. */
11555 saved_local_specializations = local_specializations;
11557 /* Set up the list of local specializations. */
11558 local_specializations = htab_create (37,
11559 hash_local_specialization,
11560 eq_local_specializations,
11561 NULL);
11563 /* Set up context. */
11564 start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
11566 /* Create substitution entries for the parameters. */
11567 subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
11568 tmpl_parm = DECL_ARGUMENTS (subst_decl);
11569 spec_parm = DECL_ARGUMENTS (d);
11570 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
11572 register_local_specialization (spec_parm, tmpl_parm);
11573 spec_parm = skip_artificial_parms_for (d, spec_parm);
11574 tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
11576 while (tmpl_parm)
11578 register_local_specialization (spec_parm, tmpl_parm);
11579 tmpl_parm = TREE_CHAIN (tmpl_parm);
11580 spec_parm = TREE_CHAIN (spec_parm);
11582 gcc_assert (!spec_parm);
11584 /* Substitute into the body of the function. */
11585 tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
11586 tf_error | tf_warning, tmpl);
11588 /* We don't need the local specializations any more. */
11589 htab_delete (local_specializations);
11590 local_specializations = saved_local_specializations;
11592 /* Finish the function. */
11593 d = finish_function (0);
11594 expand_or_defer_fn (d);
11597 /* We're not deferring instantiation any more. */
11598 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
11600 if (need_push)
11601 pop_from_top_level ();
11603 out:
11604 input_location = saved_loc;
11605 pop_deferring_access_checks ();
11606 pop_tinst_level ();
11608 timevar_pop (TV_PARSE);
11610 return d;
11613 /* Run through the list of templates that we wish we could
11614 instantiate, and instantiate any we can. RETRIES is the
11615 number of times we retry pending template instantiation. */
11617 void
11618 instantiate_pending_templates (int retries)
11620 tree *t;
11621 tree last = NULL_TREE;
11622 int reconsider;
11623 location_t saved_loc = input_location;
11624 int saved_in_system_header = in_system_header;
11626 /* Instantiating templates may trigger vtable generation. This in turn
11627 may require further template instantiations. We place a limit here
11628 to avoid infinite loop. */
11629 if (pending_templates && retries >= max_tinst_depth)
11631 cp_error_at ("template instantiation depth exceeds maximum of %d"
11632 " (use -ftemplate-depth-NN to increase the maximum)"
11633 " instantiating %q+D, possibly from virtual table"
11634 " generation",
11635 max_tinst_depth, TREE_VALUE (pending_templates));
11636 return;
11641 reconsider = 0;
11643 t = &pending_templates;
11644 while (*t)
11646 tree instantiation = TREE_VALUE (*t);
11648 reopen_tinst_level (TREE_PURPOSE (*t));
11650 if (TYPE_P (instantiation))
11652 tree fn;
11654 if (!COMPLETE_TYPE_P (instantiation))
11656 instantiate_class_template (instantiation);
11657 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
11658 for (fn = TYPE_METHODS (instantiation);
11660 fn = TREE_CHAIN (fn))
11661 if (! DECL_ARTIFICIAL (fn))
11662 instantiate_decl (fn, /*defer_ok=*/0,
11663 /*undefined_ok=*/0);
11664 if (COMPLETE_TYPE_P (instantiation))
11665 reconsider = 1;
11668 if (COMPLETE_TYPE_P (instantiation))
11669 /* If INSTANTIATION has been instantiated, then we don't
11670 need to consider it again in the future. */
11671 *t = TREE_CHAIN (*t);
11672 else
11674 last = *t;
11675 t = &TREE_CHAIN (*t);
11678 else
11680 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
11681 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
11683 instantiation = instantiate_decl (instantiation,
11684 /*defer_ok=*/0,
11685 /*undefined_ok=*/0);
11686 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
11687 reconsider = 1;
11690 if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
11691 || DECL_TEMPLATE_INSTANTIATED (instantiation))
11692 /* If INSTANTIATION has been instantiated, then we don't
11693 need to consider it again in the future. */
11694 *t = TREE_CHAIN (*t);
11695 else
11697 last = *t;
11698 t = &TREE_CHAIN (*t);
11701 tinst_depth = 0;
11702 current_tinst_level = NULL_TREE;
11704 last_pending_template = last;
11706 while (reconsider);
11708 input_location = saved_loc;
11709 in_system_header = saved_in_system_header;
11712 /* Substitute ARGVEC into T, which is a list of initializers for
11713 either base class or a non-static data member. The TREE_PURPOSEs
11714 are DECLs, and the TREE_VALUEs are the initializer values. Used by
11715 instantiate_decl. */
11717 static tree
11718 tsubst_initializer_list (tree t, tree argvec)
11720 tree inits = NULL_TREE;
11722 for (; t; t = TREE_CHAIN (t))
11724 tree decl;
11725 tree init;
11727 decl = tsubst_copy (TREE_PURPOSE (t), argvec, tf_error | tf_warning,
11728 NULL_TREE);
11729 decl = expand_member_init (decl);
11730 if (decl && !DECL_P (decl))
11731 in_base_initializer = 1;
11733 init = tsubst_expr (TREE_VALUE (t), argvec, tf_error | tf_warning,
11734 NULL_TREE);
11735 in_base_initializer = 0;
11737 if (decl)
11739 init = build_tree_list (decl, init);
11740 TREE_CHAIN (init) = inits;
11741 inits = init;
11744 return inits;
11747 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
11749 static void
11750 set_current_access_from_decl (tree decl)
11752 if (TREE_PRIVATE (decl))
11753 current_access_specifier = access_private_node;
11754 else if (TREE_PROTECTED (decl))
11755 current_access_specifier = access_protected_node;
11756 else
11757 current_access_specifier = access_public_node;
11760 /* Instantiate an enumerated type. TAG is the template type, NEWTAG
11761 is the instantiation (which should have been created with
11762 start_enum) and ARGS are the template arguments to use. */
11764 static void
11765 tsubst_enum (tree tag, tree newtag, tree args)
11767 tree e;
11769 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
11771 tree value;
11772 tree decl;
11774 decl = TREE_VALUE (e);
11775 /* Note that in a template enum, the TREE_VALUE is the
11776 CONST_DECL, not the corresponding INTEGER_CST. */
11777 value = tsubst_expr (DECL_INITIAL (decl),
11778 args, tf_error | tf_warning,
11779 NULL_TREE);
11781 /* Give this enumeration constant the correct access. */
11782 set_current_access_from_decl (decl);
11784 /* Actually build the enumerator itself. */
11785 build_enumerator (DECL_NAME (decl), value, newtag);
11788 finish_enum (newtag);
11789 DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
11790 = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
11793 /* DECL is a FUNCTION_DECL that is a template specialization. Return
11794 its type -- but without substituting the innermost set of template
11795 arguments. So, innermost set of template parameters will appear in
11796 the type. */
11798 tree
11799 get_mostly_instantiated_function_type (tree decl)
11801 tree fn_type;
11802 tree tmpl;
11803 tree targs;
11804 tree tparms;
11805 int parm_depth;
11807 tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11808 targs = DECL_TI_ARGS (decl);
11809 tparms = DECL_TEMPLATE_PARMS (tmpl);
11810 parm_depth = TMPL_PARMS_DEPTH (tparms);
11812 /* There should be as many levels of arguments as there are levels
11813 of parameters. */
11814 gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
11816 fn_type = TREE_TYPE (tmpl);
11818 if (parm_depth == 1)
11819 /* No substitution is necessary. */
11821 else
11823 int i, save_access_control;
11824 tree partial_args;
11826 /* Replace the innermost level of the TARGS with NULL_TREEs to
11827 let tsubst know not to substitute for those parameters. */
11828 partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
11829 for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
11830 SET_TMPL_ARGS_LEVEL (partial_args, i,
11831 TMPL_ARGS_LEVEL (targs, i));
11832 SET_TMPL_ARGS_LEVEL (partial_args,
11833 TMPL_ARGS_DEPTH (targs),
11834 make_tree_vec (DECL_NTPARMS (tmpl)));
11836 /* Disable access control as this function is used only during
11837 name-mangling. */
11838 save_access_control = flag_access_control;
11839 flag_access_control = 0;
11841 ++processing_template_decl;
11842 /* Now, do the (partial) substitution to figure out the
11843 appropriate function type. */
11844 fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
11845 --processing_template_decl;
11847 /* Substitute into the template parameters to obtain the real
11848 innermost set of parameters. This step is important if the
11849 innermost set of template parameters contains value
11850 parameters whose types depend on outer template parameters. */
11851 TREE_VEC_LENGTH (partial_args)--;
11852 tparms = tsubst_template_parms (tparms, partial_args, tf_error);
11854 flag_access_control = save_access_control;
11857 return fn_type;
11860 /* Return truthvalue if we're processing a template different from
11861 the last one involved in diagnostics. */
11863 problematic_instantiation_changed (void)
11865 return last_template_error_tick != tinst_level_tick;
11868 /* Remember current template involved in diagnostics. */
11869 void
11870 record_last_problematic_instantiation (void)
11872 last_template_error_tick = tinst_level_tick;
11875 tree
11876 current_instantiation (void)
11878 return current_tinst_level;
11881 /* [temp.param] Check that template non-type parm TYPE is of an allowable
11882 type. Return zero for ok, nonzero for disallowed. Issue error and
11883 warning messages under control of COMPLAIN. */
11885 static int
11886 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
11888 if (INTEGRAL_TYPE_P (type))
11889 return 0;
11890 else if (POINTER_TYPE_P (type))
11891 return 0;
11892 else if (TYPE_PTR_TO_MEMBER_P (type))
11893 return 0;
11894 else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11895 return 0;
11896 else if (TREE_CODE (type) == TYPENAME_TYPE)
11897 return 0;
11899 if (complain & tf_error)
11900 error ("%q#T is not a valid type for a template constant parameter", type);
11901 return 1;
11904 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
11905 Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
11907 static bool
11908 dependent_type_p_r (tree type)
11910 tree scope;
11912 /* [temp.dep.type]
11914 A type is dependent if it is:
11916 -- a template parameter. Template template parameters are types
11917 for us (since TYPE_P holds true for them) so we handle
11918 them here. */
11919 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
11920 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
11921 return true;
11922 /* -- a qualified-id with a nested-name-specifier which contains a
11923 class-name that names a dependent type or whose unqualified-id
11924 names a dependent type. */
11925 if (TREE_CODE (type) == TYPENAME_TYPE)
11926 return true;
11927 /* -- a cv-qualified type where the cv-unqualified type is
11928 dependent. */
11929 type = TYPE_MAIN_VARIANT (type);
11930 /* -- a compound type constructed from any dependent type. */
11931 if (TYPE_PTR_TO_MEMBER_P (type))
11932 return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
11933 || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
11934 (type)));
11935 else if (TREE_CODE (type) == POINTER_TYPE
11936 || TREE_CODE (type) == REFERENCE_TYPE)
11937 return dependent_type_p (TREE_TYPE (type));
11938 else if (TREE_CODE (type) == FUNCTION_TYPE
11939 || TREE_CODE (type) == METHOD_TYPE)
11941 tree arg_type;
11943 if (dependent_type_p (TREE_TYPE (type)))
11944 return true;
11945 for (arg_type = TYPE_ARG_TYPES (type);
11946 arg_type;
11947 arg_type = TREE_CHAIN (arg_type))
11948 if (dependent_type_p (TREE_VALUE (arg_type)))
11949 return true;
11950 return false;
11952 /* -- an array type constructed from any dependent type or whose
11953 size is specified by a constant expression that is
11954 value-dependent. */
11955 if (TREE_CODE (type) == ARRAY_TYPE)
11957 if (TYPE_DOMAIN (type)
11958 && ((value_dependent_expression_p
11959 (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
11960 || (type_dependent_expression_p
11961 (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
11962 return true;
11963 return dependent_type_p (TREE_TYPE (type));
11966 /* -- a template-id in which either the template name is a template
11967 parameter ... */
11968 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
11969 return true;
11970 /* ... or any of the template arguments is a dependent type or
11971 an expression that is type-dependent or value-dependent. */
11972 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
11973 && (any_dependent_template_arguments_p
11974 (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
11975 return true;
11977 /* All TYPEOF_TYPEs are dependent; if the argument of the `typeof'
11978 expression is not type-dependent, then it should already been
11979 have resolved. */
11980 if (TREE_CODE (type) == TYPEOF_TYPE)
11981 return true;
11983 /* The standard does not specifically mention types that are local
11984 to template functions or local classes, but they should be
11985 considered dependent too. For example:
11987 template <int I> void f() {
11988 enum E { a = I };
11989 S<sizeof (E)> s;
11992 The size of `E' cannot be known until the value of `I' has been
11993 determined. Therefore, `E' must be considered dependent. */
11994 scope = TYPE_CONTEXT (type);
11995 if (scope && TYPE_P (scope))
11996 return dependent_type_p (scope);
11997 else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
11998 return type_dependent_expression_p (scope);
12000 /* Other types are non-dependent. */
12001 return false;
12004 /* Returns TRUE if TYPE is dependent, in the sense of
12005 [temp.dep.type]. */
12007 bool
12008 dependent_type_p (tree type)
12010 /* If there are no template parameters in scope, then there can't be
12011 any dependent types. */
12012 if (!processing_template_decl)
12013 return false;
12015 /* If the type is NULL, we have not computed a type for the entity
12016 in question; in that case, the type is dependent. */
12017 if (!type)
12018 return true;
12020 /* Erroneous types can be considered non-dependent. */
12021 if (type == error_mark_node)
12022 return false;
12024 /* If we have not already computed the appropriate value for TYPE,
12025 do so now. */
12026 if (!TYPE_DEPENDENT_P_VALID (type))
12028 TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
12029 TYPE_DEPENDENT_P_VALID (type) = 1;
12032 return TYPE_DEPENDENT_P (type);
12035 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION. */
12037 static bool
12038 dependent_scope_ref_p (tree expression, bool criterion (tree))
12040 tree scope;
12041 tree name;
12043 gcc_assert (TREE_CODE (expression) == SCOPE_REF);
12045 if (!TYPE_P (TREE_OPERAND (expression, 0)))
12046 return true;
12048 scope = TREE_OPERAND (expression, 0);
12049 name = TREE_OPERAND (expression, 1);
12051 /* [temp.dep.expr]
12053 An id-expression is type-dependent if it contains a
12054 nested-name-specifier that contains a class-name that names a
12055 dependent type. */
12056 /* The suggested resolution to Core Issue 2 implies that if the
12057 qualifying type is the current class, then we must peek
12058 inside it. */
12059 if (DECL_P (name)
12060 && currently_open_class (scope)
12061 && !criterion (name))
12062 return false;
12063 if (dependent_type_p (scope))
12064 return true;
12066 return false;
12069 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
12070 [temp.dep.constexpr] */
12072 bool
12073 value_dependent_expression_p (tree expression)
12075 if (!processing_template_decl)
12076 return false;
12078 /* A name declared with a dependent type. */
12079 if (TREE_CODE (expression) == IDENTIFIER_NODE
12080 || (DECL_P (expression)
12081 && type_dependent_expression_p (expression)))
12082 return true;
12083 /* A non-type template parameter. */
12084 if ((TREE_CODE (expression) == CONST_DECL
12085 && DECL_TEMPLATE_PARM_P (expression))
12086 || TREE_CODE (expression) == TEMPLATE_PARM_INDEX)
12087 return true;
12088 /* A constant with integral or enumeration type and is initialized
12089 with an expression that is value-dependent. */
12090 if (TREE_CODE (expression) == VAR_DECL
12091 && DECL_INITIAL (expression)
12092 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
12093 && value_dependent_expression_p (DECL_INITIAL (expression)))
12094 return true;
12095 /* These expressions are value-dependent if the type to which the
12096 cast occurs is dependent or the expression being casted is
12097 value-dependent. */
12098 if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
12099 || TREE_CODE (expression) == STATIC_CAST_EXPR
12100 || TREE_CODE (expression) == CONST_CAST_EXPR
12101 || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
12102 || TREE_CODE (expression) == CAST_EXPR)
12104 tree type = TREE_TYPE (expression);
12105 if (dependent_type_p (type))
12106 return true;
12107 /* A functional cast has a list of operands. */
12108 expression = TREE_OPERAND (expression, 0);
12109 if (!expression)
12111 /* If there are no operands, it must be an expression such
12112 as "int()". This should not happen for aggregate types
12113 because it would form non-constant expressions. */
12114 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
12116 return false;
12118 if (TREE_CODE (expression) == TREE_LIST)
12122 if (value_dependent_expression_p (TREE_VALUE (expression)))
12123 return true;
12124 expression = TREE_CHAIN (expression);
12126 while (expression);
12127 return false;
12129 else
12130 return value_dependent_expression_p (expression);
12132 /* A `sizeof' expression is value-dependent if the operand is
12133 type-dependent. */
12134 if (TREE_CODE (expression) == SIZEOF_EXPR
12135 || TREE_CODE (expression) == ALIGNOF_EXPR)
12137 expression = TREE_OPERAND (expression, 0);
12138 if (TYPE_P (expression))
12139 return dependent_type_p (expression);
12140 return type_dependent_expression_p (expression);
12142 if (TREE_CODE (expression) == SCOPE_REF)
12143 return dependent_scope_ref_p (expression, value_dependent_expression_p);
12144 if (TREE_CODE (expression) == COMPONENT_REF)
12145 return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
12146 || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
12148 /* A CALL_EXPR is value-dependent if any argument is
12149 value-dependent. Why do we have to handle CALL_EXPRs in this
12150 function at all? First, some function calls, those for which
12151 value_dependent_expression_p is true, man appear in constant
12152 expressions. Second, there appear to be bugs which result in
12153 other CALL_EXPRs reaching this point. */
12154 if (TREE_CODE (expression) == CALL_EXPR)
12156 tree function = TREE_OPERAND (expression, 0);
12157 tree args = TREE_OPERAND (expression, 1);
12159 if (value_dependent_expression_p (function))
12160 return true;
12161 else if (! args)
12162 return false;
12163 else if (TREE_CODE (args) == TREE_LIST)
12167 if (value_dependent_expression_p (TREE_VALUE (args)))
12168 return true;
12169 args = TREE_CHAIN (args);
12171 while (args);
12172 return false;
12174 else
12175 return value_dependent_expression_p (args);
12177 /* A constant expression is value-dependent if any subexpression is
12178 value-dependent. */
12179 if (EXPR_P (expression))
12181 switch (TREE_CODE_CLASS (TREE_CODE (expression)))
12183 case tcc_reference:
12184 case tcc_unary:
12185 return (value_dependent_expression_p
12186 (TREE_OPERAND (expression, 0)));
12187 case tcc_comparison:
12188 case tcc_binary:
12189 return ((value_dependent_expression_p
12190 (TREE_OPERAND (expression, 0)))
12191 || (value_dependent_expression_p
12192 (TREE_OPERAND (expression, 1))));
12193 case tcc_expression:
12195 int i;
12196 for (i = 0; i < TREE_CODE_LENGTH (TREE_CODE (expression)); ++i)
12197 /* In some cases, some of the operands may be missing.
12198 (For example, in the case of PREDECREMENT_EXPR, the
12199 amount to increment by may be missing.) That doesn't
12200 make the expression dependent. */
12201 if (TREE_OPERAND (expression, i)
12202 && (value_dependent_expression_p
12203 (TREE_OPERAND (expression, i))))
12204 return true;
12205 return false;
12207 case tcc_statement:
12208 /* These cannot be value dependent. */
12209 return false;
12211 default:
12212 gcc_unreachable ();
12216 /* The expression is not value-dependent. */
12217 return false;
12220 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
12221 [temp.dep.expr]. */
12223 bool
12224 type_dependent_expression_p (tree expression)
12226 if (!processing_template_decl)
12227 return false;
12229 if (expression == error_mark_node)
12230 return false;
12232 /* An unresolved name is always dependent. */
12233 if (TREE_CODE (expression) == IDENTIFIER_NODE)
12234 return true;
12236 /* Some expression forms are never type-dependent. */
12237 if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
12238 || TREE_CODE (expression) == SIZEOF_EXPR
12239 || TREE_CODE (expression) == ALIGNOF_EXPR
12240 || TREE_CODE (expression) == TYPEID_EXPR
12241 || TREE_CODE (expression) == DELETE_EXPR
12242 || TREE_CODE (expression) == VEC_DELETE_EXPR
12243 || TREE_CODE (expression) == THROW_EXPR)
12244 return false;
12246 /* The types of these expressions depends only on the type to which
12247 the cast occurs. */
12248 if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
12249 || TREE_CODE (expression) == STATIC_CAST_EXPR
12250 || TREE_CODE (expression) == CONST_CAST_EXPR
12251 || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
12252 || TREE_CODE (expression) == CAST_EXPR)
12253 return dependent_type_p (TREE_TYPE (expression));
12255 /* The types of these expressions depends only on the type created
12256 by the expression. */
12257 if (TREE_CODE (expression) == NEW_EXPR
12258 || TREE_CODE (expression) == VEC_NEW_EXPR)
12260 /* For NEW_EXPR tree nodes created inside a template, either
12261 the object type itself or a TREE_LIST may appear as the
12262 operand 1. */
12263 tree type = TREE_OPERAND (expression, 1);
12264 if (TREE_CODE (type) == TREE_LIST)
12265 /* This is an array type. We need to check array dimensions
12266 as well. */
12267 return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
12268 || value_dependent_expression_p
12269 (TREE_OPERAND (TREE_VALUE (type), 1));
12270 else
12271 return dependent_type_p (type);
12274 if (TREE_CODE (expression) == SCOPE_REF
12275 && dependent_scope_ref_p (expression,
12276 type_dependent_expression_p))
12277 return true;
12279 if (TREE_CODE (expression) == FUNCTION_DECL
12280 && DECL_LANG_SPECIFIC (expression)
12281 && DECL_TEMPLATE_INFO (expression)
12282 && (any_dependent_template_arguments_p
12283 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
12284 return true;
12286 if (TREE_CODE (expression) == TEMPLATE_DECL
12287 && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
12288 return false;
12290 if (TREE_TYPE (expression) == unknown_type_node)
12292 if (TREE_CODE (expression) == ADDR_EXPR)
12293 return type_dependent_expression_p (TREE_OPERAND (expression, 0));
12294 if (TREE_CODE (expression) == COMPONENT_REF
12295 || TREE_CODE (expression) == OFFSET_REF)
12297 if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
12298 return true;
12299 expression = TREE_OPERAND (expression, 1);
12300 if (TREE_CODE (expression) == IDENTIFIER_NODE)
12301 return false;
12303 /* SCOPE_REF with non-null TREE_TYPE is always non-dependent. */
12304 if (TREE_CODE (expression) == SCOPE_REF)
12305 return false;
12307 if (TREE_CODE (expression) == BASELINK)
12308 expression = BASELINK_FUNCTIONS (expression);
12310 if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
12312 if (any_dependent_template_arguments_p
12313 (TREE_OPERAND (expression, 1)))
12314 return true;
12315 expression = TREE_OPERAND (expression, 0);
12317 gcc_assert (TREE_CODE (expression) == OVERLOAD);
12319 while (expression)
12321 if (type_dependent_expression_p (OVL_CURRENT (expression)))
12322 return true;
12323 expression = OVL_NEXT (expression);
12325 return false;
12328 return (dependent_type_p (TREE_TYPE (expression)));
12331 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
12332 contains a type-dependent expression. */
12334 bool
12335 any_type_dependent_arguments_p (tree args)
12337 while (args)
12339 tree arg = TREE_VALUE (args);
12341 if (type_dependent_expression_p (arg))
12342 return true;
12343 args = TREE_CHAIN (args);
12345 return false;
12348 /* Returns TRUE if the ARG (a template argument) is dependent. */
12350 static bool
12351 dependent_template_arg_p (tree arg)
12353 if (!processing_template_decl)
12354 return false;
12356 if (TREE_CODE (arg) == TEMPLATE_DECL
12357 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
12358 return dependent_template_p (arg);
12359 else if (TYPE_P (arg))
12360 return dependent_type_p (arg);
12361 else
12362 return (type_dependent_expression_p (arg)
12363 || value_dependent_expression_p (arg));
12366 /* Returns true if ARGS (a collection of template arguments) contains
12367 any dependent arguments. */
12369 bool
12370 any_dependent_template_arguments_p (tree args)
12372 int i;
12373 int j;
12375 if (!args)
12376 return false;
12378 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
12380 tree level = TMPL_ARGS_LEVEL (args, i + 1);
12381 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
12382 if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
12383 return true;
12386 return false;
12389 /* Returns TRUE if the template TMPL is dependent. */
12391 bool
12392 dependent_template_p (tree tmpl)
12394 if (TREE_CODE (tmpl) == OVERLOAD)
12396 while (tmpl)
12398 if (dependent_template_p (OVL_FUNCTION (tmpl)))
12399 return true;
12400 tmpl = OVL_CHAIN (tmpl);
12402 return false;
12405 /* Template template parameters are dependent. */
12406 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
12407 || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
12408 return true;
12409 /* So are names that have not been looked up. */
12410 if (TREE_CODE (tmpl) == SCOPE_REF
12411 || TREE_CODE (tmpl) == IDENTIFIER_NODE)
12412 return true;
12413 /* So are member templates of dependent classes. */
12414 if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
12415 return dependent_type_p (DECL_CONTEXT (tmpl));
12416 return false;
12419 /* Returns TRUE if the specialization TMPL<ARGS> is dependent. */
12421 bool
12422 dependent_template_id_p (tree tmpl, tree args)
12424 return (dependent_template_p (tmpl)
12425 || any_dependent_template_arguments_p (args));
12428 /* TYPE is a TYPENAME_TYPE. Returns the ordinary TYPE to which the
12429 TYPENAME_TYPE corresponds. Returns ERROR_MARK_NODE if no such TYPE
12430 can be found. Note that this function peers inside uninstantiated
12431 templates and therefore should be used only in extremely limited
12432 situations. */
12434 tree
12435 resolve_typename_type (tree type, bool only_current_p)
12437 tree scope;
12438 tree name;
12439 tree decl;
12440 int quals;
12441 tree pushed_scope;
12443 gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
12445 scope = TYPE_CONTEXT (type);
12446 name = TYPE_IDENTIFIER (type);
12448 /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
12449 it first before we can figure out what NAME refers to. */
12450 if (TREE_CODE (scope) == TYPENAME_TYPE)
12451 scope = resolve_typename_type (scope, only_current_p);
12452 /* If we don't know what SCOPE refers to, then we cannot resolve the
12453 TYPENAME_TYPE. */
12454 if (scope == error_mark_node || TREE_CODE (scope) == TYPENAME_TYPE)
12455 return error_mark_node;
12456 /* If the SCOPE is a template type parameter, we have no way of
12457 resolving the name. */
12458 if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
12459 return type;
12460 /* If the SCOPE is not the current instantiation, there's no reason
12461 to look inside it. */
12462 if (only_current_p && !currently_open_class (scope))
12463 return error_mark_node;
12464 /* If SCOPE is a partial instantiation, it will not have a valid
12465 TYPE_FIELDS list, so use the original template. */
12466 scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
12467 /* Enter the SCOPE so that name lookup will be resolved as if we
12468 were in the class definition. In particular, SCOPE will no
12469 longer be considered a dependent type. */
12470 pushed_scope = push_scope (scope);
12471 /* Look up the declaration. */
12472 decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
12473 /* Obtain the set of qualifiers applied to the TYPE. */
12474 quals = cp_type_quals (type);
12475 /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
12476 find a TEMPLATE_DECL. Otherwise, we want to find a TYPE_DECL. */
12477 if (!decl)
12478 type = error_mark_node;
12479 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
12480 && TREE_CODE (decl) == TYPE_DECL)
12481 type = TREE_TYPE (decl);
12482 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
12483 && DECL_CLASS_TEMPLATE_P (decl))
12485 tree tmpl;
12486 tree args;
12487 /* Obtain the template and the arguments. */
12488 tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
12489 args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
12490 /* Instantiate the template. */
12491 type = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
12492 /*entering_scope=*/0, tf_error | tf_user);
12494 else
12495 type = error_mark_node;
12496 /* Qualify the resulting type. */
12497 if (type != error_mark_node && quals)
12498 type = cp_build_qualified_type (type, quals);
12499 /* Leave the SCOPE. */
12500 if (pushed_scope)
12501 pop_scope (pushed_scope);
12503 return type;
12506 /* EXPR is an expression which is not type-dependent. Return a proxy
12507 for EXPR that can be used to compute the types of larger
12508 expressions containing EXPR. */
12510 tree
12511 build_non_dependent_expr (tree expr)
12513 tree inner_expr;
12515 /* Preserve null pointer constants so that the type of things like
12516 "p == 0" where "p" is a pointer can be determined. */
12517 if (null_ptr_cst_p (expr))
12518 return expr;
12519 /* Preserve OVERLOADs; the functions must be available to resolve
12520 types. */
12521 inner_expr = (TREE_CODE (expr) == ADDR_EXPR ?
12522 TREE_OPERAND (expr, 0) : expr);
12523 if (is_overloaded_fn (inner_expr)
12524 || TREE_CODE (inner_expr) == OFFSET_REF)
12525 return expr;
12526 /* There is no need to return a proxy for a variable. */
12527 if (TREE_CODE (expr) == VAR_DECL)
12528 return expr;
12529 /* Preserve string constants; conversions from string constants to
12530 "char *" are allowed, even though normally a "const char *"
12531 cannot be used to initialize a "char *". */
12532 if (TREE_CODE (expr) == STRING_CST)
12533 return expr;
12534 /* Preserve arithmetic constants, as an optimization -- there is no
12535 reason to create a new node. */
12536 if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
12537 return expr;
12538 /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
12539 There is at least one place where we want to know that a
12540 particular expression is a throw-expression: when checking a ?:
12541 expression, there are special rules if the second or third
12542 argument is a throw-expression. */
12543 if (TREE_CODE (expr) == THROW_EXPR)
12544 return expr;
12546 if (TREE_CODE (expr) == COND_EXPR)
12547 return build3 (COND_EXPR,
12548 TREE_TYPE (expr),
12549 TREE_OPERAND (expr, 0),
12550 (TREE_OPERAND (expr, 1)
12551 ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
12552 : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
12553 build_non_dependent_expr (TREE_OPERAND (expr, 2)));
12554 if (TREE_CODE (expr) == COMPOUND_EXPR
12555 && !COMPOUND_EXPR_OVERLOADED (expr))
12556 return build2 (COMPOUND_EXPR,
12557 TREE_TYPE (expr),
12558 TREE_OPERAND (expr, 0),
12559 build_non_dependent_expr (TREE_OPERAND (expr, 1)));
12561 /* Otherwise, build a NON_DEPENDENT_EXPR.
12563 REFERENCE_TYPEs are not stripped for expressions in templates
12564 because doing so would play havoc with mangling. Consider, for
12565 example:
12567 template <typename T> void f<T& g>() { g(); }
12569 In the body of "f", the expression for "g" will have
12570 REFERENCE_TYPE, even though the standard says that it should
12571 not. The reason is that we must preserve the syntactic form of
12572 the expression so that mangling (say) "f<g>" inside the body of
12573 "f" works out correctly. Therefore, the REFERENCE_TYPE is
12574 stripped here. */
12575 return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
12578 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
12579 Return a new TREE_LIST with the various arguments replaced with
12580 equivalent non-dependent expressions. */
12582 tree
12583 build_non_dependent_args (tree args)
12585 tree a;
12586 tree new_args;
12588 new_args = NULL_TREE;
12589 for (a = args; a; a = TREE_CHAIN (a))
12590 new_args = tree_cons (NULL_TREE,
12591 build_non_dependent_expr (TREE_VALUE (a)),
12592 new_args);
12593 return nreverse (new_args);
12596 #include "gt-cp-pt.h"