]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/cp/pt.c
re PR c++/19498 (ICE on invalid reference in template parameter)
[thirdparty/gcc.git] / gcc / cp / pt.c
1 /* Handle parameterized types (templates) for GNU C++.
2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
4 Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
5 Rewritten by Jason Merrill (jason@cygnus.com).
6
7 This file is part of GCC.
8
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.
13
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.
18
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING. If not, write to
21 the Free Software Foundation, 51 Franklin Street, Fifth Floor,
22 Boston, MA 02110-1301, USA. */
23
24 /* Known bugs or deficiencies include:
25
26 all methods must be provided in header files; can't use a source
27 file that contains only the method templates and "just win". */
28
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "tm.h"
33 #include "obstack.h"
34 #include "tree.h"
35 #include "pointer-set.h"
36 #include "flags.h"
37 #include "c-common.h"
38 #include "cp-tree.h"
39 #include "cp-objcp-common.h"
40 #include "tree-inline.h"
41 #include "decl.h"
42 #include "output.h"
43 #include "except.h"
44 #include "toplev.h"
45 #include "rtl.h"
46 #include "timevar.h"
47 #include "tree-iterator.h"
48
49 /* The type of functions taking a tree, and some additional data, and
50 returning an int. */
51 typedef int (*tree_fn_t) (tree, void*);
52
53 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
54 instantiations have been deferred, either because their definitions
55 were not yet available, or because we were putting off doing the work.
56 The TREE_PURPOSE of each entry is either a DECL (for a function or
57 static data member), or a TYPE (for a class) indicating what we are
58 hoping to instantiate. The TREE_VALUE is not used. */
59 static GTY(()) tree pending_templates;
60 static GTY(()) tree last_pending_template;
61
62 int processing_template_parmlist;
63 static int template_header_count;
64
65 static GTY(()) tree saved_trees;
66 static GTY(()) varray_type inline_parm_levels;
67 static size_t inline_parm_levels_used;
68
69 static GTY(()) tree current_tinst_level;
70
71 static GTY(()) tree saved_access_scope;
72
73 /* Live only within one (recursive) call to tsubst_expr. We use
74 this to pass the statement expression node from the STMT_EXPR
75 to the EXPR_STMT that is its result. */
76 static tree cur_stmt_expr;
77
78 /* A map from local variable declarations in the body of the template
79 presently being instantiated to the corresponding instantiated
80 local variables. */
81 static htab_t local_specializations;
82
83 #define UNIFY_ALLOW_NONE 0
84 #define UNIFY_ALLOW_MORE_CV_QUAL 1
85 #define UNIFY_ALLOW_LESS_CV_QUAL 2
86 #define UNIFY_ALLOW_DERIVED 4
87 #define UNIFY_ALLOW_INTEGER 8
88 #define UNIFY_ALLOW_OUTER_LEVEL 16
89 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
90 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
91
92 static void push_access_scope (tree);
93 static void pop_access_scope (tree);
94 static int resolve_overloaded_unification (tree, tree, tree, tree,
95 unification_kind_t, int);
96 static int try_one_overload (tree, tree, tree, tree, tree,
97 unification_kind_t, int, bool);
98 static int unify (tree, tree, tree, tree, int);
99 static void add_pending_template (tree);
100 static void reopen_tinst_level (tree);
101 static tree classtype_mangled_name (tree);
102 static char* mangle_class_name_for_template (const char *, tree, tree);
103 static tree tsubst_initializer_list (tree, tree);
104 static tree get_class_bindings (tree, tree, tree);
105 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t, int);
106 static void tsubst_enum (tree, tree, tree);
107 static tree add_to_template_args (tree, tree);
108 static tree add_outermost_template_args (tree, tree);
109 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
110 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*);
111 static int type_unification_real (tree, tree, tree, tree,
112 int, unification_kind_t, int);
113 static void note_template_header (int);
114 static tree convert_nontype_argument_function (tree, tree);
115 static tree convert_nontype_argument (tree, tree);
116 static tree convert_template_argument (tree, tree, tree,
117 tsubst_flags_t, int, tree);
118 static int for_each_template_parm (tree, tree_fn_t, void*,
119 struct pointer_set_t*);
120 static tree build_template_parm_index (int, int, int, tree, tree);
121 static int inline_needs_template_parms (tree);
122 static void push_inline_template_parms_recursive (tree, int);
123 static tree retrieve_local_specialization (tree);
124 static void register_local_specialization (tree, tree);
125 static tree reduce_template_parm_level (tree, tree, int);
126 static int mark_template_parm (tree, void *);
127 static int template_parm_this_level_p (tree, void *);
128 static tree tsubst_friend_function (tree, tree);
129 static tree tsubst_friend_class (tree, tree);
130 static int can_complete_type_without_circularity (tree);
131 static tree get_bindings (tree, tree, tree, bool);
132 static int template_decl_level (tree);
133 static int check_cv_quals_for_unify (int, tree, tree);
134 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
135 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
136 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
137 static void regenerate_decl_from_template (tree, tree);
138 static tree most_specialized (tree, tree, tree);
139 static tree most_specialized_class (tree, tree);
140 static int template_class_depth_real (tree, int);
141 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
142 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
143 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
144 static void check_specialization_scope (void);
145 static tree process_partial_specialization (tree);
146 static void set_current_access_from_decl (tree);
147 static void check_default_tmpl_args (tree, tree, int, int);
148 static tree tsubst_call_declarator_parms (tree, tree, tsubst_flags_t, tree);
149 static tree get_template_base (tree, tree, tree, tree);
150 static int verify_class_unification (tree, tree, tree);
151 static tree try_class_unification (tree, tree, tree, tree);
152 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
153 tree, tree);
154 static tree determine_specialization (tree, tree, tree *, int, int);
155 static int template_args_equal (tree, tree);
156 static void tsubst_default_arguments (tree);
157 static tree for_each_template_parm_r (tree *, int *, void *);
158 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
159 static void copy_default_args_to_explicit_spec (tree);
160 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
161 static int eq_local_specializations (const void *, const void *);
162 static bool dependent_type_p_r (tree);
163 static tree tsubst (tree, tree, tsubst_flags_t, tree);
164 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree);
165 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
166
167 /* Make the current scope suitable for access checking when we are
168 processing T. T can be FUNCTION_DECL for instantiated function
169 template, or VAR_DECL for static member variable (need by
170 instantiate_decl). */
171
172 static void
173 push_access_scope (tree t)
174 {
175 gcc_assert (TREE_CODE (t) == FUNCTION_DECL
176 || TREE_CODE (t) == VAR_DECL);
177
178 if (DECL_FRIEND_CONTEXT (t))
179 push_nested_class (DECL_FRIEND_CONTEXT (t));
180 else if (DECL_CLASS_SCOPE_P (t))
181 push_nested_class (DECL_CONTEXT (t));
182 else
183 push_to_top_level ();
184
185 if (TREE_CODE (t) == FUNCTION_DECL)
186 {
187 saved_access_scope = tree_cons
188 (NULL_TREE, current_function_decl, saved_access_scope);
189 current_function_decl = t;
190 }
191 }
192
193 /* Restore the scope set up by push_access_scope. T is the node we
194 are processing. */
195
196 static void
197 pop_access_scope (tree t)
198 {
199 if (TREE_CODE (t) == FUNCTION_DECL)
200 {
201 current_function_decl = TREE_VALUE (saved_access_scope);
202 saved_access_scope = TREE_CHAIN (saved_access_scope);
203 }
204
205 if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
206 pop_nested_class ();
207 else
208 pop_from_top_level ();
209 }
210
211 /* Do any processing required when DECL (a member template
212 declaration) is finished. Returns the TEMPLATE_DECL corresponding
213 to DECL, unless it is a specialization, in which case the DECL
214 itself is returned. */
215
216 tree
217 finish_member_template_decl (tree decl)
218 {
219 if (decl == error_mark_node)
220 return error_mark_node;
221
222 gcc_assert (DECL_P (decl));
223
224 if (TREE_CODE (decl) == TYPE_DECL)
225 {
226 tree type;
227
228 type = TREE_TYPE (decl);
229 if (IS_AGGR_TYPE (type)
230 && CLASSTYPE_TEMPLATE_INFO (type)
231 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
232 {
233 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
234 check_member_template (tmpl);
235 return tmpl;
236 }
237 return NULL_TREE;
238 }
239 else if (TREE_CODE (decl) == FIELD_DECL)
240 error ("data member %qD cannot be a member template", decl);
241 else if (DECL_TEMPLATE_INFO (decl))
242 {
243 if (!DECL_TEMPLATE_SPECIALIZATION (decl))
244 {
245 check_member_template (DECL_TI_TEMPLATE (decl));
246 return DECL_TI_TEMPLATE (decl);
247 }
248 else
249 return decl;
250 }
251 else
252 error ("invalid member template declaration %qD", decl);
253
254 return error_mark_node;
255 }
256
257 /* Returns the template nesting level of the indicated class TYPE.
258
259 For example, in:
260 template <class T>
261 struct A
262 {
263 template <class U>
264 struct B {};
265 };
266
267 A<T>::B<U> has depth two, while A<T> has depth one.
268 Both A<T>::B<int> and A<int>::B<U> have depth one, if
269 COUNT_SPECIALIZATIONS is 0 or if they are instantiations, not
270 specializations.
271
272 This function is guaranteed to return 0 if passed NULL_TREE so
273 that, for example, `template_class_depth (current_class_type)' is
274 always safe. */
275
276 static int
277 template_class_depth_real (tree type, int count_specializations)
278 {
279 int depth;
280
281 for (depth = 0;
282 type && TREE_CODE (type) != NAMESPACE_DECL;
283 type = (TREE_CODE (type) == FUNCTION_DECL)
284 ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
285 {
286 if (TREE_CODE (type) != FUNCTION_DECL)
287 {
288 if (CLASSTYPE_TEMPLATE_INFO (type)
289 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type))
290 && ((count_specializations
291 && CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
292 || uses_template_parms (CLASSTYPE_TI_ARGS (type))))
293 ++depth;
294 }
295 else
296 {
297 if (DECL_TEMPLATE_INFO (type)
298 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (type))
299 && ((count_specializations
300 && DECL_TEMPLATE_SPECIALIZATION (type))
301 || uses_template_parms (DECL_TI_ARGS (type))))
302 ++depth;
303 }
304 }
305
306 return depth;
307 }
308
309 /* Returns the template nesting level of the indicated class TYPE.
310 Like template_class_depth_real, but instantiations do not count in
311 the depth. */
312
313 int
314 template_class_depth (tree type)
315 {
316 return template_class_depth_real (type, /*count_specializations=*/0);
317 }
318
319 /* Returns 1 if processing DECL as part of do_pending_inlines
320 needs us to push template parms. */
321
322 static int
323 inline_needs_template_parms (tree decl)
324 {
325 if (! DECL_TEMPLATE_INFO (decl))
326 return 0;
327
328 return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
329 > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
330 }
331
332 /* Subroutine of maybe_begin_member_template_processing.
333 Push the template parms in PARMS, starting from LEVELS steps into the
334 chain, and ending at the beginning, since template parms are listed
335 innermost first. */
336
337 static void
338 push_inline_template_parms_recursive (tree parmlist, int levels)
339 {
340 tree parms = TREE_VALUE (parmlist);
341 int i;
342
343 if (levels > 1)
344 push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
345
346 ++processing_template_decl;
347 current_template_parms
348 = tree_cons (size_int (processing_template_decl),
349 parms, current_template_parms);
350 TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
351
352 begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
353 NULL);
354 for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
355 {
356 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
357 gcc_assert (DECL_P (parm));
358
359 switch (TREE_CODE (parm))
360 {
361 case TYPE_DECL:
362 case TEMPLATE_DECL:
363 pushdecl (parm);
364 break;
365
366 case PARM_DECL:
367 {
368 /* Make a CONST_DECL as is done in process_template_parm.
369 It is ugly that we recreate this here; the original
370 version built in process_template_parm is no longer
371 available. */
372 tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
373 TREE_TYPE (parm));
374 DECL_ARTIFICIAL (decl) = 1;
375 TREE_CONSTANT (decl) = 1;
376 TREE_INVARIANT (decl) = 1;
377 TREE_READONLY (decl) = 1;
378 DECL_INITIAL (decl) = DECL_INITIAL (parm);
379 SET_DECL_TEMPLATE_PARM_P (decl);
380 pushdecl (decl);
381 }
382 break;
383
384 default:
385 gcc_unreachable ();
386 }
387 }
388 }
389
390 /* Restore the template parameter context for a member template or
391 a friend template defined in a class definition. */
392
393 void
394 maybe_begin_member_template_processing (tree decl)
395 {
396 tree parms;
397 int levels = 0;
398
399 if (inline_needs_template_parms (decl))
400 {
401 parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
402 levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
403
404 if (DECL_TEMPLATE_SPECIALIZATION (decl))
405 {
406 --levels;
407 parms = TREE_CHAIN (parms);
408 }
409
410 push_inline_template_parms_recursive (parms, levels);
411 }
412
413 /* Remember how many levels of template parameters we pushed so that
414 we can pop them later. */
415 if (!inline_parm_levels)
416 VARRAY_INT_INIT (inline_parm_levels, 4, "inline_parm_levels");
417 if (inline_parm_levels_used == inline_parm_levels->num_elements)
418 VARRAY_GROW (inline_parm_levels, 2 * inline_parm_levels_used);
419 VARRAY_INT (inline_parm_levels, inline_parm_levels_used) = levels;
420 ++inline_parm_levels_used;
421 }
422
423 /* Undo the effects of maybe_begin_member_template_processing. */
424
425 void
426 maybe_end_member_template_processing (void)
427 {
428 int i;
429
430 if (!inline_parm_levels_used)
431 return;
432
433 --inline_parm_levels_used;
434 for (i = 0;
435 i < VARRAY_INT (inline_parm_levels, inline_parm_levels_used);
436 ++i)
437 {
438 --processing_template_decl;
439 current_template_parms = TREE_CHAIN (current_template_parms);
440 poplevel (0, 0, 0);
441 }
442 }
443
444 /* Return a new template argument vector which contains all of ARGS,
445 but has as its innermost set of arguments the EXTRA_ARGS. */
446
447 static tree
448 add_to_template_args (tree args, tree extra_args)
449 {
450 tree new_args;
451 int extra_depth;
452 int i;
453 int j;
454
455 extra_depth = TMPL_ARGS_DEPTH (extra_args);
456 new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
457
458 for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
459 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
460
461 for (j = 1; j <= extra_depth; ++j, ++i)
462 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
463
464 return new_args;
465 }
466
467 /* Like add_to_template_args, but only the outermost ARGS are added to
468 the EXTRA_ARGS. In particular, all but TMPL_ARGS_DEPTH
469 (EXTRA_ARGS) levels are added. This function is used to combine
470 the template arguments from a partial instantiation with the
471 template arguments used to attain the full instantiation from the
472 partial instantiation. */
473
474 static tree
475 add_outermost_template_args (tree args, tree extra_args)
476 {
477 tree new_args;
478
479 /* If there are more levels of EXTRA_ARGS than there are ARGS,
480 something very fishy is going on. */
481 gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
482
483 /* If *all* the new arguments will be the EXTRA_ARGS, just return
484 them. */
485 if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
486 return extra_args;
487
488 /* For the moment, we make ARGS look like it contains fewer levels. */
489 TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
490
491 new_args = add_to_template_args (args, extra_args);
492
493 /* Now, we restore ARGS to its full dimensions. */
494 TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
495
496 return new_args;
497 }
498
499 /* Return the N levels of innermost template arguments from the ARGS. */
500
501 tree
502 get_innermost_template_args (tree args, int n)
503 {
504 tree new_args;
505 int extra_levels;
506 int i;
507
508 gcc_assert (n >= 0);
509
510 /* If N is 1, just return the innermost set of template arguments. */
511 if (n == 1)
512 return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
513
514 /* If we're not removing anything, just return the arguments we were
515 given. */
516 extra_levels = TMPL_ARGS_DEPTH (args) - n;
517 gcc_assert (extra_levels >= 0);
518 if (extra_levels == 0)
519 return args;
520
521 /* Make a new set of arguments, not containing the outer arguments. */
522 new_args = make_tree_vec (n);
523 for (i = 1; i <= n; ++i)
524 SET_TMPL_ARGS_LEVEL (new_args, i,
525 TMPL_ARGS_LEVEL (args, i + extra_levels));
526
527 return new_args;
528 }
529
530 /* We've got a template header coming up; push to a new level for storing
531 the parms. */
532
533 void
534 begin_template_parm_list (void)
535 {
536 /* We use a non-tag-transparent scope here, which causes pushtag to
537 put tags in this scope, rather than in the enclosing class or
538 namespace scope. This is the right thing, since we want
539 TEMPLATE_DECLS, and not TYPE_DECLS for template classes. For a
540 global template class, push_template_decl handles putting the
541 TEMPLATE_DECL into top-level scope. For a nested template class,
542 e.g.:
543
544 template <class T> struct S1 {
545 template <class T> struct S2 {};
546 };
547
548 pushtag contains special code to call pushdecl_with_scope on the
549 TEMPLATE_DECL for S2. */
550 begin_scope (sk_template_parms, NULL);
551 ++processing_template_decl;
552 ++processing_template_parmlist;
553 note_template_header (0);
554 }
555
556 /* This routine is called when a specialization is declared. If it is
557 invalid to declare a specialization here, an error is reported. */
558
559 static void
560 check_specialization_scope (void)
561 {
562 tree scope = current_scope ();
563
564 /* [temp.expl.spec]
565
566 An explicit specialization shall be declared in the namespace of
567 which the template is a member, or, for member templates, in the
568 namespace of which the enclosing class or enclosing class
569 template is a member. An explicit specialization of a member
570 function, member class or static data member of a class template
571 shall be declared in the namespace of which the class template
572 is a member. */
573 if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
574 error ("explicit specialization in non-namespace scope %qD", scope);
575
576 /* [temp.expl.spec]
577
578 In an explicit specialization declaration for a member of a class
579 template or a member template that appears in namespace scope,
580 the member template and some of its enclosing class templates may
581 remain unspecialized, except that the declaration shall not
582 explicitly specialize a class member template if its enclosing
583 class templates are not explicitly specialized as well. */
584 if (current_template_parms)
585 error ("enclosing class templates are not explicitly specialized");
586 }
587
588 /* We've just seen template <>. */
589
590 void
591 begin_specialization (void)
592 {
593 begin_scope (sk_template_spec, NULL);
594 note_template_header (1);
595 check_specialization_scope ();
596 }
597
598 /* Called at then end of processing a declaration preceded by
599 template<>. */
600
601 void
602 end_specialization (void)
603 {
604 finish_scope ();
605 reset_specialization ();
606 }
607
608 /* Any template <>'s that we have seen thus far are not referring to a
609 function specialization. */
610
611 void
612 reset_specialization (void)
613 {
614 processing_specialization = 0;
615 template_header_count = 0;
616 }
617
618 /* We've just seen a template header. If SPECIALIZATION is nonzero,
619 it was of the form template <>. */
620
621 static void
622 note_template_header (int specialization)
623 {
624 processing_specialization = specialization;
625 template_header_count++;
626 }
627
628 /* We're beginning an explicit instantiation. */
629
630 void
631 begin_explicit_instantiation (void)
632 {
633 gcc_assert (!processing_explicit_instantiation);
634 processing_explicit_instantiation = true;
635 }
636
637
638 void
639 end_explicit_instantiation (void)
640 {
641 gcc_assert (processing_explicit_instantiation);
642 processing_explicit_instantiation = false;
643 }
644
645 /* An explicit specialization or partial specialization TMPL is being
646 declared. Check that the namespace in which the specialization is
647 occurring is permissible. Returns false iff it is invalid to
648 specialize TMPL in the current namespace. */
649
650 static bool
651 check_specialization_namespace (tree tmpl)
652 {
653 tree tpl_ns = decl_namespace_context (tmpl);
654
655 /* [tmpl.expl.spec]
656
657 An explicit specialization shall be declared in the namespace of
658 which the template is a member, or, for member templates, in the
659 namespace of which the enclosing class or enclosing class
660 template is a member. An explicit specialization of a member
661 function, member class or static data member of a class template
662 shall be declared in the namespace of which the class template is
663 a member. */
664 if (is_associated_namespace (current_namespace, tpl_ns))
665 /* Same or super-using namespace. */
666 return true;
667 else
668 {
669 pedwarn ("specialization of %qD in different namespace", tmpl);
670 pedwarn (" from definition of %q+#D", tmpl);
671 return false;
672 }
673 }
674
675 /* The TYPE is being declared. If it is a template type, that means it
676 is a partial specialization. Do appropriate error-checking. */
677
678 void
679 maybe_process_partial_specialization (tree type)
680 {
681 /* TYPE maybe an ERROR_MARK_NODE. */
682 tree context = TYPE_P (type) ? TYPE_CONTEXT (type) : NULL_TREE;
683
684 if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
685 {
686 /* This is for ordinary explicit specialization and partial
687 specialization of a template class such as:
688
689 template <> class C<int>;
690
691 or:
692
693 template <class T> class C<T*>;
694
695 Make sure that `C<int>' and `C<T*>' are implicit instantiations. */
696
697 if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
698 && !COMPLETE_TYPE_P (type))
699 {
700 check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
701 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
702 if (processing_template_decl)
703 push_template_decl (TYPE_MAIN_DECL (type));
704 }
705 else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
706 error ("specialization of %qT after instantiation", type);
707 }
708 else if (CLASS_TYPE_P (type)
709 && !CLASSTYPE_USE_TEMPLATE (type)
710 && CLASSTYPE_TEMPLATE_INFO (type)
711 && context && CLASS_TYPE_P (context)
712 && CLASSTYPE_TEMPLATE_INFO (context))
713 {
714 /* This is for an explicit specialization of member class
715 template according to [temp.expl.spec/18]:
716
717 template <> template <class U> class C<int>::D;
718
719 The context `C<int>' must be an implicit instantiation.
720 Otherwise this is just a member class template declared
721 earlier like:
722
723 template <> class C<int> { template <class U> class D; };
724 template <> template <class U> class C<int>::D;
725
726 In the first case, `C<int>::D' is a specialization of `C<T>::D'
727 while in the second case, `C<int>::D' is a primary template
728 and `C<T>::D' may not exist. */
729
730 if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
731 && !COMPLETE_TYPE_P (type))
732 {
733 tree t;
734
735 if (current_namespace
736 != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
737 {
738 pedwarn ("specializing %q#T in different namespace", type);
739 pedwarn (" from definition of %q+#D",
740 CLASSTYPE_TI_TEMPLATE (type));
741 }
742
743 /* Check for invalid specialization after instantiation:
744
745 template <> template <> class C<int>::D<int>;
746 template <> template <class U> class C<int>::D; */
747
748 for (t = DECL_TEMPLATE_INSTANTIATIONS
749 (most_general_template (CLASSTYPE_TI_TEMPLATE (type)));
750 t; t = TREE_CHAIN (t))
751 if (TREE_VALUE (t) != type
752 && TYPE_CONTEXT (TREE_VALUE (t)) == context)
753 error ("specialization %qT after instantiation %qT",
754 type, TREE_VALUE (t));
755
756 /* Mark TYPE as a specialization. And as a result, we only
757 have one level of template argument for the innermost
758 class template. */
759 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
760 CLASSTYPE_TI_ARGS (type)
761 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
762 }
763 }
764 else if (processing_specialization)
765 error ("explicit specialization of non-template %qT", type);
766 }
767
768 /* Returns nonzero if we can optimize the retrieval of specializations
769 for TMPL, a TEMPLATE_DECL. In particular, for such a template, we
770 do not use DECL_TEMPLATE_SPECIALIZATIONS at all. */
771
772 static inline bool
773 optimize_specialization_lookup_p (tree tmpl)
774 {
775 return (DECL_FUNCTION_TEMPLATE_P (tmpl)
776 && DECL_CLASS_SCOPE_P (tmpl)
777 /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
778 parameter. */
779 && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
780 /* The optimized lookup depends on the fact that the
781 template arguments for the member function template apply
782 purely to the containing class, which is not true if the
783 containing class is an explicit or partial
784 specialization. */
785 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
786 && !DECL_MEMBER_TEMPLATE_P (tmpl)
787 && !DECL_CONV_FN_P (tmpl)
788 /* It is possible to have a template that is not a member
789 template and is not a member of a template class:
790
791 template <typename T>
792 struct S { friend A::f(); };
793
794 Here, the friend function is a template, but the context does
795 not have template information. The optimized lookup relies
796 on having ARGS be the template arguments for both the class
797 and the function template. */
798 && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
799 }
800
801 /* Retrieve the specialization (in the sense of [temp.spec] - a
802 specialization is either an instantiation or an explicit
803 specialization) of TMPL for the given template ARGS. If there is
804 no such specialization, return NULL_TREE. The ARGS are a vector of
805 arguments, or a vector of vectors of arguments, in the case of
806 templates with more than one level of parameters.
807
808 If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
809 then we search for a partial specialization matching ARGS. This
810 parameter is ignored if TMPL is not a class template. */
811
812 static tree
813 retrieve_specialization (tree tmpl, tree args,
814 bool class_specializations_p)
815 {
816 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
817
818 /* There should be as many levels of arguments as there are
819 levels of parameters. */
820 gcc_assert (TMPL_ARGS_DEPTH (args)
821 == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
822
823 if (optimize_specialization_lookup_p (tmpl))
824 {
825 tree class_template;
826 tree class_specialization;
827 VEC(tree,gc) *methods;
828 tree fns;
829 int idx;
830
831 /* The template arguments actually apply to the containing
832 class. Find the class specialization with those
833 arguments. */
834 class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
835 class_specialization
836 = retrieve_specialization (class_template, args,
837 /*class_specializations_p=*/false);
838 if (!class_specialization)
839 return NULL_TREE;
840 /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
841 for the specialization. */
842 idx = class_method_index_for_fn (class_specialization, tmpl);
843 if (idx == -1)
844 return NULL_TREE;
845 /* Iterate through the methods with the indicated name, looking
846 for the one that has an instance of TMPL. */
847 methods = CLASSTYPE_METHOD_VEC (class_specialization);
848 for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
849 {
850 tree fn = OVL_CURRENT (fns);
851 if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl)
852 return fn;
853 }
854 return NULL_TREE;
855 }
856 else
857 {
858 tree *sp;
859 tree *head;
860
861 /* Class templates store their instantiations on the
862 DECL_TEMPLATE_INSTANTIATIONS list; other templates use the
863 DECL_TEMPLATE_SPECIALIZATIONS list. */
864 if (!class_specializations_p
865 && TREE_CODE (DECL_TEMPLATE_RESULT (tmpl)) == TYPE_DECL)
866 sp = &DECL_TEMPLATE_INSTANTIATIONS (tmpl);
867 else
868 sp = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
869 head = sp;
870 /* Iterate through the list until we find a matching template. */
871 while (*sp != NULL_TREE)
872 {
873 tree spec = *sp;
874
875 if (comp_template_args (TREE_PURPOSE (spec), args))
876 {
877 /* Use the move-to-front heuristic to speed up future
878 searches. */
879 if (spec != *head)
880 {
881 *sp = TREE_CHAIN (*sp);
882 TREE_CHAIN (spec) = *head;
883 *head = spec;
884 }
885 return TREE_VALUE (spec);
886 }
887 sp = &TREE_CHAIN (spec);
888 }
889 }
890
891 return NULL_TREE;
892 }
893
894 /* Like retrieve_specialization, but for local declarations. */
895
896 static tree
897 retrieve_local_specialization (tree tmpl)
898 {
899 tree spec = htab_find_with_hash (local_specializations, tmpl,
900 htab_hash_pointer (tmpl));
901 return spec ? TREE_PURPOSE (spec) : NULL_TREE;
902 }
903
904 /* Returns nonzero iff DECL is a specialization of TMPL. */
905
906 int
907 is_specialization_of (tree decl, tree tmpl)
908 {
909 tree t;
910
911 if (TREE_CODE (decl) == FUNCTION_DECL)
912 {
913 for (t = decl;
914 t != NULL_TREE;
915 t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
916 if (t == tmpl)
917 return 1;
918 }
919 else
920 {
921 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
922
923 for (t = TREE_TYPE (decl);
924 t != NULL_TREE;
925 t = CLASSTYPE_USE_TEMPLATE (t)
926 ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
927 if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
928 return 1;
929 }
930
931 return 0;
932 }
933
934 /* Returns nonzero iff DECL is a specialization of friend declaration
935 FRIEND according to [temp.friend]. */
936
937 bool
938 is_specialization_of_friend (tree decl, tree friend)
939 {
940 bool need_template = true;
941 int template_depth;
942
943 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
944 || TREE_CODE (decl) == TYPE_DECL);
945
946 /* For [temp.friend/6] when FRIEND is an ordinary member function
947 of a template class, we want to check if DECL is a specialization
948 if this. */
949 if (TREE_CODE (friend) == FUNCTION_DECL
950 && DECL_TEMPLATE_INFO (friend)
951 && !DECL_USE_TEMPLATE (friend))
952 {
953 /* We want a TEMPLATE_DECL for `is_specialization_of'. */
954 friend = DECL_TI_TEMPLATE (friend);
955 need_template = false;
956 }
957 else if (TREE_CODE (friend) == TEMPLATE_DECL
958 && !PRIMARY_TEMPLATE_P (friend))
959 need_template = false;
960
961 /* There is nothing to do if this is not a template friend. */
962 if (TREE_CODE (friend) != TEMPLATE_DECL)
963 return false;
964
965 if (is_specialization_of (decl, friend))
966 return true;
967
968 /* [temp.friend/6]
969 A member of a class template may be declared to be a friend of a
970 non-template class. In this case, the corresponding member of
971 every specialization of the class template is a friend of the
972 class granting friendship.
973
974 For example, given a template friend declaration
975
976 template <class T> friend void A<T>::f();
977
978 the member function below is considered a friend
979
980 template <> struct A<int> {
981 void f();
982 };
983
984 For this type of template friend, TEMPLATE_DEPTH below will be
985 nonzero. To determine if DECL is a friend of FRIEND, we first
986 check if the enclosing class is a specialization of another. */
987
988 template_depth = template_class_depth (DECL_CONTEXT (friend));
989 if (template_depth
990 && DECL_CLASS_SCOPE_P (decl)
991 && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
992 CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend))))
993 {
994 /* Next, we check the members themselves. In order to handle
995 a few tricky cases, such as when FRIEND's are
996
997 template <class T> friend void A<T>::g(T t);
998 template <class T> template <T t> friend void A<T>::h();
999
1000 and DECL's are
1001
1002 void A<int>::g(int);
1003 template <int> void A<int>::h();
1004
1005 we need to figure out ARGS, the template arguments from
1006 the context of DECL. This is required for template substitution
1007 of `T' in the function parameter of `g' and template parameter
1008 of `h' in the above examples. Here ARGS corresponds to `int'. */
1009
1010 tree context = DECL_CONTEXT (decl);
1011 tree args = NULL_TREE;
1012 int current_depth = 0;
1013
1014 while (current_depth < template_depth)
1015 {
1016 if (CLASSTYPE_TEMPLATE_INFO (context))
1017 {
1018 if (current_depth == 0)
1019 args = TYPE_TI_ARGS (context);
1020 else
1021 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1022 current_depth++;
1023 }
1024 context = TYPE_CONTEXT (context);
1025 }
1026
1027 if (TREE_CODE (decl) == FUNCTION_DECL)
1028 {
1029 bool is_template;
1030 tree friend_type;
1031 tree decl_type;
1032 tree friend_args_type;
1033 tree decl_args_type;
1034
1035 /* Make sure that both DECL and FRIEND are templates or
1036 non-templates. */
1037 is_template = DECL_TEMPLATE_INFO (decl)
1038 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1039 if (need_template ^ is_template)
1040 return false;
1041 else if (is_template)
1042 {
1043 /* If both are templates, check template parameter list. */
1044 tree friend_parms
1045 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1046 args, tf_none);
1047 if (!comp_template_parms
1048 (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1049 friend_parms))
1050 return false;
1051
1052 decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1053 }
1054 else
1055 decl_type = TREE_TYPE (decl);
1056
1057 friend_type = tsubst_function_type (TREE_TYPE (friend), args,
1058 tf_none, NULL_TREE);
1059 if (friend_type == error_mark_node)
1060 return false;
1061
1062 /* Check if return types match. */
1063 if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1064 return false;
1065
1066 /* Check if function parameter types match, ignoring the
1067 `this' parameter. */
1068 friend_args_type = TYPE_ARG_TYPES (friend_type);
1069 decl_args_type = TYPE_ARG_TYPES (decl_type);
1070 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend))
1071 friend_args_type = TREE_CHAIN (friend_args_type);
1072 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1073 decl_args_type = TREE_CHAIN (decl_args_type);
1074
1075 return compparms (decl_args_type, friend_args_type);
1076 }
1077 else
1078 {
1079 /* DECL is a TYPE_DECL */
1080 bool is_template;
1081 tree decl_type = TREE_TYPE (decl);
1082
1083 /* Make sure that both DECL and FRIEND are templates or
1084 non-templates. */
1085 is_template
1086 = CLASSTYPE_TEMPLATE_INFO (decl_type)
1087 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1088
1089 if (need_template ^ is_template)
1090 return false;
1091 else if (is_template)
1092 {
1093 tree friend_parms;
1094 /* If both are templates, check the name of the two
1095 TEMPLATE_DECL's first because is_friend didn't. */
1096 if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1097 != DECL_NAME (friend))
1098 return false;
1099
1100 /* Now check template parameter list. */
1101 friend_parms
1102 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1103 args, tf_none);
1104 return comp_template_parms
1105 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1106 friend_parms);
1107 }
1108 else
1109 return (DECL_NAME (decl)
1110 == DECL_NAME (friend));
1111 }
1112 }
1113 return false;
1114 }
1115
1116 /* Register the specialization SPEC as a specialization of TMPL with
1117 the indicated ARGS. Returns SPEC, or an equivalent prior
1118 declaration, if available. */
1119
1120 static tree
1121 register_specialization (tree spec, tree tmpl, tree args)
1122 {
1123 tree fn;
1124
1125 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
1126
1127 if (TREE_CODE (spec) == FUNCTION_DECL
1128 && uses_template_parms (DECL_TI_ARGS (spec)))
1129 /* This is the FUNCTION_DECL for a partial instantiation. Don't
1130 register it; we want the corresponding TEMPLATE_DECL instead.
1131 We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1132 the more obvious `uses_template_parms (spec)' to avoid problems
1133 with default function arguments. In particular, given
1134 something like this:
1135
1136 template <class T> void f(T t1, T t = T())
1137
1138 the default argument expression is not substituted for in an
1139 instantiation unless and until it is actually needed. */
1140 return spec;
1141
1142 fn = retrieve_specialization (tmpl, args,
1143 /*class_specializations_p=*/false);
1144 /* We can sometimes try to re-register a specialization that we've
1145 already got. In particular, regenerate_decl_from_template calls
1146 duplicate_decls which will update the specialization list. But,
1147 we'll still get called again here anyhow. It's more convenient
1148 to simply allow this than to try to prevent it. */
1149 if (fn == spec)
1150 return spec;
1151 else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1152 {
1153 if (DECL_TEMPLATE_INSTANTIATION (fn))
1154 {
1155 if (TREE_USED (fn)
1156 || DECL_EXPLICIT_INSTANTIATION (fn))
1157 {
1158 error ("specialization of %qD after instantiation",
1159 fn);
1160 return spec;
1161 }
1162 else
1163 {
1164 /* This situation should occur only if the first
1165 specialization is an implicit instantiation, the
1166 second is an explicit specialization, and the
1167 implicit instantiation has not yet been used. That
1168 situation can occur if we have implicitly
1169 instantiated a member function and then specialized
1170 it later.
1171
1172 We can also wind up here if a friend declaration that
1173 looked like an instantiation turns out to be a
1174 specialization:
1175
1176 template <class T> void foo(T);
1177 class S { friend void foo<>(int) };
1178 template <> void foo(int);
1179
1180 We transform the existing DECL in place so that any
1181 pointers to it become pointers to the updated
1182 declaration.
1183
1184 If there was a definition for the template, but not
1185 for the specialization, we want this to look as if
1186 there were no definition, and vice versa. */
1187 DECL_INITIAL (fn) = NULL_TREE;
1188 duplicate_decls (spec, fn);
1189
1190 return fn;
1191 }
1192 }
1193 else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1194 {
1195 if (!duplicate_decls (spec, fn) && DECL_INITIAL (spec))
1196 /* Dup decl failed, but this is a new definition. Set the
1197 line number so any errors match this new
1198 definition. */
1199 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1200
1201 return fn;
1202 }
1203 }
1204
1205 /* A specialization must be declared in the same namespace as the
1206 template it is specializing. */
1207 if (DECL_TEMPLATE_SPECIALIZATION (spec)
1208 && !check_specialization_namespace (tmpl))
1209 DECL_CONTEXT (spec) = decl_namespace_context (tmpl);
1210
1211 if (!optimize_specialization_lookup_p (tmpl))
1212 DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
1213 = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
1214
1215 return spec;
1216 }
1217
1218 /* Unregister the specialization SPEC as a specialization of TMPL.
1219 Replace it with NEW_SPEC, if NEW_SPEC is non-NULL. Returns true
1220 if the SPEC was listed as a specialization of TMPL. */
1221
1222 bool
1223 reregister_specialization (tree spec, tree tmpl, tree new_spec)
1224 {
1225 tree* s;
1226
1227 for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
1228 *s != NULL_TREE;
1229 s = &TREE_CHAIN (*s))
1230 if (TREE_VALUE (*s) == spec)
1231 {
1232 if (!new_spec)
1233 *s = TREE_CHAIN (*s);
1234 else
1235 TREE_VALUE (*s) = new_spec;
1236 return 1;
1237 }
1238
1239 return 0;
1240 }
1241
1242 /* Compare an entry in the local specializations hash table P1 (which
1243 is really a pointer to a TREE_LIST) with P2 (which is really a
1244 DECL). */
1245
1246 static int
1247 eq_local_specializations (const void *p1, const void *p2)
1248 {
1249 return TREE_VALUE ((tree) p1) == (tree) p2;
1250 }
1251
1252 /* Hash P1, an entry in the local specializations table. */
1253
1254 static hashval_t
1255 hash_local_specialization (const void* p1)
1256 {
1257 return htab_hash_pointer (TREE_VALUE ((tree) p1));
1258 }
1259
1260 /* Like register_specialization, but for local declarations. We are
1261 registering SPEC, an instantiation of TMPL. */
1262
1263 static void
1264 register_local_specialization (tree spec, tree tmpl)
1265 {
1266 void **slot;
1267
1268 slot = htab_find_slot_with_hash (local_specializations, tmpl,
1269 htab_hash_pointer (tmpl), INSERT);
1270 *slot = build_tree_list (spec, tmpl);
1271 }
1272
1273 /* Print the list of candidate FNS in an error message. */
1274
1275 void
1276 print_candidates (tree fns)
1277 {
1278 tree fn;
1279
1280 const char *str = "candidates are:";
1281
1282 for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1283 {
1284 tree f;
1285
1286 for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
1287 error ("%s %+#D", str, OVL_CURRENT (f));
1288 str = " ";
1289 }
1290 }
1291
1292 /* Returns the template (one of the functions given by TEMPLATE_ID)
1293 which can be specialized to match the indicated DECL with the
1294 explicit template args given in TEMPLATE_ID. The DECL may be
1295 NULL_TREE if none is available. In that case, the functions in
1296 TEMPLATE_ID are non-members.
1297
1298 If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1299 specialization of a member template.
1300
1301 The TEMPLATE_COUNT is the number of references to qualifying
1302 template classes that appeared in the name of the function. See
1303 check_explicit_specialization for a more accurate description.
1304
1305 The template args (those explicitly specified and those deduced)
1306 are output in a newly created vector *TARGS_OUT.
1307
1308 If it is impossible to determine the result, an error message is
1309 issued. The error_mark_node is returned to indicate failure. */
1310
1311 static tree
1312 determine_specialization (tree template_id,
1313 tree decl,
1314 tree* targs_out,
1315 int need_member_template,
1316 int template_count)
1317 {
1318 tree fns;
1319 tree targs;
1320 tree explicit_targs;
1321 tree candidates = NULL_TREE;
1322 tree templates = NULL_TREE;
1323 int header_count;
1324 struct cp_binding_level *b;
1325
1326 *targs_out = NULL_TREE;
1327
1328 if (template_id == error_mark_node)
1329 return error_mark_node;
1330
1331 fns = TREE_OPERAND (template_id, 0);
1332 explicit_targs = TREE_OPERAND (template_id, 1);
1333
1334 if (fns == error_mark_node)
1335 return error_mark_node;
1336
1337 /* Check for baselinks. */
1338 if (BASELINK_P (fns))
1339 fns = BASELINK_FUNCTIONS (fns);
1340
1341 if (!is_overloaded_fn (fns))
1342 {
1343 error ("%qD is not a function template", fns);
1344 return error_mark_node;
1345 }
1346
1347 /* Count the number of template headers specified for this
1348 specialization. */
1349 header_count = 0;
1350 for (b = current_binding_level;
1351 b->kind == sk_template_parms;
1352 b = b->level_chain)
1353 ++header_count;
1354
1355 for (; fns; fns = OVL_NEXT (fns))
1356 {
1357 tree fn = OVL_CURRENT (fns);
1358
1359 if (TREE_CODE (fn) == TEMPLATE_DECL)
1360 {
1361 tree decl_arg_types;
1362 tree fn_arg_types;
1363
1364 /* DECL might be a specialization of FN. */
1365
1366 /* Adjust the type of DECL in case FN is a static member. */
1367 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1368 if (DECL_STATIC_FUNCTION_P (fn)
1369 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1370 decl_arg_types = TREE_CHAIN (decl_arg_types);
1371
1372 /* Check that the number of function parameters matches.
1373 For example,
1374 template <class T> void f(int i = 0);
1375 template <> void f<int>();
1376 The specialization f<int> is invalid but is not caught
1377 by get_bindings below. */
1378
1379 fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1380 if (list_length (fn_arg_types) != list_length (decl_arg_types))
1381 continue;
1382
1383 /* For a non-static member function, we need to make sure that
1384 the const qualification is the same. This can be done by
1385 checking the 'this' in the argument list. */
1386 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1387 && !same_type_p (TREE_VALUE (fn_arg_types),
1388 TREE_VALUE (decl_arg_types)))
1389 continue;
1390
1391 /* In case of explicit specialization, we need to check if
1392 the number of template headers appearing in the specialization
1393 is correct. This is usually done in check_explicit_specialization,
1394 but the check done there cannot be exhaustive when specializing
1395 member functions. Consider the following code:
1396
1397 template <> void A<int>::f(int);
1398 template <> template <> void A<int>::f(int);
1399
1400 Assuming that A<int> is not itself an explicit specialization
1401 already, the first line specializes "f" which is a non-template
1402 member function, whilst the second line specializes "f" which
1403 is a template member function. So both lines are syntactically
1404 correct, and check_explicit_specialization does not reject
1405 them.
1406
1407 Here, we can do better, as we are matching the specialization
1408 against the declarations. We count the number of template
1409 headers, and we check if they match TEMPLATE_COUNT + 1
1410 (TEMPLATE_COUNT is the number of qualifying template classes,
1411 plus there must be another header for the member template
1412 itself).
1413
1414 Notice that if header_count is zero, this is not a
1415 specialization but rather a template instantiation, so there
1416 is no check we can perform here. */
1417 if (header_count && header_count != template_count + 1)
1418 continue;
1419
1420 /* Check that the number of template arguments at the
1421 innermost level for DECL is the same as for FN. */
1422 if (current_binding_level->kind == sk_template_parms
1423 && !current_binding_level->explicit_spec_p
1424 && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1425 != TREE_VEC_LENGTH (TREE_VALUE (current_template_parms))))
1426 continue;
1427
1428 /* See whether this function might be a specialization of this
1429 template. */
1430 targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1431
1432 if (!targs)
1433 /* We cannot deduce template arguments that when used to
1434 specialize TMPL will produce DECL. */
1435 continue;
1436
1437 /* Save this template, and the arguments deduced. */
1438 templates = tree_cons (targs, fn, templates);
1439 }
1440 else if (need_member_template)
1441 /* FN is an ordinary member function, and we need a
1442 specialization of a member template. */
1443 ;
1444 else if (TREE_CODE (fn) != FUNCTION_DECL)
1445 /* We can get IDENTIFIER_NODEs here in certain erroneous
1446 cases. */
1447 ;
1448 else if (!DECL_FUNCTION_MEMBER_P (fn))
1449 /* This is just an ordinary non-member function. Nothing can
1450 be a specialization of that. */
1451 ;
1452 else if (DECL_ARTIFICIAL (fn))
1453 /* Cannot specialize functions that are created implicitly. */
1454 ;
1455 else
1456 {
1457 tree decl_arg_types;
1458
1459 /* This is an ordinary member function. However, since
1460 we're here, we can assume it's enclosing class is a
1461 template class. For example,
1462
1463 template <typename T> struct S { void f(); };
1464 template <> void S<int>::f() {}
1465
1466 Here, S<int>::f is a non-template, but S<int> is a
1467 template class. If FN has the same type as DECL, we
1468 might be in business. */
1469
1470 if (!DECL_TEMPLATE_INFO (fn))
1471 /* Its enclosing class is an explicit specialization
1472 of a template class. This is not a candidate. */
1473 continue;
1474
1475 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1476 TREE_TYPE (TREE_TYPE (fn))))
1477 /* The return types differ. */
1478 continue;
1479
1480 /* Adjust the type of DECL in case FN is a static member. */
1481 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1482 if (DECL_STATIC_FUNCTION_P (fn)
1483 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1484 decl_arg_types = TREE_CHAIN (decl_arg_types);
1485
1486 if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1487 decl_arg_types))
1488 /* They match! */
1489 candidates = tree_cons (NULL_TREE, fn, candidates);
1490 }
1491 }
1492
1493 if (templates && TREE_CHAIN (templates))
1494 {
1495 /* We have:
1496
1497 [temp.expl.spec]
1498
1499 It is possible for a specialization with a given function
1500 signature to be instantiated from more than one function
1501 template. In such cases, explicit specification of the
1502 template arguments must be used to uniquely identify the
1503 function template specialization being specialized.
1504
1505 Note that here, there's no suggestion that we're supposed to
1506 determine which of the candidate templates is most
1507 specialized. However, we, also have:
1508
1509 [temp.func.order]
1510
1511 Partial ordering of overloaded function template
1512 declarations is used in the following contexts to select
1513 the function template to which a function template
1514 specialization refers:
1515
1516 -- when an explicit specialization refers to a function
1517 template.
1518
1519 So, we do use the partial ordering rules, at least for now.
1520 This extension can only serve to make invalid programs valid,
1521 so it's safe. And, there is strong anecdotal evidence that
1522 the committee intended the partial ordering rules to apply;
1523 the EDG front-end has that behavior, and John Spicer claims
1524 that the committee simply forgot to delete the wording in
1525 [temp.expl.spec]. */
1526 tree tmpl = most_specialized (templates, decl, explicit_targs);
1527 if (tmpl && tmpl != error_mark_node)
1528 {
1529 targs = get_bindings (tmpl, decl, explicit_targs, /*check_ret=*/true);
1530 templates = tree_cons (targs, tmpl, NULL_TREE);
1531 }
1532 }
1533
1534 if (templates == NULL_TREE && candidates == NULL_TREE)
1535 {
1536 error ("template-id %qD for %q+D does not match any template "
1537 "declaration", template_id, decl);
1538 return error_mark_node;
1539 }
1540 else if ((templates && TREE_CHAIN (templates))
1541 || (candidates && TREE_CHAIN (candidates))
1542 || (templates && candidates))
1543 {
1544 error ("ambiguous template specialization %qD for %q+D",
1545 template_id, decl);
1546 chainon (candidates, templates);
1547 print_candidates (candidates);
1548 return error_mark_node;
1549 }
1550
1551 /* We have one, and exactly one, match. */
1552 if (candidates)
1553 {
1554 /* It was a specialization of an ordinary member function in a
1555 template class. */
1556 *targs_out = copy_node (DECL_TI_ARGS (TREE_VALUE (candidates)));
1557 return DECL_TI_TEMPLATE (TREE_VALUE (candidates));
1558 }
1559
1560 /* It was a specialization of a template. */
1561 targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
1562 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1563 {
1564 *targs_out = copy_node (targs);
1565 SET_TMPL_ARGS_LEVEL (*targs_out,
1566 TMPL_ARGS_DEPTH (*targs_out),
1567 TREE_PURPOSE (templates));
1568 }
1569 else
1570 *targs_out = TREE_PURPOSE (templates);
1571 return TREE_VALUE (templates);
1572 }
1573
1574 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1575 but with the default argument values filled in from those in the
1576 TMPL_TYPES. */
1577
1578 static tree
1579 copy_default_args_to_explicit_spec_1 (tree spec_types,
1580 tree tmpl_types)
1581 {
1582 tree new_spec_types;
1583
1584 if (!spec_types)
1585 return NULL_TREE;
1586
1587 if (spec_types == void_list_node)
1588 return void_list_node;
1589
1590 /* Substitute into the rest of the list. */
1591 new_spec_types =
1592 copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1593 TREE_CHAIN (tmpl_types));
1594
1595 /* Add the default argument for this parameter. */
1596 return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1597 TREE_VALUE (spec_types),
1598 new_spec_types);
1599 }
1600
1601 /* DECL is an explicit specialization. Replicate default arguments
1602 from the template it specializes. (That way, code like:
1603
1604 template <class T> void f(T = 3);
1605 template <> void f(double);
1606 void g () { f (); }
1607
1608 works, as required.) An alternative approach would be to look up
1609 the correct default arguments at the call-site, but this approach
1610 is consistent with how implicit instantiations are handled. */
1611
1612 static void
1613 copy_default_args_to_explicit_spec (tree decl)
1614 {
1615 tree tmpl;
1616 tree spec_types;
1617 tree tmpl_types;
1618 tree new_spec_types;
1619 tree old_type;
1620 tree new_type;
1621 tree t;
1622 tree object_type = NULL_TREE;
1623 tree in_charge = NULL_TREE;
1624 tree vtt = NULL_TREE;
1625
1626 /* See if there's anything we need to do. */
1627 tmpl = DECL_TI_TEMPLATE (decl);
1628 tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1629 for (t = tmpl_types; t; t = TREE_CHAIN (t))
1630 if (TREE_PURPOSE (t))
1631 break;
1632 if (!t)
1633 return;
1634
1635 old_type = TREE_TYPE (decl);
1636 spec_types = TYPE_ARG_TYPES (old_type);
1637
1638 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1639 {
1640 /* Remove the this pointer, but remember the object's type for
1641 CV quals. */
1642 object_type = TREE_TYPE (TREE_VALUE (spec_types));
1643 spec_types = TREE_CHAIN (spec_types);
1644 tmpl_types = TREE_CHAIN (tmpl_types);
1645
1646 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
1647 {
1648 /* DECL may contain more parameters than TMPL due to the extra
1649 in-charge parameter in constructors and destructors. */
1650 in_charge = spec_types;
1651 spec_types = TREE_CHAIN (spec_types);
1652 }
1653 if (DECL_HAS_VTT_PARM_P (decl))
1654 {
1655 vtt = spec_types;
1656 spec_types = TREE_CHAIN (spec_types);
1657 }
1658 }
1659
1660 /* Compute the merged default arguments. */
1661 new_spec_types =
1662 copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1663
1664 /* Compute the new FUNCTION_TYPE. */
1665 if (object_type)
1666 {
1667 if (vtt)
1668 new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
1669 TREE_VALUE (vtt),
1670 new_spec_types);
1671
1672 if (in_charge)
1673 /* Put the in-charge parameter back. */
1674 new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1675 TREE_VALUE (in_charge),
1676 new_spec_types);
1677
1678 new_type = build_method_type_directly (object_type,
1679 TREE_TYPE (old_type),
1680 new_spec_types);
1681 }
1682 else
1683 new_type = build_function_type (TREE_TYPE (old_type),
1684 new_spec_types);
1685 new_type = cp_build_type_attribute_variant (new_type,
1686 TYPE_ATTRIBUTES (old_type));
1687 new_type = build_exception_variant (new_type,
1688 TYPE_RAISES_EXCEPTIONS (old_type));
1689 TREE_TYPE (decl) = new_type;
1690 }
1691
1692 /* Check to see if the function just declared, as indicated in
1693 DECLARATOR, and in DECL, is a specialization of a function
1694 template. We may also discover that the declaration is an explicit
1695 instantiation at this point.
1696
1697 Returns DECL, or an equivalent declaration that should be used
1698 instead if all goes well. Issues an error message if something is
1699 amiss. Returns error_mark_node if the error is not easily
1700 recoverable.
1701
1702 FLAGS is a bitmask consisting of the following flags:
1703
1704 2: The function has a definition.
1705 4: The function is a friend.
1706
1707 The TEMPLATE_COUNT is the number of references to qualifying
1708 template classes that appeared in the name of the function. For
1709 example, in
1710
1711 template <class T> struct S { void f(); };
1712 void S<int>::f();
1713
1714 the TEMPLATE_COUNT would be 1. However, explicitly specialized
1715 classes are not counted in the TEMPLATE_COUNT, so that in
1716
1717 template <class T> struct S {};
1718 template <> struct S<int> { void f(); }
1719 template <> void S<int>::f();
1720
1721 the TEMPLATE_COUNT would be 0. (Note that this declaration is
1722 invalid; there should be no template <>.)
1723
1724 If the function is a specialization, it is marked as such via
1725 DECL_TEMPLATE_SPECIALIZATION. Furthermore, its DECL_TEMPLATE_INFO
1726 is set up correctly, and it is added to the list of specializations
1727 for that template. */
1728
1729 tree
1730 check_explicit_specialization (tree declarator,
1731 tree decl,
1732 int template_count,
1733 int flags)
1734 {
1735 int have_def = flags & 2;
1736 int is_friend = flags & 4;
1737 int specialization = 0;
1738 int explicit_instantiation = 0;
1739 int member_specialization = 0;
1740 tree ctype = DECL_CLASS_CONTEXT (decl);
1741 tree dname = DECL_NAME (decl);
1742 tmpl_spec_kind tsk;
1743
1744 if (is_friend)
1745 {
1746 if (!processing_specialization)
1747 tsk = tsk_none;
1748 else
1749 tsk = tsk_excessive_parms;
1750 }
1751 else
1752 tsk = current_tmpl_spec_kind (template_count);
1753
1754 switch (tsk)
1755 {
1756 case tsk_none:
1757 if (processing_specialization)
1758 {
1759 specialization = 1;
1760 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1761 }
1762 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1763 {
1764 if (is_friend)
1765 /* This could be something like:
1766
1767 template <class T> void f(T);
1768 class S { friend void f<>(int); } */
1769 specialization = 1;
1770 else
1771 {
1772 /* This case handles bogus declarations like template <>
1773 template <class T> void f<int>(); */
1774
1775 error ("template-id %qD in declaration of primary template",
1776 declarator);
1777 return decl;
1778 }
1779 }
1780 break;
1781
1782 case tsk_invalid_member_spec:
1783 /* The error has already been reported in
1784 check_specialization_scope. */
1785 return error_mark_node;
1786
1787 case tsk_invalid_expl_inst:
1788 error ("template parameter list used in explicit instantiation");
1789
1790 /* Fall through. */
1791
1792 case tsk_expl_inst:
1793 if (have_def)
1794 error ("definition provided for explicit instantiation");
1795
1796 explicit_instantiation = 1;
1797 break;
1798
1799 case tsk_excessive_parms:
1800 case tsk_insufficient_parms:
1801 if (tsk == tsk_excessive_parms)
1802 error ("too many template parameter lists in declaration of %qD",
1803 decl);
1804 else if (template_header_count)
1805 error("too few template parameter lists in declaration of %qD", decl);
1806 else
1807 error("explicit specialization of %qD must be introduced by "
1808 "%<template <>%>", decl);
1809
1810 /* Fall through. */
1811 case tsk_expl_spec:
1812 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1813 if (ctype)
1814 member_specialization = 1;
1815 else
1816 specialization = 1;
1817 break;
1818
1819 case tsk_template:
1820 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1821 {
1822 /* This case handles bogus declarations like template <>
1823 template <class T> void f<int>(); */
1824
1825 if (uses_template_parms (declarator))
1826 error ("function template partial specialization %qD "
1827 "is not allowed", declarator);
1828 else
1829 error ("template-id %qD in declaration of primary template",
1830 declarator);
1831 return decl;
1832 }
1833
1834 if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1835 /* This is a specialization of a member template, without
1836 specialization the containing class. Something like:
1837
1838 template <class T> struct S {
1839 template <class U> void f (U);
1840 };
1841 template <> template <class U> void S<int>::f(U) {}
1842
1843 That's a specialization -- but of the entire template. */
1844 specialization = 1;
1845 break;
1846
1847 default:
1848 gcc_unreachable ();
1849 }
1850
1851 if (specialization || member_specialization)
1852 {
1853 tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
1854 for (; t; t = TREE_CHAIN (t))
1855 if (TREE_PURPOSE (t))
1856 {
1857 pedwarn
1858 ("default argument specified in explicit specialization");
1859 break;
1860 }
1861 if (current_lang_name == lang_name_c)
1862 error ("template specialization with C linkage");
1863 }
1864
1865 if (specialization || member_specialization || explicit_instantiation)
1866 {
1867 tree tmpl = NULL_TREE;
1868 tree targs = NULL_TREE;
1869
1870 /* Make sure that the declarator is a TEMPLATE_ID_EXPR. */
1871 if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
1872 {
1873 tree fns;
1874
1875 gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
1876 if (ctype)
1877 fns = dname;
1878 else
1879 {
1880 /* If there is no class context, the explicit instantiation
1881 must be at namespace scope. */
1882 gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
1883
1884 /* Find the namespace binding, using the declaration
1885 context. */
1886 fns = namespace_binding (dname, CP_DECL_CONTEXT (decl));
1887 if (!fns || !is_overloaded_fn (fns))
1888 {
1889 error ("%qD is not a template function", dname);
1890 fns = error_mark_node;
1891 }
1892 }
1893
1894 declarator = lookup_template_function (fns, NULL_TREE);
1895 }
1896
1897 if (declarator == error_mark_node)
1898 return error_mark_node;
1899
1900 if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
1901 {
1902 if (!explicit_instantiation)
1903 /* A specialization in class scope. This is invalid,
1904 but the error will already have been flagged by
1905 check_specialization_scope. */
1906 return error_mark_node;
1907 else
1908 {
1909 /* It's not valid to write an explicit instantiation in
1910 class scope, e.g.:
1911
1912 class C { template void f(); }
1913
1914 This case is caught by the parser. However, on
1915 something like:
1916
1917 template class C { void f(); };
1918
1919 (which is invalid) we can get here. The error will be
1920 issued later. */
1921 ;
1922 }
1923
1924 return decl;
1925 }
1926 else if (ctype != NULL_TREE
1927 && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
1928 IDENTIFIER_NODE))
1929 {
1930 /* Find the list of functions in ctype that have the same
1931 name as the declared function. */
1932 tree name = TREE_OPERAND (declarator, 0);
1933 tree fns = NULL_TREE;
1934 int idx;
1935
1936 if (constructor_name_p (name, ctype))
1937 {
1938 int is_constructor = DECL_CONSTRUCTOR_P (decl);
1939
1940 if (is_constructor ? !TYPE_HAS_CONSTRUCTOR (ctype)
1941 : !CLASSTYPE_DESTRUCTORS (ctype))
1942 {
1943 /* From [temp.expl.spec]:
1944
1945 If such an explicit specialization for the member
1946 of a class template names an implicitly-declared
1947 special member function (clause _special_), the
1948 program is ill-formed.
1949
1950 Similar language is found in [temp.explicit]. */
1951 error ("specialization of implicitly-declared special member function");
1952 return error_mark_node;
1953 }
1954
1955 name = is_constructor ? ctor_identifier : dtor_identifier;
1956 }
1957
1958 if (!DECL_CONV_FN_P (decl))
1959 {
1960 idx = lookup_fnfields_1 (ctype, name);
1961 if (idx >= 0)
1962 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
1963 }
1964 else
1965 {
1966 VEC(tree,gc) *methods;
1967 tree ovl;
1968
1969 /* For a type-conversion operator, we cannot do a
1970 name-based lookup. We might be looking for `operator
1971 int' which will be a specialization of `operator T'.
1972 So, we find *all* the conversion operators, and then
1973 select from them. */
1974 fns = NULL_TREE;
1975
1976 methods = CLASSTYPE_METHOD_VEC (ctype);
1977 if (methods)
1978 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
1979 VEC_iterate (tree, methods, idx, ovl);
1980 ++idx)
1981 {
1982 if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
1983 /* There are no more conversion functions. */
1984 break;
1985
1986 /* Glue all these conversion functions together
1987 with those we already have. */
1988 for (; ovl; ovl = OVL_NEXT (ovl))
1989 fns = ovl_cons (OVL_CURRENT (ovl), fns);
1990 }
1991 }
1992
1993 if (fns == NULL_TREE)
1994 {
1995 error ("no member function %qD declared in %qT", name, ctype);
1996 return error_mark_node;
1997 }
1998 else
1999 TREE_OPERAND (declarator, 0) = fns;
2000 }
2001
2002 /* Figure out what exactly is being specialized at this point.
2003 Note that for an explicit instantiation, even one for a
2004 member function, we cannot tell apriori whether the
2005 instantiation is for a member template, or just a member
2006 function of a template class. Even if a member template is
2007 being instantiated, the member template arguments may be
2008 elided if they can be deduced from the rest of the
2009 declaration. */
2010 tmpl = determine_specialization (declarator, decl,
2011 &targs,
2012 member_specialization,
2013 template_count);
2014
2015 if (!tmpl || tmpl == error_mark_node)
2016 /* We couldn't figure out what this declaration was
2017 specializing. */
2018 return error_mark_node;
2019 else
2020 {
2021 tree gen_tmpl = most_general_template (tmpl);
2022
2023 if (explicit_instantiation)
2024 {
2025 /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2026 is done by do_decl_instantiation later. */
2027
2028 int arg_depth = TMPL_ARGS_DEPTH (targs);
2029 int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2030
2031 if (arg_depth > parm_depth)
2032 {
2033 /* If TMPL is not the most general template (for
2034 example, if TMPL is a friend template that is
2035 injected into namespace scope), then there will
2036 be too many levels of TARGS. Remove some of them
2037 here. */
2038 int i;
2039 tree new_targs;
2040
2041 new_targs = make_tree_vec (parm_depth);
2042 for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2043 TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2044 = TREE_VEC_ELT (targs, i);
2045 targs = new_targs;
2046 }
2047
2048 return instantiate_template (tmpl, targs, tf_error);
2049 }
2050
2051 /* If we thought that the DECL was a member function, but it
2052 turns out to be specializing a static member function,
2053 make DECL a static member function as well. */
2054 if (DECL_STATIC_FUNCTION_P (tmpl)
2055 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2056 revert_static_member_fn (decl);
2057
2058 /* If this is a specialization of a member template of a
2059 template class. In we want to return the TEMPLATE_DECL,
2060 not the specialization of it. */
2061 if (tsk == tsk_template)
2062 {
2063 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2064 DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
2065 if (have_def)
2066 {
2067 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2068 DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl))
2069 = DECL_SOURCE_LOCATION (decl);
2070 /* We want to use the argument list specified in the
2071 definition, not in the original declaration. */
2072 DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (tmpl))
2073 = DECL_ARGUMENTS (decl);
2074 }
2075 return tmpl;
2076 }
2077
2078 /* Set up the DECL_TEMPLATE_INFO for DECL. */
2079 DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
2080
2081 /* Inherit default function arguments from the template
2082 DECL is specializing. */
2083 copy_default_args_to_explicit_spec (decl);
2084
2085 /* This specialization has the same protection as the
2086 template it specializes. */
2087 TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2088 TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2089
2090 /* The specialization has the same visibility as the
2091 template it specializes. */
2092 if (DECL_VISIBILITY_SPECIFIED (gen_tmpl))
2093 {
2094 DECL_VISIBILITY_SPECIFIED (decl) = 1;
2095 DECL_VISIBILITY (decl) = DECL_VISIBILITY (gen_tmpl);
2096 }
2097
2098 if (is_friend && !have_def)
2099 /* This is not really a declaration of a specialization.
2100 It's just the name of an instantiation. But, it's not
2101 a request for an instantiation, either. */
2102 SET_DECL_IMPLICIT_INSTANTIATION (decl);
2103 else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2104 /* This is indeed a specialization. In case of constructors
2105 and destructors, we need in-charge and not-in-charge
2106 versions in V3 ABI. */
2107 clone_function_decl (decl, /*update_method_vec_p=*/0);
2108
2109 /* Register this specialization so that we can find it
2110 again. */
2111 decl = register_specialization (decl, gen_tmpl, targs);
2112 }
2113 }
2114
2115 return decl;
2116 }
2117
2118 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2119 parameters. These are represented in the same format used for
2120 DECL_TEMPLATE_PARMS. */
2121
2122 int
2123 comp_template_parms (tree parms1, tree parms2)
2124 {
2125 tree p1;
2126 tree p2;
2127
2128 if (parms1 == parms2)
2129 return 1;
2130
2131 for (p1 = parms1, p2 = parms2;
2132 p1 != NULL_TREE && p2 != NULL_TREE;
2133 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2134 {
2135 tree t1 = TREE_VALUE (p1);
2136 tree t2 = TREE_VALUE (p2);
2137 int i;
2138
2139 gcc_assert (TREE_CODE (t1) == TREE_VEC);
2140 gcc_assert (TREE_CODE (t2) == TREE_VEC);
2141
2142 if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2143 return 0;
2144
2145 for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2146 {
2147 tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2148 tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2149
2150 if (TREE_CODE (parm1) != TREE_CODE (parm2))
2151 return 0;
2152
2153 if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM)
2154 continue;
2155 else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2156 return 0;
2157 }
2158 }
2159
2160 if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2161 /* One set of parameters has more parameters lists than the
2162 other. */
2163 return 0;
2164
2165 return 1;
2166 }
2167
2168 /* Complain if DECL shadows a template parameter.
2169
2170 [temp.local]: A template-parameter shall not be redeclared within its
2171 scope (including nested scopes). */
2172
2173 void
2174 check_template_shadow (tree decl)
2175 {
2176 tree olddecl;
2177
2178 /* If we're not in a template, we can't possibly shadow a template
2179 parameter. */
2180 if (!current_template_parms)
2181 return;
2182
2183 /* Figure out what we're shadowing. */
2184 if (TREE_CODE (decl) == OVERLOAD)
2185 decl = OVL_CURRENT (decl);
2186 olddecl = innermost_non_namespace_value (DECL_NAME (decl));
2187
2188 /* If there's no previous binding for this name, we're not shadowing
2189 anything, let alone a template parameter. */
2190 if (!olddecl)
2191 return;
2192
2193 /* If we're not shadowing a template parameter, we're done. Note
2194 that OLDDECL might be an OVERLOAD (or perhaps even an
2195 ERROR_MARK), so we can't just blithely assume it to be a _DECL
2196 node. */
2197 if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
2198 return;
2199
2200 /* We check for decl != olddecl to avoid bogus errors for using a
2201 name inside a class. We check TPFI to avoid duplicate errors for
2202 inline member templates. */
2203 if (decl == olddecl
2204 || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
2205 return;
2206
2207 error ("declaration of %q+#D", decl);
2208 error (" shadows template parm %q+#D", olddecl);
2209 }
2210
2211 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
2212 ORIG_LEVEL, DECL, and TYPE. */
2213
2214 static tree
2215 build_template_parm_index (int index,
2216 int level,
2217 int orig_level,
2218 tree decl,
2219 tree type)
2220 {
2221 tree t = make_node (TEMPLATE_PARM_INDEX);
2222 TEMPLATE_PARM_IDX (t) = index;
2223 TEMPLATE_PARM_LEVEL (t) = level;
2224 TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
2225 TEMPLATE_PARM_DECL (t) = decl;
2226 TREE_TYPE (t) = type;
2227 TREE_CONSTANT (t) = TREE_CONSTANT (decl);
2228 TREE_INVARIANT (t) = TREE_INVARIANT (decl);
2229 TREE_READONLY (t) = TREE_READONLY (decl);
2230
2231 return t;
2232 }
2233
2234 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
2235 TEMPLATE_PARM_LEVEL has been decreased by LEVELS. If such a
2236 TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2237 new one is created. */
2238
2239 static tree
2240 reduce_template_parm_level (tree index, tree type, int levels)
2241 {
2242 if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
2243 || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
2244 != TEMPLATE_PARM_LEVEL (index) - levels))
2245 {
2246 tree orig_decl = TEMPLATE_PARM_DECL (index);
2247 tree decl, t;
2248
2249 decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
2250 TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
2251 TREE_INVARIANT (decl) = TREE_INVARIANT (orig_decl);
2252 TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2253 DECL_ARTIFICIAL (decl) = 1;
2254 SET_DECL_TEMPLATE_PARM_P (decl);
2255
2256 t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
2257 TEMPLATE_PARM_LEVEL (index) - levels,
2258 TEMPLATE_PARM_ORIG_LEVEL (index),
2259 decl, type);
2260 TEMPLATE_PARM_DESCENDANTS (index) = t;
2261
2262 /* Template template parameters need this. */
2263 if (TREE_CODE (decl) != CONST_DECL)
2264 DECL_TEMPLATE_PARMS (decl)
2265 = DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index));
2266 }
2267
2268 return TEMPLATE_PARM_DESCENDANTS (index);
2269 }
2270
2271 /* Process information from new template parameter NEXT and append it to the
2272 LIST being built. This new parameter is a non-type parameter iff
2273 IS_NON_TYPE is true. */
2274
2275 tree
2276 process_template_parm (tree list, tree next, bool is_non_type)
2277 {
2278 tree parm;
2279 tree decl = 0;
2280 tree defval;
2281 int idx;
2282
2283 parm = next;
2284 gcc_assert (TREE_CODE (parm) == TREE_LIST);
2285 defval = TREE_PURPOSE (parm);
2286
2287 if (list)
2288 {
2289 tree p = TREE_VALUE (tree_last (list));
2290
2291 if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
2292 idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
2293 else
2294 idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
2295 ++idx;
2296 }
2297 else
2298 idx = 0;
2299
2300 if (is_non_type)
2301 {
2302 parm = TREE_VALUE (parm);
2303
2304 SET_DECL_TEMPLATE_PARM_P (parm);
2305
2306 /* [temp.param]
2307
2308 The top-level cv-qualifiers on the template-parameter are
2309 ignored when determining its type. */
2310 TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
2311
2312 /* A template parameter is not modifiable. */
2313 TREE_CONSTANT (parm) = 1;
2314 TREE_INVARIANT (parm) = 1;
2315 TREE_READONLY (parm) = 1;
2316 if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
2317 TREE_TYPE (parm) = void_type_node;
2318 decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
2319 TREE_CONSTANT (decl) = 1;
2320 TREE_INVARIANT (decl) = 1;
2321 TREE_READONLY (decl) = 1;
2322 DECL_INITIAL (parm) = DECL_INITIAL (decl)
2323 = build_template_parm_index (idx, processing_template_decl,
2324 processing_template_decl,
2325 decl, TREE_TYPE (parm));
2326 }
2327 else
2328 {
2329 tree t;
2330 parm = TREE_VALUE (TREE_VALUE (parm));
2331
2332 if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
2333 {
2334 t = make_aggr_type (TEMPLATE_TEMPLATE_PARM);
2335 /* This is for distinguishing between real templates and template
2336 template parameters */
2337 TREE_TYPE (parm) = t;
2338 TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
2339 decl = parm;
2340 }
2341 else
2342 {
2343 t = make_aggr_type (TEMPLATE_TYPE_PARM);
2344 /* parm is either IDENTIFIER_NODE or NULL_TREE. */
2345 decl = build_decl (TYPE_DECL, parm, t);
2346 }
2347
2348 TYPE_NAME (t) = decl;
2349 TYPE_STUB_DECL (t) = decl;
2350 parm = decl;
2351 TEMPLATE_TYPE_PARM_INDEX (t)
2352 = build_template_parm_index (idx, processing_template_decl,
2353 processing_template_decl,
2354 decl, TREE_TYPE (parm));
2355 }
2356 DECL_ARTIFICIAL (decl) = 1;
2357 SET_DECL_TEMPLATE_PARM_P (decl);
2358 pushdecl (decl);
2359 parm = build_tree_list (defval, parm);
2360 return chainon (list, parm);
2361 }
2362
2363 /* The end of a template parameter list has been reached. Process the
2364 tree list into a parameter vector, converting each parameter into a more
2365 useful form. Type parameters are saved as IDENTIFIER_NODEs, and others
2366 as PARM_DECLs. */
2367
2368 tree
2369 end_template_parm_list (tree parms)
2370 {
2371 int nparms;
2372 tree parm, next;
2373 tree saved_parmlist = make_tree_vec (list_length (parms));
2374
2375 current_template_parms
2376 = tree_cons (size_int (processing_template_decl),
2377 saved_parmlist, current_template_parms);
2378
2379 for (parm = parms, nparms = 0; parm; parm = next, nparms++)
2380 {
2381 next = TREE_CHAIN (parm);
2382 TREE_VEC_ELT (saved_parmlist, nparms) = parm;
2383 TREE_CHAIN (parm) = NULL_TREE;
2384 }
2385
2386 --processing_template_parmlist;
2387
2388 return saved_parmlist;
2389 }
2390
2391 /* end_template_decl is called after a template declaration is seen. */
2392
2393 void
2394 end_template_decl (void)
2395 {
2396 reset_specialization ();
2397
2398 if (! processing_template_decl)
2399 return;
2400
2401 /* This matches the pushlevel in begin_template_parm_list. */
2402 finish_scope ();
2403
2404 --processing_template_decl;
2405 current_template_parms = TREE_CHAIN (current_template_parms);
2406 }
2407
2408 /* Given a template argument vector containing the template PARMS.
2409 The innermost PARMS are given first. */
2410
2411 tree
2412 current_template_args (void)
2413 {
2414 tree header;
2415 tree args = NULL_TREE;
2416 int length = TMPL_PARMS_DEPTH (current_template_parms);
2417 int l = length;
2418
2419 /* If there is only one level of template parameters, we do not
2420 create a TREE_VEC of TREE_VECs. Instead, we return a single
2421 TREE_VEC containing the arguments. */
2422 if (length > 1)
2423 args = make_tree_vec (length);
2424
2425 for (header = current_template_parms; header; header = TREE_CHAIN (header))
2426 {
2427 tree a = copy_node (TREE_VALUE (header));
2428 int i;
2429
2430 TREE_TYPE (a) = NULL_TREE;
2431 for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
2432 {
2433 tree t = TREE_VEC_ELT (a, i);
2434
2435 /* T will be a list if we are called from within a
2436 begin/end_template_parm_list pair, but a vector directly
2437 if within a begin/end_member_template_processing pair. */
2438 if (TREE_CODE (t) == TREE_LIST)
2439 {
2440 t = TREE_VALUE (t);
2441
2442 if (TREE_CODE (t) == TYPE_DECL
2443 || TREE_CODE (t) == TEMPLATE_DECL)
2444 t = TREE_TYPE (t);
2445 else
2446 t = DECL_INITIAL (t);
2447 TREE_VEC_ELT (a, i) = t;
2448 }
2449 }
2450
2451 if (length > 1)
2452 TREE_VEC_ELT (args, --l) = a;
2453 else
2454 args = a;
2455 }
2456
2457 return args;
2458 }
2459
2460 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
2461 template PARMS. If MEMBER_TEMPLATE_P is true, the new template is
2462 a member template. Used by push_template_decl below. */
2463
2464 static tree
2465 build_template_decl (tree decl, tree parms, bool member_template_p)
2466 {
2467 tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
2468 DECL_TEMPLATE_PARMS (tmpl) = parms;
2469 DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
2470 DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
2471 if (DECL_LANG_SPECIFIC (decl))
2472 {
2473 DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
2474 DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
2475 DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
2476 DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
2477 DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
2478 if (DECL_OVERLOADED_OPERATOR_P (decl))
2479 SET_OVERLOADED_OPERATOR_CODE (tmpl,
2480 DECL_OVERLOADED_OPERATOR_P (decl));
2481 }
2482
2483 return tmpl;
2484 }
2485
2486 struct template_parm_data
2487 {
2488 /* The level of the template parameters we are currently
2489 processing. */
2490 int level;
2491
2492 /* The index of the specialization argument we are currently
2493 processing. */
2494 int current_arg;
2495
2496 /* An array whose size is the number of template parameters. The
2497 elements are nonzero if the parameter has been used in any one
2498 of the arguments processed so far. */
2499 int* parms;
2500
2501 /* An array whose size is the number of template arguments. The
2502 elements are nonzero if the argument makes use of template
2503 parameters of this level. */
2504 int* arg_uses_template_parms;
2505 };
2506
2507 /* Subroutine of push_template_decl used to see if each template
2508 parameter in a partial specialization is used in the explicit
2509 argument list. If T is of the LEVEL given in DATA (which is
2510 treated as a template_parm_data*), then DATA->PARMS is marked
2511 appropriately. */
2512
2513 static int
2514 mark_template_parm (tree t, void* data)
2515 {
2516 int level;
2517 int idx;
2518 struct template_parm_data* tpd = (struct template_parm_data*) data;
2519
2520 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
2521 {
2522 level = TEMPLATE_PARM_LEVEL (t);
2523 idx = TEMPLATE_PARM_IDX (t);
2524 }
2525 else
2526 {
2527 level = TEMPLATE_TYPE_LEVEL (t);
2528 idx = TEMPLATE_TYPE_IDX (t);
2529 }
2530
2531 if (level == tpd->level)
2532 {
2533 tpd->parms[idx] = 1;
2534 tpd->arg_uses_template_parms[tpd->current_arg] = 1;
2535 }
2536
2537 /* Return zero so that for_each_template_parm will continue the
2538 traversal of the tree; we want to mark *every* template parm. */
2539 return 0;
2540 }
2541
2542 /* Process the partial specialization DECL. */
2543
2544 static tree
2545 process_partial_specialization (tree decl)
2546 {
2547 tree type = TREE_TYPE (decl);
2548 tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
2549 tree specargs = CLASSTYPE_TI_ARGS (type);
2550 tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
2551 tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
2552 tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
2553 int nargs = TREE_VEC_LENGTH (inner_args);
2554 int ntparms = TREE_VEC_LENGTH (inner_parms);
2555 int i;
2556 int did_error_intro = 0;
2557 struct template_parm_data tpd;
2558 struct template_parm_data tpd2;
2559
2560 /* We check that each of the template parameters given in the
2561 partial specialization is used in the argument list to the
2562 specialization. For example:
2563
2564 template <class T> struct S;
2565 template <class T> struct S<T*>;
2566
2567 The second declaration is OK because `T*' uses the template
2568 parameter T, whereas
2569
2570 template <class T> struct S<int>;
2571
2572 is no good. Even trickier is:
2573
2574 template <class T>
2575 struct S1
2576 {
2577 template <class U>
2578 struct S2;
2579 template <class U>
2580 struct S2<T>;
2581 };
2582
2583 The S2<T> declaration is actually invalid; it is a
2584 full-specialization. Of course,
2585
2586 template <class U>
2587 struct S2<T (*)(U)>;
2588
2589 or some such would have been OK. */
2590 tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
2591 tpd.parms = alloca (sizeof (int) * ntparms);
2592 memset (tpd.parms, 0, sizeof (int) * ntparms);
2593
2594 tpd.arg_uses_template_parms = alloca (sizeof (int) * nargs);
2595 memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
2596 for (i = 0; i < nargs; ++i)
2597 {
2598 tpd.current_arg = i;
2599 for_each_template_parm (TREE_VEC_ELT (inner_args, i),
2600 &mark_template_parm,
2601 &tpd,
2602 NULL);
2603 }
2604 for (i = 0; i < ntparms; ++i)
2605 if (tpd.parms[i] == 0)
2606 {
2607 /* One of the template parms was not used in the
2608 specialization. */
2609 if (!did_error_intro)
2610 {
2611 error ("template parameters not used in partial specialization:");
2612 did_error_intro = 1;
2613 }
2614
2615 error (" %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
2616 }
2617
2618 /* [temp.class.spec]
2619
2620 The argument list of the specialization shall not be identical to
2621 the implicit argument list of the primary template. */
2622 if (comp_template_args
2623 (inner_args,
2624 INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
2625 (maintmpl)))))
2626 error ("partial specialization %qT does not specialize any template arguments", type);
2627
2628 /* [temp.class.spec]
2629
2630 A partially specialized non-type argument expression shall not
2631 involve template parameters of the partial specialization except
2632 when the argument expression is a simple identifier.
2633
2634 The type of a template parameter corresponding to a specialized
2635 non-type argument shall not be dependent on a parameter of the
2636 specialization. */
2637 gcc_assert (nargs == DECL_NTPARMS (maintmpl));
2638 tpd2.parms = 0;
2639 for (i = 0; i < nargs; ++i)
2640 {
2641 tree arg = TREE_VEC_ELT (inner_args, i);
2642 if (/* These first two lines are the `non-type' bit. */
2643 !TYPE_P (arg)
2644 && TREE_CODE (arg) != TEMPLATE_DECL
2645 /* This next line is the `argument expression is not just a
2646 simple identifier' condition and also the `specialized
2647 non-type argument' bit. */
2648 && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
2649 {
2650 if (tpd.arg_uses_template_parms[i])
2651 error ("template argument %qE involves template parameter(s)", arg);
2652 else
2653 {
2654 /* Look at the corresponding template parameter,
2655 marking which template parameters its type depends
2656 upon. */
2657 tree type =
2658 TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (main_inner_parms,
2659 i)));
2660
2661 if (!tpd2.parms)
2662 {
2663 /* We haven't yet initialized TPD2. Do so now. */
2664 tpd2.arg_uses_template_parms
2665 = alloca (sizeof (int) * nargs);
2666 /* The number of parameters here is the number in the
2667 main template, which, as checked in the assertion
2668 above, is NARGS. */
2669 tpd2.parms = alloca (sizeof (int) * nargs);
2670 tpd2.level =
2671 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
2672 }
2673
2674 /* Mark the template parameters. But this time, we're
2675 looking for the template parameters of the main
2676 template, not in the specialization. */
2677 tpd2.current_arg = i;
2678 tpd2.arg_uses_template_parms[i] = 0;
2679 memset (tpd2.parms, 0, sizeof (int) * nargs);
2680 for_each_template_parm (type,
2681 &mark_template_parm,
2682 &tpd2,
2683 NULL);
2684
2685 if (tpd2.arg_uses_template_parms [i])
2686 {
2687 /* The type depended on some template parameters.
2688 If they are fully specialized in the
2689 specialization, that's OK. */
2690 int j;
2691 for (j = 0; j < nargs; ++j)
2692 if (tpd2.parms[j] != 0
2693 && tpd.arg_uses_template_parms [j])
2694 {
2695 error ("type %qT of template argument %qE depends "
2696 "on template parameter(s)",
2697 type,
2698 arg);
2699 break;
2700 }
2701 }
2702 }
2703 }
2704 }
2705
2706 if (retrieve_specialization (maintmpl, specargs,
2707 /*class_specializations_p=*/true))
2708 /* We've already got this specialization. */
2709 return decl;
2710
2711 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
2712 = tree_cons (inner_args, inner_parms,
2713 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
2714 TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
2715 return decl;
2716 }
2717
2718 /* Check that a template declaration's use of default arguments is not
2719 invalid. Here, PARMS are the template parameters. IS_PRIMARY is
2720 nonzero if DECL is the thing declared by a primary template.
2721 IS_PARTIAL is nonzero if DECL is a partial specialization. */
2722
2723 static void
2724 check_default_tmpl_args (tree decl, tree parms, int is_primary, int is_partial)
2725 {
2726 const char *msg;
2727 int last_level_to_check;
2728 tree parm_level;
2729
2730 /* [temp.param]
2731
2732 A default template-argument shall not be specified in a
2733 function template declaration or a function template definition, nor
2734 in the template-parameter-list of the definition of a member of a
2735 class template. */
2736
2737 if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
2738 /* You can't have a function template declaration in a local
2739 scope, nor you can you define a member of a class template in a
2740 local scope. */
2741 return;
2742
2743 if (current_class_type
2744 && !TYPE_BEING_DEFINED (current_class_type)
2745 && DECL_LANG_SPECIFIC (decl)
2746 /* If this is either a friend defined in the scope of the class
2747 or a member function. */
2748 && (DECL_FUNCTION_MEMBER_P (decl)
2749 ? same_type_p (DECL_CONTEXT (decl), current_class_type)
2750 : DECL_FRIEND_CONTEXT (decl)
2751 ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
2752 : false)
2753 /* And, if it was a member function, it really was defined in
2754 the scope of the class. */
2755 && (!DECL_FUNCTION_MEMBER_P (decl)
2756 || DECL_INITIALIZED_IN_CLASS_P (decl)))
2757 /* We already checked these parameters when the template was
2758 declared, so there's no need to do it again now. This function
2759 was defined in class scope, but we're processing it's body now
2760 that the class is complete. */
2761 return;
2762
2763 /* [temp.param]
2764
2765 If a template-parameter has a default template-argument, all
2766 subsequent template-parameters shall have a default
2767 template-argument supplied. */
2768 for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
2769 {
2770 tree inner_parms = TREE_VALUE (parm_level);
2771 int ntparms = TREE_VEC_LENGTH (inner_parms);
2772 int seen_def_arg_p = 0;
2773 int i;
2774
2775 for (i = 0; i < ntparms; ++i)
2776 {
2777 tree parm = TREE_VEC_ELT (inner_parms, i);
2778 if (TREE_PURPOSE (parm))
2779 seen_def_arg_p = 1;
2780 else if (seen_def_arg_p)
2781 {
2782 error ("no default argument for %qD", TREE_VALUE (parm));
2783 /* For better subsequent error-recovery, we indicate that
2784 there should have been a default argument. */
2785 TREE_PURPOSE (parm) = error_mark_node;
2786 }
2787 }
2788 }
2789
2790 if (TREE_CODE (decl) != TYPE_DECL || is_partial || !is_primary)
2791 /* For an ordinary class template, default template arguments are
2792 allowed at the innermost level, e.g.:
2793 template <class T = int>
2794 struct S {};
2795 but, in a partial specialization, they're not allowed even
2796 there, as we have in [temp.class.spec]:
2797
2798 The template parameter list of a specialization shall not
2799 contain default template argument values.
2800
2801 So, for a partial specialization, or for a function template,
2802 we look at all of them. */
2803 ;
2804 else
2805 /* But, for a primary class template that is not a partial
2806 specialization we look at all template parameters except the
2807 innermost ones. */
2808 parms = TREE_CHAIN (parms);
2809
2810 /* Figure out what error message to issue. */
2811 if (TREE_CODE (decl) == FUNCTION_DECL)
2812 msg = "default template arguments may not be used in function templates";
2813 else if (is_partial)
2814 msg = "default template arguments may not be used in partial specializations";
2815 else
2816 msg = "default argument for template parameter for class enclosing %qD";
2817
2818 if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
2819 /* If we're inside a class definition, there's no need to
2820 examine the parameters to the class itself. On the one
2821 hand, they will be checked when the class is defined, and,
2822 on the other, default arguments are valid in things like:
2823 template <class T = double>
2824 struct S { template <class U> void f(U); };
2825 Here the default argument for `S' has no bearing on the
2826 declaration of `f'. */
2827 last_level_to_check = template_class_depth (current_class_type) + 1;
2828 else
2829 /* Check everything. */
2830 last_level_to_check = 0;
2831
2832 for (parm_level = parms;
2833 parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
2834 parm_level = TREE_CHAIN (parm_level))
2835 {
2836 tree inner_parms = TREE_VALUE (parm_level);
2837 int i;
2838 int ntparms;
2839
2840 ntparms = TREE_VEC_LENGTH (inner_parms);
2841 for (i = 0; i < ntparms; ++i)
2842 if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
2843 {
2844 if (msg)
2845 {
2846 error (msg, decl);
2847 msg = 0;
2848 }
2849
2850 /* Clear out the default argument so that we are not
2851 confused later. */
2852 TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
2853 }
2854
2855 /* At this point, if we're still interested in issuing messages,
2856 they must apply to classes surrounding the object declared. */
2857 if (msg)
2858 msg = "default argument for template parameter for class enclosing %qD";
2859 }
2860 }
2861
2862 /* Worker for push_template_decl_real, called via
2863 for_each_template_parm. DATA is really an int, indicating the
2864 level of the parameters we are interested in. If T is a template
2865 parameter of that level, return nonzero. */
2866
2867 static int
2868 template_parm_this_level_p (tree t, void* data)
2869 {
2870 int this_level = *(int *)data;
2871 int level;
2872
2873 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
2874 level = TEMPLATE_PARM_LEVEL (t);
2875 else
2876 level = TEMPLATE_TYPE_LEVEL (t);
2877 return level == this_level;
2878 }
2879
2880 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
2881 parameters given by current_template_args, or reuses a
2882 previously existing one, if appropriate. Returns the DECL, or an
2883 equivalent one, if it is replaced via a call to duplicate_decls.
2884
2885 If IS_FRIEND is nonzero, DECL is a friend declaration. */
2886
2887 tree
2888 push_template_decl_real (tree decl, int is_friend)
2889 {
2890 tree tmpl;
2891 tree args;
2892 tree info;
2893 tree ctx;
2894 int primary;
2895 int is_partial;
2896 int new_template_p = 0;
2897 /* True if the template is a member template, in the sense of
2898 [temp.mem]. */
2899 bool member_template_p = false;
2900
2901 if (decl == error_mark_node)
2902 return decl;
2903
2904 /* See if this is a partial specialization. */
2905 is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
2906 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
2907 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
2908
2909 is_friend |= (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl));
2910
2911 if (is_friend)
2912 /* For a friend, we want the context of the friend function, not
2913 the type of which it is a friend. */
2914 ctx = DECL_CONTEXT (decl);
2915 else if (CP_DECL_CONTEXT (decl)
2916 && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
2917 /* In the case of a virtual function, we want the class in which
2918 it is defined. */
2919 ctx = CP_DECL_CONTEXT (decl);
2920 else
2921 /* Otherwise, if we're currently defining some class, the DECL
2922 is assumed to be a member of the class. */
2923 ctx = current_scope ();
2924
2925 if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
2926 ctx = NULL_TREE;
2927
2928 if (!DECL_CONTEXT (decl))
2929 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2930
2931 /* See if this is a primary template. */
2932 primary = template_parm_scope_p ();
2933
2934 if (primary)
2935 {
2936 if (DECL_CLASS_SCOPE_P (decl))
2937 member_template_p = true;
2938 if (current_lang_name == lang_name_c)
2939 error ("template with C linkage");
2940 else if (TREE_CODE (decl) == TYPE_DECL
2941 && ANON_AGGRNAME_P (DECL_NAME (decl)))
2942 error ("template class without a name");
2943 else if (TREE_CODE (decl) == FUNCTION_DECL)
2944 {
2945 if (DECL_DESTRUCTOR_P (decl))
2946 {
2947 /* [temp.mem]
2948
2949 A destructor shall not be a member template. */
2950 error ("destructor %qD declared as member template", decl);
2951 return error_mark_node;
2952 }
2953 if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
2954 && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
2955 || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
2956 || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
2957 || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
2958 == void_list_node)))
2959 {
2960 /* [basic.stc.dynamic.allocation]
2961
2962 An allocation function can be a function
2963 template. ... Template allocation functions shall
2964 have two or more parameters. */
2965 error ("invalid template declaration of %qD", decl);
2966 return decl;
2967 }
2968 }
2969 else if ((DECL_IMPLICIT_TYPEDEF_P (decl)
2970 && CLASS_TYPE_P (TREE_TYPE (decl)))
2971 || (TREE_CODE (decl) == VAR_DECL && ctx && CLASS_TYPE_P (ctx)))
2972 /* OK */;
2973 else
2974 {
2975 error ("template declaration of %q#D", decl);
2976 return error_mark_node;
2977 }
2978 }
2979
2980 /* Check to see that the rules regarding the use of default
2981 arguments are not being violated. */
2982 check_default_tmpl_args (decl, current_template_parms,
2983 primary, is_partial);
2984
2985 if (is_partial)
2986 return process_partial_specialization (decl);
2987
2988 args = current_template_args ();
2989
2990 if (!ctx
2991 || TREE_CODE (ctx) == FUNCTION_DECL
2992 || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
2993 || (is_friend && !DECL_TEMPLATE_INFO (decl)))
2994 {
2995 if (DECL_LANG_SPECIFIC (decl)
2996 && DECL_TEMPLATE_INFO (decl)
2997 && DECL_TI_TEMPLATE (decl))
2998 tmpl = DECL_TI_TEMPLATE (decl);
2999 /* If DECL is a TYPE_DECL for a class-template, then there won't
3000 be DECL_LANG_SPECIFIC. The information equivalent to
3001 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead. */
3002 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3003 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3004 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3005 {
3006 /* Since a template declaration already existed for this
3007 class-type, we must be redeclaring it here. Make sure
3008 that the redeclaration is valid. */
3009 redeclare_class_template (TREE_TYPE (decl),
3010 current_template_parms);
3011 /* We don't need to create a new TEMPLATE_DECL; just use the
3012 one we already had. */
3013 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3014 }
3015 else
3016 {
3017 tmpl = build_template_decl (decl, current_template_parms,
3018 member_template_p);
3019 new_template_p = 1;
3020
3021 if (DECL_LANG_SPECIFIC (decl)
3022 && DECL_TEMPLATE_SPECIALIZATION (decl))
3023 {
3024 /* A specialization of a member template of a template
3025 class. */
3026 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3027 DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
3028 DECL_TEMPLATE_INFO (decl) = NULL_TREE;
3029 }
3030 }
3031 }
3032 else
3033 {
3034 tree a, t, current, parms;
3035 int i;
3036
3037 if (TREE_CODE (decl) == TYPE_DECL)
3038 {
3039 if ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (decl)))
3040 || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
3041 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3042 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3043 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3044 else
3045 {
3046 error ("%qD does not declare a template type", decl);
3047 return decl;
3048 }
3049 }
3050 else if (!DECL_LANG_SPECIFIC (decl) || !DECL_TEMPLATE_INFO (decl))
3051 {
3052 error ("template definition of non-template %q#D", decl);
3053 return decl;
3054 }
3055 else
3056 tmpl = DECL_TI_TEMPLATE (decl);
3057
3058 if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3059 && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
3060 && DECL_TEMPLATE_SPECIALIZATION (decl)
3061 && DECL_MEMBER_TEMPLATE_P (tmpl))
3062 {
3063 tree new_tmpl;
3064
3065 /* The declaration is a specialization of a member
3066 template, declared outside the class. Therefore, the
3067 innermost template arguments will be NULL, so we
3068 replace them with the arguments determined by the
3069 earlier call to check_explicit_specialization. */
3070 args = DECL_TI_ARGS (decl);
3071
3072 new_tmpl
3073 = build_template_decl (decl, current_template_parms,
3074 member_template_p);
3075 DECL_TEMPLATE_RESULT (new_tmpl) = decl;
3076 TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
3077 DECL_TI_TEMPLATE (decl) = new_tmpl;
3078 SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
3079 DECL_TEMPLATE_INFO (new_tmpl)
3080 = tree_cons (tmpl, args, NULL_TREE);
3081
3082 register_specialization (new_tmpl,
3083 most_general_template (tmpl),
3084 args);
3085 return decl;
3086 }
3087
3088 /* Make sure the template headers we got make sense. */
3089
3090 parms = DECL_TEMPLATE_PARMS (tmpl);
3091 i = TMPL_PARMS_DEPTH (parms);
3092 if (TMPL_ARGS_DEPTH (args) != i)
3093 {
3094 error ("expected %d levels of template parms for %q#D, got %d",
3095 i, decl, TMPL_ARGS_DEPTH (args));
3096 }
3097 else
3098 for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
3099 {
3100 a = TMPL_ARGS_LEVEL (args, i);
3101 t = INNERMOST_TEMPLATE_PARMS (parms);
3102
3103 if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
3104 {
3105 if (current == decl)
3106 error ("got %d template parameters for %q#D",
3107 TREE_VEC_LENGTH (a), decl);
3108 else
3109 error ("got %d template parameters for %q#T",
3110 TREE_VEC_LENGTH (a), current);
3111 error (" but %d required", TREE_VEC_LENGTH (t));
3112 }
3113
3114 /* Perhaps we should also check that the parms are used in the
3115 appropriate qualifying scopes in the declarator? */
3116
3117 if (current == decl)
3118 current = ctx;
3119 else
3120 current = TYPE_CONTEXT (current);
3121 }
3122 }
3123
3124 DECL_TEMPLATE_RESULT (tmpl) = decl;
3125 TREE_TYPE (tmpl) = TREE_TYPE (decl);
3126
3127 /* Push template declarations for global functions and types. Note
3128 that we do not try to push a global template friend declared in a
3129 template class; such a thing may well depend on the template
3130 parameters of the class. */
3131 if (new_template_p && !ctx
3132 && !(is_friend && template_class_depth (current_class_type) > 0))
3133 {
3134 tmpl = pushdecl_namespace_level (tmpl);
3135 if (tmpl == error_mark_node)
3136 return error_mark_node;
3137
3138 /* Hide template friend classes that haven't been declared yet. */
3139 if (is_friend && TREE_CODE (decl) == TYPE_DECL)
3140 {
3141 DECL_ANTICIPATED (tmpl) = 1;
3142 DECL_FRIEND_P (tmpl) = 1;
3143 }
3144 }
3145
3146 if (primary)
3147 {
3148 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
3149 if (DECL_CONV_FN_P (tmpl))
3150 {
3151 int depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
3152
3153 /* It is a conversion operator. See if the type converted to
3154 depends on innermost template operands. */
3155
3156 if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
3157 depth))
3158 DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
3159 }
3160 }
3161
3162 /* The DECL_TI_ARGS of DECL contains full set of arguments referring
3163 back to its most general template. If TMPL is a specialization,
3164 ARGS may only have the innermost set of arguments. Add the missing
3165 argument levels if necessary. */
3166 if (DECL_TEMPLATE_INFO (tmpl))
3167 args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
3168
3169 info = tree_cons (tmpl, args, NULL_TREE);
3170
3171 if (DECL_IMPLICIT_TYPEDEF_P (decl))
3172 {
3173 SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
3174 if ((!ctx || TREE_CODE (ctx) != FUNCTION_DECL)
3175 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
3176 /* Don't change the name if we've already set it up. */
3177 && !IDENTIFIER_TEMPLATE (DECL_NAME (decl)))
3178 DECL_NAME (decl) = classtype_mangled_name (TREE_TYPE (decl));
3179 }
3180 else if (DECL_LANG_SPECIFIC (decl))
3181 DECL_TEMPLATE_INFO (decl) = info;
3182
3183 return DECL_TEMPLATE_RESULT (tmpl);
3184 }
3185
3186 tree
3187 push_template_decl (tree decl)
3188 {
3189 return push_template_decl_real (decl, 0);
3190 }
3191
3192 /* Called when a class template TYPE is redeclared with the indicated
3193 template PARMS, e.g.:
3194
3195 template <class T> struct S;
3196 template <class T> struct S {}; */
3197
3198 void
3199 redeclare_class_template (tree type, tree parms)
3200 {
3201 tree tmpl;
3202 tree tmpl_parms;
3203 int i;
3204
3205 if (!TYPE_TEMPLATE_INFO (type))
3206 {
3207 error ("%qT is not a template type", type);
3208 return;
3209 }
3210
3211 tmpl = TYPE_TI_TEMPLATE (type);
3212 if (!PRIMARY_TEMPLATE_P (tmpl))
3213 /* The type is nested in some template class. Nothing to worry
3214 about here; there are no new template parameters for the nested
3215 type. */
3216 return;
3217
3218 if (!parms)
3219 {
3220 error ("template specifiers not specified in declaration of %qD",
3221 tmpl);
3222 return;
3223 }
3224
3225 parms = INNERMOST_TEMPLATE_PARMS (parms);
3226 tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
3227
3228 if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
3229 {
3230 error ("previous declaration %q+D", tmpl);
3231 error ("used %d template parameter(s) instead of %d",
3232 TREE_VEC_LENGTH (tmpl_parms),
3233 TREE_VEC_LENGTH (parms));
3234 return;
3235 }
3236
3237 for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
3238 {
3239 tree tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
3240 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
3241 tree tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
3242 tree parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
3243
3244 /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
3245 TEMPLATE_DECL. */
3246 if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
3247 || (TREE_CODE (tmpl_parm) != TYPE_DECL
3248 && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm))))
3249 {
3250 error ("template parameter %q+#D", tmpl_parm);
3251 error ("redeclared here as %q#D", parm);
3252 return;
3253 }
3254
3255 if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
3256 {
3257 /* We have in [temp.param]:
3258
3259 A template-parameter may not be given default arguments
3260 by two different declarations in the same scope. */
3261 error ("redefinition of default argument for %q#D", parm);
3262 error ("%J original definition appeared here", tmpl_parm);
3263 return;
3264 }
3265
3266 if (parm_default != NULL_TREE)
3267 /* Update the previous template parameters (which are the ones
3268 that will really count) with the new default value. */
3269 TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
3270 else if (tmpl_default != NULL_TREE)
3271 /* Update the new parameters, too; they'll be used as the
3272 parameters for any members. */
3273 TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
3274 }
3275 }
3276
3277 /* Simplify EXPR if it is a non-dependent expression. Returns the
3278 (possibly simplified) expression. */
3279
3280 tree
3281 fold_non_dependent_expr (tree expr)
3282 {
3283 /* If we're in a template, but EXPR isn't value dependent, simplify
3284 it. We're supposed to treat:
3285
3286 template <typename T> void f(T[1 + 1]);
3287 template <typename T> void f(T[2]);
3288
3289 as two declarations of the same function, for example. */
3290 if (processing_template_decl
3291 && !type_dependent_expression_p (expr)
3292 && !value_dependent_expression_p (expr))
3293 {
3294 HOST_WIDE_INT saved_processing_template_decl;
3295
3296 saved_processing_template_decl = processing_template_decl;
3297 processing_template_decl = 0;
3298 expr = tsubst_copy_and_build (expr,
3299 /*args=*/NULL_TREE,
3300 tf_error,
3301 /*in_decl=*/NULL_TREE,
3302 /*function_p=*/false);
3303 processing_template_decl = saved_processing_template_decl;
3304 }
3305 return expr;
3306 }
3307
3308 /* EXPR is an expression which is used in a constant-expression context.
3309 For instance, it could be a VAR_DECL with a constant initializer.
3310 Extract the innest constant expression.
3311
3312 This is basically a more powerful version of
3313 integral_constant_value, which can be used also in templates where
3314 initializers can maintain a syntactic rather than semantic form
3315 (even if they are non-dependent, for access-checking purposes). */
3316
3317 tree
3318 fold_decl_constant_value (tree expr)
3319 {
3320 tree const_expr = expr;
3321 do
3322 {
3323 expr = fold_non_dependent_expr (const_expr);
3324 const_expr = integral_constant_value (expr);
3325 }
3326 while (expr != const_expr);
3327
3328 return expr;
3329 }
3330
3331 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
3332 must be a function or a pointer-to-function type, as specified
3333 in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
3334 and check that the resulting function has external linkage. */
3335
3336 static tree
3337 convert_nontype_argument_function (tree type, tree expr)
3338 {
3339 tree fns = expr;
3340 tree fn, fn_no_ptr;
3341
3342 fn = instantiate_type (type, fns, tf_none);
3343 if (fn == error_mark_node)
3344 return error_mark_node;
3345
3346 fn_no_ptr = fn;
3347 if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
3348 fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
3349
3350 /* [temp.arg.nontype]/1
3351
3352 A template-argument for a non-type, non-template template-parameter
3353 shall be one of:
3354 [...]
3355 -- the address of an object or function with external linkage. */
3356 if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
3357 {
3358 error ("%qE is not a valid template argument for type %qT "
3359 "because function %qD has not external linkage",
3360 expr, type, fn_no_ptr);
3361 return NULL_TREE;
3362 }
3363
3364 return fn;
3365 }
3366
3367 /* Attempt to convert the non-type template parameter EXPR to the
3368 indicated TYPE. If the conversion is successful, return the
3369 converted value. If the conversion is unsuccessful, return
3370 NULL_TREE if we issued an error message, or error_mark_node if we
3371 did not. We issue error messages for out-and-out bad template
3372 parameters, but not simply because the conversion failed, since we
3373 might be just trying to do argument deduction. Both TYPE and EXPR
3374 must be non-dependent.
3375
3376 The conversion follows the special rules described in
3377 [temp.arg.nontype], and it is much more strict than an implicit
3378 conversion.
3379
3380 This function is called twice for each template argument (see
3381 lookup_template_class for a more accurate description of this
3382 problem). This means that we need to handle expressions which
3383 are not valid in a C++ source, but can be created from the
3384 first call (for instance, casts to perform conversions). These
3385 hacks can go away after we fix the double coercion problem. */
3386
3387 static tree
3388 convert_nontype_argument (tree type, tree expr)
3389 {
3390 tree expr_type;
3391
3392 /* Detect immediately string literals as invalid non-type argument.
3393 This special-case is not needed for correctness (we would easily
3394 catch this later), but only to provide better diagnostic for this
3395 common user mistake. As suggested by DR 100, we do not mention
3396 linkage issues in the diagnostic as this is not the point. */
3397 if (TREE_CODE (expr) == STRING_CST)
3398 {
3399 error ("%qE is not a valid template argument for type %qT "
3400 "because string literals can never be used in this context",
3401 expr, type);
3402 return NULL_TREE;
3403 }
3404
3405 /* If we are in a template, EXPR may be non-dependent, but still
3406 have a syntactic, rather than semantic, form. For example, EXPR
3407 might be a SCOPE_REF, rather than the VAR_DECL to which the
3408 SCOPE_REF refers. Preserving the qualifying scope is necessary
3409 so that access checking can be performed when the template is
3410 instantiated -- but here we need the resolved form so that we can
3411 convert the argument. */
3412 expr = fold_non_dependent_expr (expr);
3413 expr_type = TREE_TYPE (expr);
3414
3415 /* HACK: Due to double coercion, we can get a
3416 NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
3417 which is the tree that we built on the first call (see
3418 below when coercing to reference to object or to reference to
3419 function). We just strip everything and get to the arg.
3420 See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
3421 for examples. */
3422 if (TREE_CODE (expr) == NOP_EXPR)
3423 {
3424 if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
3425 {
3426 /* ??? Maybe we could use convert_from_reference here, but we
3427 would need to relax its constraints because the NOP_EXPR
3428 could actually change the type to something more cv-qualified,
3429 and this is not folded by convert_from_reference. */
3430 tree addr = TREE_OPERAND (expr, 0);
3431 gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
3432 gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
3433 gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
3434 gcc_assert (same_type_ignoring_top_level_qualifiers_p
3435 (TREE_TYPE (expr_type),
3436 TREE_TYPE (TREE_TYPE (addr))));
3437
3438 expr = TREE_OPERAND (addr, 0);
3439 expr_type = TREE_TYPE (expr);
3440 }
3441
3442 /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
3443 parameter is a pointer to object, through decay and
3444 qualification conversion. Let's strip everything. */
3445 else if (TYPE_PTROBV_P (type))
3446 {
3447 STRIP_NOPS (expr);
3448 gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
3449 gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
3450 /* Skip the ADDR_EXPR only if it is part of the decay for
3451 an array. Otherwise, it is part of the original argument
3452 in the source code. */
3453 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
3454 expr = TREE_OPERAND (expr, 0);
3455 expr_type = TREE_TYPE (expr);
3456 }
3457 }
3458
3459 /* [temp.arg.nontype]/5, bullet 1
3460
3461 For a non-type template-parameter of integral or enumeration type,
3462 integral promotions (_conv.prom_) and integral conversions
3463 (_conv.integral_) are applied. */
3464 if (INTEGRAL_TYPE_P (type))
3465 {
3466 if (!INTEGRAL_TYPE_P (expr_type))
3467 return error_mark_node;
3468
3469 expr = fold_decl_constant_value (expr);
3470 /* Notice that there are constant expressions like '4 % 0' which
3471 do not fold into integer constants. */
3472 if (TREE_CODE (expr) != INTEGER_CST)
3473 {
3474 error ("%qE is not a valid template argument for type %qT "
3475 "because it is a non-constant expression", expr, type);
3476 return NULL_TREE;
3477 }
3478
3479 /* At this point, an implicit conversion does what we want,
3480 because we already know that the expression is of integral
3481 type. */
3482 expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
3483 if (expr == error_mark_node)
3484 return error_mark_node;
3485
3486 /* Conversion was allowed: fold it to a bare integer constant. */
3487 expr = fold (expr);
3488 }
3489 /* [temp.arg.nontype]/5, bullet 2
3490
3491 For a non-type template-parameter of type pointer to object,
3492 qualification conversions (_conv.qual_) and the array-to-pointer
3493 conversion (_conv.array_) are applied. */
3494 else if (TYPE_PTROBV_P (type))
3495 {
3496 /* [temp.arg.nontype]/1 (TC1 version, DR 49):
3497
3498 A template-argument for a non-type, non-template template-parameter
3499 shall be one of: [...]
3500
3501 -- the name of a non-type template-parameter;
3502 -- the address of an object or function with external linkage, [...]
3503 expressed as "& id-expression" where the & is optional if the name
3504 refers to a function or array, or if the corresponding
3505 template-parameter is a reference.
3506
3507 Here, we do not care about functions, as they are invalid anyway
3508 for a parameter of type pointer-to-object. */
3509 bool constant_address_p =
3510 (TREE_CODE (expr) == ADDR_EXPR
3511 || TREE_CODE (expr_type) == ARRAY_TYPE
3512 || (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr)));
3513
3514 expr = decay_conversion (expr);
3515 if (expr == error_mark_node)
3516 return error_mark_node;
3517
3518 expr = perform_qualification_conversions (type, expr);
3519 if (expr == error_mark_node)
3520 return error_mark_node;
3521
3522 if (!constant_address_p)
3523 {
3524 error ("%qE is not a valid template argument for type %qT "
3525 "because it is not a constant pointer", expr, type);
3526 return NULL_TREE;
3527 }
3528 }
3529 /* [temp.arg.nontype]/5, bullet 3
3530
3531 For a non-type template-parameter of type reference to object, no
3532 conversions apply. The type referred to by the reference may be more
3533 cv-qualified than the (otherwise identical) type of the
3534 template-argument. The template-parameter is bound directly to the
3535 template-argument, which must be an lvalue. */
3536 else if (TYPE_REF_OBJ_P (type))
3537 {
3538 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
3539 expr_type))
3540 return error_mark_node;
3541
3542 if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
3543 {
3544 error ("%qE is not a valid template argument for type %qT "
3545 "because of conflicts in cv-qualification", expr, type);
3546 return NULL_TREE;
3547 }
3548
3549 if (!real_lvalue_p (expr))
3550 {
3551 error ("%qE is not a valid template argument for type %qT "
3552 "because it is not a lvalue", expr, type);
3553 return NULL_TREE;
3554 }
3555
3556 /* [temp.arg.nontype]/1
3557
3558 A template-argument for a non-type, non-template template-parameter
3559 shall be one of: [...]
3560
3561 -- the address of an object or function with external linkage. */
3562 if (!DECL_EXTERNAL_LINKAGE_P (expr))
3563 {
3564 error ("%qE is not a valid template argument for type %qT "
3565 "because object %qD has not external linkage",
3566 expr, type, expr);
3567 return NULL_TREE;
3568 }
3569
3570 expr = build_nop (type, build_address (expr));
3571 }
3572 /* [temp.arg.nontype]/5, bullet 4
3573
3574 For a non-type template-parameter of type pointer to function, only
3575 the function-to-pointer conversion (_conv.func_) is applied. If the
3576 template-argument represents a set of overloaded functions (or a
3577 pointer to such), the matching function is selected from the set
3578 (_over.over_). */
3579 else if (TYPE_PTRFN_P (type))
3580 {
3581 /* If the argument is a template-id, we might not have enough
3582 context information to decay the pointer.
3583 ??? Why static5.C requires decay and subst1.C works fine
3584 even without it? */
3585 if (!type_unknown_p (expr_type))
3586 {
3587 expr = decay_conversion (expr);
3588 if (expr == error_mark_node)
3589 return error_mark_node;
3590 }
3591
3592 expr = convert_nontype_argument_function (type, expr);
3593 if (!expr || expr == error_mark_node)
3594 return expr;
3595 }
3596 /* [temp.arg.nontype]/5, bullet 5
3597
3598 For a non-type template-parameter of type reference to function, no
3599 conversions apply. If the template-argument represents a set of
3600 overloaded functions, the matching function is selected from the set
3601 (_over.over_). */
3602 else if (TYPE_REFFN_P (type))
3603 {
3604 if (TREE_CODE (expr) == ADDR_EXPR)
3605 {
3606 error ("%qE is not a valid template argument for type %qT "
3607 "because it is a pointer", expr, type);
3608 inform ("try using %qE instead", TREE_OPERAND (expr, 0));
3609 return NULL_TREE;
3610 }
3611
3612 expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
3613 if (!expr || expr == error_mark_node)
3614 return expr;
3615
3616 expr = build_nop (type, build_address (expr));
3617 }
3618 /* [temp.arg.nontype]/5, bullet 6
3619
3620 For a non-type template-parameter of type pointer to member function,
3621 no conversions apply. If the template-argument represents a set of
3622 overloaded member functions, the matching member function is selected
3623 from the set (_over.over_). */
3624 else if (TYPE_PTRMEMFUNC_P (type))
3625 {
3626 expr = instantiate_type (type, expr, tf_none);
3627 if (expr == error_mark_node)
3628 return error_mark_node;
3629
3630 /* There is no way to disable standard conversions in
3631 resolve_address_of_overloaded_function (called by
3632 instantiate_type). It is possible that the call succeeded by
3633 converting &B::I to &D::I (where B is a base of D), so we need
3634 to reject this conversion here.
3635
3636 Actually, even if there was a way to disable standard conversions,
3637 it would still be better to reject them here so that we can
3638 provide a superior diagnostic. */
3639 if (!same_type_p (TREE_TYPE (expr), type))
3640 {
3641 /* Make sure we are just one standard conversion off. */
3642 gcc_assert (can_convert (type, TREE_TYPE (expr)));
3643 error ("%qE is not a valid template argument for type %qT "
3644 "because it is of type %qT", expr, type,
3645 TREE_TYPE (expr));
3646 inform ("standard conversions are not allowed in this context");
3647 return NULL_TREE;
3648 }
3649 }
3650 /* [temp.arg.nontype]/5, bullet 7
3651
3652 For a non-type template-parameter of type pointer to data member,
3653 qualification conversions (_conv.qual_) are applied. */
3654 else if (TYPE_PTRMEM_P (type))
3655 {
3656 expr = perform_qualification_conversions (type, expr);
3657 if (expr == error_mark_node)
3658 return expr;
3659 }
3660 /* A template non-type parameter must be one of the above. */
3661 else
3662 gcc_unreachable ();
3663
3664 /* Sanity check: did we actually convert the argument to the
3665 right type? */
3666 gcc_assert (same_type_p (type, TREE_TYPE (expr)));
3667 return expr;
3668 }
3669
3670
3671 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
3672 template template parameters. Both PARM_PARMS and ARG_PARMS are
3673 vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
3674 or PARM_DECL.
3675
3676 ARG_PARMS may contain more parameters than PARM_PARMS. If this is
3677 the case, then extra parameters must have default arguments.
3678
3679 Consider the example:
3680 template <class T, class Allocator = allocator> class vector;
3681 template<template <class U> class TT> class C;
3682
3683 C<vector> is a valid instantiation. PARM_PARMS for the above code
3684 contains a TYPE_DECL (for U), ARG_PARMS contains two TYPE_DECLs (for
3685 T and Allocator) and OUTER_ARGS contains the argument that is used to
3686 substitute the TT parameter. */
3687
3688 static int
3689 coerce_template_template_parms (tree parm_parms,
3690 tree arg_parms,
3691 tsubst_flags_t complain,
3692 tree in_decl,
3693 tree outer_args)
3694 {
3695 int nparms, nargs, i;
3696 tree parm, arg;
3697
3698 gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
3699 gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
3700
3701 nparms = TREE_VEC_LENGTH (parm_parms);
3702 nargs = TREE_VEC_LENGTH (arg_parms);
3703
3704 /* The rule here is opposite of coerce_template_parms. */
3705 if (nargs < nparms
3706 || (nargs > nparms
3707 && TREE_PURPOSE (TREE_VEC_ELT (arg_parms, nparms)) == NULL_TREE))
3708 return 0;
3709
3710 for (i = 0; i < nparms; ++i)
3711 {
3712 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
3713 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
3714
3715 if (arg == NULL_TREE || arg == error_mark_node
3716 || parm == NULL_TREE || parm == error_mark_node)
3717 return 0;
3718
3719 if (TREE_CODE (arg) != TREE_CODE (parm))
3720 return 0;
3721
3722 switch (TREE_CODE (parm))
3723 {
3724 case TYPE_DECL:
3725 break;
3726
3727 case TEMPLATE_DECL:
3728 /* We encounter instantiations of templates like
3729 template <template <template <class> class> class TT>
3730 class C; */
3731 {
3732 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3733 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3734
3735 if (!coerce_template_template_parms
3736 (parmparm, argparm, complain, in_decl, outer_args))
3737 return 0;
3738 }
3739 break;
3740
3741 case PARM_DECL:
3742 /* The tsubst call is used to handle cases such as
3743
3744 template <int> class C {};
3745 template <class T, template <T> class TT> class D {};
3746 D<int, C> d;
3747
3748 i.e. the parameter list of TT depends on earlier parameters. */
3749 if (!dependent_type_p (TREE_TYPE (arg))
3750 && !same_type_p
3751 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
3752 TREE_TYPE (arg)))
3753 return 0;
3754 break;
3755
3756 default:
3757 gcc_unreachable ();
3758 }
3759 }
3760 return 1;
3761 }
3762
3763 /* Convert the indicated template ARG as necessary to match the
3764 indicated template PARM. Returns the converted ARG, or
3765 error_mark_node if the conversion was unsuccessful. Error and
3766 warning messages are issued under control of COMPLAIN. This
3767 conversion is for the Ith parameter in the parameter list. ARGS is
3768 the full set of template arguments deduced so far. */
3769
3770 static tree
3771 convert_template_argument (tree parm,
3772 tree arg,
3773 tree args,
3774 tsubst_flags_t complain,
3775 int i,
3776 tree in_decl)
3777 {
3778 tree val;
3779 tree inner_args;
3780 int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
3781
3782 inner_args = INNERMOST_TEMPLATE_ARGS (args);
3783
3784 if (TREE_CODE (arg) == TREE_LIST
3785 && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
3786 {
3787 /* The template argument was the name of some
3788 member function. That's usually
3789 invalid, but static members are OK. In any
3790 case, grab the underlying fields/functions
3791 and issue an error later if required. */
3792 arg = TREE_VALUE (arg);
3793 TREE_TYPE (arg) = unknown_type_node;
3794 }
3795
3796 requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
3797 requires_type = (TREE_CODE (parm) == TYPE_DECL
3798 || requires_tmpl_type);
3799
3800 is_tmpl_type = ((TREE_CODE (arg) == TEMPLATE_DECL
3801 && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
3802 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3803 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
3804
3805 if (is_tmpl_type
3806 && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3807 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
3808 arg = TYPE_STUB_DECL (arg);
3809
3810 is_type = TYPE_P (arg) || is_tmpl_type;
3811
3812 if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
3813 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
3814 {
3815 pedwarn ("to refer to a type member of a template parameter, "
3816 "use %<typename %E%>", arg);
3817
3818 arg = make_typename_type (TREE_OPERAND (arg, 0),
3819 TREE_OPERAND (arg, 1),
3820 typename_type,
3821 complain & tf_error);
3822 is_type = 1;
3823 }
3824 if (is_type != requires_type)
3825 {
3826 if (in_decl)
3827 {
3828 if (complain & tf_error)
3829 {
3830 error ("type/value mismatch at argument %d in template "
3831 "parameter list for %qD",
3832 i + 1, in_decl);
3833 if (is_type)
3834 error (" expected a constant of type %qT, got %qT",
3835 TREE_TYPE (parm),
3836 (is_tmpl_type ? DECL_NAME (arg) : arg));
3837 else if (requires_tmpl_type)
3838 error (" expected a class template, got %qE", arg);
3839 else
3840 error (" expected a type, got %qE", arg);
3841 }
3842 }
3843 return error_mark_node;
3844 }
3845 if (is_tmpl_type ^ requires_tmpl_type)
3846 {
3847 if (in_decl && (complain & tf_error))
3848 {
3849 error ("type/value mismatch at argument %d in template "
3850 "parameter list for %qD",
3851 i + 1, in_decl);
3852 if (is_tmpl_type)
3853 error (" expected a type, got %qT", DECL_NAME (arg));
3854 else
3855 error (" expected a class template, got %qT", arg);
3856 }
3857 return error_mark_node;
3858 }
3859
3860 if (is_type)
3861 {
3862 if (requires_tmpl_type)
3863 {
3864 if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
3865 /* The number of argument required is not known yet.
3866 Just accept it for now. */
3867 val = TREE_TYPE (arg);
3868 else
3869 {
3870 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3871 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3872
3873 if (coerce_template_template_parms (parmparm, argparm,
3874 complain, in_decl,
3875 inner_args))
3876 {
3877 val = arg;
3878
3879 /* TEMPLATE_TEMPLATE_PARM node is preferred over
3880 TEMPLATE_DECL. */
3881 if (val != error_mark_node
3882 && DECL_TEMPLATE_TEMPLATE_PARM_P (val))
3883 val = TREE_TYPE (val);
3884 }
3885 else
3886 {
3887 if (in_decl && (complain & tf_error))
3888 {
3889 error ("type/value mismatch at argument %d in "
3890 "template parameter list for %qD",
3891 i + 1, in_decl);
3892 error (" expected a template of type %qD, got %qD",
3893 parm, arg);
3894 }
3895
3896 val = error_mark_node;
3897 }
3898 }
3899 }
3900 else
3901 val = arg;
3902 }
3903 else
3904 {
3905 tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
3906
3907 if (invalid_nontype_parm_type_p (t, complain))
3908 return error_mark_node;
3909
3910 if (!uses_template_parms (arg) && !uses_template_parms (t))
3911 /* We used to call digest_init here. However, digest_init
3912 will report errors, which we don't want when complain
3913 is zero. More importantly, digest_init will try too
3914 hard to convert things: for example, `0' should not be
3915 converted to pointer type at this point according to
3916 the standard. Accepting this is not merely an
3917 extension, since deciding whether or not these
3918 conversions can occur is part of determining which
3919 function template to call, or whether a given explicit
3920 argument specification is valid. */
3921 val = convert_nontype_argument (t, arg);
3922 else
3923 val = arg;
3924
3925 if (val == NULL_TREE)
3926 val = error_mark_node;
3927 else if (val == error_mark_node && (complain & tf_error))
3928 error ("could not convert template argument %qE to %qT", arg, t);
3929 }
3930
3931 return val;
3932 }
3933
3934 /* Convert all template arguments to their appropriate types, and
3935 return a vector containing the innermost resulting template
3936 arguments. If any error occurs, return error_mark_node. Error and
3937 warning messages are issued under control of COMPLAIN.
3938
3939 If REQUIRE_ALL_ARGUMENTS is nonzero, all arguments must be
3940 provided in ARGLIST, or else trailing parameters must have default
3941 values. If REQUIRE_ALL_ARGUMENTS is zero, we will attempt argument
3942 deduction for any unspecified trailing arguments. */
3943
3944 static tree
3945 coerce_template_parms (tree parms,
3946 tree args,
3947 tree in_decl,
3948 tsubst_flags_t complain,
3949 int require_all_arguments)
3950 {
3951 int nparms, nargs, i, lost = 0;
3952 tree inner_args;
3953 tree new_args;
3954 tree new_inner_args;
3955
3956 inner_args = INNERMOST_TEMPLATE_ARGS (args);
3957 nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
3958 nparms = TREE_VEC_LENGTH (parms);
3959
3960 if (nargs > nparms
3961 || (nargs < nparms
3962 && require_all_arguments
3963 && TREE_PURPOSE (TREE_VEC_ELT (parms, nargs)) == NULL_TREE))
3964 {
3965 if (complain & tf_error)
3966 {
3967 error ("wrong number of template arguments (%d, should be %d)",
3968 nargs, nparms);
3969
3970 if (in_decl)
3971 error ("provided for %q+D", in_decl);
3972 }
3973
3974 return error_mark_node;
3975 }
3976
3977 new_inner_args = make_tree_vec (nparms);
3978 new_args = add_outermost_template_args (args, new_inner_args);
3979 for (i = 0; i < nparms; i++)
3980 {
3981 tree arg;
3982 tree parm;
3983
3984 /* Get the Ith template parameter. */
3985 parm = TREE_VEC_ELT (parms, i);
3986
3987 /* Calculate the Ith argument. */
3988 if (i < nargs)
3989 arg = TREE_VEC_ELT (inner_args, i);
3990 else if (require_all_arguments)
3991 /* There must be a default arg in this case. */
3992 arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
3993 complain, in_decl);
3994 else
3995 break;
3996
3997 gcc_assert (arg);
3998 if (arg == error_mark_node)
3999 {
4000 if (complain & tf_error)
4001 error ("template argument %d is invalid", i + 1);
4002 }
4003 else
4004 arg = convert_template_argument (TREE_VALUE (parm),
4005 arg, new_args, complain, i,
4006 in_decl);
4007
4008 if (arg == error_mark_node)
4009 lost++;
4010 TREE_VEC_ELT (new_inner_args, i) = arg;
4011 }
4012
4013 if (lost)
4014 return error_mark_node;
4015
4016 return new_inner_args;
4017 }
4018
4019 /* Returns 1 if template args OT and NT are equivalent. */
4020
4021 static int
4022 template_args_equal (tree ot, tree nt)
4023 {
4024 if (nt == ot)
4025 return 1;
4026
4027 if (TREE_CODE (nt) == TREE_VEC)
4028 /* For member templates */
4029 return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
4030 else if (TYPE_P (nt))
4031 return TYPE_P (ot) && same_type_p (ot, nt);
4032 else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
4033 return 0;
4034 else
4035 return cp_tree_equal (ot, nt);
4036 }
4037
4038 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
4039 of template arguments. Returns 0 otherwise. */
4040
4041 int
4042 comp_template_args (tree oldargs, tree newargs)
4043 {
4044 int i;
4045
4046 if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
4047 return 0;
4048
4049 for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
4050 {
4051 tree nt = TREE_VEC_ELT (newargs, i);
4052 tree ot = TREE_VEC_ELT (oldargs, i);
4053
4054 if (! template_args_equal (ot, nt))
4055 return 0;
4056 }
4057 return 1;
4058 }
4059
4060 /* Given class template name and parameter list, produce a user-friendly name
4061 for the instantiation. */
4062
4063 static char *
4064 mangle_class_name_for_template (const char* name, tree parms, tree arglist)
4065 {
4066 static struct obstack scratch_obstack;
4067 static char *scratch_firstobj;
4068 int i, nparms;
4069
4070 if (!scratch_firstobj)
4071 gcc_obstack_init (&scratch_obstack);
4072 else
4073 obstack_free (&scratch_obstack, scratch_firstobj);
4074 scratch_firstobj = obstack_alloc (&scratch_obstack, 1);
4075
4076 #define ccat(C) obstack_1grow (&scratch_obstack, (C));
4077 #define cat(S) obstack_grow (&scratch_obstack, (S), strlen (S))
4078
4079 cat (name);
4080 ccat ('<');
4081 nparms = TREE_VEC_LENGTH (parms);
4082 arglist = INNERMOST_TEMPLATE_ARGS (arglist);
4083 gcc_assert (nparms == TREE_VEC_LENGTH (arglist));
4084 for (i = 0; i < nparms; i++)
4085 {
4086 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4087 tree arg = TREE_VEC_ELT (arglist, i);
4088
4089 if (i)
4090 ccat (',');
4091
4092 if (TREE_CODE (parm) == TYPE_DECL)
4093 {
4094 cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
4095 continue;
4096 }
4097 else if (TREE_CODE (parm) == TEMPLATE_DECL)
4098 {
4099 if (TREE_CODE (arg) == TEMPLATE_DECL)
4100 {
4101 /* Already substituted with real template. Just output
4102 the template name here */
4103 tree context = DECL_CONTEXT (arg);
4104 if (context)
4105 {
4106 /* The template may be defined in a namespace, or
4107 may be a member template. */
4108 gcc_assert (TREE_CODE (context) == NAMESPACE_DECL
4109 || CLASS_TYPE_P (context));
4110 cat (decl_as_string (DECL_CONTEXT (arg),
4111 TFF_PLAIN_IDENTIFIER));
4112 cat ("::");
4113 }
4114 cat (IDENTIFIER_POINTER (DECL_NAME (arg)));
4115 }
4116 else
4117 /* Output the parameter declaration. */
4118 cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
4119 continue;
4120 }
4121 else
4122 gcc_assert (TREE_CODE (parm) == PARM_DECL);
4123
4124 /* No need to check arglist against parmlist here; we did that
4125 in coerce_template_parms, called from lookup_template_class. */
4126 cat (expr_as_string (arg, TFF_PLAIN_IDENTIFIER));
4127 }
4128 {
4129 char *bufp = obstack_next_free (&scratch_obstack);
4130 int offset = 0;
4131 while (bufp[offset - 1] == ' ')
4132 offset--;
4133 obstack_blank_fast (&scratch_obstack, offset);
4134
4135 /* B<C<char> >, not B<C<char>> */
4136 if (bufp[offset - 1] == '>')
4137 ccat (' ');
4138 }
4139 ccat ('>');
4140 ccat ('\0');
4141 return (char *) obstack_base (&scratch_obstack);
4142 }
4143
4144 static tree
4145 classtype_mangled_name (tree t)
4146 {
4147 if (CLASSTYPE_TEMPLATE_INFO (t)
4148 /* Specializations have already had their names set up in
4149 lookup_template_class. */
4150 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
4151 {
4152 tree tmpl = most_general_template (CLASSTYPE_TI_TEMPLATE (t));
4153
4154 /* For non-primary templates, the template parameters are
4155 implicit from their surrounding context. */
4156 if (PRIMARY_TEMPLATE_P (tmpl))
4157 {
4158 tree name = DECL_NAME (tmpl);
4159 char *mangled_name = mangle_class_name_for_template
4160 (IDENTIFIER_POINTER (name),
4161 DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
4162 CLASSTYPE_TI_ARGS (t));
4163 tree id = get_identifier (mangled_name);
4164 IDENTIFIER_TEMPLATE (id) = name;
4165 return id;
4166 }
4167 }
4168
4169 return TYPE_IDENTIFIER (t);
4170 }
4171
4172 static void
4173 add_pending_template (tree d)
4174 {
4175 tree ti = (TYPE_P (d)
4176 ? CLASSTYPE_TEMPLATE_INFO (d)
4177 : DECL_TEMPLATE_INFO (d));
4178 tree pt;
4179 int level;
4180
4181 if (TI_PENDING_TEMPLATE_FLAG (ti))
4182 return;
4183
4184 /* We are called both from instantiate_decl, where we've already had a
4185 tinst_level pushed, and instantiate_template, where we haven't.
4186 Compensate. */
4187 level = !(current_tinst_level && TINST_DECL (current_tinst_level) == d);
4188
4189 if (level)
4190 push_tinst_level (d);
4191
4192 pt = tree_cons (current_tinst_level, d, NULL_TREE);
4193 if (last_pending_template)
4194 TREE_CHAIN (last_pending_template) = pt;
4195 else
4196 pending_templates = pt;
4197
4198 last_pending_template = pt;
4199
4200 TI_PENDING_TEMPLATE_FLAG (ti) = 1;
4201
4202 if (level)
4203 pop_tinst_level ();
4204 }
4205
4206
4207 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
4208 ARGLIST. Valid choices for FNS are given in the cp-tree.def
4209 documentation for TEMPLATE_ID_EXPR. */
4210
4211 tree
4212 lookup_template_function (tree fns, tree arglist)
4213 {
4214 tree type;
4215
4216 if (fns == error_mark_node || arglist == error_mark_node)
4217 return error_mark_node;
4218
4219 gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
4220 gcc_assert (fns && (is_overloaded_fn (fns)
4221 || TREE_CODE (fns) == IDENTIFIER_NODE));
4222
4223 if (BASELINK_P (fns))
4224 {
4225 BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
4226 unknown_type_node,
4227 BASELINK_FUNCTIONS (fns),
4228 arglist);
4229 return fns;
4230 }
4231
4232 type = TREE_TYPE (fns);
4233 if (TREE_CODE (fns) == OVERLOAD || !type)
4234 type = unknown_type_node;
4235
4236 return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
4237 }
4238
4239 /* Within the scope of a template class S<T>, the name S gets bound
4240 (in build_self_reference) to a TYPE_DECL for the class, not a
4241 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
4242 or one of its enclosing classes, and that type is a template,
4243 return the associated TEMPLATE_DECL. Otherwise, the original
4244 DECL is returned. */
4245
4246 tree
4247 maybe_get_template_decl_from_type_decl (tree decl)
4248 {
4249 return (decl != NULL_TREE
4250 && TREE_CODE (decl) == TYPE_DECL
4251 && DECL_ARTIFICIAL (decl)
4252 && CLASS_TYPE_P (TREE_TYPE (decl))
4253 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
4254 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
4255 }
4256
4257 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
4258 parameters, find the desired type.
4259
4260 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
4261
4262 IN_DECL, if non-NULL, is the template declaration we are trying to
4263 instantiate.
4264
4265 If ENTERING_SCOPE is nonzero, we are about to enter the scope of
4266 the class we are looking up.
4267
4268 Issue error and warning messages under control of COMPLAIN.
4269
4270 If the template class is really a local class in a template
4271 function, then the FUNCTION_CONTEXT is the function in which it is
4272 being instantiated.
4273
4274 ??? Note that this function is currently called *twice* for each
4275 template-id: the first time from the parser, while creating the
4276 incomplete type (finish_template_type), and the second type during the
4277 real instantiation (instantiate_template_class). This is surely something
4278 that we want to avoid. It also causes some problems with argument
4279 coercion (see convert_nontype_argument for more information on this). */
4280
4281 tree
4282 lookup_template_class (tree d1,
4283 tree arglist,
4284 tree in_decl,
4285 tree context,
4286 int entering_scope,
4287 tsubst_flags_t complain)
4288 {
4289 tree template = NULL_TREE, parmlist;
4290 tree t;
4291
4292 timevar_push (TV_NAME_LOOKUP);
4293
4294 if (TREE_CODE (d1) == IDENTIFIER_NODE)
4295 {
4296 tree value = innermost_non_namespace_value (d1);
4297 if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
4298 template = value;
4299 else
4300 {
4301 if (context)
4302 push_decl_namespace (context);
4303 template = lookup_name (d1, /*prefer_type=*/0);
4304 template = maybe_get_template_decl_from_type_decl (template);
4305 if (context)
4306 pop_decl_namespace ();
4307 }
4308 if (template)
4309 context = DECL_CONTEXT (template);
4310 }
4311 else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
4312 {
4313 tree type = TREE_TYPE (d1);
4314
4315 /* If we are declaring a constructor, say A<T>::A<T>, we will get
4316 an implicit typename for the second A. Deal with it. */
4317 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
4318 type = TREE_TYPE (type);
4319
4320 if (CLASSTYPE_TEMPLATE_INFO (type))
4321 {
4322 template = CLASSTYPE_TI_TEMPLATE (type);
4323 d1 = DECL_NAME (template);
4324 }
4325 }
4326 else if (TREE_CODE (d1) == ENUMERAL_TYPE
4327 || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
4328 {
4329 template = TYPE_TI_TEMPLATE (d1);
4330 d1 = DECL_NAME (template);
4331 }
4332 else if (TREE_CODE (d1) == TEMPLATE_DECL
4333 && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
4334 {
4335 template = d1;
4336 d1 = DECL_NAME (template);
4337 context = DECL_CONTEXT (template);
4338 }
4339
4340 /* Issue an error message if we didn't find a template. */
4341 if (! template)
4342 {
4343 if (complain & tf_error)
4344 error ("%qT is not a template", d1);
4345 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4346 }
4347
4348 if (TREE_CODE (template) != TEMPLATE_DECL
4349 /* Make sure it's a user visible template, if it was named by
4350 the user. */
4351 || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (template)
4352 && !PRIMARY_TEMPLATE_P (template)))
4353 {
4354 if (complain & tf_error)
4355 {
4356 error ("non-template type %qT used as a template", d1);
4357 if (in_decl)
4358 error ("for template declaration %q+D", in_decl);
4359 }
4360 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4361 }
4362
4363 complain &= ~tf_user;
4364
4365 if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
4366 {
4367 /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
4368 template arguments */
4369
4370 tree parm;
4371 tree arglist2;
4372
4373 parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
4374
4375 /* Consider an example where a template template parameter declared as
4376
4377 template <class T, class U = std::allocator<T> > class TT
4378
4379 The template parameter level of T and U are one level larger than
4380 of TT. To proper process the default argument of U, say when an
4381 instantiation `TT<int>' is seen, we need to build the full
4382 arguments containing {int} as the innermost level. Outer levels,
4383 available when not appearing as default template argument, can be
4384 obtained from `current_template_args ()'.
4385
4386 Suppose that TT is later substituted with std::vector. The above
4387 instantiation is `TT<int, std::allocator<T> >' with TT at
4388 level 1, and T at level 2, while the template arguments at level 1
4389 becomes {std::vector} and the inner level 2 is {int}. */
4390
4391 if (current_template_parms)
4392 arglist = add_to_template_args (current_template_args (), arglist);
4393
4394 arglist2 = coerce_template_parms (parmlist, arglist, template,
4395 complain, /*require_all_args=*/1);
4396 if (arglist2 == error_mark_node
4397 || (!uses_template_parms (arglist2)
4398 && check_instantiated_args (template, arglist2, complain)))
4399 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4400
4401 parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
4402 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
4403 }
4404 else
4405 {
4406 tree template_type = TREE_TYPE (template);
4407 tree gen_tmpl;
4408 tree type_decl;
4409 tree found = NULL_TREE;
4410 int arg_depth;
4411 int parm_depth;
4412 int is_partial_instantiation;
4413
4414 gen_tmpl = most_general_template (template);
4415 parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
4416 parm_depth = TMPL_PARMS_DEPTH (parmlist);
4417 arg_depth = TMPL_ARGS_DEPTH (arglist);
4418
4419 if (arg_depth == 1 && parm_depth > 1)
4420 {
4421 /* We've been given an incomplete set of template arguments.
4422 For example, given:
4423
4424 template <class T> struct S1 {
4425 template <class U> struct S2 {};
4426 template <class U> struct S2<U*> {};
4427 };
4428
4429 we will be called with an ARGLIST of `U*', but the
4430 TEMPLATE will be `template <class T> template
4431 <class U> struct S1<T>::S2'. We must fill in the missing
4432 arguments. */
4433 arglist
4434 = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
4435 arglist);
4436 arg_depth = TMPL_ARGS_DEPTH (arglist);
4437 }
4438
4439 /* Now we should have enough arguments. */
4440 gcc_assert (parm_depth == arg_depth);
4441
4442 /* From here on, we're only interested in the most general
4443 template. */
4444 template = gen_tmpl;
4445
4446 /* Calculate the BOUND_ARGS. These will be the args that are
4447 actually tsubst'd into the definition to create the
4448 instantiation. */
4449 if (parm_depth > 1)
4450 {
4451 /* We have multiple levels of arguments to coerce, at once. */
4452 int i;
4453 int saved_depth = TMPL_ARGS_DEPTH (arglist);
4454
4455 tree bound_args = make_tree_vec (parm_depth);
4456
4457 for (i = saved_depth,
4458 t = DECL_TEMPLATE_PARMS (template);
4459 i > 0 && t != NULL_TREE;
4460 --i, t = TREE_CHAIN (t))
4461 {
4462 tree a = coerce_template_parms (TREE_VALUE (t),
4463 arglist, template,
4464 complain, /*require_all_args=*/1);
4465
4466 /* Don't process further if one of the levels fails. */
4467 if (a == error_mark_node)
4468 {
4469 /* Restore the ARGLIST to its full size. */
4470 TREE_VEC_LENGTH (arglist) = saved_depth;
4471 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4472 }
4473
4474 SET_TMPL_ARGS_LEVEL (bound_args, i, a);
4475
4476 /* We temporarily reduce the length of the ARGLIST so
4477 that coerce_template_parms will see only the arguments
4478 corresponding to the template parameters it is
4479 examining. */
4480 TREE_VEC_LENGTH (arglist)--;
4481 }
4482
4483 /* Restore the ARGLIST to its full size. */
4484 TREE_VEC_LENGTH (arglist) = saved_depth;
4485
4486 arglist = bound_args;
4487 }
4488 else
4489 arglist
4490 = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
4491 INNERMOST_TEMPLATE_ARGS (arglist),
4492 template,
4493 complain, /*require_all_args=*/1);
4494
4495 if (arglist == error_mark_node)
4496 /* We were unable to bind the arguments. */
4497 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4498
4499 /* In the scope of a template class, explicit references to the
4500 template class refer to the type of the template, not any
4501 instantiation of it. For example, in:
4502
4503 template <class T> class C { void f(C<T>); }
4504
4505 the `C<T>' is just the same as `C'. Outside of the
4506 class, however, such a reference is an instantiation. */
4507 if (comp_template_args (TYPE_TI_ARGS (template_type),
4508 arglist))
4509 {
4510 found = template_type;
4511
4512 if (!entering_scope && PRIMARY_TEMPLATE_P (template))
4513 {
4514 tree ctx;
4515
4516 for (ctx = current_class_type;
4517 ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
4518 ctx = (TYPE_P (ctx)
4519 ? TYPE_CONTEXT (ctx)
4520 : DECL_CONTEXT (ctx)))
4521 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
4522 goto found_ctx;
4523
4524 /* We're not in the scope of the class, so the
4525 TEMPLATE_TYPE is not the type we want after all. */
4526 found = NULL_TREE;
4527 found_ctx:;
4528 }
4529 }
4530 if (found)
4531 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4532
4533 /* If we already have this specialization, return it. */
4534 found = retrieve_specialization (template, arglist,
4535 /*class_specializations_p=*/false);
4536 if (found)
4537 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4538
4539 /* This type is a "partial instantiation" if any of the template
4540 arguments still involve template parameters. Note that we set
4541 IS_PARTIAL_INSTANTIATION for partial specializations as
4542 well. */
4543 is_partial_instantiation = uses_template_parms (arglist);
4544
4545 /* If the deduced arguments are invalid, then the binding
4546 failed. */
4547 if (!is_partial_instantiation
4548 && check_instantiated_args (template,
4549 INNERMOST_TEMPLATE_ARGS (arglist),
4550 complain))
4551 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4552
4553 if (!is_partial_instantiation
4554 && !PRIMARY_TEMPLATE_P (template)
4555 && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
4556 {
4557 found = xref_tag_from_type (TREE_TYPE (template),
4558 DECL_NAME (template),
4559 /*tag_scope=*/ts_global);
4560 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4561 }
4562
4563 context = tsubst (DECL_CONTEXT (template), arglist,
4564 complain, in_decl);
4565 if (!context)
4566 context = global_namespace;
4567
4568 /* Create the type. */
4569 if (TREE_CODE (template_type) == ENUMERAL_TYPE)
4570 {
4571 if (!is_partial_instantiation)
4572 {
4573 set_current_access_from_decl (TYPE_NAME (template_type));
4574 t = start_enum (TYPE_IDENTIFIER (template_type));
4575 }
4576 else
4577 /* We don't want to call start_enum for this type, since
4578 the values for the enumeration constants may involve
4579 template parameters. And, no one should be interested
4580 in the enumeration constants for such a type. */
4581 t = make_node (ENUMERAL_TYPE);
4582 }
4583 else
4584 {
4585 t = make_aggr_type (TREE_CODE (template_type));
4586 CLASSTYPE_DECLARED_CLASS (t)
4587 = CLASSTYPE_DECLARED_CLASS (template_type);
4588 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
4589 TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
4590
4591 /* A local class. Make sure the decl gets registered properly. */
4592 if (context == current_function_decl)
4593 pushtag (DECL_NAME (template), t, /*tag_scope=*/ts_current);
4594 }
4595
4596 /* If we called start_enum or pushtag above, this information
4597 will already be set up. */
4598 if (!TYPE_NAME (t))
4599 {
4600 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
4601
4602 type_decl = create_implicit_typedef (DECL_NAME (template), t);
4603 DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
4604 TYPE_STUB_DECL (t) = type_decl;
4605 DECL_SOURCE_LOCATION (type_decl)
4606 = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
4607 }
4608 else
4609 type_decl = TYPE_NAME (t);
4610
4611 TREE_PRIVATE (type_decl)
4612 = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
4613 TREE_PROTECTED (type_decl)
4614 = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
4615 DECL_IN_SYSTEM_HEADER (type_decl)
4616 = DECL_IN_SYSTEM_HEADER (template);
4617 if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
4618 {
4619 DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
4620 DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
4621 }
4622
4623 /* Set up the template information. We have to figure out which
4624 template is the immediate parent if this is a full
4625 instantiation. */
4626 if (parm_depth == 1 || is_partial_instantiation
4627 || !PRIMARY_TEMPLATE_P (template))
4628 /* This case is easy; there are no member templates involved. */
4629 found = template;
4630 else
4631 {
4632 /* This is a full instantiation of a member template. Look
4633 for a partial instantiation of which this is an instance. */
4634
4635 for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
4636 found; found = TREE_CHAIN (found))
4637 {
4638 int success;
4639 tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
4640
4641 /* We only want partial instantiations, here, not
4642 specializations or full instantiations. */
4643 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
4644 || !uses_template_parms (TREE_VALUE (found)))
4645 continue;
4646
4647 /* Temporarily reduce by one the number of levels in the
4648 ARGLIST and in FOUND so as to avoid comparing the
4649 last set of arguments. */
4650 TREE_VEC_LENGTH (arglist)--;
4651 TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
4652
4653 /* See if the arguments match. If they do, then TMPL is
4654 the partial instantiation we want. */
4655 success = comp_template_args (TREE_PURPOSE (found), arglist);
4656
4657 /* Restore the argument vectors to their full size. */
4658 TREE_VEC_LENGTH (arglist)++;
4659 TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
4660
4661 if (success)
4662 {
4663 found = tmpl;
4664 break;
4665 }
4666 }
4667
4668 if (!found)
4669 {
4670 /* There was no partial instantiation. This happens
4671 where C<T> is a member template of A<T> and it's used
4672 in something like
4673
4674 template <typename T> struct B { A<T>::C<int> m; };
4675 B<float>;
4676
4677 Create the partial instantiation.
4678 */
4679 TREE_VEC_LENGTH (arglist)--;
4680 found = tsubst (template, arglist, complain, NULL_TREE);
4681 TREE_VEC_LENGTH (arglist)++;
4682 }
4683 }
4684
4685 SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
4686 DECL_TEMPLATE_INSTANTIATIONS (template)
4687 = tree_cons (arglist, t,
4688 DECL_TEMPLATE_INSTANTIATIONS (template));
4689
4690 if (TREE_CODE (t) == ENUMERAL_TYPE
4691 && !is_partial_instantiation)
4692 /* Now that the type has been registered on the instantiations
4693 list, we set up the enumerators. Because the enumeration
4694 constants may involve the enumeration type itself, we make
4695 sure to register the type first, and then create the
4696 constants. That way, doing tsubst_expr for the enumeration
4697 constants won't result in recursive calls here; we'll find
4698 the instantiation and exit above. */
4699 tsubst_enum (template_type, t, arglist);
4700
4701 /* Reset the name of the type, now that CLASSTYPE_TEMPLATE_INFO
4702 is set up. */
4703 if (TREE_CODE (t) != ENUMERAL_TYPE)
4704 DECL_NAME (type_decl) = classtype_mangled_name (t);
4705 if (is_partial_instantiation)
4706 /* If the type makes use of template parameters, the
4707 code that generates debugging information will crash. */
4708 DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
4709
4710 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
4711 }
4712 timevar_pop (TV_NAME_LOOKUP);
4713 }
4714 \f
4715 struct pair_fn_data
4716 {
4717 tree_fn_t fn;
4718 void *data;
4719 struct pointer_set_t *visited;
4720 };
4721
4722 /* Called from for_each_template_parm via walk_tree. */
4723
4724 static tree
4725 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
4726 {
4727 tree t = *tp;
4728 struct pair_fn_data *pfd = (struct pair_fn_data *) d;
4729 tree_fn_t fn = pfd->fn;
4730 void *data = pfd->data;
4731
4732 if (TYPE_P (t)
4733 && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited))
4734 return error_mark_node;
4735
4736 switch (TREE_CODE (t))
4737 {
4738 case RECORD_TYPE:
4739 if (TYPE_PTRMEMFUNC_P (t))
4740 break;
4741 /* Fall through. */
4742
4743 case UNION_TYPE:
4744 case ENUMERAL_TYPE:
4745 if (!TYPE_TEMPLATE_INFO (t))
4746 *walk_subtrees = 0;
4747 else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
4748 fn, data, pfd->visited))
4749 return error_mark_node;
4750 break;
4751
4752 case METHOD_TYPE:
4753 /* Since we're not going to walk subtrees, we have to do this
4754 explicitly here. */
4755 if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
4756 pfd->visited))
4757 return error_mark_node;
4758 /* Fall through. */
4759
4760 case FUNCTION_TYPE:
4761 /* Check the return type. */
4762 if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
4763 return error_mark_node;
4764
4765 /* Check the parameter types. Since default arguments are not
4766 instantiated until they are needed, the TYPE_ARG_TYPES may
4767 contain expressions that involve template parameters. But,
4768 no-one should be looking at them yet. And, once they're
4769 instantiated, they don't contain template parameters, so
4770 there's no point in looking at them then, either. */
4771 {
4772 tree parm;
4773
4774 for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
4775 if (for_each_template_parm (TREE_VALUE (parm), fn, data,
4776 pfd->visited))
4777 return error_mark_node;
4778
4779 /* Since we've already handled the TYPE_ARG_TYPES, we don't
4780 want walk_tree walking into them itself. */
4781 *walk_subtrees = 0;
4782 }
4783 break;
4784
4785 case TYPEOF_TYPE:
4786 if (for_each_template_parm (TYPE_FIELDS (t), fn, data,
4787 pfd->visited))
4788 return error_mark_node;
4789 break;
4790
4791 case FUNCTION_DECL:
4792 case VAR_DECL:
4793 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
4794 && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
4795 pfd->visited))
4796 return error_mark_node;
4797 /* Fall through. */
4798
4799 case PARM_DECL:
4800 case CONST_DECL:
4801 if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
4802 && for_each_template_parm (DECL_INITIAL (t), fn, data,
4803 pfd->visited))
4804 return error_mark_node;
4805 if (DECL_CONTEXT (t)
4806 && for_each_template_parm (DECL_CONTEXT (t), fn, data,
4807 pfd->visited))
4808 return error_mark_node;
4809 break;
4810
4811 case BOUND_TEMPLATE_TEMPLATE_PARM:
4812 /* Record template parameters such as `T' inside `TT<T>'. */
4813 if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited))
4814 return error_mark_node;
4815 /* Fall through. */
4816
4817 case TEMPLATE_TEMPLATE_PARM:
4818 case TEMPLATE_TYPE_PARM:
4819 case TEMPLATE_PARM_INDEX:
4820 if (fn && (*fn)(t, data))
4821 return error_mark_node;
4822 else if (!fn)
4823 return error_mark_node;
4824 break;
4825
4826 case TEMPLATE_DECL:
4827 /* A template template parameter is encountered. */
4828 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
4829 && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
4830 return error_mark_node;
4831
4832 /* Already substituted template template parameter */
4833 *walk_subtrees = 0;
4834 break;
4835
4836 case TYPENAME_TYPE:
4837 if (!fn
4838 || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
4839 data, pfd->visited))
4840 return error_mark_node;
4841 break;
4842
4843 case CONSTRUCTOR:
4844 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
4845 && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
4846 (TREE_TYPE (t)), fn, data,
4847 pfd->visited))
4848 return error_mark_node;
4849 break;
4850
4851 case INDIRECT_REF:
4852 case COMPONENT_REF:
4853 /* If there's no type, then this thing must be some expression
4854 involving template parameters. */
4855 if (!fn && !TREE_TYPE (t))
4856 return error_mark_node;
4857 break;
4858
4859 case MODOP_EXPR:
4860 case CAST_EXPR:
4861 case REINTERPRET_CAST_EXPR:
4862 case CONST_CAST_EXPR:
4863 case STATIC_CAST_EXPR:
4864 case DYNAMIC_CAST_EXPR:
4865 case ARROW_EXPR:
4866 case DOTSTAR_EXPR:
4867 case TYPEID_EXPR:
4868 case PSEUDO_DTOR_EXPR:
4869 if (!fn)
4870 return error_mark_node;
4871 break;
4872
4873 case BASELINK:
4874 /* If we do not handle this case specially, we end up walking
4875 the BINFO hierarchy, which is circular, and therefore
4876 confuses walk_tree. */
4877 *walk_subtrees = 0;
4878 if (for_each_template_parm (BASELINK_FUNCTIONS (*tp), fn, data,
4879 pfd->visited))
4880 return error_mark_node;
4881 break;
4882
4883 default:
4884 break;
4885 }
4886
4887 /* We didn't find any template parameters we liked. */
4888 return NULL_TREE;
4889 }
4890
4891 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
4892 BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
4893 call FN with the parameter and the DATA.
4894 If FN returns nonzero, the iteration is terminated, and
4895 for_each_template_parm returns 1. Otherwise, the iteration
4896 continues. If FN never returns a nonzero value, the value
4897 returned by for_each_template_parm is 0. If FN is NULL, it is
4898 considered to be the function which always returns 1. */
4899
4900 static int
4901 for_each_template_parm (tree t, tree_fn_t fn, void* data,
4902 struct pointer_set_t *visited)
4903 {
4904 struct pair_fn_data pfd;
4905 int result;
4906
4907 /* Set up. */
4908 pfd.fn = fn;
4909 pfd.data = data;
4910
4911 /* Walk the tree. (Conceptually, we would like to walk without
4912 duplicates, but for_each_template_parm_r recursively calls
4913 for_each_template_parm, so we would need to reorganize a fair
4914 bit to use walk_tree_without_duplicates, so we keep our own
4915 visited list.) */
4916 if (visited)
4917 pfd.visited = visited;
4918 else
4919 pfd.visited = pointer_set_create ();
4920 result = walk_tree (&t,
4921 for_each_template_parm_r,
4922 &pfd,
4923 pfd.visited) != NULL_TREE;
4924
4925 /* Clean up. */
4926 if (!visited)
4927 {
4928 pointer_set_destroy (pfd.visited);
4929 pfd.visited = 0;
4930 }
4931
4932 return result;
4933 }
4934
4935 /* Returns true if T depends on any template parameter. */
4936
4937 int
4938 uses_template_parms (tree t)
4939 {
4940 bool dependent_p;
4941 int saved_processing_template_decl;
4942
4943 saved_processing_template_decl = processing_template_decl;
4944 if (!saved_processing_template_decl)
4945 processing_template_decl = 1;
4946 if (TYPE_P (t))
4947 dependent_p = dependent_type_p (t);
4948 else if (TREE_CODE (t) == TREE_VEC)
4949 dependent_p = any_dependent_template_arguments_p (t);
4950 else if (TREE_CODE (t) == TREE_LIST)
4951 dependent_p = (uses_template_parms (TREE_VALUE (t))
4952 || uses_template_parms (TREE_CHAIN (t)));
4953 else if (DECL_P (t)
4954 || EXPR_P (t)
4955 || TREE_CODE (t) == TEMPLATE_PARM_INDEX
4956 || TREE_CODE (t) == OVERLOAD
4957 || TREE_CODE (t) == BASELINK
4958 || CONSTANT_CLASS_P (t))
4959 dependent_p = (type_dependent_expression_p (t)
4960 || value_dependent_expression_p (t));
4961 else
4962 {
4963 gcc_assert (t == error_mark_node);
4964 dependent_p = false;
4965 }
4966
4967 processing_template_decl = saved_processing_template_decl;
4968
4969 return dependent_p;
4970 }
4971
4972 /* Returns true if T depends on any template parameter with level LEVEL. */
4973
4974 int
4975 uses_template_parms_level (tree t, int level)
4976 {
4977 return for_each_template_parm (t, template_parm_this_level_p, &level, NULL);
4978 }
4979
4980 static int tinst_depth;
4981 extern int max_tinst_depth;
4982 #ifdef GATHER_STATISTICS
4983 int depth_reached;
4984 #endif
4985 static int tinst_level_tick;
4986 static int last_template_error_tick;
4987
4988 /* We're starting to instantiate D; record the template instantiation context
4989 for diagnostics and to restore it later. */
4990
4991 int
4992 push_tinst_level (tree d)
4993 {
4994 tree new;
4995
4996 if (tinst_depth >= max_tinst_depth)
4997 {
4998 /* If the instantiation in question still has unbound template parms,
4999 we don't really care if we can't instantiate it, so just return.
5000 This happens with base instantiation for implicit `typename'. */
5001 if (uses_template_parms (d))
5002 return 0;
5003
5004 last_template_error_tick = tinst_level_tick;
5005 error ("template instantiation depth exceeds maximum of %d (use "
5006 "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
5007 max_tinst_depth, d);
5008
5009 print_instantiation_context ();
5010
5011 return 0;
5012 }
5013
5014 new = make_node (TINST_LEVEL);
5015 TINST_DECL (new) = d;
5016 TINST_LOCATION (new) = input_location;
5017 TINST_IN_SYSTEM_HEADER_P (new) = in_system_header;
5018 TREE_CHAIN (new) = current_tinst_level;
5019 current_tinst_level = new;
5020
5021 ++tinst_depth;
5022 #ifdef GATHER_STATISTICS
5023 if (tinst_depth > depth_reached)
5024 depth_reached = tinst_depth;
5025 #endif
5026
5027 ++tinst_level_tick;
5028 return 1;
5029 }
5030
5031 /* We're done instantiating this template; return to the instantiation
5032 context. */
5033
5034 void
5035 pop_tinst_level (void)
5036 {
5037 tree old = current_tinst_level;
5038
5039 /* Restore the filename and line number stashed away when we started
5040 this instantiation. */
5041 input_location = TINST_LOCATION (old);
5042 in_system_header = TINST_IN_SYSTEM_HEADER_P (old);
5043 current_tinst_level = TREE_CHAIN (old);
5044 --tinst_depth;
5045 ++tinst_level_tick;
5046 }
5047
5048 /* We're instantiating a deferred template; restore the template
5049 instantiation context in which the instantiation was requested, which
5050 is one step out from LEVEL. */
5051
5052 static void
5053 reopen_tinst_level (tree level)
5054 {
5055 tree t;
5056
5057 tinst_depth = 0;
5058 for (t = level; t; t = TREE_CHAIN (t))
5059 ++tinst_depth;
5060
5061 current_tinst_level = level;
5062 pop_tinst_level ();
5063 }
5064
5065 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
5066 vector of template arguments, as for tsubst.
5067
5068 Returns an appropriate tsubst'd friend declaration. */
5069
5070 static tree
5071 tsubst_friend_function (tree decl, tree args)
5072 {
5073 tree new_friend;
5074
5075 if (TREE_CODE (decl) == FUNCTION_DECL
5076 && DECL_TEMPLATE_INSTANTIATION (decl)
5077 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
5078 /* This was a friend declared with an explicit template
5079 argument list, e.g.:
5080
5081 friend void f<>(T);
5082
5083 to indicate that f was a template instantiation, not a new
5084 function declaration. Now, we have to figure out what
5085 instantiation of what template. */
5086 {
5087 tree template_id, arglist, fns;
5088 tree new_args;
5089 tree tmpl;
5090 tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
5091
5092 /* Friend functions are looked up in the containing namespace scope.
5093 We must enter that scope, to avoid finding member functions of the
5094 current cless with same name. */
5095 push_nested_namespace (ns);
5096 fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
5097 tf_error | tf_warning, NULL_TREE);
5098 pop_nested_namespace (ns);
5099 arglist = tsubst (DECL_TI_ARGS (decl), args,
5100 tf_error | tf_warning, NULL_TREE);
5101 template_id = lookup_template_function (fns, arglist);
5102
5103 new_friend = tsubst (decl, args, tf_error | tf_warning, NULL_TREE);
5104 tmpl = determine_specialization (template_id, new_friend,
5105 &new_args,
5106 /*need_member_template=*/0,
5107 TREE_VEC_LENGTH (args));
5108 return instantiate_template (tmpl, new_args, tf_error);
5109 }
5110
5111 new_friend = tsubst (decl, args, tf_error | tf_warning, NULL_TREE);
5112
5113 /* The NEW_FRIEND will look like an instantiation, to the
5114 compiler, but is not an instantiation from the point of view of
5115 the language. For example, we might have had:
5116
5117 template <class T> struct S {
5118 template <class U> friend void f(T, U);
5119 };
5120
5121 Then, in S<int>, template <class U> void f(int, U) is not an
5122 instantiation of anything. */
5123 if (new_friend == error_mark_node)
5124 return error_mark_node;
5125
5126 DECL_USE_TEMPLATE (new_friend) = 0;
5127 if (TREE_CODE (decl) == TEMPLATE_DECL)
5128 {
5129 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
5130 DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
5131 = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
5132 }
5133
5134 /* The mangled name for the NEW_FRIEND is incorrect. The function
5135 is not a template instantiation and should not be mangled like
5136 one. Therefore, we forget the mangling here; we'll recompute it
5137 later if we need it. */
5138 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
5139 {
5140 SET_DECL_RTL (new_friend, NULL_RTX);
5141 SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
5142 }
5143
5144 if (DECL_NAMESPACE_SCOPE_P (new_friend))
5145 {
5146 tree old_decl;
5147 tree new_friend_template_info;
5148 tree new_friend_result_template_info;
5149 tree ns;
5150 int new_friend_is_defn;
5151
5152 /* We must save some information from NEW_FRIEND before calling
5153 duplicate decls since that function will free NEW_FRIEND if
5154 possible. */
5155 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
5156 new_friend_is_defn =
5157 (DECL_INITIAL (DECL_TEMPLATE_RESULT
5158 (template_for_substitution (new_friend)))
5159 != NULL_TREE);
5160 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
5161 {
5162 /* This declaration is a `primary' template. */
5163 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
5164
5165 new_friend_result_template_info
5166 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
5167 }
5168 else
5169 new_friend_result_template_info = NULL_TREE;
5170
5171 /* Inside pushdecl_namespace_level, we will push into the
5172 current namespace. However, the friend function should go
5173 into the namespace of the template. */
5174 ns = decl_namespace_context (new_friend);
5175 push_nested_namespace (ns);
5176 old_decl = pushdecl_namespace_level (new_friend);
5177 pop_nested_namespace (ns);
5178
5179 if (old_decl != new_friend)
5180 {
5181 /* This new friend declaration matched an existing
5182 declaration. For example, given:
5183
5184 template <class T> void f(T);
5185 template <class U> class C {
5186 template <class T> friend void f(T) {}
5187 };
5188
5189 the friend declaration actually provides the definition
5190 of `f', once C has been instantiated for some type. So,
5191 old_decl will be the out-of-class template declaration,
5192 while new_friend is the in-class definition.
5193
5194 But, if `f' was called before this point, the
5195 instantiation of `f' will have DECL_TI_ARGS corresponding
5196 to `T' but not to `U', references to which might appear
5197 in the definition of `f'. Previously, the most general
5198 template for an instantiation of `f' was the out-of-class
5199 version; now it is the in-class version. Therefore, we
5200 run through all specialization of `f', adding to their
5201 DECL_TI_ARGS appropriately. In particular, they need a
5202 new set of outer arguments, corresponding to the
5203 arguments for this class instantiation.
5204
5205 The same situation can arise with something like this:
5206
5207 friend void f(int);
5208 template <class T> class C {
5209 friend void f(T) {}
5210 };
5211
5212 when `C<int>' is instantiated. Now, `f(int)' is defined
5213 in the class. */
5214
5215 if (!new_friend_is_defn)
5216 /* On the other hand, if the in-class declaration does
5217 *not* provide a definition, then we don't want to alter
5218 existing definitions. We can just leave everything
5219 alone. */
5220 ;
5221 else
5222 {
5223 /* Overwrite whatever template info was there before, if
5224 any, with the new template information pertaining to
5225 the declaration. */
5226 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
5227
5228 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
5229 reregister_specialization (new_friend,
5230 most_general_template (old_decl),
5231 old_decl);
5232 else
5233 {
5234 tree t;
5235 tree new_friend_args;
5236
5237 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
5238 = new_friend_result_template_info;
5239
5240 new_friend_args = TI_ARGS (new_friend_template_info);
5241 for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
5242 t != NULL_TREE;
5243 t = TREE_CHAIN (t))
5244 {
5245 tree spec = TREE_VALUE (t);
5246
5247 DECL_TI_ARGS (spec)
5248 = add_outermost_template_args (new_friend_args,
5249 DECL_TI_ARGS (spec));
5250 }
5251
5252 /* Now, since specializations are always supposed to
5253 hang off of the most general template, we must move
5254 them. */
5255 t = most_general_template (old_decl);
5256 if (t != old_decl)
5257 {
5258 DECL_TEMPLATE_SPECIALIZATIONS (t)
5259 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
5260 DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
5261 DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
5262 }
5263 }
5264 }
5265
5266 /* The information from NEW_FRIEND has been merged into OLD_DECL
5267 by duplicate_decls. */
5268 new_friend = old_decl;
5269 }
5270 }
5271 else
5272 {
5273 tree context = DECL_CONTEXT (new_friend);
5274 bool dependent_p;
5275
5276 /* In the code
5277 template <class T> class C {
5278 template <class U> friend void C1<U>::f (); // case 1
5279 friend void C2<T>::f (); // case 2
5280 };
5281 we only need to make sure CONTEXT is a complete type for
5282 case 2. To distinguish between the two cases, we note that
5283 CONTEXT of case 1 remains dependent type after tsubst while
5284 this isn't true for case 2. */
5285 ++processing_template_decl;
5286 dependent_p = dependent_type_p (context);
5287 --processing_template_decl;
5288
5289 if (!dependent_p
5290 && !complete_type_or_else (context, NULL_TREE))
5291 return error_mark_node;
5292
5293 if (COMPLETE_TYPE_P (context))
5294 {
5295 /* Check to see that the declaration is really present, and,
5296 possibly obtain an improved declaration. */
5297 tree fn = check_classfn (context,
5298 new_friend, NULL_TREE);
5299
5300 if (fn)
5301 new_friend = fn;
5302 }
5303 }
5304
5305 return new_friend;
5306 }
5307
5308 /* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
5309 template arguments, as for tsubst.
5310
5311 Returns an appropriate tsubst'd friend type or error_mark_node on
5312 failure. */
5313
5314 static tree
5315 tsubst_friend_class (tree friend_tmpl, tree args)
5316 {
5317 tree friend_type;
5318 tree tmpl;
5319 tree context;
5320
5321 context = DECL_CONTEXT (friend_tmpl);
5322
5323 if (context)
5324 {
5325 if (TREE_CODE (context) == NAMESPACE_DECL)
5326 push_nested_namespace (context);
5327 else
5328 push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
5329 }
5330
5331 /* First, we look for a class template. */
5332 tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/0);
5333
5334 /* But, if we don't find one, it might be because we're in a
5335 situation like this:
5336
5337 template <class T>
5338 struct S {
5339 template <class U>
5340 friend struct S;
5341 };
5342
5343 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
5344 for `S<int>', not the TEMPLATE_DECL. */
5345 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5346 {
5347 tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/1);
5348 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
5349 }
5350
5351 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
5352 {
5353 /* The friend template has already been declared. Just
5354 check to see that the declarations match, and install any new
5355 default parameters. We must tsubst the default parameters,
5356 of course. We only need the innermost template parameters
5357 because that is all that redeclare_class_template will look
5358 at. */
5359 if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
5360 > TMPL_ARGS_DEPTH (args))
5361 {
5362 tree parms;
5363 parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
5364 args, tf_error | tf_warning);
5365 redeclare_class_template (TREE_TYPE (tmpl), parms);
5366 }
5367
5368 friend_type = TREE_TYPE (tmpl);
5369 }
5370 else
5371 {
5372 /* The friend template has not already been declared. In this
5373 case, the instantiation of the template class will cause the
5374 injection of this template into the global scope. */
5375 tmpl = tsubst (friend_tmpl, args, tf_error | tf_warning, NULL_TREE);
5376
5377 /* The new TMPL is not an instantiation of anything, so we
5378 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
5379 the new type because that is supposed to be the corresponding
5380 template decl, i.e., TMPL. */
5381 DECL_USE_TEMPLATE (tmpl) = 0;
5382 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
5383 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
5384 CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
5385 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
5386
5387 /* Inject this template into the global scope. */
5388 friend_type = TREE_TYPE (pushdecl_top_level (tmpl));
5389 }
5390
5391 if (context)
5392 {
5393 if (TREE_CODE (context) == NAMESPACE_DECL)
5394 pop_nested_namespace (context);
5395 else
5396 pop_nested_class ();
5397 }
5398
5399 return friend_type;
5400 }
5401
5402 /* Returns zero if TYPE cannot be completed later due to circularity.
5403 Otherwise returns one. */
5404
5405 static int
5406 can_complete_type_without_circularity (tree type)
5407 {
5408 if (type == NULL_TREE || type == error_mark_node)
5409 return 0;
5410 else if (COMPLETE_TYPE_P (type))
5411 return 1;
5412 else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
5413 return can_complete_type_without_circularity (TREE_TYPE (type));
5414 else if (CLASS_TYPE_P (type)
5415 && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
5416 return 0;
5417 else
5418 return 1;
5419 }
5420
5421 tree
5422 instantiate_class_template (tree type)
5423 {
5424 tree template, args, pattern, t, member;
5425 tree typedecl;
5426 tree pbinfo;
5427 tree base_list;
5428
5429 if (type == error_mark_node)
5430 return error_mark_node;
5431
5432 if (TYPE_BEING_DEFINED (type)
5433 || COMPLETE_TYPE_P (type)
5434 || dependent_type_p (type))
5435 return type;
5436
5437 /* Figure out which template is being instantiated. */
5438 template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
5439 gcc_assert (TREE_CODE (template) == TEMPLATE_DECL);
5440
5441 /* Figure out which arguments are being used to do the
5442 instantiation. */
5443 args = CLASSTYPE_TI_ARGS (type);
5444
5445 /* Determine what specialization of the original template to
5446 instantiate. */
5447 t = most_specialized_class (template, args);
5448 if (t == error_mark_node)
5449 {
5450 const char *str = "candidates are:";
5451 error ("ambiguous class template instantiation for %q#T", type);
5452 for (t = DECL_TEMPLATE_SPECIALIZATIONS (template); t;
5453 t = TREE_CHAIN (t))
5454 {
5455 if (get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args))
5456 {
5457 error ("%s %+#T", str, TREE_TYPE (t));
5458 str = " ";
5459 }
5460 }
5461 TYPE_BEING_DEFINED (type) = 1;
5462 return error_mark_node;
5463 }
5464
5465 if (t)
5466 pattern = TREE_TYPE (t);
5467 else
5468 pattern = TREE_TYPE (template);
5469
5470 /* If the template we're instantiating is incomplete, then clearly
5471 there's nothing we can do. */
5472 if (!COMPLETE_TYPE_P (pattern))
5473 return type;
5474
5475 /* If we've recursively instantiated too many templates, stop. */
5476 if (! push_tinst_level (type))
5477 return type;
5478
5479 /* Now we're really doing the instantiation. Mark the type as in
5480 the process of being defined. */
5481 TYPE_BEING_DEFINED (type) = 1;
5482
5483 /* We may be in the middle of deferred access check. Disable
5484 it now. */
5485 push_deferring_access_checks (dk_no_deferred);
5486
5487 push_to_top_level ();
5488
5489 if (t)
5490 {
5491 /* This TYPE is actually an instantiation of a partial
5492 specialization. We replace the innermost set of ARGS with
5493 the arguments appropriate for substitution. For example,
5494 given:
5495
5496 template <class T> struct S {};
5497 template <class T> struct S<T*> {};
5498
5499 and supposing that we are instantiating S<int*>, ARGS will
5500 present be {int*} but we need {int}. */
5501 tree inner_args
5502 = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t),
5503 args);
5504
5505 /* If there were multiple levels in ARGS, replacing the
5506 innermost level would alter CLASSTYPE_TI_ARGS, which we don't
5507 want, so we make a copy first. */
5508 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
5509 {
5510 args = copy_node (args);
5511 SET_TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args), inner_args);
5512 }
5513 else
5514 args = inner_args;
5515 }
5516
5517 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
5518
5519 /* Set the input location to the template definition. This is needed
5520 if tsubsting causes an error. */
5521 typedecl = TYPE_MAIN_DECL (type);
5522 input_location = DECL_SOURCE_LOCATION (typedecl);
5523 in_system_header = DECL_IN_SYSTEM_HEADER (typedecl);
5524
5525 TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
5526 TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
5527 TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
5528 TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
5529 TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
5530 TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
5531 TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
5532 TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
5533 TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
5534 TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
5535 TYPE_PACKED (type) = TYPE_PACKED (pattern);
5536 TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
5537 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
5538 TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
5539 if (ANON_AGGR_TYPE_P (pattern))
5540 SET_ANON_AGGR_TYPE_P (type);
5541 if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
5542 {
5543 CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
5544 CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
5545 }
5546
5547 pbinfo = TYPE_BINFO (pattern);
5548
5549 /* We should never instantiate a nested class before its enclosing
5550 class; we need to look up the nested class by name before we can
5551 instantiate it, and that lookup should instantiate the enclosing
5552 class. */
5553 gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
5554 || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
5555 || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
5556
5557 base_list = NULL_TREE;
5558 if (BINFO_N_BASE_BINFOS (pbinfo))
5559 {
5560 tree pbase_binfo;
5561 tree context = TYPE_CONTEXT (type);
5562 tree pushed_scope;
5563 int i;
5564
5565 /* We must enter the scope containing the type, as that is where
5566 the accessibility of types named in dependent bases are
5567 looked up from. */
5568 pushed_scope = push_scope (context ? context : global_namespace);
5569
5570 /* Substitute into each of the bases to determine the actual
5571 basetypes. */
5572 for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
5573 {
5574 tree base;
5575 tree access = BINFO_BASE_ACCESS (pbinfo, i);
5576
5577 /* Substitute to figure out the base class. */
5578 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, NULL_TREE);
5579 if (base == error_mark_node)
5580 continue;
5581
5582 base_list = tree_cons (access, base, base_list);
5583 if (BINFO_VIRTUAL_P (pbase_binfo))
5584 TREE_TYPE (base_list) = integer_type_node;
5585 }
5586
5587 /* The list is now in reverse order; correct that. */
5588 base_list = nreverse (base_list);
5589
5590 if (pushed_scope)
5591 pop_scope (pushed_scope);
5592 }
5593 /* Now call xref_basetypes to set up all the base-class
5594 information. */
5595 xref_basetypes (type, base_list);
5596
5597
5598 /* Now that our base classes are set up, enter the scope of the
5599 class, so that name lookups into base classes, etc. will work
5600 correctly. This is precisely analogous to what we do in
5601 begin_class_definition when defining an ordinary non-template
5602 class. */
5603 pushclass (type);
5604
5605 /* Now members are processed in the order of declaration. */
5606 for (member = CLASSTYPE_DECL_LIST (pattern);
5607 member; member = TREE_CHAIN (member))
5608 {
5609 tree t = TREE_VALUE (member);
5610
5611 if (TREE_PURPOSE (member))
5612 {
5613 if (TYPE_P (t))
5614 {
5615 /* Build new CLASSTYPE_NESTED_UTDS. */
5616
5617 tree tag = t;
5618 tree name = TYPE_IDENTIFIER (tag);
5619 tree newtag;
5620 bool class_template_p;
5621
5622 class_template_p = (TREE_CODE (tag) != ENUMERAL_TYPE
5623 && TYPE_LANG_SPECIFIC (tag)
5624 && CLASSTYPE_IS_TEMPLATE (tag));
5625 /* If the member is a class template, then -- even after
5626 substitution -- there may be dependent types in the
5627 template argument list for the class. We increment
5628 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
5629 that function will assume that no types are dependent
5630 when outside of a template. */
5631 if (class_template_p)
5632 ++processing_template_decl;
5633 newtag = tsubst (tag, args, tf_error, NULL_TREE);
5634 if (class_template_p)
5635 --processing_template_decl;
5636 if (newtag == error_mark_node)
5637 continue;
5638
5639 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
5640 {
5641 if (class_template_p)
5642 /* Unfortunately, lookup_template_class sets
5643 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
5644 instantiation (i.e., for the type of a member
5645 template class nested within a template class.)
5646 This behavior is required for
5647 maybe_process_partial_specialization to work
5648 correctly, but is not accurate in this case;
5649 the TAG is not an instantiation of anything.
5650 (The corresponding TEMPLATE_DECL is an
5651 instantiation, but the TYPE is not.) */
5652 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
5653
5654 /* Now, we call pushtag to put this NEWTAG into the scope of
5655 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
5656 pushtag calling push_template_decl. We don't have to do
5657 this for enums because it will already have been done in
5658 tsubst_enum. */
5659 if (name)
5660 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
5661 pushtag (name, newtag, /*tag_scope=*/ts_current);
5662 }
5663 }
5664 else if (TREE_CODE (t) == FUNCTION_DECL
5665 || DECL_FUNCTION_TEMPLATE_P (t))
5666 {
5667 /* Build new TYPE_METHODS. */
5668 tree r;
5669
5670 if (TREE_CODE (t) == TEMPLATE_DECL)
5671 ++processing_template_decl;
5672 r = tsubst (t, args, tf_error, NULL_TREE);
5673 if (TREE_CODE (t) == TEMPLATE_DECL)
5674 --processing_template_decl;
5675 set_current_access_from_decl (r);
5676 grok_special_member_properties (r);
5677 finish_member_declaration (r);
5678 }
5679 else
5680 {
5681 /* Build new TYPE_FIELDS. */
5682
5683 if (TREE_CODE (t) != CONST_DECL)
5684 {
5685 tree r;
5686
5687 /* The the file and line for this declaration, to
5688 assist in error message reporting. Since we
5689 called push_tinst_level above, we don't need to
5690 restore these. */
5691 input_location = DECL_SOURCE_LOCATION (t);
5692
5693 if (TREE_CODE (t) == TEMPLATE_DECL)
5694 ++processing_template_decl;
5695 r = tsubst (t, args, tf_error | tf_warning, NULL_TREE);
5696 if (TREE_CODE (t) == TEMPLATE_DECL)
5697 --processing_template_decl;
5698 if (TREE_CODE (r) == VAR_DECL)
5699 {
5700 tree init;
5701
5702 if (DECL_INITIALIZED_IN_CLASS_P (r))
5703 init = tsubst_expr (DECL_INITIAL (t), args,
5704 tf_error | tf_warning, NULL_TREE);
5705 else
5706 init = NULL_TREE;
5707
5708 finish_static_data_member_decl
5709 (r, init, /*asmspec_tree=*/NULL_TREE, /*flags=*/0);
5710
5711 if (DECL_INITIALIZED_IN_CLASS_P (r))
5712 check_static_variable_definition (r, TREE_TYPE (r));
5713 }
5714 else if (TREE_CODE (r) == FIELD_DECL)
5715 {
5716 /* Determine whether R has a valid type and can be
5717 completed later. If R is invalid, then it is
5718 replaced by error_mark_node so that it will not be
5719 added to TYPE_FIELDS. */
5720 tree rtype = TREE_TYPE (r);
5721 if (can_complete_type_without_circularity (rtype))
5722 complete_type (rtype);
5723
5724 if (!COMPLETE_TYPE_P (rtype))
5725 {
5726 cxx_incomplete_type_error (r, rtype);
5727 r = error_mark_node;
5728 }
5729 }
5730
5731 /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
5732 such a thing will already have been added to the field
5733 list by tsubst_enum in finish_member_declaration in the
5734 CLASSTYPE_NESTED_UTDS case above. */
5735 if (!(TREE_CODE (r) == TYPE_DECL
5736 && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
5737 && DECL_ARTIFICIAL (r)))
5738 {
5739 set_current_access_from_decl (r);
5740 finish_member_declaration (r);
5741 }
5742 }
5743 }
5744 }
5745 else
5746 {
5747 if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
5748 {
5749 /* Build new CLASSTYPE_FRIEND_CLASSES. */
5750
5751 tree friend_type = t;
5752 bool adjust_processing_template_decl = false;
5753
5754 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5755 {
5756 /* template <class T> friend class C; */
5757 friend_type = tsubst_friend_class (friend_type, args);
5758 adjust_processing_template_decl = true;
5759 }
5760 else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
5761 {
5762 /* template <class T> friend class C::D; */
5763 friend_type = tsubst (friend_type, args,
5764 tf_error | tf_warning, NULL_TREE);
5765 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5766 friend_type = TREE_TYPE (friend_type);
5767 adjust_processing_template_decl = true;
5768 }
5769 else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
5770 {
5771 /* This could be either
5772
5773 friend class T::C;
5774
5775 when dependent_type_p is false or
5776
5777 template <class U> friend class T::C;
5778
5779 otherwise. */
5780 friend_type = tsubst (friend_type, args,
5781 tf_error | tf_warning, NULL_TREE);
5782 /* Bump processing_template_decl for correct
5783 dependent_type_p calculation. */
5784 ++processing_template_decl;
5785 if (dependent_type_p (friend_type))
5786 adjust_processing_template_decl = true;
5787 --processing_template_decl;
5788 }
5789 else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
5790 && hidden_name_p (TYPE_NAME (friend_type)))
5791 {
5792 /* friend class C;
5793
5794 where C hasn't been declared yet. Let's lookup name
5795 from namespace scope directly, bypassing any name that
5796 come from dependent base class. */
5797 tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
5798
5799 /* The call to xref_tag_from_type does injection for friend
5800 classes. */
5801 push_nested_namespace (ns);
5802 friend_type =
5803 xref_tag_from_type (friend_type, NULL_TREE,
5804 /*tag_scope=*/ts_current);
5805 pop_nested_namespace (ns);
5806 }
5807 else if (uses_template_parms (friend_type))
5808 /* friend class C<T>; */
5809 friend_type = tsubst (friend_type, args,
5810 tf_error | tf_warning, NULL_TREE);
5811 /* Otherwise it's
5812
5813 friend class C;
5814
5815 where C is already declared or
5816
5817 friend class C<int>;
5818
5819 We don't have to do anything in these cases. */
5820
5821 if (adjust_processing_template_decl)
5822 /* Trick make_friend_class into realizing that the friend
5823 we're adding is a template, not an ordinary class. It's
5824 important that we use make_friend_class since it will
5825 perform some error-checking and output cross-reference
5826 information. */
5827 ++processing_template_decl;
5828
5829 if (friend_type != error_mark_node)
5830 make_friend_class (type, friend_type, /*complain=*/false);
5831
5832 if (adjust_processing_template_decl)
5833 --processing_template_decl;
5834 }
5835 else
5836 {
5837 /* Build new DECL_FRIENDLIST. */
5838 tree r;
5839
5840 /* The the file and line for this declaration, to
5841 assist in error message reporting. Since we
5842 called push_tinst_level above, we don't need to
5843 restore these. */
5844 input_location = DECL_SOURCE_LOCATION (t);
5845
5846 if (TREE_CODE (t) == TEMPLATE_DECL)
5847 {
5848 ++processing_template_decl;
5849 push_deferring_access_checks (dk_no_check);
5850 }
5851
5852 r = tsubst_friend_function (t, args);
5853 add_friend (type, r, /*complain=*/false);
5854 if (TREE_CODE (t) == TEMPLATE_DECL)
5855 {
5856 pop_deferring_access_checks ();
5857 --processing_template_decl;
5858 }
5859 }
5860 }
5861 }
5862
5863 /* Set the file and line number information to whatever is given for
5864 the class itself. This puts error messages involving generated
5865 implicit functions at a predictable point, and the same point
5866 that would be used for non-template classes. */
5867 input_location = DECL_SOURCE_LOCATION (typedecl);
5868
5869 unreverse_member_declarations (type);
5870 finish_struct_1 (type);
5871 TYPE_BEING_DEFINED (type) = 0;
5872
5873 /* Now that the class is complete, instantiate default arguments for
5874 any member functions. We don't do this earlier because the
5875 default arguments may reference members of the class. */
5876 if (!PRIMARY_TEMPLATE_P (template))
5877 for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
5878 if (TREE_CODE (t) == FUNCTION_DECL
5879 /* Implicitly generated member functions will not have template
5880 information; they are not instantiations, but instead are
5881 created "fresh" for each instantiation. */
5882 && DECL_TEMPLATE_INFO (t))
5883 tsubst_default_arguments (t);
5884
5885 popclass ();
5886 pop_from_top_level ();
5887 pop_deferring_access_checks ();
5888 pop_tinst_level ();
5889
5890 /* The vtable for a template class can be emitted in any translation
5891 unit in which the class is instantiated. When there is no key
5892 method, however, finish_struct_1 will already have added TYPE to
5893 the keyed_classes list. */
5894 if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
5895 keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
5896
5897 return type;
5898 }
5899
5900 static tree
5901 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
5902 {
5903 tree r;
5904
5905 if (!t)
5906 r = t;
5907 else if (TYPE_P (t))
5908 r = tsubst (t, args, complain, in_decl);
5909 else
5910 {
5911 r = tsubst_expr (t, args, complain, in_decl);
5912
5913 if (!uses_template_parms (r))
5914 {
5915 /* Sometimes, one of the args was an expression involving a
5916 template constant parameter, like N - 1. Now that we've
5917 tsubst'd, we might have something like 2 - 1. This will
5918 confuse lookup_template_class, so we do constant folding
5919 here. We have to unset processing_template_decl, to fool
5920 tsubst_copy_and_build() into building an actual tree. */
5921
5922 /* If the TREE_TYPE of ARG is not NULL_TREE, ARG is already
5923 as simple as it's going to get, and trying to reprocess
5924 the trees will break. Once tsubst_expr et al DTRT for
5925 non-dependent exprs, this code can go away, as the type
5926 will always be set. */
5927 if (!TREE_TYPE (r))
5928 {
5929 int saved_processing_template_decl = processing_template_decl;
5930 processing_template_decl = 0;
5931 r = tsubst_copy_and_build (r, /*args=*/NULL_TREE,
5932 tf_error, /*in_decl=*/NULL_TREE,
5933 /*function_p=*/false);
5934 processing_template_decl = saved_processing_template_decl;
5935 }
5936 r = fold (r);
5937 }
5938 }
5939 return r;
5940 }
5941
5942 /* Substitute ARGS into the vector or list of template arguments T. */
5943
5944 static tree
5945 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
5946 {
5947 int len = TREE_VEC_LENGTH (t);
5948 int need_new = 0, i;
5949 tree *elts = alloca (len * sizeof (tree));
5950
5951 for (i = 0; i < len; i++)
5952 {
5953 tree orig_arg = TREE_VEC_ELT (t, i);
5954 tree new_arg;
5955
5956 if (TREE_CODE (orig_arg) == TREE_VEC)
5957 new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
5958 else
5959 new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
5960
5961 if (new_arg == error_mark_node)
5962 return error_mark_node;
5963
5964 elts[i] = new_arg;
5965 if (new_arg != orig_arg)
5966 need_new = 1;
5967 }
5968
5969 if (!need_new)
5970 return t;
5971
5972 t = make_tree_vec (len);
5973 for (i = 0; i < len; i++)
5974 TREE_VEC_ELT (t, i) = elts[i];
5975
5976 return t;
5977 }
5978
5979 /* Return the result of substituting ARGS into the template parameters
5980 given by PARMS. If there are m levels of ARGS and m + n levels of
5981 PARMS, then the result will contain n levels of PARMS. For
5982 example, if PARMS is `template <class T> template <class U>
5983 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
5984 result will be `template <int*, double, class V>'. */
5985
5986 static tree
5987 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
5988 {
5989 tree r = NULL_TREE;
5990 tree* new_parms;
5991
5992 for (new_parms = &r;
5993 TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
5994 new_parms = &(TREE_CHAIN (*new_parms)),
5995 parms = TREE_CHAIN (parms))
5996 {
5997 tree new_vec =
5998 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
5999 int i;
6000
6001 for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
6002 {
6003 tree tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
6004 tree default_value = TREE_PURPOSE (tuple);
6005 tree parm_decl = TREE_VALUE (tuple);
6006
6007 parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
6008 if (TREE_CODE (parm_decl) == PARM_DECL
6009 && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
6010 parm_decl = error_mark_node;
6011 default_value = tsubst_template_arg (default_value, args,
6012 complain, NULL_TREE);
6013
6014 tuple = build_tree_list (default_value, parm_decl);
6015 TREE_VEC_ELT (new_vec, i) = tuple;
6016 }
6017
6018 *new_parms =
6019 tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
6020 - TMPL_ARGS_DEPTH (args)),
6021 new_vec, NULL_TREE);
6022 }
6023
6024 return r;
6025 }
6026
6027 /* Substitute the ARGS into the indicated aggregate (or enumeration)
6028 type T. If T is not an aggregate or enumeration type, it is
6029 handled as if by tsubst. IN_DECL is as for tsubst. If
6030 ENTERING_SCOPE is nonzero, T is the context for a template which
6031 we are presently tsubst'ing. Return the substituted value. */
6032
6033 static tree
6034 tsubst_aggr_type (tree t,
6035 tree args,
6036 tsubst_flags_t complain,
6037 tree in_decl,
6038 int entering_scope)
6039 {
6040 if (t == NULL_TREE)
6041 return NULL_TREE;
6042
6043 switch (TREE_CODE (t))
6044 {
6045 case RECORD_TYPE:
6046 if (TYPE_PTRMEMFUNC_P (t))
6047 return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
6048
6049 /* Else fall through. */
6050 case ENUMERAL_TYPE:
6051 case UNION_TYPE:
6052 if (TYPE_TEMPLATE_INFO (t))
6053 {
6054 tree argvec;
6055 tree context;
6056 tree r;
6057
6058 /* First, determine the context for the type we are looking
6059 up. */
6060 context = TYPE_CONTEXT (t);
6061 if (context)
6062 context = tsubst_aggr_type (context, args, complain,
6063 in_decl, /*entering_scope=*/1);
6064
6065 /* Then, figure out what arguments are appropriate for the
6066 type we are trying to find. For example, given:
6067
6068 template <class T> struct S;
6069 template <class T, class U> void f(T, U) { S<U> su; }
6070
6071 and supposing that we are instantiating f<int, double>,
6072 then our ARGS will be {int, double}, but, when looking up
6073 S we only want {double}. */
6074 argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
6075 complain, in_decl);
6076 if (argvec == error_mark_node)
6077 return error_mark_node;
6078
6079 r = lookup_template_class (t, argvec, in_decl, context,
6080 entering_scope, complain);
6081
6082 return cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
6083 }
6084 else
6085 /* This is not a template type, so there's nothing to do. */
6086 return t;
6087
6088 default:
6089 return tsubst (t, args, complain, in_decl);
6090 }
6091 }
6092
6093 /* Substitute into the default argument ARG (a default argument for
6094 FN), which has the indicated TYPE. */
6095
6096 tree
6097 tsubst_default_argument (tree fn, tree type, tree arg)
6098 {
6099 tree saved_class_ptr = NULL_TREE;
6100 tree saved_class_ref = NULL_TREE;
6101
6102 /* This default argument came from a template. Instantiate the
6103 default argument here, not in tsubst. In the case of
6104 something like:
6105
6106 template <class T>
6107 struct S {
6108 static T t();
6109 void f(T = t());
6110 };
6111
6112 we must be careful to do name lookup in the scope of S<T>,
6113 rather than in the current class. */
6114 push_access_scope (fn);
6115 /* The default argument expression should not be considered to be
6116 within the scope of FN. Since push_access_scope sets
6117 current_function_decl, we must explicitly clear it here. */
6118 current_function_decl = NULL_TREE;
6119 /* The "this" pointer is not valid in a default argument. */
6120 if (cfun)
6121 {
6122 saved_class_ptr = current_class_ptr;
6123 cp_function_chain->x_current_class_ptr = NULL_TREE;
6124 saved_class_ref = current_class_ref;
6125 cp_function_chain->x_current_class_ref = NULL_TREE;
6126 }
6127
6128 push_deferring_access_checks(dk_no_deferred);
6129 arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
6130 tf_error | tf_warning, NULL_TREE);
6131 pop_deferring_access_checks();
6132
6133 /* Restore the "this" pointer. */
6134 if (cfun)
6135 {
6136 cp_function_chain->x_current_class_ptr = saved_class_ptr;
6137 cp_function_chain->x_current_class_ref = saved_class_ref;
6138 }
6139
6140 pop_access_scope (fn);
6141
6142 /* Make sure the default argument is reasonable. */
6143 arg = check_default_argument (type, arg);
6144
6145 return arg;
6146 }
6147
6148 /* Substitute into all the default arguments for FN. */
6149
6150 static void
6151 tsubst_default_arguments (tree fn)
6152 {
6153 tree arg;
6154 tree tmpl_args;
6155
6156 tmpl_args = DECL_TI_ARGS (fn);
6157
6158 /* If this function is not yet instantiated, we certainly don't need
6159 its default arguments. */
6160 if (uses_template_parms (tmpl_args))
6161 return;
6162
6163 for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
6164 arg;
6165 arg = TREE_CHAIN (arg))
6166 if (TREE_PURPOSE (arg))
6167 TREE_PURPOSE (arg) = tsubst_default_argument (fn,
6168 TREE_VALUE (arg),
6169 TREE_PURPOSE (arg));
6170 }
6171
6172 /* Substitute the ARGS into the T, which is a _DECL. Return the
6173 result of the substitution. Issue error and warning messages under
6174 control of COMPLAIN. */
6175
6176 static tree
6177 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
6178 {
6179 location_t saved_loc;
6180 tree r = NULL_TREE;
6181 tree in_decl = t;
6182
6183 /* Set the filename and linenumber to improve error-reporting. */
6184 saved_loc = input_location;
6185 input_location = DECL_SOURCE_LOCATION (t);
6186
6187 switch (TREE_CODE (t))
6188 {
6189 case TEMPLATE_DECL:
6190 {
6191 /* We can get here when processing a member function template,
6192 member class template, and template template parameter of
6193 a template class. */
6194 tree decl = DECL_TEMPLATE_RESULT (t);
6195 tree spec;
6196 tree tmpl_args;
6197 tree full_args;
6198
6199 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
6200 {
6201 /* Template template parameter is treated here. */
6202 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6203 if (new_type == error_mark_node)
6204 return error_mark_node;
6205
6206 r = copy_decl (t);
6207 TREE_CHAIN (r) = NULL_TREE;
6208 TREE_TYPE (r) = new_type;
6209 DECL_TEMPLATE_RESULT (r)
6210 = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
6211 DECL_TEMPLATE_PARMS (r)
6212 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
6213 complain);
6214 TYPE_NAME (new_type) = r;
6215 break;
6216 }
6217
6218 /* We might already have an instance of this template.
6219 The ARGS are for the surrounding class type, so the
6220 full args contain the tsubst'd args for the context,
6221 plus the innermost args from the template decl. */
6222 tmpl_args = DECL_CLASS_TEMPLATE_P (t)
6223 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
6224 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
6225 full_args = tsubst_template_args (tmpl_args, args,
6226 complain, in_decl);
6227 if (full_args == error_mark_node)
6228 return error_mark_node;
6229
6230 /* tsubst_template_args doesn't copy the vector if
6231 nothing changed. But, *something* should have
6232 changed. */
6233 gcc_assert (full_args != tmpl_args);
6234
6235 spec = retrieve_specialization (t, full_args,
6236 /*class_specializations_p=*/true);
6237 if (spec != NULL_TREE)
6238 {
6239 r = spec;
6240 break;
6241 }
6242
6243 /* Make a new template decl. It will be similar to the
6244 original, but will record the current template arguments.
6245 We also create a new function declaration, which is just
6246 like the old one, but points to this new template, rather
6247 than the old one. */
6248 r = copy_decl (t);
6249 gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
6250 TREE_CHAIN (r) = NULL_TREE;
6251
6252 DECL_CONTEXT (r)
6253 = tsubst_aggr_type (DECL_CONTEXT (t), args,
6254 complain, in_decl,
6255 /*entering_scope=*/1);
6256 DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
6257
6258 if (TREE_CODE (decl) == TYPE_DECL)
6259 {
6260 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6261 if (new_type == error_mark_node)
6262 return error_mark_node;
6263
6264 TREE_TYPE (r) = new_type;
6265 CLASSTYPE_TI_TEMPLATE (new_type) = r;
6266 DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
6267 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
6268 }
6269 else
6270 {
6271 tree new_decl = tsubst (decl, args, complain, in_decl);
6272 if (new_decl == error_mark_node)
6273 return error_mark_node;
6274
6275 DECL_TEMPLATE_RESULT (r) = new_decl;
6276 DECL_TI_TEMPLATE (new_decl) = r;
6277 TREE_TYPE (r) = TREE_TYPE (new_decl);
6278 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
6279 }
6280
6281 SET_DECL_IMPLICIT_INSTANTIATION (r);
6282 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
6283 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
6284
6285 /* The template parameters for this new template are all the
6286 template parameters for the old template, except the
6287 outermost level of parameters. */
6288 DECL_TEMPLATE_PARMS (r)
6289 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
6290 complain);
6291
6292 if (PRIMARY_TEMPLATE_P (t))
6293 DECL_PRIMARY_TEMPLATE (r) = r;
6294
6295 if (TREE_CODE (decl) != TYPE_DECL)
6296 /* Record this non-type partial instantiation. */
6297 register_specialization (r, t,
6298 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)));
6299 }
6300 break;
6301
6302 case FUNCTION_DECL:
6303 {
6304 tree ctx;
6305 tree argvec = NULL_TREE;
6306 tree *friends;
6307 tree gen_tmpl;
6308 tree type;
6309 int member;
6310 int args_depth;
6311 int parms_depth;
6312
6313 /* Nobody should be tsubst'ing into non-template functions. */
6314 gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
6315
6316 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
6317 {
6318 tree spec;
6319 bool dependent_p;
6320
6321 /* If T is not dependent, just return it. We have to
6322 increment PROCESSING_TEMPLATE_DECL because
6323 value_dependent_expression_p assumes that nothing is
6324 dependent when PROCESSING_TEMPLATE_DECL is zero. */
6325 ++processing_template_decl;
6326 dependent_p = value_dependent_expression_p (t);
6327 --processing_template_decl;
6328 if (!dependent_p)
6329 return t;
6330
6331 /* Calculate the most general template of which R is a
6332 specialization, and the complete set of arguments used to
6333 specialize R. */
6334 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
6335 argvec = tsubst_template_args (DECL_TI_ARGS
6336 (DECL_TEMPLATE_RESULT (gen_tmpl)),
6337 args, complain, in_decl);
6338
6339 /* Check to see if we already have this specialization. */
6340 spec = retrieve_specialization (gen_tmpl, argvec,
6341 /*class_specializations_p=*/false);
6342
6343 if (spec)
6344 {
6345 r = spec;
6346 break;
6347 }
6348
6349 /* We can see more levels of arguments than parameters if
6350 there was a specialization of a member template, like
6351 this:
6352
6353 template <class T> struct S { template <class U> void f(); }
6354 template <> template <class U> void S<int>::f(U);
6355
6356 Here, we'll be substituting into the specialization,
6357 because that's where we can find the code we actually
6358 want to generate, but we'll have enough arguments for
6359 the most general template.
6360
6361 We also deal with the peculiar case:
6362
6363 template <class T> struct S {
6364 template <class U> friend void f();
6365 };
6366 template <class U> void f() {}
6367 template S<int>;
6368 template void f<double>();
6369
6370 Here, the ARGS for the instantiation of will be {int,
6371 double}. But, we only need as many ARGS as there are
6372 levels of template parameters in CODE_PATTERN. We are
6373 careful not to get fooled into reducing the ARGS in
6374 situations like:
6375
6376 template <class T> struct S { template <class U> void f(U); }
6377 template <class T> template <> void S<T>::f(int) {}
6378
6379 which we can spot because the pattern will be a
6380 specialization in this case. */
6381 args_depth = TMPL_ARGS_DEPTH (args);
6382 parms_depth =
6383 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
6384 if (args_depth > parms_depth
6385 && !DECL_TEMPLATE_SPECIALIZATION (t))
6386 args = get_innermost_template_args (args, parms_depth);
6387 }
6388 else
6389 {
6390 /* This special case arises when we have something like this:
6391
6392 template <class T> struct S {
6393 friend void f<int>(int, double);
6394 };
6395
6396 Here, the DECL_TI_TEMPLATE for the friend declaration
6397 will be an IDENTIFIER_NODE. We are being called from
6398 tsubst_friend_function, and we want only to create a
6399 new decl (R) with appropriate types so that we can call
6400 determine_specialization. */
6401 gen_tmpl = NULL_TREE;
6402 }
6403
6404 if (DECL_CLASS_SCOPE_P (t))
6405 {
6406 if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
6407 member = 2;
6408 else
6409 member = 1;
6410 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
6411 complain, t, /*entering_scope=*/1);
6412 }
6413 else
6414 {
6415 member = 0;
6416 ctx = DECL_CONTEXT (t);
6417 }
6418 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6419 if (type == error_mark_node)
6420 return error_mark_node;
6421
6422 /* We do NOT check for matching decls pushed separately at this
6423 point, as they may not represent instantiations of this
6424 template, and in any case are considered separate under the
6425 discrete model. */
6426 r = copy_decl (t);
6427 DECL_USE_TEMPLATE (r) = 0;
6428 TREE_TYPE (r) = type;
6429 /* Clear out the mangled name and RTL for the instantiation. */
6430 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
6431 SET_DECL_RTL (r, NULL_RTX);
6432 DECL_INITIAL (r) = NULL_TREE;
6433 DECL_CONTEXT (r) = ctx;
6434
6435 if (member && DECL_CONV_FN_P (r))
6436 /* Type-conversion operator. Reconstruct the name, in
6437 case it's the name of one of the template's parameters. */
6438 DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
6439
6440 DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
6441 complain, t);
6442 DECL_RESULT (r) = NULL_TREE;
6443
6444 TREE_STATIC (r) = 0;
6445 TREE_PUBLIC (r) = TREE_PUBLIC (t);
6446 DECL_EXTERNAL (r) = 1;
6447 /* If this is an instantiation of a function with internal
6448 linkage, we already know what object file linkage will be
6449 assigned to the instantiation. */
6450 DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
6451 DECL_DEFER_OUTPUT (r) = 0;
6452 TREE_CHAIN (r) = NULL_TREE;
6453 DECL_PENDING_INLINE_INFO (r) = 0;
6454 DECL_PENDING_INLINE_P (r) = 0;
6455 DECL_SAVED_TREE (r) = NULL_TREE;
6456 TREE_USED (r) = 0;
6457 if (DECL_CLONED_FUNCTION (r))
6458 {
6459 DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
6460 args, complain, t);
6461 TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
6462 TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
6463 }
6464
6465 /* Set up the DECL_TEMPLATE_INFO for R. There's no need to do
6466 this in the special friend case mentioned above where
6467 GEN_TMPL is NULL. */
6468 if (gen_tmpl)
6469 {
6470 DECL_TEMPLATE_INFO (r)
6471 = tree_cons (gen_tmpl, argvec, NULL_TREE);
6472 SET_DECL_IMPLICIT_INSTANTIATION (r);
6473 register_specialization (r, gen_tmpl, argvec);
6474
6475 /* We're not supposed to instantiate default arguments
6476 until they are called, for a template. But, for a
6477 declaration like:
6478
6479 template <class T> void f ()
6480 { extern void g(int i = T()); }
6481
6482 we should do the substitution when the template is
6483 instantiated. We handle the member function case in
6484 instantiate_class_template since the default arguments
6485 might refer to other members of the class. */
6486 if (!member
6487 && !PRIMARY_TEMPLATE_P (gen_tmpl)
6488 && !uses_template_parms (argvec))
6489 tsubst_default_arguments (r);
6490 }
6491
6492 /* Copy the list of befriending classes. */
6493 for (friends = &DECL_BEFRIENDING_CLASSES (r);
6494 *friends;
6495 friends = &TREE_CHAIN (*friends))
6496 {
6497 *friends = copy_node (*friends);
6498 TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
6499 args, complain,
6500 in_decl);
6501 }
6502
6503 if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
6504 {
6505 maybe_retrofit_in_chrg (r);
6506 if (DECL_CONSTRUCTOR_P (r))
6507 grok_ctor_properties (ctx, r);
6508 /* If this is an instantiation of a member template, clone it.
6509 If it isn't, that'll be handled by
6510 clone_constructors_and_destructors. */
6511 if (PRIMARY_TEMPLATE_P (gen_tmpl))
6512 clone_function_decl (r, /*update_method_vec_p=*/0);
6513 }
6514 else if (IDENTIFIER_OPNAME_P (DECL_NAME (r)))
6515 grok_op_properties (r, (complain & tf_error) != 0);
6516
6517 if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
6518 SET_DECL_FRIEND_CONTEXT (r,
6519 tsubst (DECL_FRIEND_CONTEXT (t),
6520 args, complain, in_decl));
6521 }
6522 break;
6523
6524 case PARM_DECL:
6525 {
6526 tree type;
6527
6528 r = copy_node (t);
6529 if (DECL_TEMPLATE_PARM_P (t))
6530 SET_DECL_TEMPLATE_PARM_P (r);
6531
6532 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6533 type = type_decays_to (type);
6534 TREE_TYPE (r) = type;
6535 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
6536
6537 if (DECL_INITIAL (r))
6538 {
6539 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
6540 DECL_INITIAL (r) = TREE_TYPE (r);
6541 else
6542 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
6543 complain, in_decl);
6544 }
6545
6546 DECL_CONTEXT (r) = NULL_TREE;
6547
6548 if (!DECL_TEMPLATE_PARM_P (r))
6549 DECL_ARG_TYPE (r) = type_passed_as (type);
6550 if (TREE_CHAIN (t))
6551 TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
6552 complain, TREE_CHAIN (t));
6553 }
6554 break;
6555
6556 case FIELD_DECL:
6557 {
6558 tree type;
6559
6560 r = copy_decl (t);
6561 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6562 if (type == error_mark_node)
6563 return error_mark_node;
6564 TREE_TYPE (r) = type;
6565 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
6566
6567 /* We don't have to set DECL_CONTEXT here; it is set by
6568 finish_member_declaration. */
6569 DECL_INITIAL (r) = tsubst_expr (DECL_INITIAL (t), args,
6570 complain, in_decl);
6571 TREE_CHAIN (r) = NULL_TREE;
6572 if (VOID_TYPE_P (type))
6573 error ("instantiation of %q+D as type %qT", r, type);
6574 }
6575 break;
6576
6577 case USING_DECL:
6578 /* We reach here only for member using decls. */
6579 if (DECL_DEPENDENT_P (t))
6580 {
6581 r = do_class_using_decl
6582 (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
6583 tsubst_copy (DECL_NAME (t), args, complain, in_decl));
6584 if (!r)
6585 r = error_mark_node;
6586 }
6587 else
6588 {
6589 r = copy_node (t);
6590 TREE_CHAIN (r) = NULL_TREE;
6591 }
6592 break;
6593
6594 case TYPE_DECL:
6595 case VAR_DECL:
6596 {
6597 tree argvec = NULL_TREE;
6598 tree gen_tmpl = NULL_TREE;
6599 tree spec;
6600 tree tmpl = NULL_TREE;
6601 tree ctx;
6602 tree type = NULL_TREE;
6603 int local_p;
6604
6605 if (TREE_CODE (t) == TYPE_DECL)
6606 {
6607 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6608 if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
6609 || t == TYPE_MAIN_DECL (TREE_TYPE (t)))
6610 {
6611 /* If this is the canonical decl, we don't have to
6612 mess with instantiations, and often we can't (for
6613 typename, template type parms and such). Note that
6614 TYPE_NAME is not correct for the above test if
6615 we've copied the type for a typedef. */
6616 r = TYPE_NAME (type);
6617 break;
6618 }
6619 }
6620
6621 /* Assume this is a non-local variable. */
6622 local_p = 0;
6623
6624 if (TYPE_P (CP_DECL_CONTEXT (t)))
6625 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
6626 complain,
6627 in_decl, /*entering_scope=*/1);
6628 else if (DECL_NAMESPACE_SCOPE_P (t))
6629 ctx = DECL_CONTEXT (t);
6630 else
6631 {
6632 /* Subsequent calls to pushdecl will fill this in. */
6633 ctx = NULL_TREE;
6634 local_p = 1;
6635 }
6636
6637 /* Check to see if we already have this specialization. */
6638 if (!local_p)
6639 {
6640 tmpl = DECL_TI_TEMPLATE (t);
6641 gen_tmpl = most_general_template (tmpl);
6642 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
6643 spec = retrieve_specialization (gen_tmpl, argvec,
6644 /*class_specializations_p=*/false);
6645 }
6646 else
6647 spec = retrieve_local_specialization (t);
6648
6649 if (spec)
6650 {
6651 r = spec;
6652 break;
6653 }
6654
6655 r = copy_decl (t);
6656 if (TREE_CODE (r) == VAR_DECL)
6657 {
6658 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6659 if (type == error_mark_node)
6660 return error_mark_node;
6661 type = complete_type (type);
6662 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
6663 = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
6664 type = check_var_type (DECL_NAME (r), type);
6665 }
6666 else if (DECL_SELF_REFERENCE_P (t))
6667 SET_DECL_SELF_REFERENCE_P (r);
6668 TREE_TYPE (r) = type;
6669 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
6670 DECL_CONTEXT (r) = ctx;
6671 /* Clear out the mangled name and RTL for the instantiation. */
6672 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
6673 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
6674 SET_DECL_RTL (r, NULL_RTX);
6675
6676 /* Don't try to expand the initializer until someone tries to use
6677 this variable; otherwise we run into circular dependencies. */
6678 DECL_INITIAL (r) = NULL_TREE;
6679 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
6680 SET_DECL_RTL (r, NULL_RTX);
6681 DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
6682
6683 /* Even if the original location is out of scope, the newly
6684 substituted one is not. */
6685 if (TREE_CODE (r) == VAR_DECL)
6686 {
6687 DECL_DEAD_FOR_LOCAL (r) = 0;
6688 DECL_INITIALIZED_P (r) = 0;
6689 }
6690
6691 if (!local_p)
6692 {
6693 /* A static data member declaration is always marked
6694 external when it is declared in-class, even if an
6695 initializer is present. We mimic the non-template
6696 processing here. */
6697 DECL_EXTERNAL (r) = 1;
6698
6699 register_specialization (r, gen_tmpl, argvec);
6700 DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
6701 SET_DECL_IMPLICIT_INSTANTIATION (r);
6702 }
6703 else
6704 register_local_specialization (r, t);
6705
6706 TREE_CHAIN (r) = NULL_TREE;
6707 layout_decl (r, 0);
6708 }
6709 break;
6710
6711 default:
6712 gcc_unreachable ();
6713 }
6714
6715 /* Restore the file and line information. */
6716 input_location = saved_loc;
6717
6718 return r;
6719 }
6720
6721 /* Substitute into the ARG_TYPES of a function type. */
6722
6723 static tree
6724 tsubst_arg_types (tree arg_types,
6725 tree args,
6726 tsubst_flags_t complain,
6727 tree in_decl)
6728 {
6729 tree remaining_arg_types;
6730 tree type;
6731 tree default_arg;
6732 tree result = NULL_TREE;
6733
6734 if (!arg_types || arg_types == void_list_node)
6735 return arg_types;
6736
6737 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
6738 args, complain, in_decl);
6739 if (remaining_arg_types == error_mark_node)
6740 return error_mark_node;
6741
6742 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
6743 if (type == error_mark_node)
6744 return error_mark_node;
6745 if (VOID_TYPE_P (type))
6746 {
6747 if (complain & tf_error)
6748 {
6749 error ("invalid parameter type %qT", type);
6750 if (in_decl)
6751 error ("in declaration %q+D", in_decl);
6752 }
6753 return error_mark_node;
6754 }
6755
6756 /* Do array-to-pointer, function-to-pointer conversion, and ignore
6757 top-level qualifiers as required. */
6758 type = TYPE_MAIN_VARIANT (type_decays_to (type));
6759
6760 /* We do not substitute into default arguments here. The standard
6761 mandates that they be instantiated only when needed, which is
6762 done in build_over_call. */
6763 default_arg = TREE_PURPOSE (arg_types);
6764
6765 if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
6766 {
6767 /* We've instantiated a template before its default arguments
6768 have been parsed. This can happen for a nested template
6769 class, and is not an error unless we require the default
6770 argument in a call of this function. */
6771 result = tree_cons (default_arg, type, remaining_arg_types);
6772 VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), result);
6773 }
6774 else
6775 result = hash_tree_cons (default_arg, type, remaining_arg_types);
6776
6777 return result;
6778 }
6779
6780 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
6781 *not* handle the exception-specification for FNTYPE, because the
6782 initial substitution of explicitly provided template parameters
6783 during argument deduction forbids substitution into the
6784 exception-specification:
6785
6786 [temp.deduct]
6787
6788 All references in the function type of the function template to the
6789 corresponding template parameters are replaced by the specified tem-
6790 plate argument values. If a substitution in a template parameter or
6791 in the function type of the function template results in an invalid
6792 type, type deduction fails. [Note: The equivalent substitution in
6793 exception specifications is done only when the function is instanti-
6794 ated, at which point a program is ill-formed if the substitution
6795 results in an invalid type.] */
6796
6797 static tree
6798 tsubst_function_type (tree t,
6799 tree args,
6800 tsubst_flags_t complain,
6801 tree in_decl)
6802 {
6803 tree return_type;
6804 tree arg_types;
6805 tree fntype;
6806
6807 /* The TYPE_CONTEXT is not used for function/method types. */
6808 gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
6809
6810 /* Substitute the return type. */
6811 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6812 if (return_type == error_mark_node)
6813 return error_mark_node;
6814 /* The standard does not presently indicate that creation of a
6815 function type with an invalid return type is a deduction failure.
6816 However, that is clearly analogous to creating an array of "void"
6817 or a reference to a reference. This is core issue #486. */
6818 if (TREE_CODE (return_type) == ARRAY_TYPE
6819 || TREE_CODE (return_type) == FUNCTION_TYPE)
6820 {
6821 if (complain & tf_error)
6822 {
6823 if (TREE_CODE (return_type) == ARRAY_TYPE)
6824 error ("function returning an array");
6825 else
6826 error ("function returning a function");
6827 }
6828 return error_mark_node;
6829 }
6830
6831 /* Substitute the argument types. */
6832 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
6833 complain, in_decl);
6834 if (arg_types == error_mark_node)
6835 return error_mark_node;
6836
6837 /* Construct a new type node and return it. */
6838 if (TREE_CODE (t) == FUNCTION_TYPE)
6839 fntype = build_function_type (return_type, arg_types);
6840 else
6841 {
6842 tree r = TREE_TYPE (TREE_VALUE (arg_types));
6843 if (! IS_AGGR_TYPE (r))
6844 {
6845 /* [temp.deduct]
6846
6847 Type deduction may fail for any of the following
6848 reasons:
6849
6850 -- Attempting to create "pointer to member of T" when T
6851 is not a class type. */
6852 if (complain & tf_error)
6853 error ("creating pointer to member function of non-class type %qT",
6854 r);
6855 return error_mark_node;
6856 }
6857
6858 fntype = build_method_type_directly (r, return_type,
6859 TREE_CHAIN (arg_types));
6860 }
6861 fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
6862 fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
6863
6864 return fntype;
6865 }
6866
6867 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE. Substitute the template
6868 ARGS into that specification, and return the substituted
6869 specification. If there is no specification, return NULL_TREE. */
6870
6871 static tree
6872 tsubst_exception_specification (tree fntype,
6873 tree args,
6874 tsubst_flags_t complain,
6875 tree in_decl)
6876 {
6877 tree specs;
6878 tree new_specs;
6879
6880 specs = TYPE_RAISES_EXCEPTIONS (fntype);
6881 new_specs = NULL_TREE;
6882 if (specs)
6883 {
6884 if (! TREE_VALUE (specs))
6885 new_specs = specs;
6886 else
6887 while (specs)
6888 {
6889 tree spec;
6890 spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
6891 if (spec == error_mark_node)
6892 return spec;
6893 new_specs = add_exception_specifier (new_specs, spec, complain);
6894 specs = TREE_CHAIN (specs);
6895 }
6896 }
6897 return new_specs;
6898 }
6899
6900 /* Substitute into the PARMS of a call-declarator. */
6901
6902 static tree
6903 tsubst_call_declarator_parms (tree parms,
6904 tree args,
6905 tsubst_flags_t complain,
6906 tree in_decl)
6907 {
6908 tree new_parms;
6909 tree type;
6910 tree defarg;
6911
6912 if (!parms || parms == void_list_node)
6913 return parms;
6914
6915 new_parms = tsubst_call_declarator_parms (TREE_CHAIN (parms),
6916 args, complain, in_decl);
6917
6918 /* Figure out the type of this parameter. */
6919 type = tsubst (TREE_VALUE (parms), args, complain, in_decl);
6920
6921 /* Figure out the default argument as well. Note that we use
6922 tsubst_expr since the default argument is really an expression. */
6923 defarg = tsubst_expr (TREE_PURPOSE (parms), args, complain, in_decl);
6924
6925 /* Chain this parameter on to the front of those we have already
6926 processed. We don't use hash_tree_cons because that function
6927 doesn't check TREE_PARMLIST. */
6928 new_parms = tree_cons (defarg, type, new_parms);
6929
6930 return new_parms;
6931 }
6932
6933 /* Take the tree structure T and replace template parameters used
6934 therein with the argument vector ARGS. IN_DECL is an associated
6935 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
6936 Issue error and warning messages under control of COMPLAIN. Note
6937 that we must be relatively non-tolerant of extensions here, in
6938 order to preserve conformance; if we allow substitutions that
6939 should not be allowed, we may allow argument deductions that should
6940 not succeed, and therefore report ambiguous overload situations
6941 where there are none. In theory, we could allow the substitution,
6942 but indicate that it should have failed, and allow our caller to
6943 make sure that the right thing happens, but we don't try to do this
6944 yet.
6945
6946 This function is used for dealing with types, decls and the like;
6947 for expressions, use tsubst_expr or tsubst_copy. */
6948
6949 static tree
6950 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
6951 {
6952 tree type, r;
6953
6954 if (t == NULL_TREE || t == error_mark_node
6955 || t == integer_type_node
6956 || t == void_type_node
6957 || t == char_type_node
6958 || t == unknown_type_node
6959 || TREE_CODE (t) == NAMESPACE_DECL)
6960 return t;
6961
6962 if (DECL_P (t))
6963 return tsubst_decl (t, args, complain);
6964
6965 if (TREE_CODE (t) == IDENTIFIER_NODE)
6966 type = IDENTIFIER_TYPE_VALUE (t);
6967 else
6968 type = TREE_TYPE (t);
6969
6970 gcc_assert (type != unknown_type_node);
6971
6972 if (type
6973 && TREE_CODE (t) != TYPENAME_TYPE
6974 && TREE_CODE (t) != IDENTIFIER_NODE
6975 && TREE_CODE (t) != FUNCTION_TYPE
6976 && TREE_CODE (t) != METHOD_TYPE)
6977 type = tsubst (type, args, complain, in_decl);
6978 if (type == error_mark_node)
6979 return error_mark_node;
6980
6981 switch (TREE_CODE (t))
6982 {
6983 case RECORD_TYPE:
6984 case UNION_TYPE:
6985 case ENUMERAL_TYPE:
6986 return tsubst_aggr_type (t, args, complain, in_decl,
6987 /*entering_scope=*/0);
6988
6989 case ERROR_MARK:
6990 case IDENTIFIER_NODE:
6991 case VOID_TYPE:
6992 case REAL_TYPE:
6993 case COMPLEX_TYPE:
6994 case VECTOR_TYPE:
6995 case BOOLEAN_TYPE:
6996 case INTEGER_CST:
6997 case REAL_CST:
6998 case STRING_CST:
6999 return t;
7000
7001 case INTEGER_TYPE:
7002 if (t == integer_type_node)
7003 return t;
7004
7005 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
7006 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
7007 return t;
7008
7009 {
7010 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
7011
7012 /* The array dimension behaves like a non-type template arg,
7013 in that we want to fold it as much as possible. */
7014 max = tsubst_template_arg (omax, args, complain, in_decl);
7015 max = fold_decl_constant_value (max);
7016
7017 if (integer_zerop (omax))
7018 {
7019 /* Still allow an explicit array of size zero. */
7020 if (pedantic)
7021 pedwarn ("creating array with size zero");
7022 }
7023 else if (integer_zerop (max)
7024 || (TREE_CODE (max) == INTEGER_CST
7025 && INT_CST_LT (max, integer_zero_node)))
7026 {
7027 /* [temp.deduct]
7028
7029 Type deduction may fail for any of the following
7030 reasons:
7031
7032 Attempting to create an array with a size that is
7033 zero or negative. */
7034 if (complain & tf_error)
7035 error ("creating array with size zero (%qE)", max);
7036
7037 return error_mark_node;
7038 }
7039
7040 return compute_array_index_type (NULL_TREE, max);
7041 }
7042
7043 case TEMPLATE_TYPE_PARM:
7044 case TEMPLATE_TEMPLATE_PARM:
7045 case BOUND_TEMPLATE_TEMPLATE_PARM:
7046 case TEMPLATE_PARM_INDEX:
7047 {
7048 int idx;
7049 int level;
7050 int levels;
7051 tree arg = NULL_TREE;
7052
7053 r = NULL_TREE;
7054
7055 gcc_assert (TREE_VEC_LENGTH (args) > 0);
7056 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
7057 || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
7058 || TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
7059 {
7060 idx = TEMPLATE_TYPE_IDX (t);
7061 level = TEMPLATE_TYPE_LEVEL (t);
7062 }
7063 else
7064 {
7065 idx = TEMPLATE_PARM_IDX (t);
7066 level = TEMPLATE_PARM_LEVEL (t);
7067 }
7068
7069 levels = TMPL_ARGS_DEPTH (args);
7070 if (level <= levels)
7071 arg = TMPL_ARG (args, level, idx);
7072
7073 if (arg == error_mark_node)
7074 return error_mark_node;
7075 else if (arg != NULL_TREE)
7076 {
7077 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
7078 {
7079 gcc_assert (TYPE_P (arg));
7080 return cp_build_qualified_type_real
7081 (arg, cp_type_quals (arg) | cp_type_quals (t),
7082 complain | tf_ignore_bad_quals);
7083 }
7084 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
7085 {
7086 /* We are processing a type constructed from a
7087 template template parameter. */
7088 tree argvec = tsubst (TYPE_TI_ARGS (t),
7089 args, complain, in_decl);
7090 if (argvec == error_mark_node)
7091 return error_mark_node;
7092
7093 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
7094 are resolving nested-types in the signature of a
7095 member function templates. Otherwise ARG is a
7096 TEMPLATE_DECL and is the real template to be
7097 instantiated. */
7098 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
7099 arg = TYPE_NAME (arg);
7100
7101 r = lookup_template_class (arg,
7102 argvec, in_decl,
7103 DECL_CONTEXT (arg),
7104 /*entering_scope=*/0,
7105 complain);
7106 return cp_build_qualified_type_real
7107 (r, TYPE_QUALS (t), complain);
7108 }
7109 else
7110 /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX. */
7111 return arg;
7112 }
7113
7114 if (level == 1)
7115 /* This can happen during the attempted tsubst'ing in
7116 unify. This means that we don't yet have any information
7117 about the template parameter in question. */
7118 return t;
7119
7120 /* If we get here, we must have been looking at a parm for a
7121 more deeply nested template. Make a new version of this
7122 template parameter, but with a lower level. */
7123 switch (TREE_CODE (t))
7124 {
7125 case TEMPLATE_TYPE_PARM:
7126 case TEMPLATE_TEMPLATE_PARM:
7127 case BOUND_TEMPLATE_TEMPLATE_PARM:
7128 if (cp_type_quals (t))
7129 {
7130 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
7131 r = cp_build_qualified_type_real
7132 (r, cp_type_quals (t),
7133 complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
7134 ? tf_ignore_bad_quals : 0));
7135 }
7136 else
7137 {
7138 r = copy_type (t);
7139 TEMPLATE_TYPE_PARM_INDEX (r)
7140 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
7141 r, levels);
7142 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
7143 TYPE_MAIN_VARIANT (r) = r;
7144 TYPE_POINTER_TO (r) = NULL_TREE;
7145 TYPE_REFERENCE_TO (r) = NULL_TREE;
7146
7147 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
7148 {
7149 tree argvec = tsubst (TYPE_TI_ARGS (t), args,
7150 complain, in_decl);
7151 if (argvec == error_mark_node)
7152 return error_mark_node;
7153
7154 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
7155 = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
7156 }
7157 }
7158 break;
7159
7160 case TEMPLATE_PARM_INDEX:
7161 r = reduce_template_parm_level (t, type, levels);
7162 break;
7163
7164 default:
7165 gcc_unreachable ();
7166 }
7167
7168 return r;
7169 }
7170
7171 case TREE_LIST:
7172 {
7173 tree purpose, value, chain;
7174
7175 if (t == void_list_node)
7176 return t;
7177
7178 purpose = TREE_PURPOSE (t);
7179 if (purpose)
7180 {
7181 purpose = tsubst (purpose, args, complain, in_decl);
7182 if (purpose == error_mark_node)
7183 return error_mark_node;
7184 }
7185 value = TREE_VALUE (t);
7186 if (value)
7187 {
7188 value = tsubst (value, args, complain, in_decl);
7189 if (value == error_mark_node)
7190 return error_mark_node;
7191 }
7192 chain = TREE_CHAIN (t);
7193 if (chain && chain != void_type_node)
7194 {
7195 chain = tsubst (chain, args, complain, in_decl);
7196 if (chain == error_mark_node)
7197 return error_mark_node;
7198 }
7199 if (purpose == TREE_PURPOSE (t)
7200 && value == TREE_VALUE (t)
7201 && chain == TREE_CHAIN (t))
7202 return t;
7203 return hash_tree_cons (purpose, value, chain);
7204 }
7205
7206 case TREE_BINFO:
7207 /* We should never be tsubsting a binfo. */
7208 gcc_unreachable ();
7209
7210 case TREE_VEC:
7211 /* A vector of template arguments. */
7212 gcc_assert (!type);
7213 return tsubst_template_args (t, args, complain, in_decl);
7214
7215 case POINTER_TYPE:
7216 case REFERENCE_TYPE:
7217 {
7218 enum tree_code code;
7219
7220 if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
7221 return t;
7222
7223 code = TREE_CODE (t);
7224
7225
7226 /* [temp.deduct]
7227
7228 Type deduction may fail for any of the following
7229 reasons:
7230
7231 -- Attempting to create a pointer to reference type.
7232 -- Attempting to create a reference to a reference type or
7233 a reference to void. */
7234 if (TREE_CODE (type) == REFERENCE_TYPE
7235 || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
7236 {
7237 static location_t last_loc;
7238
7239 /* We keep track of the last time we issued this error
7240 message to avoid spewing a ton of messages during a
7241 single bad template instantiation. */
7242 if (complain & tf_error
7243 #ifdef USE_MAPPED_LOCATION
7244 && last_loc != input_location
7245 #else
7246 && (last_loc.line != input_line
7247 || last_loc.file != input_filename)
7248 #endif
7249 )
7250 {
7251 if (TREE_CODE (type) == VOID_TYPE)
7252 error ("forming reference to void");
7253 else
7254 error ("forming %s to reference type %qT",
7255 (code == POINTER_TYPE) ? "pointer" : "reference",
7256 type);
7257 last_loc = input_location;
7258 }
7259
7260 return error_mark_node;
7261 }
7262 else if (code == POINTER_TYPE)
7263 {
7264 r = build_pointer_type (type);
7265 if (TREE_CODE (type) == METHOD_TYPE)
7266 r = build_ptrmemfunc_type (r);
7267 }
7268 else
7269 r = build_reference_type (type);
7270 r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7271
7272 if (r != error_mark_node)
7273 /* Will this ever be needed for TYPE_..._TO values? */
7274 layout_type (r);
7275
7276 return r;
7277 }
7278 case OFFSET_TYPE:
7279 {
7280 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
7281 if (r == error_mark_node || !IS_AGGR_TYPE (r))
7282 {
7283 /* [temp.deduct]
7284
7285 Type deduction may fail for any of the following
7286 reasons:
7287
7288 -- Attempting to create "pointer to member of T" when T
7289 is not a class type. */
7290 if (complain & tf_error)
7291 error ("creating pointer to member of non-class type %qT", r);
7292 return error_mark_node;
7293 }
7294 if (TREE_CODE (type) == REFERENCE_TYPE)
7295 {
7296 if (complain & tf_error)
7297 error ("creating pointer to member reference type %qT", type);
7298 return error_mark_node;
7299 }
7300 if (TREE_CODE (type) == VOID_TYPE)
7301 {
7302 if (complain & tf_error)
7303 error ("creating pointer to member of type void");
7304 return error_mark_node;
7305 }
7306 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
7307 if (TREE_CODE (type) == FUNCTION_TYPE)
7308 {
7309 /* The type of the implicit object parameter gets its
7310 cv-qualifiers from the FUNCTION_TYPE. */
7311 tree method_type;
7312 tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
7313 cp_type_quals (type));
7314 tree memptr;
7315 method_type = build_method_type_directly (this_type,
7316 TREE_TYPE (type),
7317 TYPE_ARG_TYPES (type));
7318 memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
7319 return cp_build_qualified_type_real (memptr, cp_type_quals (t),
7320 complain);
7321 }
7322 else
7323 return cp_build_qualified_type_real (build_ptrmem_type (r, type),
7324 TYPE_QUALS (t),
7325 complain);
7326 }
7327 case FUNCTION_TYPE:
7328 case METHOD_TYPE:
7329 {
7330 tree fntype;
7331 tree specs;
7332 fntype = tsubst_function_type (t, args, complain, in_decl);
7333 if (fntype == error_mark_node)
7334 return error_mark_node;
7335
7336 /* Substitute the exception specification. */
7337 specs = tsubst_exception_specification (t, args, complain,
7338 in_decl);
7339 if (specs)
7340 fntype = build_exception_variant (fntype, specs);
7341 return fntype;
7342 }
7343 case ARRAY_TYPE:
7344 {
7345 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
7346 if (domain == error_mark_node)
7347 return error_mark_node;
7348
7349 /* As an optimization, we avoid regenerating the array type if
7350 it will obviously be the same as T. */
7351 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
7352 return t;
7353
7354 /* These checks should match the ones in grokdeclarator.
7355
7356 [temp.deduct]
7357
7358 The deduction may fail for any of the following reasons:
7359
7360 -- Attempting to create an array with an element type that
7361 is void, a function type, or a reference type, or [DR337]
7362 an abstract class type. */
7363 if (TREE_CODE (type) == VOID_TYPE
7364 || TREE_CODE (type) == FUNCTION_TYPE
7365 || TREE_CODE (type) == REFERENCE_TYPE)
7366 {
7367 if (complain & tf_error)
7368 error ("creating array of %qT", type);
7369 return error_mark_node;
7370 }
7371 if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
7372 {
7373 if (complain & tf_error)
7374 error ("creating array of %qT, which is an abstract class type",
7375 type);
7376 return error_mark_node;
7377 }
7378
7379 r = build_cplus_array_type (type, domain);
7380 return r;
7381 }
7382
7383 case PLUS_EXPR:
7384 case MINUS_EXPR:
7385 {
7386 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7387 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
7388
7389 if (e1 == error_mark_node || e2 == error_mark_node)
7390 return error_mark_node;
7391
7392 return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
7393 }
7394
7395 case NEGATE_EXPR:
7396 case NOP_EXPR:
7397 {
7398 tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7399 if (e == error_mark_node)
7400 return error_mark_node;
7401
7402 return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
7403 }
7404
7405 case TYPENAME_TYPE:
7406 {
7407 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
7408 in_decl, /*entering_scope=*/1);
7409 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
7410 complain, in_decl);
7411
7412 if (ctx == error_mark_node || f == error_mark_node)
7413 return error_mark_node;
7414
7415 if (!IS_AGGR_TYPE (ctx))
7416 {
7417 if (complain & tf_error)
7418 error ("%qT is not a class, struct, or union type", ctx);
7419 return error_mark_node;
7420 }
7421 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
7422 {
7423 /* Normally, make_typename_type does not require that the CTX
7424 have complete type in order to allow things like:
7425
7426 template <class T> struct S { typename S<T>::X Y; };
7427
7428 But, such constructs have already been resolved by this
7429 point, so here CTX really should have complete type, unless
7430 it's a partial instantiation. */
7431 ctx = complete_type (ctx);
7432 if (!COMPLETE_TYPE_P (ctx))
7433 {
7434 if (complain & tf_error)
7435 cxx_incomplete_type_error (NULL_TREE, ctx);
7436 return error_mark_node;
7437 }
7438 }
7439
7440 f = make_typename_type (ctx, f, typename_type,
7441 (complain & tf_error) | tf_keep_type_decl);
7442 if (f == error_mark_node)
7443 return f;
7444 if (TREE_CODE (f) == TYPE_DECL)
7445 {
7446 complain |= tf_ignore_bad_quals;
7447 f = TREE_TYPE (f);
7448 }
7449
7450 if (TREE_CODE (f) != TYPENAME_TYPE)
7451 {
7452 if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
7453 error ("%qT resolves to %qT, which is not an enumeration type",
7454 t, f);
7455 else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
7456 error ("%qT resolves to %qT, which is is not a class type",
7457 t, f);
7458 }
7459
7460 return cp_build_qualified_type_real
7461 (f, cp_type_quals (f) | cp_type_quals (t), complain);
7462 }
7463
7464 case UNBOUND_CLASS_TEMPLATE:
7465 {
7466 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
7467 in_decl, /*entering_scope=*/1);
7468 tree name = TYPE_IDENTIFIER (t);
7469 tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
7470
7471 if (ctx == error_mark_node || name == error_mark_node)
7472 return error_mark_node;
7473
7474 if (parm_list)
7475 parm_list = tsubst_template_parms (parm_list, args, complain);
7476 return make_unbound_class_template (ctx, name, parm_list, complain);
7477 }
7478
7479 case INDIRECT_REF:
7480 case ADDR_EXPR:
7481 case CALL_EXPR:
7482 gcc_unreachable ();
7483
7484 case ARRAY_REF:
7485 {
7486 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7487 tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl);
7488 if (e1 == error_mark_node || e2 == error_mark_node)
7489 return error_mark_node;
7490
7491 return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
7492 }
7493
7494 case SCOPE_REF:
7495 {
7496 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7497 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
7498 if (e1 == error_mark_node || e2 == error_mark_node)
7499 return error_mark_node;
7500
7501 return build_nt (TREE_CODE (t), e1, e2);
7502 }
7503
7504 case TYPEOF_TYPE:
7505 {
7506 tree type;
7507
7508 type = finish_typeof (tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
7509 complain, in_decl));
7510 return cp_build_qualified_type_real (type,
7511 cp_type_quals (t)
7512 | cp_type_quals (type),
7513 complain);
7514 }
7515
7516 default:
7517 sorry ("use of %qs in template",
7518 tree_code_name [(int) TREE_CODE (t)]);
7519 return error_mark_node;
7520 }
7521 }
7522
7523 /* Like tsubst_expr for a BASELINK. OBJECT_TYPE, if non-NULL, is the
7524 type of the expression on the left-hand side of the "." or "->"
7525 operator. */
7526
7527 static tree
7528 tsubst_baselink (tree baselink, tree object_type,
7529 tree args, tsubst_flags_t complain, tree in_decl)
7530 {
7531 tree name;
7532 tree qualifying_scope;
7533 tree fns;
7534 tree template_args = 0;
7535 bool template_id_p = false;
7536
7537 /* A baselink indicates a function from a base class. The
7538 BASELINK_ACCESS_BINFO and BASELINK_BINFO are going to have
7539 non-dependent types; otherwise, the lookup could not have
7540 succeeded. However, they may indicate bases of the template
7541 class, rather than the instantiated class.
7542
7543 In addition, lookups that were not ambiguous before may be
7544 ambiguous now. Therefore, we perform the lookup again. */
7545 qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
7546 fns = BASELINK_FUNCTIONS (baselink);
7547 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7548 {
7549 template_id_p = true;
7550 template_args = TREE_OPERAND (fns, 1);
7551 fns = TREE_OPERAND (fns, 0);
7552 if (template_args)
7553 template_args = tsubst_template_args (template_args, args,
7554 complain, in_decl);
7555 }
7556 name = DECL_NAME (get_first_fn (fns));
7557 baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
7558
7559 /* If lookup found a single function, mark it as used at this
7560 point. (If it lookup found multiple functions the one selected
7561 later by overload resolution will be marked as used at that
7562 point.) */
7563 if (BASELINK_P (baselink))
7564 fns = BASELINK_FUNCTIONS (baselink);
7565 if (!template_id_p && !really_overloaded_fn (fns))
7566 mark_used (OVL_CURRENT (fns));
7567
7568 /* Add back the template arguments, if present. */
7569 if (BASELINK_P (baselink) && template_id_p)
7570 BASELINK_FUNCTIONS (baselink)
7571 = build_nt (TEMPLATE_ID_EXPR,
7572 BASELINK_FUNCTIONS (baselink),
7573 template_args);
7574
7575 if (!object_type)
7576 object_type = current_class_type;
7577 return adjust_result_of_qualified_name_lookup (baselink,
7578 qualifying_scope,
7579 object_type);
7580 }
7581
7582 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID. DONE is
7583 true if the qualified-id will be a postfix-expression in-and-of
7584 itself; false if more of the postfix-expression follows the
7585 QUALIFIED_ID. ADDRESS_P is true if the qualified-id is the operand
7586 of "&". */
7587
7588 static tree
7589 tsubst_qualified_id (tree qualified_id, tree args,
7590 tsubst_flags_t complain, tree in_decl,
7591 bool done, bool address_p)
7592 {
7593 tree expr;
7594 tree scope;
7595 tree name;
7596 bool is_template;
7597 tree template_args;
7598
7599 gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
7600
7601 /* Figure out what name to look up. */
7602 name = TREE_OPERAND (qualified_id, 1);
7603 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
7604 {
7605 is_template = true;
7606 template_args = TREE_OPERAND (name, 1);
7607 if (template_args)
7608 template_args = tsubst_template_args (template_args, args,
7609 complain, in_decl);
7610 name = TREE_OPERAND (name, 0);
7611 }
7612 else
7613 {
7614 is_template = false;
7615 template_args = NULL_TREE;
7616 }
7617
7618 /* Substitute into the qualifying scope. When there are no ARGS, we
7619 are just trying to simplify a non-dependent expression. In that
7620 case the qualifying scope may be dependent, and, in any case,
7621 substituting will not help. */
7622 scope = TREE_OPERAND (qualified_id, 0);
7623 if (args)
7624 {
7625 scope = tsubst (scope, args, complain, in_decl);
7626 expr = tsubst_copy (name, args, complain, in_decl);
7627 }
7628 else
7629 expr = name;
7630
7631 if (dependent_type_p (scope))
7632 return build_nt (SCOPE_REF, scope, expr);
7633
7634 if (!BASELINK_P (name) && !DECL_P (expr))
7635 {
7636 expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
7637 if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
7638 ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
7639 {
7640 if (complain & tf_error)
7641 {
7642 error ("dependent-name %qE is parsed as a non-type, but "
7643 "instantiation yields a type", qualified_id);
7644 inform ("say %<typename %E%> if a type is meant", qualified_id);
7645 }
7646 return error_mark_node;
7647 }
7648 }
7649
7650 if (DECL_P (expr))
7651 {
7652 check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
7653 scope);
7654 /* Remember that there was a reference to this entity. */
7655 mark_used (expr);
7656 }
7657
7658 if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
7659 {
7660 if (complain & tf_error)
7661 qualified_name_lookup_error (scope,
7662 TREE_OPERAND (qualified_id, 1),
7663 expr);
7664 return error_mark_node;
7665 }
7666
7667 if (is_template)
7668 expr = lookup_template_function (expr, template_args);
7669
7670 if (expr == error_mark_node && complain & tf_error)
7671 qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
7672 expr);
7673 else if (TYPE_P (scope))
7674 {
7675 expr = (adjust_result_of_qualified_name_lookup
7676 (expr, scope, current_class_type));
7677 expr = finish_qualified_id_expr (scope, expr, done, address_p);
7678 }
7679
7680 expr = convert_from_reference (expr);
7681
7682 return expr;
7683 }
7684
7685 /* Like tsubst, but deals with expressions. This function just replaces
7686 template parms; to finish processing the resultant expression, use
7687 tsubst_expr. */
7688
7689 static tree
7690 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7691 {
7692 enum tree_code code;
7693 tree r;
7694
7695 if (t == NULL_TREE || t == error_mark_node)
7696 return t;
7697
7698 code = TREE_CODE (t);
7699
7700 switch (code)
7701 {
7702 case PARM_DECL:
7703 r = retrieve_local_specialization (t);
7704 gcc_assert (r != NULL);
7705 mark_used (r);
7706 return r;
7707
7708 case CONST_DECL:
7709 {
7710 tree enum_type;
7711 tree v;
7712
7713 if (DECL_TEMPLATE_PARM_P (t))
7714 return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
7715 /* There is no need to substitute into namespace-scope
7716 enumerators. */
7717 if (DECL_NAMESPACE_SCOPE_P (t))
7718 return t;
7719 /* If ARGS is NULL, then T is known to be non-dependent. */
7720 if (args == NULL_TREE)
7721 return integral_constant_value (t);
7722
7723 /* Unfortunately, we cannot just call lookup_name here.
7724 Consider:
7725
7726 template <int I> int f() {
7727 enum E { a = I };
7728 struct S { void g() { E e = a; } };
7729 };
7730
7731 When we instantiate f<7>::S::g(), say, lookup_name is not
7732 clever enough to find f<7>::a. */
7733 enum_type
7734 = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
7735 /*entering_scope=*/0);
7736
7737 for (v = TYPE_VALUES (enum_type);
7738 v != NULL_TREE;
7739 v = TREE_CHAIN (v))
7740 if (TREE_PURPOSE (v) == DECL_NAME (t))
7741 return TREE_VALUE (v);
7742
7743 /* We didn't find the name. That should never happen; if
7744 name-lookup found it during preliminary parsing, we
7745 should find it again here during instantiation. */
7746 gcc_unreachable ();
7747 }
7748 return t;
7749
7750 case FIELD_DECL:
7751 if (DECL_CONTEXT (t))
7752 {
7753 tree ctx;
7754
7755 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
7756 /*entering_scope=*/1);
7757 if (ctx != DECL_CONTEXT (t))
7758 {
7759 tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
7760 if (!r)
7761 {
7762 if (complain & tf_error)
7763 error ("using invalid field %qD", t);
7764 return error_mark_node;
7765 }
7766 return r;
7767 }
7768 }
7769
7770 return t;
7771
7772 case VAR_DECL:
7773 case FUNCTION_DECL:
7774 if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
7775 || local_variable_p (t))
7776 t = tsubst (t, args, complain, in_decl);
7777 mark_used (t);
7778 return t;
7779
7780 case BASELINK:
7781 return tsubst_baselink (t, current_class_type, args, complain, in_decl);
7782
7783 case TEMPLATE_DECL:
7784 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7785 return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
7786 args, complain, in_decl);
7787 else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
7788 return tsubst (t, args, complain, in_decl);
7789 else if (DECL_CLASS_SCOPE_P (t)
7790 && uses_template_parms (DECL_CONTEXT (t)))
7791 {
7792 /* Template template argument like the following example need
7793 special treatment:
7794
7795 template <template <class> class TT> struct C {};
7796 template <class T> struct D {
7797 template <class U> struct E {};
7798 C<E> c; // #1
7799 };
7800 D<int> d; // #2
7801
7802 We are processing the template argument `E' in #1 for
7803 the template instantiation #2. Originally, `E' is a
7804 TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT. Now we
7805 have to substitute this with one having context `D<int>'. */
7806
7807 tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
7808 return lookup_field (context, DECL_NAME(t), 0, false);
7809 }
7810 else
7811 /* Ordinary template template argument. */
7812 return t;
7813
7814 case CAST_EXPR:
7815 case REINTERPRET_CAST_EXPR:
7816 case CONST_CAST_EXPR:
7817 case STATIC_CAST_EXPR:
7818 case DYNAMIC_CAST_EXPR:
7819 case NOP_EXPR:
7820 return build1
7821 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7822 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
7823
7824 case INDIRECT_REF:
7825 case NEGATE_EXPR:
7826 case TRUTH_NOT_EXPR:
7827 case BIT_NOT_EXPR:
7828 case ADDR_EXPR:
7829 case UNARY_PLUS_EXPR: /* Unary + */
7830 case SIZEOF_EXPR:
7831 case ALIGNOF_EXPR:
7832 case ARROW_EXPR:
7833 case THROW_EXPR:
7834 case TYPEID_EXPR:
7835 case REALPART_EXPR:
7836 case IMAGPART_EXPR:
7837 return build1
7838 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7839 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
7840
7841 case COMPONENT_REF:
7842 {
7843 tree object;
7844 tree name;
7845
7846 object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
7847 name = TREE_OPERAND (t, 1);
7848 if (TREE_CODE (name) == BIT_NOT_EXPR)
7849 {
7850 name = tsubst_copy (TREE_OPERAND (name, 0), args,
7851 complain, in_decl);
7852 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7853 }
7854 else if (TREE_CODE (name) == SCOPE_REF
7855 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
7856 {
7857 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
7858 complain, in_decl);
7859 name = TREE_OPERAND (name, 1);
7860 name = tsubst_copy (TREE_OPERAND (name, 0), args,
7861 complain, in_decl);
7862 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7863 name = build_nt (SCOPE_REF, base, name);
7864 }
7865 else if (TREE_CODE (name) == BASELINK)
7866 name = tsubst_baselink (name,
7867 non_reference (TREE_TYPE (object)),
7868 args, complain,
7869 in_decl);
7870 else
7871 name = tsubst_copy (name, args, complain, in_decl);
7872 return build_nt (COMPONENT_REF, object, name, NULL_TREE);
7873 }
7874
7875 case PLUS_EXPR:
7876 case MINUS_EXPR:
7877 case MULT_EXPR:
7878 case TRUNC_DIV_EXPR:
7879 case CEIL_DIV_EXPR:
7880 case FLOOR_DIV_EXPR:
7881 case ROUND_DIV_EXPR:
7882 case EXACT_DIV_EXPR:
7883 case BIT_AND_EXPR:
7884 case BIT_IOR_EXPR:
7885 case BIT_XOR_EXPR:
7886 case TRUNC_MOD_EXPR:
7887 case FLOOR_MOD_EXPR:
7888 case TRUTH_ANDIF_EXPR:
7889 case TRUTH_ORIF_EXPR:
7890 case TRUTH_AND_EXPR:
7891 case TRUTH_OR_EXPR:
7892 case RSHIFT_EXPR:
7893 case LSHIFT_EXPR:
7894 case RROTATE_EXPR:
7895 case LROTATE_EXPR:
7896 case EQ_EXPR:
7897 case NE_EXPR:
7898 case MAX_EXPR:
7899 case MIN_EXPR:
7900 case LE_EXPR:
7901 case GE_EXPR:
7902 case LT_EXPR:
7903 case GT_EXPR:
7904 case COMPOUND_EXPR:
7905 case SCOPE_REF:
7906 case DOTSTAR_EXPR:
7907 case MEMBER_REF:
7908 case PREDECREMENT_EXPR:
7909 case PREINCREMENT_EXPR:
7910 case POSTDECREMENT_EXPR:
7911 case POSTINCREMENT_EXPR:
7912 return build_nt
7913 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7914 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
7915
7916 case ARRAY_REF:
7917 return build_nt
7918 (ARRAY_REF,
7919 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7920 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7921 NULL_TREE, NULL_TREE);
7922
7923 case CALL_EXPR:
7924 return build_nt (code,
7925 tsubst_copy (TREE_OPERAND (t, 0), args,
7926 complain, in_decl),
7927 tsubst_copy (TREE_OPERAND (t, 1), args, complain,
7928 in_decl),
7929 NULL_TREE);
7930
7931 case COND_EXPR:
7932 case MODOP_EXPR:
7933 case PSEUDO_DTOR_EXPR:
7934 {
7935 r = build_nt
7936 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7937 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7938 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
7939 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
7940 return r;
7941 }
7942
7943 case NEW_EXPR:
7944 {
7945 r = build_nt
7946 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7947 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7948 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
7949 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
7950 return r;
7951 }
7952
7953 case DELETE_EXPR:
7954 {
7955 r = build_nt
7956 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7957 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
7958 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
7959 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
7960 return r;
7961 }
7962
7963 case TEMPLATE_ID_EXPR:
7964 {
7965 /* Substituted template arguments */
7966 tree fn = TREE_OPERAND (t, 0);
7967 tree targs = TREE_OPERAND (t, 1);
7968
7969 fn = tsubst_copy (fn, args, complain, in_decl);
7970 if (targs)
7971 targs = tsubst_template_args (targs, args, complain, in_decl);
7972
7973 return lookup_template_function (fn, targs);
7974 }
7975
7976 case TREE_LIST:
7977 {
7978 tree purpose, value, chain;
7979
7980 if (t == void_list_node)
7981 return t;
7982
7983 purpose = TREE_PURPOSE (t);
7984 if (purpose)
7985 purpose = tsubst_copy (purpose, args, complain, in_decl);
7986 value = TREE_VALUE (t);
7987 if (value)
7988 value = tsubst_copy (value, args, complain, in_decl);
7989 chain = TREE_CHAIN (t);
7990 if (chain && chain != void_type_node)
7991 chain = tsubst_copy (chain, args, complain, in_decl);
7992 if (purpose == TREE_PURPOSE (t)
7993 && value == TREE_VALUE (t)
7994 && chain == TREE_CHAIN (t))
7995 return t;
7996 return tree_cons (purpose, value, chain);
7997 }
7998
7999 case RECORD_TYPE:
8000 case UNION_TYPE:
8001 case ENUMERAL_TYPE:
8002 case INTEGER_TYPE:
8003 case TEMPLATE_TYPE_PARM:
8004 case TEMPLATE_TEMPLATE_PARM:
8005 case BOUND_TEMPLATE_TEMPLATE_PARM:
8006 case TEMPLATE_PARM_INDEX:
8007 case POINTER_TYPE:
8008 case REFERENCE_TYPE:
8009 case OFFSET_TYPE:
8010 case FUNCTION_TYPE:
8011 case METHOD_TYPE:
8012 case ARRAY_TYPE:
8013 case TYPENAME_TYPE:
8014 case UNBOUND_CLASS_TEMPLATE:
8015 case TYPEOF_TYPE:
8016 case TYPE_DECL:
8017 return tsubst (t, args, complain, in_decl);
8018
8019 case IDENTIFIER_NODE:
8020 if (IDENTIFIER_TYPENAME_P (t))
8021 {
8022 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8023 return mangle_conv_op_name_for_type (new_type);
8024 }
8025 else
8026 return t;
8027
8028 case CONSTRUCTOR:
8029 /* This is handled by tsubst_copy_and_build. */
8030 gcc_unreachable ();
8031
8032 case VA_ARG_EXPR:
8033 return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
8034 in_decl),
8035 tsubst (TREE_TYPE (t), args, complain, in_decl));
8036
8037 case CLEANUP_POINT_EXPR:
8038 /* We shouldn't have built any of these during initial template
8039 generation. Instead, they should be built during instantiation
8040 in response to the saved STMT_IS_FULL_EXPR_P setting. */
8041 gcc_unreachable ();
8042
8043 default:
8044 return t;
8045 }
8046 }
8047
8048 /* Like tsubst_copy for expressions, etc. but also does semantic
8049 processing. */
8050
8051 static tree
8052 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8053 {
8054 tree stmt, tmp;
8055
8056 if (t == NULL_TREE || t == error_mark_node)
8057 return t;
8058
8059 if (EXPR_HAS_LOCATION (t))
8060 input_location = EXPR_LOCATION (t);
8061 if (STATEMENT_CODE_P (TREE_CODE (t)))
8062 current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
8063
8064 switch (TREE_CODE (t))
8065 {
8066 case STATEMENT_LIST:
8067 {
8068 tree_stmt_iterator i;
8069 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
8070 tsubst_expr (tsi_stmt (i), args, complain, in_decl);
8071 break;
8072 }
8073
8074 case CTOR_INITIALIZER:
8075 finish_mem_initializers (tsubst_initializer_list
8076 (TREE_OPERAND (t, 0), args));
8077 break;
8078
8079 case RETURN_EXPR:
8080 finish_return_stmt (tsubst_expr (TREE_OPERAND (t, 0),
8081 args, complain, in_decl));
8082 break;
8083
8084 case EXPR_STMT:
8085 tmp = tsubst_expr (EXPR_STMT_EXPR (t), args, complain, in_decl);
8086 if (EXPR_STMT_STMT_EXPR_RESULT (t))
8087 finish_stmt_expr_expr (tmp, cur_stmt_expr);
8088 else
8089 finish_expr_stmt (tmp);
8090 break;
8091
8092 case USING_STMT:
8093 do_using_directive (tsubst_expr (USING_STMT_NAMESPACE (t),
8094 args, complain, in_decl));
8095 break;
8096
8097 case DECL_EXPR:
8098 {
8099 tree decl;
8100 tree init;
8101
8102 decl = DECL_EXPR_DECL (t);
8103 if (TREE_CODE (decl) == LABEL_DECL)
8104 finish_label_decl (DECL_NAME (decl));
8105 else if (TREE_CODE (decl) == USING_DECL)
8106 {
8107 tree scope = USING_DECL_SCOPE (decl);
8108 tree name = DECL_NAME (decl);
8109 tree decl;
8110
8111 scope = tsubst_expr (scope, args, complain, in_decl);
8112 decl = lookup_qualified_name (scope, name,
8113 /*is_type_p=*/false,
8114 /*complain=*/false);
8115 if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
8116 qualified_name_lookup_error (scope, name, decl);
8117 else
8118 do_local_using_decl (decl, scope, name);
8119 }
8120 else
8121 {
8122 init = DECL_INITIAL (decl);
8123 decl = tsubst (decl, args, complain, in_decl);
8124 if (decl != error_mark_node)
8125 {
8126 if (init)
8127 DECL_INITIAL (decl) = error_mark_node;
8128 /* By marking the declaration as instantiated, we avoid
8129 trying to instantiate it. Since instantiate_decl can't
8130 handle local variables, and since we've already done
8131 all that needs to be done, that's the right thing to
8132 do. */
8133 if (TREE_CODE (decl) == VAR_DECL)
8134 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
8135 if (TREE_CODE (decl) == VAR_DECL
8136 && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
8137 /* Anonymous aggregates are a special case. */
8138 finish_anon_union (decl);
8139 else
8140 {
8141 maybe_push_decl (decl);
8142 if (TREE_CODE (decl) == VAR_DECL
8143 && DECL_PRETTY_FUNCTION_P (decl))
8144 {
8145 /* For __PRETTY_FUNCTION__ we have to adjust the
8146 initializer. */
8147 const char *const name
8148 = cxx_printable_name (current_function_decl, 2);
8149 init = cp_fname_init (name, &TREE_TYPE (decl));
8150 }
8151 else
8152 init = tsubst_expr (init, args, complain, in_decl);
8153 cp_finish_decl (decl, init, NULL_TREE, 0);
8154 }
8155 }
8156 }
8157
8158 /* A DECL_EXPR can also be used as an expression, in the condition
8159 clause of an if/for/while construct. */
8160 return decl;
8161 }
8162
8163 case FOR_STMT:
8164 stmt = begin_for_stmt ();
8165 tsubst_expr (FOR_INIT_STMT (t), args, complain, in_decl);
8166 finish_for_init_stmt (stmt);
8167 tmp = tsubst_expr (FOR_COND (t), args, complain, in_decl);
8168 finish_for_cond (tmp, stmt);
8169 tmp = tsubst_expr (FOR_EXPR (t), args, complain, in_decl);
8170 finish_for_expr (tmp, stmt);
8171 tsubst_expr (FOR_BODY (t), args, complain, in_decl);
8172 finish_for_stmt (stmt);
8173 break;
8174
8175 case WHILE_STMT:
8176 stmt = begin_while_stmt ();
8177 tmp = tsubst_expr (WHILE_COND (t), args, complain, in_decl);
8178 finish_while_stmt_cond (tmp, stmt);
8179 tsubst_expr (WHILE_BODY (t), args, complain, in_decl);
8180 finish_while_stmt (stmt);
8181 break;
8182
8183 case DO_STMT:
8184 stmt = begin_do_stmt ();
8185 tsubst_expr (DO_BODY (t), args, complain, in_decl);
8186 finish_do_body (stmt);
8187 tmp = tsubst_expr (DO_COND (t), args, complain, in_decl);
8188 finish_do_stmt (tmp, stmt);
8189 break;
8190
8191 case IF_STMT:
8192 stmt = begin_if_stmt ();
8193 tmp = tsubst_expr (IF_COND (t), args, complain, in_decl);
8194 finish_if_stmt_cond (tmp, stmt);
8195 tsubst_expr (THEN_CLAUSE (t), args, complain, in_decl);
8196 finish_then_clause (stmt);
8197
8198 if (ELSE_CLAUSE (t))
8199 {
8200 begin_else_clause (stmt);
8201 tsubst_expr (ELSE_CLAUSE (t), args, complain, in_decl);
8202 finish_else_clause (stmt);
8203 }
8204
8205 finish_if_stmt (stmt);
8206 break;
8207
8208 case BIND_EXPR:
8209 if (BIND_EXPR_BODY_BLOCK (t))
8210 stmt = begin_function_body ();
8211 else
8212 stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
8213 ? BCS_TRY_BLOCK : 0);
8214
8215 tsubst_expr (BIND_EXPR_BODY (t), args, complain, in_decl);
8216
8217 if (BIND_EXPR_BODY_BLOCK (t))
8218 finish_function_body (stmt);
8219 else
8220 finish_compound_stmt (stmt);
8221 break;
8222
8223 case BREAK_STMT:
8224 finish_break_stmt ();
8225 break;
8226
8227 case CONTINUE_STMT:
8228 finish_continue_stmt ();
8229 break;
8230
8231 case SWITCH_STMT:
8232 stmt = begin_switch_stmt ();
8233 tmp = tsubst_expr (SWITCH_STMT_COND (t), args, complain, in_decl);
8234 finish_switch_cond (tmp, stmt);
8235 tsubst_expr (SWITCH_STMT_BODY (t), args, complain, in_decl);
8236 finish_switch_stmt (stmt);
8237 break;
8238
8239 case CASE_LABEL_EXPR:
8240 finish_case_label (tsubst_expr (CASE_LOW (t), args, complain, in_decl),
8241 tsubst_expr (CASE_HIGH (t), args, complain,
8242 in_decl));
8243 break;
8244
8245 case LABEL_EXPR:
8246 finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
8247 break;
8248
8249 case GOTO_EXPR:
8250 tmp = GOTO_DESTINATION (t);
8251 if (TREE_CODE (tmp) != LABEL_DECL)
8252 /* Computed goto's must be tsubst'd into. On the other hand,
8253 non-computed gotos must not be; the identifier in question
8254 will have no binding. */
8255 tmp = tsubst_expr (tmp, args, complain, in_decl);
8256 else
8257 tmp = DECL_NAME (tmp);
8258 finish_goto_stmt (tmp);
8259 break;
8260
8261 case ASM_EXPR:
8262 tmp = finish_asm_stmt
8263 (ASM_VOLATILE_P (t),
8264 tsubst_expr (ASM_STRING (t), args, complain, in_decl),
8265 tsubst_expr (ASM_OUTPUTS (t), args, complain, in_decl),
8266 tsubst_expr (ASM_INPUTS (t), args, complain, in_decl),
8267 tsubst_expr (ASM_CLOBBERS (t), args, complain, in_decl));
8268 {
8269 tree asm_expr = tmp;
8270 if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
8271 asm_expr = TREE_OPERAND (asm_expr, 0);
8272 ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
8273 }
8274 break;
8275
8276 case TRY_BLOCK:
8277 if (CLEANUP_P (t))
8278 {
8279 stmt = begin_try_block ();
8280 tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
8281 finish_cleanup_try_block (stmt);
8282 finish_cleanup (tsubst_expr (TRY_HANDLERS (t), args,
8283 complain, in_decl),
8284 stmt);
8285 }
8286 else
8287 {
8288 if (FN_TRY_BLOCK_P (t))
8289 stmt = begin_function_try_block ();
8290 else
8291 stmt = begin_try_block ();
8292
8293 tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
8294
8295 if (FN_TRY_BLOCK_P (t))
8296 finish_function_try_block (stmt);
8297 else
8298 finish_try_block (stmt);
8299
8300 tsubst_expr (TRY_HANDLERS (t), args, complain, in_decl);
8301 if (FN_TRY_BLOCK_P (t))
8302 finish_function_handler_sequence (stmt);
8303 else
8304 finish_handler_sequence (stmt);
8305 }
8306 break;
8307
8308 case HANDLER:
8309 {
8310 tree decl;
8311
8312 stmt = begin_handler ();
8313 if (HANDLER_PARMS (t))
8314 {
8315 decl = HANDLER_PARMS (t);
8316 decl = tsubst (decl, args, complain, in_decl);
8317 /* Prevent instantiate_decl from trying to instantiate
8318 this variable. We've already done all that needs to be
8319 done. */
8320 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
8321 }
8322 else
8323 decl = NULL_TREE;
8324 finish_handler_parms (decl, stmt);
8325 tsubst_expr (HANDLER_BODY (t), args, complain, in_decl);
8326 finish_handler (stmt);
8327 }
8328 break;
8329
8330 case TAG_DEFN:
8331 tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
8332 break;
8333
8334 default:
8335 gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
8336
8337 return tsubst_copy_and_build (t, args, complain, in_decl,
8338 /*function_p=*/false);
8339 }
8340
8341 return NULL_TREE;
8342 }
8343
8344 /* T is a postfix-expression that is not being used in a function
8345 call. Return the substituted version of T. */
8346
8347 static tree
8348 tsubst_non_call_postfix_expression (tree t, tree args,
8349 tsubst_flags_t complain,
8350 tree in_decl)
8351 {
8352 if (TREE_CODE (t) == SCOPE_REF)
8353 t = tsubst_qualified_id (t, args, complain, in_decl,
8354 /*done=*/false, /*address_p=*/false);
8355 else
8356 t = tsubst_copy_and_build (t, args, complain, in_decl,
8357 /*function_p=*/false);
8358
8359 return t;
8360 }
8361
8362 /* Like tsubst but deals with expressions and performs semantic
8363 analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
8364
8365 tree
8366 tsubst_copy_and_build (tree t,
8367 tree args,
8368 tsubst_flags_t complain,
8369 tree in_decl,
8370 bool function_p)
8371 {
8372 #define RECUR(NODE) \
8373 tsubst_copy_and_build (NODE, args, complain, in_decl, /*function_p=*/false)
8374
8375 tree op1;
8376
8377 if (t == NULL_TREE || t == error_mark_node)
8378 return t;
8379
8380 switch (TREE_CODE (t))
8381 {
8382 case USING_DECL:
8383 t = DECL_NAME (t);
8384 /* Fall through. */
8385 case IDENTIFIER_NODE:
8386 {
8387 tree decl;
8388 cp_id_kind idk;
8389 tree qualifying_class;
8390 bool non_integral_constant_expression_p;
8391 const char *error_msg;
8392
8393 if (IDENTIFIER_TYPENAME_P (t))
8394 {
8395 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8396 t = mangle_conv_op_name_for_type (new_type);
8397 }
8398
8399 /* Look up the name. */
8400 decl = lookup_name (t, 0);
8401
8402 /* By convention, expressions use ERROR_MARK_NODE to indicate
8403 failure, not NULL_TREE. */
8404 if (decl == NULL_TREE)
8405 decl = error_mark_node;
8406
8407 decl = finish_id_expression (t, decl, NULL_TREE,
8408 &idk,
8409 &qualifying_class,
8410 /*integral_constant_expression_p=*/false,
8411 /*allow_non_integral_constant_expression_p=*/false,
8412 &non_integral_constant_expression_p,
8413 &error_msg);
8414 if (error_msg)
8415 error (error_msg);
8416 if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
8417 decl = unqualified_name_lookup_error (decl);
8418 return decl;
8419 }
8420
8421 case TEMPLATE_ID_EXPR:
8422 {
8423 tree object;
8424 tree template = RECUR (TREE_OPERAND (t, 0));
8425 tree targs = TREE_OPERAND (t, 1);
8426
8427 if (targs)
8428 targs = tsubst_template_args (targs, args, complain, in_decl);
8429
8430 if (TREE_CODE (template) == COMPONENT_REF)
8431 {
8432 object = TREE_OPERAND (template, 0);
8433 template = TREE_OPERAND (template, 1);
8434 }
8435 else
8436 object = NULL_TREE;
8437 template = lookup_template_function (template, targs);
8438
8439 if (object)
8440 return build3 (COMPONENT_REF, TREE_TYPE (template),
8441 object, template, NULL_TREE);
8442 else
8443 return template;
8444 }
8445
8446 case INDIRECT_REF:
8447 {
8448 tree r = RECUR (TREE_OPERAND (t, 0));
8449
8450 if (REFERENCE_REF_P (t))
8451 {
8452 /* A type conversion to reference type will be enclosed in
8453 such an indirect ref, but the substitution of the cast
8454 will have also added such an indirect ref. */
8455 if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
8456 r = convert_from_reference (r);
8457 }
8458 else
8459 r = build_x_indirect_ref (r, "unary *");
8460 return r;
8461 }
8462
8463 case NOP_EXPR:
8464 return build_nop
8465 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8466 RECUR (TREE_OPERAND (t, 0)));
8467
8468 case CAST_EXPR:
8469 return build_functional_cast
8470 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8471 RECUR (TREE_OPERAND (t, 0)));
8472
8473 case REINTERPRET_CAST_EXPR:
8474 return build_reinterpret_cast
8475 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8476 RECUR (TREE_OPERAND (t, 0)));
8477
8478 case CONST_CAST_EXPR:
8479 return build_const_cast
8480 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8481 RECUR (TREE_OPERAND (t, 0)));
8482
8483 case DYNAMIC_CAST_EXPR:
8484 return build_dynamic_cast
8485 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8486 RECUR (TREE_OPERAND (t, 0)));
8487
8488 case STATIC_CAST_EXPR:
8489 return build_static_cast
8490 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8491 RECUR (TREE_OPERAND (t, 0)));
8492
8493 case POSTDECREMENT_EXPR:
8494 case POSTINCREMENT_EXPR:
8495 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8496 args, complain, in_decl);
8497 return build_x_unary_op (TREE_CODE (t), op1);
8498
8499 case PREDECREMENT_EXPR:
8500 case PREINCREMENT_EXPR:
8501 case NEGATE_EXPR:
8502 case BIT_NOT_EXPR:
8503 case ABS_EXPR:
8504 case TRUTH_NOT_EXPR:
8505 case UNARY_PLUS_EXPR: /* Unary + */
8506 case REALPART_EXPR:
8507 case IMAGPART_EXPR:
8508 return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
8509
8510 case ADDR_EXPR:
8511 op1 = TREE_OPERAND (t, 0);
8512 if (TREE_CODE (op1) == SCOPE_REF)
8513 op1 = tsubst_qualified_id (op1, args, complain, in_decl,
8514 /*done=*/true, /*address_p=*/true);
8515 else
8516 op1 = tsubst_non_call_postfix_expression (op1, args, complain,
8517 in_decl);
8518 if (TREE_CODE (op1) == LABEL_DECL)
8519 return finish_label_address_expr (DECL_NAME (op1));
8520 return build_x_unary_op (ADDR_EXPR, op1);
8521
8522 case PLUS_EXPR:
8523 case MINUS_EXPR:
8524 case MULT_EXPR:
8525 case TRUNC_DIV_EXPR:
8526 case CEIL_DIV_EXPR:
8527 case FLOOR_DIV_EXPR:
8528 case ROUND_DIV_EXPR:
8529 case EXACT_DIV_EXPR:
8530 case BIT_AND_EXPR:
8531 case BIT_IOR_EXPR:
8532 case BIT_XOR_EXPR:
8533 case TRUNC_MOD_EXPR:
8534 case FLOOR_MOD_EXPR:
8535 case TRUTH_ANDIF_EXPR:
8536 case TRUTH_ORIF_EXPR:
8537 case TRUTH_AND_EXPR:
8538 case TRUTH_OR_EXPR:
8539 case RSHIFT_EXPR:
8540 case LSHIFT_EXPR:
8541 case RROTATE_EXPR:
8542 case LROTATE_EXPR:
8543 case EQ_EXPR:
8544 case NE_EXPR:
8545 case MAX_EXPR:
8546 case MIN_EXPR:
8547 case LE_EXPR:
8548 case GE_EXPR:
8549 case LT_EXPR:
8550 case GT_EXPR:
8551 case MEMBER_REF:
8552 case DOTSTAR_EXPR:
8553 return build_x_binary_op
8554 (TREE_CODE (t),
8555 RECUR (TREE_OPERAND (t, 0)),
8556 RECUR (TREE_OPERAND (t, 1)),
8557 /*overloaded_p=*/NULL);
8558
8559 case SCOPE_REF:
8560 return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
8561 /*address_p=*/false);
8562 case ARRAY_REF:
8563 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8564 args, complain, in_decl);
8565 return build_x_binary_op (ARRAY_REF, op1, RECUR (TREE_OPERAND (t, 1)),
8566 /*overloaded_p=*/NULL);
8567
8568 case SIZEOF_EXPR:
8569 case ALIGNOF_EXPR:
8570 op1 = TREE_OPERAND (t, 0);
8571 if (!args)
8572 {
8573 /* When there are no ARGS, we are trying to evaluate a
8574 non-dependent expression from the parser. Trying to do
8575 the substitutions may not work. */
8576 if (!TYPE_P (op1))
8577 op1 = TREE_TYPE (op1);
8578 }
8579 else
8580 {
8581 ++skip_evaluation;
8582 op1 = RECUR (op1);
8583 --skip_evaluation;
8584 }
8585 if (TYPE_P (op1))
8586 return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
8587 else
8588 return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
8589
8590 case MODOP_EXPR:
8591 {
8592 tree r = build_x_modify_expr
8593 (RECUR (TREE_OPERAND (t, 0)),
8594 TREE_CODE (TREE_OPERAND (t, 1)),
8595 RECUR (TREE_OPERAND (t, 2)));
8596 /* TREE_NO_WARNING must be set if either the expression was
8597 parenthesized or it uses an operator such as >>= rather
8598 than plain assignment. In the former case, it was already
8599 set and must be copied. In the latter case,
8600 build_x_modify_expr sets it and it must not be reset
8601 here. */
8602 if (TREE_NO_WARNING (t))
8603 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
8604 return r;
8605 }
8606
8607 case ARROW_EXPR:
8608 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8609 args, complain, in_decl);
8610 /* Remember that there was a reference to this entity. */
8611 if (DECL_P (op1))
8612 mark_used (op1);
8613 return build_x_arrow (op1);
8614
8615 case NEW_EXPR:
8616 return build_new
8617 (RECUR (TREE_OPERAND (t, 0)),
8618 RECUR (TREE_OPERAND (t, 1)),
8619 RECUR (TREE_OPERAND (t, 2)),
8620 RECUR (TREE_OPERAND (t, 3)),
8621 NEW_EXPR_USE_GLOBAL (t));
8622
8623 case DELETE_EXPR:
8624 return delete_sanity
8625 (RECUR (TREE_OPERAND (t, 0)),
8626 RECUR (TREE_OPERAND (t, 1)),
8627 DELETE_EXPR_USE_VEC (t),
8628 DELETE_EXPR_USE_GLOBAL (t));
8629
8630 case COMPOUND_EXPR:
8631 return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
8632 RECUR (TREE_OPERAND (t, 1)));
8633
8634 case CALL_EXPR:
8635 {
8636 tree function;
8637 tree call_args;
8638 bool qualified_p;
8639 bool koenig_p;
8640
8641 function = TREE_OPERAND (t, 0);
8642 /* When we parsed the expression, we determined whether or
8643 not Koenig lookup should be performed. */
8644 koenig_p = KOENIG_LOOKUP_P (t);
8645 if (TREE_CODE (function) == SCOPE_REF)
8646 {
8647 qualified_p = true;
8648 function = tsubst_qualified_id (function, args, complain, in_decl,
8649 /*done=*/false,
8650 /*address_p=*/false);
8651 }
8652 else
8653 {
8654 qualified_p = (TREE_CODE (function) == COMPONENT_REF
8655 && (TREE_CODE (TREE_OPERAND (function, 1))
8656 == SCOPE_REF));
8657 function = tsubst_copy_and_build (function, args, complain,
8658 in_decl,
8659 !qualified_p);
8660 if (BASELINK_P (function))
8661 qualified_p = true;
8662 }
8663
8664 call_args = RECUR (TREE_OPERAND (t, 1));
8665
8666 /* We do not perform argument-dependent lookup if normal
8667 lookup finds a non-function, in accordance with the
8668 expected resolution of DR 218. */
8669 if (koenig_p
8670 && ((is_overloaded_fn (function)
8671 /* If lookup found a member function, the Koenig lookup is
8672 not appropriate, even if an unqualified-name was used
8673 to denote the function. */
8674 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
8675 || TREE_CODE (function) == IDENTIFIER_NODE))
8676 function = perform_koenig_lookup (function, call_args);
8677
8678 if (TREE_CODE (function) == IDENTIFIER_NODE)
8679 {
8680 unqualified_name_lookup_error (function);
8681 return error_mark_node;
8682 }
8683
8684 /* Remember that there was a reference to this entity. */
8685 if (DECL_P (function))
8686 mark_used (function);
8687
8688 if (TREE_CODE (function) == OFFSET_REF)
8689 return build_offset_ref_call_from_tree (function, call_args);
8690 if (TREE_CODE (function) == COMPONENT_REF)
8691 {
8692 if (!BASELINK_P (TREE_OPERAND (function, 1)))
8693 return finish_call_expr (function, call_args,
8694 /*disallow_virtual=*/false,
8695 /*koenig_p=*/false);
8696 else
8697 return (build_new_method_call
8698 (TREE_OPERAND (function, 0),
8699 TREE_OPERAND (function, 1),
8700 call_args, NULL_TREE,
8701 qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL));
8702 }
8703 return finish_call_expr (function, call_args,
8704 /*disallow_virtual=*/qualified_p,
8705 koenig_p);
8706 }
8707
8708 case COND_EXPR:
8709 return build_x_conditional_expr
8710 (RECUR (TREE_OPERAND (t, 0)),
8711 RECUR (TREE_OPERAND (t, 1)),
8712 RECUR (TREE_OPERAND (t, 2)));
8713
8714 case PSEUDO_DTOR_EXPR:
8715 return finish_pseudo_destructor_expr
8716 (RECUR (TREE_OPERAND (t, 0)),
8717 RECUR (TREE_OPERAND (t, 1)),
8718 RECUR (TREE_OPERAND (t, 2)));
8719
8720 case TREE_LIST:
8721 {
8722 tree purpose, value, chain;
8723
8724 if (t == void_list_node)
8725 return t;
8726
8727 purpose = TREE_PURPOSE (t);
8728 if (purpose)
8729 purpose = RECUR (purpose);
8730 value = TREE_VALUE (t);
8731 if (value)
8732 value = RECUR (value);
8733 chain = TREE_CHAIN (t);
8734 if (chain && chain != void_type_node)
8735 chain = RECUR (chain);
8736 if (purpose == TREE_PURPOSE (t)
8737 && value == TREE_VALUE (t)
8738 && chain == TREE_CHAIN (t))
8739 return t;
8740 return tree_cons (purpose, value, chain);
8741 }
8742
8743 case COMPONENT_REF:
8744 {
8745 tree object;
8746 tree member;
8747
8748 object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8749 args, complain, in_decl);
8750 /* Remember that there was a reference to this entity. */
8751 if (DECL_P (object))
8752 mark_used (object);
8753
8754 member = TREE_OPERAND (t, 1);
8755 if (BASELINK_P (member))
8756 member = tsubst_baselink (member,
8757 non_reference (TREE_TYPE (object)),
8758 args, complain, in_decl);
8759 else
8760 member = tsubst_copy (member, args, complain, in_decl);
8761
8762 if (member == error_mark_node)
8763 return error_mark_node;
8764 else if (!CLASS_TYPE_P (TREE_TYPE (object)))
8765 {
8766 if (TREE_CODE (member) == BIT_NOT_EXPR)
8767 return finish_pseudo_destructor_expr (object,
8768 NULL_TREE,
8769 TREE_TYPE (object));
8770 else if (TREE_CODE (member) == SCOPE_REF
8771 && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
8772 return finish_pseudo_destructor_expr (object,
8773 object,
8774 TREE_TYPE (object));
8775 }
8776 else if (TREE_CODE (member) == SCOPE_REF
8777 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
8778 {
8779 tree tmpl;
8780 tree args;
8781
8782 /* Lookup the template functions now that we know what the
8783 scope is. */
8784 tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
8785 args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
8786 member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
8787 /*is_type_p=*/false,
8788 /*complain=*/false);
8789 if (BASELINK_P (member))
8790 {
8791 BASELINK_FUNCTIONS (member)
8792 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
8793 args);
8794 member = (adjust_result_of_qualified_name_lookup
8795 (member, BINFO_TYPE (BASELINK_BINFO (member)),
8796 TREE_TYPE (object)));
8797 }
8798 else
8799 {
8800 qualified_name_lookup_error (TREE_TYPE (object), tmpl,
8801 member);
8802 return error_mark_node;
8803 }
8804 }
8805 else if (TREE_CODE (member) == SCOPE_REF
8806 && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
8807 && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
8808 {
8809 if (complain & tf_error)
8810 {
8811 if (TYPE_P (TREE_OPERAND (member, 0)))
8812 error ("%qT is not a class or namespace",
8813 TREE_OPERAND (member, 0));
8814 else
8815 error ("%qD is not a class or namespace",
8816 TREE_OPERAND (member, 0));
8817 }
8818 return error_mark_node;
8819 }
8820 else if (TREE_CODE (member) == FIELD_DECL)
8821 return finish_non_static_data_member (member, object, NULL_TREE);
8822
8823 return finish_class_member_access_expr (object, member);
8824 }
8825
8826 case THROW_EXPR:
8827 return build_throw
8828 (RECUR (TREE_OPERAND (t, 0)));
8829
8830 case CONSTRUCTOR:
8831 {
8832 VEC(constructor_elt,gc) *n;
8833 constructor_elt *ce;
8834 unsigned HOST_WIDE_INT idx;
8835 tree r;
8836 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8837 bool process_index_p;
8838
8839 /* digest_init will do the wrong thing if we let it. */
8840 if (type && TYPE_PTRMEMFUNC_P (type))
8841 return t;
8842
8843 /* We do not want to process the index of aggregate
8844 initializers as they are identifier nodes which will be
8845 looked up by digest_init. */
8846 process_index_p = !(type && IS_AGGR_TYPE (type));
8847
8848 n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
8849 for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
8850 {
8851 if (ce->index && process_index_p)
8852 ce->index = RECUR (ce->index);
8853 ce->value = RECUR (ce->value);
8854 }
8855
8856 r = build_constructor (NULL_TREE, n);
8857 TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
8858
8859 if (type)
8860 return digest_init (type, r);
8861 return r;
8862 }
8863
8864 case TYPEID_EXPR:
8865 {
8866 tree operand_0 = RECUR (TREE_OPERAND (t, 0));
8867 if (TYPE_P (operand_0))
8868 return get_typeid (operand_0);
8869 return build_typeid (operand_0);
8870 }
8871
8872 case VAR_DECL:
8873 if (!args)
8874 return t;
8875 /* Fall through */
8876
8877 case PARM_DECL:
8878 {
8879 tree r = tsubst_copy (t, args, complain, in_decl);
8880
8881 if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
8882 /* If the original type was a reference, we'll be wrapped in
8883 the appropriate INDIRECT_REF. */
8884 r = convert_from_reference (r);
8885 return r;
8886 }
8887
8888 case VA_ARG_EXPR:
8889 return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
8890 tsubst_copy (TREE_TYPE (t), args, complain,
8891 in_decl));
8892
8893 case OFFSETOF_EXPR:
8894 return fold_offsetof (RECUR (TREE_OPERAND (t, 0)));
8895
8896 case STMT_EXPR:
8897 {
8898 tree old_stmt_expr = cur_stmt_expr;
8899 tree stmt_expr = begin_stmt_expr ();
8900
8901 cur_stmt_expr = stmt_expr;
8902 tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl);
8903 stmt_expr = finish_stmt_expr (stmt_expr, false);
8904 cur_stmt_expr = old_stmt_expr;
8905
8906 return stmt_expr;
8907 }
8908
8909 case CONST_DECL:
8910 t = tsubst_copy (t, args, complain, in_decl);
8911 /* As in finish_id_expression, we resolve enumeration constants
8912 to their underlying values. */
8913 if (TREE_CODE (t) == CONST_DECL)
8914 return DECL_INITIAL (t);
8915 return t;
8916
8917 default:
8918 /* Handle Objective-C++ constructs, if appropriate. */
8919 {
8920 tree subst
8921 = objcp_tsubst_copy_and_build (t, args, complain,
8922 in_decl, /*function_p=*/false);
8923 if (subst)
8924 return subst;
8925 }
8926 return tsubst_copy (t, args, complain, in_decl);
8927 }
8928
8929 #undef RECUR
8930 }
8931
8932 /* Verify that the instantiated ARGS are valid. For type arguments,
8933 make sure that the type's linkage is ok. For non-type arguments,
8934 make sure they are constants if they are integral or enumerations.
8935 Emit an error under control of COMPLAIN, and return TRUE on error. */
8936
8937 static bool
8938 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
8939 {
8940 int ix, len = DECL_NTPARMS (tmpl);
8941 bool result = false;
8942 bool error_p = complain & tf_error;
8943
8944 for (ix = 0; ix != len; ix++)
8945 {
8946 tree t = TREE_VEC_ELT (args, ix);
8947
8948 if (TYPE_P (t))
8949 {
8950 /* [basic.link]: A name with no linkage (notably, the name
8951 of a class or enumeration declared in a local scope)
8952 shall not be used to declare an entity with linkage.
8953 This implies that names with no linkage cannot be used as
8954 template arguments. */
8955 tree nt = no_linkage_check (t, /*relaxed_p=*/false);
8956
8957 if (nt)
8958 {
8959 if (TYPE_ANONYMOUS_P (nt))
8960 error ("%qT is/uses anonymous type", t);
8961 else
8962 error ("%qT uses local type %qT", t, nt);
8963 result = true;
8964 error_p = true;
8965 }
8966 /* In order to avoid all sorts of complications, we do not
8967 allow variably-modified types as template arguments. */
8968 else if (variably_modified_type_p (t, NULL_TREE))
8969 {
8970 if (complain & tf_error)
8971 error ("%qT is a variably modified type", t);
8972 result = true;
8973 }
8974 }
8975 /* A non-type argument of integral or enumerated type must be a
8976 constant. */
8977 else if (TREE_TYPE (t)
8978 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
8979 && !TREE_CONSTANT (t))
8980 {
8981 if (complain & tf_error)
8982 error ("integral expression %qE is not constant", t);
8983 result = true;
8984 }
8985 }
8986 if (result && error_p)
8987 error (" trying to instantiate %qD", tmpl);
8988 return result;
8989 }
8990
8991 /* Instantiate the indicated variable or function template TMPL with
8992 the template arguments in TARG_PTR. */
8993
8994 tree
8995 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
8996 {
8997 tree fndecl;
8998 tree gen_tmpl;
8999 tree spec;
9000
9001 if (tmpl == error_mark_node)
9002 return error_mark_node;
9003
9004 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
9005
9006 /* If this function is a clone, handle it specially. */
9007 if (DECL_CLONED_FUNCTION_P (tmpl))
9008 {
9009 tree spec;
9010 tree clone;
9011
9012 spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
9013 complain);
9014 if (spec == error_mark_node)
9015 return error_mark_node;
9016
9017 /* Look for the clone. */
9018 FOR_EACH_CLONE (clone, spec)
9019 if (DECL_NAME (clone) == DECL_NAME (tmpl))
9020 return clone;
9021 /* We should always have found the clone by now. */
9022 gcc_unreachable ();
9023 return NULL_TREE;
9024 }
9025
9026 /* Check to see if we already have this specialization. */
9027 spec = retrieve_specialization (tmpl, targ_ptr,
9028 /*class_specializations_p=*/false);
9029 if (spec != NULL_TREE)
9030 return spec;
9031
9032 gen_tmpl = most_general_template (tmpl);
9033 if (tmpl != gen_tmpl)
9034 {
9035 /* The TMPL is a partial instantiation. To get a full set of
9036 arguments we must add the arguments used to perform the
9037 partial instantiation. */
9038 targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
9039 targ_ptr);
9040
9041 /* Check to see if we already have this specialization. */
9042 spec = retrieve_specialization (gen_tmpl, targ_ptr,
9043 /*class_specializations_p=*/false);
9044 if (spec != NULL_TREE)
9045 return spec;
9046 }
9047
9048 if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
9049 complain))
9050 return error_mark_node;
9051
9052 /* We are building a FUNCTION_DECL, during which the access of its
9053 parameters and return types have to be checked. However this
9054 FUNCTION_DECL which is the desired context for access checking
9055 is not built yet. We solve this chicken-and-egg problem by
9056 deferring all checks until we have the FUNCTION_DECL. */
9057 push_deferring_access_checks (dk_deferred);
9058
9059 /* Substitute template parameters. */
9060 fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
9061 targ_ptr, complain, gen_tmpl);
9062
9063 /* Now we know the specialization, compute access previously
9064 deferred. */
9065 push_access_scope (fndecl);
9066 perform_deferred_access_checks ();
9067 pop_access_scope (fndecl);
9068 pop_deferring_access_checks ();
9069
9070 /* The DECL_TI_TEMPLATE should always be the immediate parent
9071 template, not the most general template. */
9072 DECL_TI_TEMPLATE (fndecl) = tmpl;
9073
9074 /* If we've just instantiated the main entry point for a function,
9075 instantiate all the alternate entry points as well. We do this
9076 by cloning the instantiation of the main entry point, not by
9077 instantiating the template clones. */
9078 if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
9079 clone_function_decl (fndecl, /*update_method_vec_p=*/0);
9080
9081 return fndecl;
9082 }
9083
9084 /* The FN is a TEMPLATE_DECL for a function. The ARGS are the
9085 arguments that are being used when calling it. TARGS is a vector
9086 into which the deduced template arguments are placed.
9087
9088 Return zero for success, 2 for an incomplete match that doesn't resolve
9089 all the types, and 1 for complete failure. An error message will be
9090 printed only for an incomplete match.
9091
9092 If FN is a conversion operator, or we are trying to produce a specific
9093 specialization, RETURN_TYPE is the return type desired.
9094
9095 The EXPLICIT_TARGS are explicit template arguments provided via a
9096 template-id.
9097
9098 The parameter STRICT is one of:
9099
9100 DEDUCE_CALL:
9101 We are deducing arguments for a function call, as in
9102 [temp.deduct.call].
9103
9104 DEDUCE_CONV:
9105 We are deducing arguments for a conversion function, as in
9106 [temp.deduct.conv].
9107
9108 DEDUCE_EXACT:
9109 We are deducing arguments when doing an explicit instantiation
9110 as in [temp.explicit], when determining an explicit specialization
9111 as in [temp.expl.spec], or when taking the address of a function
9112 template, as in [temp.deduct.funcaddr]. */
9113
9114 int
9115 fn_type_unification (tree fn,
9116 tree explicit_targs,
9117 tree targs,
9118 tree args,
9119 tree return_type,
9120 unification_kind_t strict)
9121 {
9122 tree parms;
9123 tree fntype;
9124 int result;
9125
9126 gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
9127
9128 fntype = TREE_TYPE (fn);
9129 if (explicit_targs)
9130 {
9131 /* [temp.deduct]
9132
9133 The specified template arguments must match the template
9134 parameters in kind (i.e., type, nontype, template), and there
9135 must not be more arguments than there are parameters;
9136 otherwise type deduction fails.
9137
9138 Nontype arguments must match the types of the corresponding
9139 nontype template parameters, or must be convertible to the
9140 types of the corresponding nontype parameters as specified in
9141 _temp.arg.nontype_, otherwise type deduction fails.
9142
9143 All references in the function type of the function template
9144 to the corresponding template parameters are replaced by the
9145 specified template argument values. If a substitution in a
9146 template parameter or in the function type of the function
9147 template results in an invalid type, type deduction fails. */
9148 int i;
9149 tree converted_args;
9150 bool incomplete;
9151
9152 if (explicit_targs == error_mark_node)
9153 return 1;
9154
9155 converted_args
9156 = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
9157 explicit_targs, NULL_TREE, tf_none,
9158 /*require_all_arguments=*/0));
9159 if (converted_args == error_mark_node)
9160 return 1;
9161
9162 /* Substitute the explicit args into the function type. This is
9163 necessary so that, for instance, explicitly declared function
9164 arguments can match null pointed constants. If we were given
9165 an incomplete set of explicit args, we must not do semantic
9166 processing during substitution as we could create partial
9167 instantiations. */
9168 incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
9169 processing_template_decl += incomplete;
9170 fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
9171 processing_template_decl -= incomplete;
9172
9173 if (fntype == error_mark_node)
9174 return 1;
9175
9176 /* Place the explicitly specified arguments in TARGS. */
9177 for (i = NUM_TMPL_ARGS (converted_args); i--;)
9178 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
9179 }
9180
9181 parms = TYPE_ARG_TYPES (fntype);
9182 /* Never do unification on the 'this' parameter. */
9183 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
9184 parms = TREE_CHAIN (parms);
9185
9186 if (return_type)
9187 {
9188 parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
9189 args = tree_cons (NULL_TREE, return_type, args);
9190 }
9191
9192 /* We allow incomplete unification without an error message here
9193 because the standard doesn't seem to explicitly prohibit it. Our
9194 callers must be ready to deal with unification failures in any
9195 event. */
9196 result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
9197 targs, parms, args, /*subr=*/0,
9198 strict, 0);
9199
9200 if (result == 0)
9201 /* All is well so far. Now, check:
9202
9203 [temp.deduct]
9204
9205 When all template arguments have been deduced, all uses of
9206 template parameters in nondeduced contexts are replaced with
9207 the corresponding deduced argument values. If the
9208 substitution results in an invalid type, as described above,
9209 type deduction fails. */
9210 if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
9211 == error_mark_node)
9212 return 1;
9213
9214 return result;
9215 }
9216
9217 /* Adjust types before performing type deduction, as described in
9218 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
9219 sections are symmetric. PARM is the type of a function parameter
9220 or the return type of the conversion function. ARG is the type of
9221 the argument passed to the call, or the type of the value
9222 initialized with the result of the conversion function. */
9223
9224 static int
9225 maybe_adjust_types_for_deduction (unification_kind_t strict,
9226 tree* parm,
9227 tree* arg)
9228 {
9229 int result = 0;
9230
9231 switch (strict)
9232 {
9233 case DEDUCE_CALL:
9234 break;
9235
9236 case DEDUCE_CONV:
9237 {
9238 /* Swap PARM and ARG throughout the remainder of this
9239 function; the handling is precisely symmetric since PARM
9240 will initialize ARG rather than vice versa. */
9241 tree* temp = parm;
9242 parm = arg;
9243 arg = temp;
9244 break;
9245 }
9246
9247 case DEDUCE_EXACT:
9248 /* There is nothing to do in this case. */
9249 return 0;
9250
9251 default:
9252 gcc_unreachable ();
9253 }
9254
9255 if (TREE_CODE (*parm) != REFERENCE_TYPE)
9256 {
9257 /* [temp.deduct.call]
9258
9259 If P is not a reference type:
9260
9261 --If A is an array type, the pointer type produced by the
9262 array-to-pointer standard conversion (_conv.array_) is
9263 used in place of A for type deduction; otherwise,
9264
9265 --If A is a function type, the pointer type produced by
9266 the function-to-pointer standard conversion
9267 (_conv.func_) is used in place of A for type deduction;
9268 otherwise,
9269
9270 --If A is a cv-qualified type, the top level
9271 cv-qualifiers of A's type are ignored for type
9272 deduction. */
9273 if (TREE_CODE (*arg) == ARRAY_TYPE)
9274 *arg = build_pointer_type (TREE_TYPE (*arg));
9275 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
9276 *arg = build_pointer_type (*arg);
9277 else
9278 *arg = TYPE_MAIN_VARIANT (*arg);
9279 }
9280
9281 /* [temp.deduct.call]
9282
9283 If P is a cv-qualified type, the top level cv-qualifiers
9284 of P's type are ignored for type deduction. If P is a
9285 reference type, the type referred to by P is used for
9286 type deduction. */
9287 *parm = TYPE_MAIN_VARIANT (*parm);
9288 if (TREE_CODE (*parm) == REFERENCE_TYPE)
9289 {
9290 *parm = TREE_TYPE (*parm);
9291 result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9292 }
9293
9294 /* DR 322. For conversion deduction, remove a reference type on parm
9295 too (which has been swapped into ARG). */
9296 if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
9297 *arg = TREE_TYPE (*arg);
9298
9299 return result;
9300 }
9301
9302 /* Most parms like fn_type_unification.
9303
9304 If SUBR is 1, we're being called recursively (to unify the
9305 arguments of a function or method parameter of a function
9306 template). If IS_METHOD is true, XPARMS are the parms of a
9307 member function, and special rules apply to cv qualification
9308 deduction on the this parameter. */
9309
9310 static int
9311 type_unification_real (tree tparms,
9312 tree targs,
9313 tree xparms,
9314 tree xargs,
9315 int subr,
9316 unification_kind_t strict,
9317 int is_method)
9318 {
9319 tree parm, arg;
9320 int i;
9321 int ntparms = TREE_VEC_LENGTH (tparms);
9322 int sub_strict;
9323 int saw_undeduced = 0;
9324 tree parms, args;
9325
9326 gcc_assert (TREE_CODE (tparms) == TREE_VEC);
9327 gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
9328 gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
9329 gcc_assert (ntparms > 0);
9330
9331 switch (strict)
9332 {
9333 case DEDUCE_CALL:
9334 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
9335 | UNIFY_ALLOW_DERIVED);
9336 break;
9337
9338 case DEDUCE_CONV:
9339 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
9340 break;
9341
9342 case DEDUCE_EXACT:
9343 sub_strict = UNIFY_ALLOW_NONE;
9344 break;
9345
9346 default:
9347 gcc_unreachable ();
9348 }
9349
9350 again:
9351 parms = xparms;
9352 args = xargs;
9353
9354 while (parms && parms != void_list_node
9355 && args && args != void_list_node)
9356 {
9357 parm = TREE_VALUE (parms);
9358 parms = TREE_CHAIN (parms);
9359 arg = TREE_VALUE (args);
9360 args = TREE_CHAIN (args);
9361
9362 if (arg == error_mark_node)
9363 return 1;
9364 if (arg == unknown_type_node)
9365 /* We can't deduce anything from this, but we might get all the
9366 template args from other function args. */
9367 continue;
9368
9369 if (is_method)
9370 {
9371 /* The cv qualifiers on the this pointer argument must match
9372 exactly. We cannot deduce a T as const X against a const
9373 member function for instance. */
9374 gcc_assert (TREE_CODE (parm) == POINTER_TYPE);
9375 gcc_assert (TREE_CODE (arg) == POINTER_TYPE);
9376 /* The restrict qualifier will be on the pointer. */
9377 if (cp_type_quals (parm) != cp_type_quals (arg))
9378 return 1;
9379 parm = TREE_TYPE (parm);
9380 arg = TREE_TYPE (arg);
9381 if (cp_type_quals (parm) != cp_type_quals (arg))
9382 return 1;
9383
9384 parm = TYPE_MAIN_VARIANT (parm);
9385 arg = TYPE_MAIN_VARIANT (arg);
9386 is_method = 0;
9387 }
9388
9389 /* Conversions will be performed on a function argument that
9390 corresponds with a function parameter that contains only
9391 non-deducible template parameters and explicitly specified
9392 template parameters. */
9393 if (!uses_template_parms (parm))
9394 {
9395 tree type;
9396
9397 if (!TYPE_P (arg))
9398 type = TREE_TYPE (arg);
9399 else
9400 type = arg;
9401
9402 if (same_type_p (parm, type))
9403 continue;
9404 if (strict != DEDUCE_EXACT
9405 && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg))
9406 continue;
9407
9408 return 1;
9409 }
9410
9411 if (!TYPE_P (arg))
9412 {
9413 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
9414 if (type_unknown_p (arg))
9415 {
9416 /* [temp.deduct.type] A template-argument can be deduced from
9417 a pointer to function or pointer to member function
9418 argument if the set of overloaded functions does not
9419 contain function templates and at most one of a set of
9420 overloaded functions provides a unique match. */
9421
9422 if (resolve_overloaded_unification
9423 (tparms, targs, parm, arg, strict, sub_strict)
9424 != 0)
9425 return 1;
9426 continue;
9427 }
9428 arg = TREE_TYPE (arg);
9429 if (arg == error_mark_node)
9430 return 1;
9431 }
9432
9433 {
9434 int arg_strict = sub_strict;
9435
9436 if (!subr)
9437 arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9438
9439 if (unify (tparms, targs, parm, arg, arg_strict))
9440 return 1;
9441 }
9442 }
9443
9444 /* Fail if we've reached the end of the parm list, and more args
9445 are present, and the parm list isn't variadic. */
9446 if (args && args != void_list_node && parms == void_list_node)
9447 return 1;
9448 /* Fail if parms are left and they don't have default values. */
9449 if (parms && parms != void_list_node
9450 && TREE_PURPOSE (parms) == NULL_TREE)
9451 return 1;
9452
9453 if (!subr)
9454 for (i = 0; i < ntparms; i++)
9455 if (!TREE_VEC_ELT (targs, i))
9456 {
9457 tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
9458
9459 /* If this is an undeduced nontype parameter that depends on
9460 a type parameter, try another pass; its type may have been
9461 deduced from a later argument than the one from which
9462 this parameter can be deduced. */
9463 if (TREE_CODE (tparm) == PARM_DECL
9464 && uses_template_parms (TREE_TYPE (tparm))
9465 && !saw_undeduced++)
9466 goto again;
9467
9468 return 2;
9469 }
9470
9471 return 0;
9472 }
9473
9474 /* Subroutine of type_unification_real. Args are like the variables at the
9475 call site. ARG is an overloaded function (or template-id); we try
9476 deducing template args from each of the overloads, and if only one
9477 succeeds, we go with that. Modifies TARGS and returns 0 on success. */
9478
9479 static int
9480 resolve_overloaded_unification (tree tparms,
9481 tree targs,
9482 tree parm,
9483 tree arg,
9484 unification_kind_t strict,
9485 int sub_strict)
9486 {
9487 tree tempargs = copy_node (targs);
9488 int good = 0;
9489 bool addr_p;
9490
9491 if (TREE_CODE (arg) == ADDR_EXPR)
9492 {
9493 arg = TREE_OPERAND (arg, 0);
9494 addr_p = true;
9495 }
9496 else
9497 addr_p = false;
9498
9499 if (TREE_CODE (arg) == COMPONENT_REF)
9500 /* Handle `&x' where `x' is some static or non-static member
9501 function name. */
9502 arg = TREE_OPERAND (arg, 1);
9503
9504 if (TREE_CODE (arg) == OFFSET_REF)
9505 arg = TREE_OPERAND (arg, 1);
9506
9507 /* Strip baselink information. */
9508 if (BASELINK_P (arg))
9509 arg = BASELINK_FUNCTIONS (arg);
9510
9511 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
9512 {
9513 /* If we got some explicit template args, we need to plug them into
9514 the affected templates before we try to unify, in case the
9515 explicit args will completely resolve the templates in question. */
9516
9517 tree expl_subargs = TREE_OPERAND (arg, 1);
9518 arg = TREE_OPERAND (arg, 0);
9519
9520 for (; arg; arg = OVL_NEXT (arg))
9521 {
9522 tree fn = OVL_CURRENT (arg);
9523 tree subargs, elem;
9524
9525 if (TREE_CODE (fn) != TEMPLATE_DECL)
9526 continue;
9527
9528 subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
9529 expl_subargs, /*check_ret=*/false);
9530 if (subargs)
9531 {
9532 elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
9533 good += try_one_overload (tparms, targs, tempargs, parm,
9534 elem, strict, sub_strict, addr_p);
9535 }
9536 }
9537 }
9538 else
9539 {
9540 gcc_assert (TREE_CODE (arg) == OVERLOAD
9541 || TREE_CODE (arg) == FUNCTION_DECL);
9542
9543 for (; arg; arg = OVL_NEXT (arg))
9544 good += try_one_overload (tparms, targs, tempargs, parm,
9545 TREE_TYPE (OVL_CURRENT (arg)),
9546 strict, sub_strict, addr_p);
9547 }
9548
9549 /* [temp.deduct.type] A template-argument can be deduced from a pointer
9550 to function or pointer to member function argument if the set of
9551 overloaded functions does not contain function templates and at most
9552 one of a set of overloaded functions provides a unique match.
9553
9554 So if we found multiple possibilities, we return success but don't
9555 deduce anything. */
9556
9557 if (good == 1)
9558 {
9559 int i = TREE_VEC_LENGTH (targs);
9560 for (; i--; )
9561 if (TREE_VEC_ELT (tempargs, i))
9562 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
9563 }
9564 if (good)
9565 return 0;
9566
9567 return 1;
9568 }
9569
9570 /* Subroutine of resolve_overloaded_unification; does deduction for a single
9571 overload. Fills TARGS with any deduced arguments, or error_mark_node if
9572 different overloads deduce different arguments for a given parm.
9573 ADDR_P is true if the expression for which deduction is being
9574 performed was of the form "& fn" rather than simply "fn".
9575
9576 Returns 1 on success. */
9577
9578 static int
9579 try_one_overload (tree tparms,
9580 tree orig_targs,
9581 tree targs,
9582 tree parm,
9583 tree arg,
9584 unification_kind_t strict,
9585 int sub_strict,
9586 bool addr_p)
9587 {
9588 int nargs;
9589 tree tempargs;
9590 int i;
9591
9592 /* [temp.deduct.type] A template-argument can be deduced from a pointer
9593 to function or pointer to member function argument if the set of
9594 overloaded functions does not contain function templates and at most
9595 one of a set of overloaded functions provides a unique match.
9596
9597 So if this is a template, just return success. */
9598
9599 if (uses_template_parms (arg))
9600 return 1;
9601
9602 if (TREE_CODE (arg) == METHOD_TYPE)
9603 arg = build_ptrmemfunc_type (build_pointer_type (arg));
9604 else if (addr_p)
9605 arg = build_pointer_type (arg);
9606
9607 sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9608
9609 /* We don't copy orig_targs for this because if we have already deduced
9610 some template args from previous args, unify would complain when we
9611 try to deduce a template parameter for the same argument, even though
9612 there isn't really a conflict. */
9613 nargs = TREE_VEC_LENGTH (targs);
9614 tempargs = make_tree_vec (nargs);
9615
9616 if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
9617 return 0;
9618
9619 /* First make sure we didn't deduce anything that conflicts with
9620 explicitly specified args. */
9621 for (i = nargs; i--; )
9622 {
9623 tree elt = TREE_VEC_ELT (tempargs, i);
9624 tree oldelt = TREE_VEC_ELT (orig_targs, i);
9625
9626 if (!elt)
9627 /*NOP*/;
9628 else if (uses_template_parms (elt))
9629 /* Since we're unifying against ourselves, we will fill in
9630 template args used in the function parm list with our own
9631 template parms. Discard them. */
9632 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
9633 else if (oldelt && !template_args_equal (oldelt, elt))
9634 return 0;
9635 }
9636
9637 for (i = nargs; i--; )
9638 {
9639 tree elt = TREE_VEC_ELT (tempargs, i);
9640
9641 if (elt)
9642 TREE_VEC_ELT (targs, i) = elt;
9643 }
9644
9645 return 1;
9646 }
9647
9648 /* Verify that nondeduce template argument agrees with the type
9649 obtained from argument deduction. Return nonzero if the
9650 verification fails.
9651
9652 For example:
9653
9654 struct A { typedef int X; };
9655 template <class T, class U> struct C {};
9656 template <class T> struct C<T, typename T::X> {};
9657
9658 Then with the instantiation `C<A, int>', we can deduce that
9659 `T' is `A' but unify () does not check whether `typename T::X'
9660 is `int'. This function ensure that they agree.
9661
9662 TARGS, PARMS are the same as the arguments of unify.
9663 ARGS contains template arguments from all levels. */
9664
9665 static int
9666 verify_class_unification (tree targs, tree parms, tree args)
9667 {
9668 parms = tsubst (parms, add_outermost_template_args (args, targs),
9669 tf_none, NULL_TREE);
9670 if (parms == error_mark_node)
9671 return 1;
9672
9673 return !comp_template_args (parms, INNERMOST_TEMPLATE_ARGS (args));
9674 }
9675
9676 /* PARM is a template class (perhaps with unbound template
9677 parameters). ARG is a fully instantiated type. If ARG can be
9678 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
9679 TARGS are as for unify. */
9680
9681 static tree
9682 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
9683 {
9684 tree copy_of_targs;
9685
9686 if (!CLASSTYPE_TEMPLATE_INFO (arg)
9687 || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
9688 != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
9689 return NULL_TREE;
9690
9691 /* We need to make a new template argument vector for the call to
9692 unify. If we used TARGS, we'd clutter it up with the result of
9693 the attempted unification, even if this class didn't work out.
9694 We also don't want to commit ourselves to all the unifications
9695 we've already done, since unification is supposed to be done on
9696 an argument-by-argument basis. In other words, consider the
9697 following pathological case:
9698
9699 template <int I, int J, int K>
9700 struct S {};
9701
9702 template <int I, int J>
9703 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
9704
9705 template <int I, int J, int K>
9706 void f(S<I, J, K>, S<I, I, I>);
9707
9708 void g() {
9709 S<0, 0, 0> s0;
9710 S<0, 1, 2> s2;
9711
9712 f(s0, s2);
9713 }
9714
9715 Now, by the time we consider the unification involving `s2', we
9716 already know that we must have `f<0, 0, 0>'. But, even though
9717 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
9718 because there are two ways to unify base classes of S<0, 1, 2>
9719 with S<I, I, I>. If we kept the already deduced knowledge, we
9720 would reject the possibility I=1. */
9721 copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
9722
9723 /* If unification failed, we're done. */
9724 if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
9725 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
9726 return NULL_TREE;
9727
9728 return arg;
9729 }
9730
9731 /* Given a template type PARM and a class type ARG, find the unique
9732 base type in ARG that is an instance of PARM. We do not examine
9733 ARG itself; only its base-classes. If there is not exactly one
9734 appropriate base class, return NULL_TREE. PARM may be the type of
9735 a partial specialization, as well as a plain template type. Used
9736 by unify. */
9737
9738 static tree
9739 get_template_base (tree tparms, tree targs, tree parm, tree arg)
9740 {
9741 tree rval = NULL_TREE;
9742 tree binfo;
9743
9744 gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
9745
9746 binfo = TYPE_BINFO (complete_type (arg));
9747 if (!binfo)
9748 /* The type could not be completed. */
9749 return NULL_TREE;
9750
9751 /* Walk in inheritance graph order. The search order is not
9752 important, and this avoids multiple walks of virtual bases. */
9753 for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
9754 {
9755 tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
9756
9757 if (r)
9758 {
9759 /* If there is more than one satisfactory baseclass, then:
9760
9761 [temp.deduct.call]
9762
9763 If they yield more than one possible deduced A, the type
9764 deduction fails.
9765
9766 applies. */
9767 if (rval && !same_type_p (r, rval))
9768 return NULL_TREE;
9769
9770 rval = r;
9771 }
9772 }
9773
9774 return rval;
9775 }
9776
9777 /* Returns the level of DECL, which declares a template parameter. */
9778
9779 static int
9780 template_decl_level (tree decl)
9781 {
9782 switch (TREE_CODE (decl))
9783 {
9784 case TYPE_DECL:
9785 case TEMPLATE_DECL:
9786 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
9787
9788 case PARM_DECL:
9789 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
9790
9791 default:
9792 gcc_unreachable ();
9793 }
9794 return 0;
9795 }
9796
9797 /* Decide whether ARG can be unified with PARM, considering only the
9798 cv-qualifiers of each type, given STRICT as documented for unify.
9799 Returns nonzero iff the unification is OK on that basis. */
9800
9801 static int
9802 check_cv_quals_for_unify (int strict, tree arg, tree parm)
9803 {
9804 int arg_quals = cp_type_quals (arg);
9805 int parm_quals = cp_type_quals (parm);
9806
9807 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
9808 && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
9809 {
9810 /* Although a CVR qualifier is ignored when being applied to a
9811 substituted template parameter ([8.3.2]/1 for example), that
9812 does not apply during deduction [14.8.2.4]/1, (even though
9813 that is not explicitly mentioned, [14.8.2.4]/9 indicates
9814 this). Except when we're allowing additional CV qualifiers
9815 at the outer level [14.8.2.1]/3,1st bullet. */
9816 if ((TREE_CODE (arg) == REFERENCE_TYPE
9817 || TREE_CODE (arg) == FUNCTION_TYPE
9818 || TREE_CODE (arg) == METHOD_TYPE)
9819 && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
9820 return 0;
9821
9822 if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
9823 && (parm_quals & TYPE_QUAL_RESTRICT))
9824 return 0;
9825 }
9826
9827 if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
9828 && (arg_quals & parm_quals) != parm_quals)
9829 return 0;
9830
9831 if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
9832 && (parm_quals & arg_quals) != arg_quals)
9833 return 0;
9834
9835 return 1;
9836 }
9837
9838 /* Takes parameters as for type_unification. Returns 0 if the
9839 type deduction succeeds, 1 otherwise. The parameter STRICT is a
9840 bitwise or of the following flags:
9841
9842 UNIFY_ALLOW_NONE:
9843 Require an exact match between PARM and ARG.
9844 UNIFY_ALLOW_MORE_CV_QUAL:
9845 Allow the deduced ARG to be more cv-qualified (by qualification
9846 conversion) than ARG.
9847 UNIFY_ALLOW_LESS_CV_QUAL:
9848 Allow the deduced ARG to be less cv-qualified than ARG.
9849 UNIFY_ALLOW_DERIVED:
9850 Allow the deduced ARG to be a template base class of ARG,
9851 or a pointer to a template base class of the type pointed to by
9852 ARG.
9853 UNIFY_ALLOW_INTEGER:
9854 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
9855 case for more information.
9856 UNIFY_ALLOW_OUTER_LEVEL:
9857 This is the outermost level of a deduction. Used to determine validity
9858 of qualification conversions. A valid qualification conversion must
9859 have const qualified pointers leading up to the inner type which
9860 requires additional CV quals, except at the outer level, where const
9861 is not required [conv.qual]. It would be normal to set this flag in
9862 addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
9863 UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
9864 This is the outermost level of a deduction, and PARM can be more CV
9865 qualified at this point.
9866 UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
9867 This is the outermost level of a deduction, and PARM can be less CV
9868 qualified at this point. */
9869
9870 static int
9871 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
9872 {
9873 int idx;
9874 tree targ;
9875 tree tparm;
9876 int strict_in = strict;
9877
9878 /* I don't think this will do the right thing with respect to types.
9879 But the only case I've seen it in so far has been array bounds, where
9880 signedness is the only information lost, and I think that will be
9881 okay. */
9882 while (TREE_CODE (parm) == NOP_EXPR)
9883 parm = TREE_OPERAND (parm, 0);
9884
9885 if (arg == error_mark_node)
9886 return 1;
9887 if (arg == unknown_type_node)
9888 /* We can't deduce anything from this, but we might get all the
9889 template args from other function args. */
9890 return 0;
9891
9892 /* If PARM uses template parameters, then we can't bail out here,
9893 even if ARG == PARM, since we won't record unifications for the
9894 template parameters. We might need them if we're trying to
9895 figure out which of two things is more specialized. */
9896 if (arg == parm && !uses_template_parms (parm))
9897 return 0;
9898
9899 /* Immediately reject some pairs that won't unify because of
9900 cv-qualification mismatches. */
9901 if (TREE_CODE (arg) == TREE_CODE (parm)
9902 && TYPE_P (arg)
9903 /* It is the elements of the array which hold the cv quals of an array
9904 type, and the elements might be template type parms. We'll check
9905 when we recurse. */
9906 && TREE_CODE (arg) != ARRAY_TYPE
9907 /* We check the cv-qualifiers when unifying with template type
9908 parameters below. We want to allow ARG `const T' to unify with
9909 PARM `T' for example, when computing which of two templates
9910 is more specialized, for example. */
9911 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
9912 && !check_cv_quals_for_unify (strict_in, arg, parm))
9913 return 1;
9914
9915 if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
9916 && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
9917 strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
9918 strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
9919 strict &= ~UNIFY_ALLOW_DERIVED;
9920 strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9921 strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
9922
9923 switch (TREE_CODE (parm))
9924 {
9925 case TYPENAME_TYPE:
9926 case SCOPE_REF:
9927 case UNBOUND_CLASS_TEMPLATE:
9928 /* In a type which contains a nested-name-specifier, template
9929 argument values cannot be deduced for template parameters used
9930 within the nested-name-specifier. */
9931 return 0;
9932
9933 case TEMPLATE_TYPE_PARM:
9934 case TEMPLATE_TEMPLATE_PARM:
9935 case BOUND_TEMPLATE_TEMPLATE_PARM:
9936 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
9937
9938 if (TEMPLATE_TYPE_LEVEL (parm)
9939 != template_decl_level (tparm))
9940 /* The PARM is not one we're trying to unify. Just check
9941 to see if it matches ARG. */
9942 return (TREE_CODE (arg) == TREE_CODE (parm)
9943 && same_type_p (parm, arg)) ? 0 : 1;
9944 idx = TEMPLATE_TYPE_IDX (parm);
9945 targ = TREE_VEC_ELT (targs, idx);
9946 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
9947
9948 /* Check for mixed types and values. */
9949 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
9950 && TREE_CODE (tparm) != TYPE_DECL)
9951 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
9952 && TREE_CODE (tparm) != TEMPLATE_DECL))
9953 return 1;
9954
9955 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
9956 {
9957 /* ARG must be constructed from a template class or a template
9958 template parameter. */
9959 if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
9960 && (TREE_CODE (arg) != RECORD_TYPE || !CLASSTYPE_TEMPLATE_INFO (arg)))
9961 return 1;
9962
9963 {
9964 tree parmtmpl = TYPE_TI_TEMPLATE (parm);
9965 tree parmvec = TYPE_TI_ARGS (parm);
9966 tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
9967 tree argtmplvec
9968 = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
9969 int i;
9970
9971 /* The parameter and argument roles have to be switched here
9972 in order to handle default arguments properly. For example,
9973 template<template <class> class TT> void f(TT<int>)
9974 should be able to accept vector<int> which comes from
9975 template <class T, class Allocator = allocator>
9976 class vector. */
9977
9978 if (coerce_template_parms (argtmplvec, parmvec, parmtmpl, 0, 1)
9979 == error_mark_node)
9980 return 1;
9981
9982 /* Deduce arguments T, i from TT<T> or TT<i>.
9983 We check each element of PARMVEC and ARGVEC individually
9984 rather than the whole TREE_VEC since they can have
9985 different number of elements. */
9986
9987 for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
9988 {
9989 if (unify (tparms, targs,
9990 TREE_VEC_ELT (parmvec, i),
9991 TREE_VEC_ELT (argvec, i),
9992 UNIFY_ALLOW_NONE))
9993 return 1;
9994 }
9995 }
9996 arg = TYPE_TI_TEMPLATE (arg);
9997
9998 /* Fall through to deduce template name. */
9999 }
10000
10001 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
10002 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
10003 {
10004 /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>. */
10005
10006 /* Simple cases: Value already set, does match or doesn't. */
10007 if (targ != NULL_TREE && template_args_equal (targ, arg))
10008 return 0;
10009 else if (targ)
10010 return 1;
10011 }
10012 else
10013 {
10014 /* If PARM is `const T' and ARG is only `int', we don't have
10015 a match unless we are allowing additional qualification.
10016 If ARG is `const int' and PARM is just `T' that's OK;
10017 that binds `const int' to `T'. */
10018 if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
10019 arg, parm))
10020 return 1;
10021
10022 /* Consider the case where ARG is `const volatile int' and
10023 PARM is `const T'. Then, T should be `volatile int'. */
10024 arg = cp_build_qualified_type_real
10025 (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
10026 if (arg == error_mark_node)
10027 return 1;
10028
10029 /* Simple cases: Value already set, does match or doesn't. */
10030 if (targ != NULL_TREE && same_type_p (targ, arg))
10031 return 0;
10032 else if (targ)
10033 return 1;
10034
10035 /* Make sure that ARG is not a variable-sized array. (Note
10036 that were talking about variable-sized arrays (like
10037 `int[n]'), rather than arrays of unknown size (like
10038 `int[]').) We'll get very confused by such a type since
10039 the bound of the array will not be computable in an
10040 instantiation. Besides, such types are not allowed in
10041 ISO C++, so we can do as we please here. */
10042 if (variably_modified_type_p (arg, NULL_TREE))
10043 return 1;
10044 }
10045
10046 TREE_VEC_ELT (targs, idx) = arg;
10047 return 0;
10048
10049 case TEMPLATE_PARM_INDEX:
10050 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
10051
10052 if (TEMPLATE_PARM_LEVEL (parm)
10053 != template_decl_level (tparm))
10054 /* The PARM is not one we're trying to unify. Just check
10055 to see if it matches ARG. */
10056 return !(TREE_CODE (arg) == TREE_CODE (parm)
10057 && cp_tree_equal (parm, arg));
10058
10059 idx = TEMPLATE_PARM_IDX (parm);
10060 targ = TREE_VEC_ELT (targs, idx);
10061
10062 if (targ)
10063 return !cp_tree_equal (targ, arg);
10064
10065 /* [temp.deduct.type] If, in the declaration of a function template
10066 with a non-type template-parameter, the non-type
10067 template-parameter is used in an expression in the function
10068 parameter-list and, if the corresponding template-argument is
10069 deduced, the template-argument type shall match the type of the
10070 template-parameter exactly, except that a template-argument
10071 deduced from an array bound may be of any integral type.
10072 The non-type parameter might use already deduced type parameters. */
10073 tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
10074 if (!TREE_TYPE (arg))
10075 /* Template-parameter dependent expression. Just accept it for now.
10076 It will later be processed in convert_template_argument. */
10077 ;
10078 else if (same_type_p (TREE_TYPE (arg), tparm))
10079 /* OK */;
10080 else if ((strict & UNIFY_ALLOW_INTEGER)
10081 && (TREE_CODE (tparm) == INTEGER_TYPE
10082 || TREE_CODE (tparm) == BOOLEAN_TYPE))
10083 /* Convert the ARG to the type of PARM; the deduced non-type
10084 template argument must exactly match the types of the
10085 corresponding parameter. */
10086 arg = fold (build_nop (TREE_TYPE (parm), arg));
10087 else if (uses_template_parms (tparm))
10088 /* We haven't deduced the type of this parameter yet. Try again
10089 later. */
10090 return 0;
10091 else
10092 return 1;
10093
10094 TREE_VEC_ELT (targs, idx) = arg;
10095 return 0;
10096
10097 case PTRMEM_CST:
10098 {
10099 /* A pointer-to-member constant can be unified only with
10100 another constant. */
10101 if (TREE_CODE (arg) != PTRMEM_CST)
10102 return 1;
10103
10104 /* Just unify the class member. It would be useless (and possibly
10105 wrong, depending on the strict flags) to unify also
10106 PTRMEM_CST_CLASS, because we want to be sure that both parm and
10107 arg refer to the same variable, even if through different
10108 classes. For instance:
10109
10110 struct A { int x; };
10111 struct B : A { };
10112
10113 Unification of &A::x and &B::x must succeed. */
10114 return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
10115 PTRMEM_CST_MEMBER (arg), strict);
10116 }
10117
10118 case POINTER_TYPE:
10119 {
10120 if (TREE_CODE (arg) != POINTER_TYPE)
10121 return 1;
10122
10123 /* [temp.deduct.call]
10124
10125 A can be another pointer or pointer to member type that can
10126 be converted to the deduced A via a qualification
10127 conversion (_conv.qual_).
10128
10129 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
10130 This will allow for additional cv-qualification of the
10131 pointed-to types if appropriate. */
10132
10133 if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
10134 /* The derived-to-base conversion only persists through one
10135 level of pointers. */
10136 strict |= (strict_in & UNIFY_ALLOW_DERIVED);
10137
10138 return unify (tparms, targs, TREE_TYPE (parm),
10139 TREE_TYPE (arg), strict);
10140 }
10141
10142 case REFERENCE_TYPE:
10143 if (TREE_CODE (arg) != REFERENCE_TYPE)
10144 return 1;
10145 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10146 strict & UNIFY_ALLOW_MORE_CV_QUAL);
10147
10148 case ARRAY_TYPE:
10149 if (TREE_CODE (arg) != ARRAY_TYPE)
10150 return 1;
10151 if ((TYPE_DOMAIN (parm) == NULL_TREE)
10152 != (TYPE_DOMAIN (arg) == NULL_TREE))
10153 return 1;
10154 if (TYPE_DOMAIN (parm) != NULL_TREE)
10155 {
10156 tree parm_max;
10157 tree arg_max;
10158
10159 parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
10160 arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
10161
10162 /* Our representation of array types uses "N - 1" as the
10163 TYPE_MAX_VALUE for an array with "N" elements, if "N" is
10164 not an integer constant. */
10165 if (TREE_CODE (parm_max) == MINUS_EXPR)
10166 {
10167 arg_max = fold_build2 (PLUS_EXPR,
10168 integer_type_node,
10169 arg_max,
10170 TREE_OPERAND (parm_max, 1));
10171 parm_max = TREE_OPERAND (parm_max, 0);
10172 }
10173
10174 if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
10175 return 1;
10176 }
10177 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10178 strict & UNIFY_ALLOW_MORE_CV_QUAL);
10179
10180 case REAL_TYPE:
10181 case COMPLEX_TYPE:
10182 case VECTOR_TYPE:
10183 case INTEGER_TYPE:
10184 case BOOLEAN_TYPE:
10185 case ENUMERAL_TYPE:
10186 case VOID_TYPE:
10187 if (TREE_CODE (arg) != TREE_CODE (parm))
10188 return 1;
10189
10190 /* We have already checked cv-qualification at the top of the
10191 function. */
10192 if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
10193 return 1;
10194
10195 /* As far as unification is concerned, this wins. Later checks
10196 will invalidate it if necessary. */
10197 return 0;
10198
10199 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
10200 /* Type INTEGER_CST can come from ordinary constant template args. */
10201 case INTEGER_CST:
10202 while (TREE_CODE (arg) == NOP_EXPR)
10203 arg = TREE_OPERAND (arg, 0);
10204
10205 if (TREE_CODE (arg) != INTEGER_CST)
10206 return 1;
10207 return !tree_int_cst_equal (parm, arg);
10208
10209 case TREE_VEC:
10210 {
10211 int i;
10212 if (TREE_CODE (arg) != TREE_VEC)
10213 return 1;
10214 if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
10215 return 1;
10216 for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
10217 if (unify (tparms, targs,
10218 TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
10219 UNIFY_ALLOW_NONE))
10220 return 1;
10221 return 0;
10222 }
10223
10224 case RECORD_TYPE:
10225 case UNION_TYPE:
10226 if (TREE_CODE (arg) != TREE_CODE (parm))
10227 return 1;
10228
10229 if (TYPE_PTRMEMFUNC_P (parm))
10230 {
10231 if (!TYPE_PTRMEMFUNC_P (arg))
10232 return 1;
10233
10234 return unify (tparms, targs,
10235 TYPE_PTRMEMFUNC_FN_TYPE (parm),
10236 TYPE_PTRMEMFUNC_FN_TYPE (arg),
10237 strict);
10238 }
10239
10240 if (CLASSTYPE_TEMPLATE_INFO (parm))
10241 {
10242 tree t = NULL_TREE;
10243
10244 if (strict_in & UNIFY_ALLOW_DERIVED)
10245 {
10246 /* First, we try to unify the PARM and ARG directly. */
10247 t = try_class_unification (tparms, targs,
10248 parm, arg);
10249
10250 if (!t)
10251 {
10252 /* Fallback to the special case allowed in
10253 [temp.deduct.call]:
10254
10255 If P is a class, and P has the form
10256 template-id, then A can be a derived class of
10257 the deduced A. Likewise, if P is a pointer to
10258 a class of the form template-id, A can be a
10259 pointer to a derived class pointed to by the
10260 deduced A. */
10261 t = get_template_base (tparms, targs, parm, arg);
10262
10263 if (!t)
10264 return 1;
10265 }
10266 }
10267 else if (CLASSTYPE_TEMPLATE_INFO (arg)
10268 && (CLASSTYPE_TI_TEMPLATE (parm)
10269 == CLASSTYPE_TI_TEMPLATE (arg)))
10270 /* Perhaps PARM is something like S<U> and ARG is S<int>.
10271 Then, we should unify `int' and `U'. */
10272 t = arg;
10273 else
10274 /* There's no chance of unification succeeding. */
10275 return 1;
10276
10277 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
10278 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
10279 }
10280 else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
10281 return 1;
10282 return 0;
10283
10284 case METHOD_TYPE:
10285 case FUNCTION_TYPE:
10286 if (TREE_CODE (arg) != TREE_CODE (parm))
10287 return 1;
10288
10289 if (unify (tparms, targs, TREE_TYPE (parm),
10290 TREE_TYPE (arg), UNIFY_ALLOW_NONE))
10291 return 1;
10292 return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
10293 TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
10294 TREE_CODE (parm) == METHOD_TYPE);
10295
10296 case OFFSET_TYPE:
10297 /* Unify a pointer to member with a pointer to member function, which
10298 deduces the type of the member as a function type. */
10299 if (TYPE_PTRMEMFUNC_P (arg))
10300 {
10301 tree method_type;
10302 tree fntype;
10303 cp_cv_quals cv_quals;
10304
10305 /* Check top-level cv qualifiers */
10306 if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
10307 return 1;
10308
10309 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
10310 TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
10311 return 1;
10312
10313 /* Determine the type of the function we are unifying against. */
10314 method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
10315 fntype =
10316 build_function_type (TREE_TYPE (method_type),
10317 TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
10318
10319 /* Extract the cv-qualifiers of the member function from the
10320 implicit object parameter and place them on the function
10321 type to be restored later. */
10322 cv_quals =
10323 cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
10324 fntype = build_qualified_type (fntype, cv_quals);
10325 return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
10326 }
10327
10328 if (TREE_CODE (arg) != OFFSET_TYPE)
10329 return 1;
10330 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
10331 TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
10332 return 1;
10333 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10334 strict);
10335
10336 case CONST_DECL:
10337 if (DECL_TEMPLATE_PARM_P (parm))
10338 return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
10339 if (arg != integral_constant_value (parm))
10340 return 1;
10341 return 0;
10342
10343 case FIELD_DECL:
10344 case TEMPLATE_DECL:
10345 /* Matched cases are handled by the ARG == PARM test above. */
10346 return 1;
10347
10348 default:
10349 gcc_assert (EXPR_P (parm));
10350
10351 /* We must be looking at an expression. This can happen with
10352 something like:
10353
10354 template <int I>
10355 void foo(S<I>, S<I + 2>);
10356
10357 This is a "nondeduced context":
10358
10359 [deduct.type]
10360
10361 The nondeduced contexts are:
10362
10363 --A type that is a template-id in which one or more of
10364 the template-arguments is an expression that references
10365 a template-parameter.
10366
10367 In these cases, we assume deduction succeeded, but don't
10368 actually infer any unifications. */
10369
10370 if (!uses_template_parms (parm)
10371 && !template_args_equal (parm, arg))
10372 return 1;
10373 else
10374 return 0;
10375 }
10376 }
10377 \f
10378 /* Note that DECL can be defined in this translation unit, if
10379 required. */
10380
10381 static void
10382 mark_definable (tree decl)
10383 {
10384 tree clone;
10385 DECL_NOT_REALLY_EXTERN (decl) = 1;
10386 FOR_EACH_CLONE (clone, decl)
10387 DECL_NOT_REALLY_EXTERN (clone) = 1;
10388 }
10389
10390 /* Called if RESULT is explicitly instantiated, or is a member of an
10391 explicitly instantiated class. */
10392
10393 void
10394 mark_decl_instantiated (tree result, int extern_p)
10395 {
10396 SET_DECL_EXPLICIT_INSTANTIATION (result);
10397
10398 /* If this entity has already been written out, it's too late to
10399 make any modifications. */
10400 if (TREE_ASM_WRITTEN (result))
10401 return;
10402
10403 if (TREE_CODE (result) != FUNCTION_DECL)
10404 /* The TREE_PUBLIC flag for function declarations will have been
10405 set correctly by tsubst. */
10406 TREE_PUBLIC (result) = 1;
10407
10408 /* This might have been set by an earlier implicit instantiation. */
10409 DECL_COMDAT (result) = 0;
10410
10411 if (extern_p)
10412 DECL_NOT_REALLY_EXTERN (result) = 0;
10413 else
10414 {
10415 mark_definable (result);
10416 /* Always make artificials weak. */
10417 if (DECL_ARTIFICIAL (result) && flag_weak)
10418 comdat_linkage (result);
10419 /* For WIN32 we also want to put explicit instantiations in
10420 linkonce sections. */
10421 else if (TREE_PUBLIC (result))
10422 maybe_make_one_only (result);
10423 }
10424
10425 /* If EXTERN_P, then this function will not be emitted -- unless
10426 followed by an explicit instantiation, at which point its linkage
10427 will be adjusted. If !EXTERN_P, then this function will be
10428 emitted here. In neither circumstance do we want
10429 import_export_decl to adjust the linkage. */
10430 DECL_INTERFACE_KNOWN (result) = 1;
10431 }
10432
10433 /* Given two function templates PAT1 and PAT2, return:
10434
10435 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
10436 -1 if PAT2 is more specialized than PAT1.
10437 0 if neither is more specialized.
10438
10439 LEN indicates the number of parameters we should consider
10440 (defaulted parameters should not be considered).
10441
10442 The 1998 std underspecified function template partial ordering, and
10443 DR214 addresses the issue. We take pairs of arguments, one from
10444 each of the templates, and deduce them against each other. One of
10445 the templates will be more specialized if all the *other*
10446 template's arguments deduce against its arguments and at least one
10447 of its arguments *does* *not* deduce against the other template's
10448 corresponding argument. Deduction is done as for class templates.
10449 The arguments used in deduction have reference and top level cv
10450 qualifiers removed. Iff both arguments were originally reference
10451 types *and* deduction succeeds in both directions, the template
10452 with the more cv-qualified argument wins for that pairing (if
10453 neither is more cv-qualified, they both are equal). Unlike regular
10454 deduction, after all the arguments have been deduced in this way,
10455 we do *not* verify the deduced template argument values can be
10456 substituted into non-deduced contexts, nor do we have to verify
10457 that all template arguments have been deduced. */
10458
10459 int
10460 more_specialized_fn (tree pat1, tree pat2, int len)
10461 {
10462 tree decl1 = DECL_TEMPLATE_RESULT (pat1);
10463 tree decl2 = DECL_TEMPLATE_RESULT (pat2);
10464 tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
10465 tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
10466 tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
10467 tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
10468 tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
10469 tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
10470 int better1 = 0;
10471 int better2 = 0;
10472
10473 /* If only one is a member function, they are unordered. */
10474 if (DECL_FUNCTION_MEMBER_P (decl1) != DECL_FUNCTION_MEMBER_P (decl2))
10475 return 0;
10476
10477 /* Don't consider 'this' parameter. */
10478 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
10479 args1 = TREE_CHAIN (args1);
10480 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
10481 args2 = TREE_CHAIN (args2);
10482
10483 /* If only one is a conversion operator, they are unordered. */
10484 if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
10485 return 0;
10486
10487 /* Consider the return type for a conversion function */
10488 if (DECL_CONV_FN_P (decl1))
10489 {
10490 args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
10491 args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
10492 len++;
10493 }
10494
10495 processing_template_decl++;
10496
10497 while (len--)
10498 {
10499 tree arg1 = TREE_VALUE (args1);
10500 tree arg2 = TREE_VALUE (args2);
10501 int deduce1, deduce2;
10502 int quals1 = -1;
10503 int quals2 = -1;
10504
10505 if (TREE_CODE (arg1) == REFERENCE_TYPE)
10506 {
10507 arg1 = TREE_TYPE (arg1);
10508 quals1 = cp_type_quals (arg1);
10509 }
10510
10511 if (TREE_CODE (arg2) == REFERENCE_TYPE)
10512 {
10513 arg2 = TREE_TYPE (arg2);
10514 quals2 = cp_type_quals (arg2);
10515 }
10516
10517 if ((quals1 < 0) != (quals2 < 0))
10518 {
10519 /* Only of the args is a reference, see if we should apply
10520 array/function pointer decay to it. This is not part of
10521 DR214, but is, IMHO, consistent with the deduction rules
10522 for the function call itself, and with our earlier
10523 implementation of the underspecified partial ordering
10524 rules. (nathan). */
10525 if (quals1 >= 0)
10526 {
10527 switch (TREE_CODE (arg1))
10528 {
10529 case ARRAY_TYPE:
10530 arg1 = TREE_TYPE (arg1);
10531 /* FALLTHROUGH. */
10532 case FUNCTION_TYPE:
10533 arg1 = build_pointer_type (arg1);
10534 break;
10535
10536 default:
10537 break;
10538 }
10539 }
10540 else
10541 {
10542 switch (TREE_CODE (arg2))
10543 {
10544 case ARRAY_TYPE:
10545 arg2 = TREE_TYPE (arg2);
10546 /* FALLTHROUGH. */
10547 case FUNCTION_TYPE:
10548 arg2 = build_pointer_type (arg2);
10549 break;
10550
10551 default:
10552 break;
10553 }
10554 }
10555 }
10556
10557 arg1 = TYPE_MAIN_VARIANT (arg1);
10558 arg2 = TYPE_MAIN_VARIANT (arg2);
10559
10560 deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
10561 deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
10562
10563 if (!deduce1)
10564 better2 = -1;
10565 if (!deduce2)
10566 better1 = -1;
10567 if (better1 < 0 && better2 < 0)
10568 /* We've failed to deduce something in either direction.
10569 These must be unordered. */
10570 break;
10571
10572 if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
10573 {
10574 /* Deduces in both directions, see if quals can
10575 disambiguate. Pretend the worse one failed to deduce. */
10576 if ((quals1 & quals2) == quals2)
10577 deduce1 = 0;
10578 if ((quals1 & quals2) == quals1)
10579 deduce2 = 0;
10580 }
10581 if (deduce1 && !deduce2 && !better2)
10582 better2 = 1;
10583 if (deduce2 && !deduce1 && !better1)
10584 better1 = 1;
10585
10586 args1 = TREE_CHAIN (args1);
10587 args2 = TREE_CHAIN (args2);
10588 }
10589
10590 processing_template_decl--;
10591
10592 return (better1 > 0) - (better2 > 0);
10593 }
10594
10595 /* Given two class template specialization list nodes PAT1 and PAT2, return:
10596
10597 1 if PAT1 is more specialized than PAT2 as described in [temp.class.order].
10598 -1 if PAT2 is more specialized than PAT1.
10599 0 if neither is more specialized.
10600
10601 FULL_ARGS is the full set of template arguments that triggers this
10602 partial ordering. */
10603
10604 int
10605 more_specialized_class (tree pat1, tree pat2, tree full_args)
10606 {
10607 tree targs;
10608 int winner = 0;
10609
10610 /* Just like what happens for functions, if we are ordering between
10611 different class template specializations, we may encounter dependent
10612 types in the arguments, and we need our dependency check functions
10613 to behave correctly. */
10614 ++processing_template_decl;
10615 targs = get_class_bindings (TREE_VALUE (pat1), TREE_PURPOSE (pat1),
10616 add_outermost_template_args (full_args, TREE_PURPOSE (pat2)));
10617 if (targs)
10618 --winner;
10619
10620 targs = get_class_bindings (TREE_VALUE (pat2), TREE_PURPOSE (pat2),
10621 add_outermost_template_args (full_args, TREE_PURPOSE (pat1)));
10622 if (targs)
10623 ++winner;
10624 --processing_template_decl;
10625
10626 return winner;
10627 }
10628
10629 /* Return the template arguments that will produce the function signature
10630 DECL from the function template FN, with the explicit template
10631 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is true, the return type must
10632 also match. Return NULL_TREE if no satisfactory arguments could be
10633 found. */
10634
10635 static tree
10636 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
10637 {
10638 int ntparms = DECL_NTPARMS (fn);
10639 tree targs = make_tree_vec (ntparms);
10640 tree decl_type;
10641 tree decl_arg_types;
10642
10643 /* Substitute the explicit template arguments into the type of DECL.
10644 The call to fn_type_unification will handle substitution into the
10645 FN. */
10646 decl_type = TREE_TYPE (decl);
10647 if (explicit_args && uses_template_parms (decl_type))
10648 {
10649 tree tmpl;
10650 tree converted_args;
10651
10652 if (DECL_TEMPLATE_INFO (decl))
10653 tmpl = DECL_TI_TEMPLATE (decl);
10654 else
10655 /* We can get here for some invalid specializations. */
10656 return NULL_TREE;
10657
10658 converted_args
10659 = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
10660 explicit_args, NULL_TREE,
10661 tf_none, /*require_all_arguments=*/0));
10662 if (converted_args == error_mark_node)
10663 return NULL_TREE;
10664
10665 decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
10666 if (decl_type == error_mark_node)
10667 return NULL_TREE;
10668 }
10669
10670 decl_arg_types = TYPE_ARG_TYPES (decl_type);
10671 /* Never do unification on the 'this' parameter. */
10672 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10673 decl_arg_types = TREE_CHAIN (decl_arg_types);
10674
10675 if (fn_type_unification (fn, explicit_args, targs,
10676 decl_arg_types,
10677 (check_rettype || DECL_CONV_FN_P (fn)
10678 ? TREE_TYPE (decl_type) : NULL_TREE),
10679 DEDUCE_EXACT))
10680 return NULL_TREE;
10681
10682 return targs;
10683 }
10684
10685 /* Return the innermost template arguments that, when applied to a
10686 template specialization whose innermost template parameters are
10687 TPARMS, and whose specialization arguments are PARMS, yield the
10688 ARGS.
10689
10690 For example, suppose we have:
10691
10692 template <class T, class U> struct S {};
10693 template <class T> struct S<T*, int> {};
10694
10695 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
10696 {T}, the PARMS will be {T*, int} and the ARGS will be {double*,
10697 int}. The resulting vector will be {double}, indicating that `T'
10698 is bound to `double'. */
10699
10700 static tree
10701 get_class_bindings (tree tparms, tree parms, tree args)
10702 {
10703 int i, ntparms = TREE_VEC_LENGTH (tparms);
10704 tree vec = make_tree_vec (ntparms);
10705
10706 if (unify (tparms, vec, parms, INNERMOST_TEMPLATE_ARGS (args),
10707 UNIFY_ALLOW_NONE))
10708 return NULL_TREE;
10709
10710 for (i = 0; i < ntparms; ++i)
10711 if (! TREE_VEC_ELT (vec, i))
10712 return NULL_TREE;
10713
10714 if (verify_class_unification (vec, parms, args))
10715 return NULL_TREE;
10716
10717 return vec;
10718 }
10719
10720 /* In INSTANTIATIONS is a list of <INSTANTIATION, TEMPLATE> pairs.
10721 Pick the most specialized template, and return the corresponding
10722 instantiation, or if there is no corresponding instantiation, the
10723 template itself. If there is no most specialized template,
10724 error_mark_node is returned. If there are no templates at all,
10725 NULL_TREE is returned. */
10726
10727 tree
10728 most_specialized_instantiation (tree instantiations)
10729 {
10730 tree fn, champ;
10731
10732 if (!instantiations)
10733 return NULL_TREE;
10734
10735 ++processing_template_decl;
10736
10737 champ = instantiations;
10738 for (fn = TREE_CHAIN (instantiations); fn; fn = TREE_CHAIN (fn))
10739 {
10740 int fate = 0;
10741
10742 if (get_bindings (TREE_VALUE (champ),
10743 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
10744 NULL_TREE, /*check_ret=*/false))
10745 fate--;
10746
10747 if (get_bindings (TREE_VALUE (fn),
10748 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
10749 NULL_TREE, /*check_ret=*/false))
10750 fate++;
10751
10752 if (fate != 1)
10753 {
10754 if (!fate)
10755 /* Equally specialized, move to next function. If there
10756 is no next function, nothing's most specialized. */
10757 fn = TREE_CHAIN (fn);
10758 champ = fn;
10759 }
10760 }
10761
10762 if (champ)
10763 /* Now verify that champ is better than everything earlier in the
10764 instantiation list. */
10765 for (fn = instantiations; fn != champ; fn = TREE_CHAIN (fn))
10766 if (get_bindings (TREE_VALUE (champ),
10767 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
10768 NULL_TREE, /*check_ret=*/false)
10769 || !get_bindings (TREE_VALUE (fn),
10770 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
10771 NULL_TREE, /*check_ret=*/false))
10772 {
10773 champ = NULL_TREE;
10774 break;
10775 }
10776
10777 processing_template_decl--;
10778
10779 if (!champ)
10780 return error_mark_node;
10781
10782 return TREE_PURPOSE (champ) ? TREE_PURPOSE (champ) : TREE_VALUE (champ);
10783 }
10784
10785 /* Return the most specialized of the list of templates in FNS that can
10786 produce an instantiation matching DECL, given the explicit template
10787 arguments EXPLICIT_ARGS. */
10788
10789 static tree
10790 most_specialized (tree fns, tree decl, tree explicit_args)
10791 {
10792 tree candidates = NULL_TREE;
10793 tree fn, args;
10794
10795 for (fn = fns; fn; fn = TREE_CHAIN (fn))
10796 {
10797 tree candidate = TREE_VALUE (fn);
10798
10799 args = get_bindings (candidate, decl, explicit_args, /*check_ret=*/true);
10800 if (args)
10801 candidates = tree_cons (NULL_TREE, candidate, candidates);
10802 }
10803
10804 return most_specialized_instantiation (candidates);
10805 }
10806
10807 /* If DECL is a specialization of some template, return the most
10808 general such template. Otherwise, returns NULL_TREE.
10809
10810 For example, given:
10811
10812 template <class T> struct S { template <class U> void f(U); };
10813
10814 if TMPL is `template <class U> void S<int>::f(U)' this will return
10815 the full template. This function will not trace past partial
10816 specializations, however. For example, given in addition:
10817
10818 template <class T> struct S<T*> { template <class U> void f(U); };
10819
10820 if TMPL is `template <class U> void S<int*>::f(U)' this will return
10821 `template <class T> template <class U> S<T*>::f(U)'. */
10822
10823 tree
10824 most_general_template (tree decl)
10825 {
10826 /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
10827 an immediate specialization. */
10828 if (TREE_CODE (decl) == FUNCTION_DECL)
10829 {
10830 if (DECL_TEMPLATE_INFO (decl)) {
10831 decl = DECL_TI_TEMPLATE (decl);
10832
10833 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
10834 template friend. */
10835 if (TREE_CODE (decl) != TEMPLATE_DECL)
10836 return NULL_TREE;
10837 } else
10838 return NULL_TREE;
10839 }
10840
10841 /* Look for more and more general templates. */
10842 while (DECL_TEMPLATE_INFO (decl))
10843 {
10844 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
10845 (See cp-tree.h for details.) */
10846 if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
10847 break;
10848
10849 if (CLASS_TYPE_P (TREE_TYPE (decl))
10850 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
10851 break;
10852
10853 /* Stop if we run into an explicitly specialized class template. */
10854 if (!DECL_NAMESPACE_SCOPE_P (decl)
10855 && DECL_CONTEXT (decl)
10856 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
10857 break;
10858
10859 decl = DECL_TI_TEMPLATE (decl);
10860 }
10861
10862 return decl;
10863 }
10864
10865 /* Return the most specialized of the class template specializations
10866 of TMPL which can produce an instantiation matching ARGS, or
10867 error_mark_node if the choice is ambiguous. */
10868
10869 static tree
10870 most_specialized_class (tree tmpl, tree args)
10871 {
10872 tree list = NULL_TREE;
10873 tree t;
10874 tree champ;
10875 int fate;
10876
10877 tmpl = most_general_template (tmpl);
10878 for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
10879 {
10880 tree spec_args
10881 = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args);
10882 if (spec_args)
10883 {
10884 list = tree_cons (TREE_PURPOSE (t), TREE_VALUE (t), list);
10885 TREE_TYPE (list) = TREE_TYPE (t);
10886 }
10887 }
10888
10889 if (! list)
10890 return NULL_TREE;
10891
10892 t = list;
10893 champ = t;
10894 t = TREE_CHAIN (t);
10895 for (; t; t = TREE_CHAIN (t))
10896 {
10897 fate = more_specialized_class (champ, t, args);
10898 if (fate == 1)
10899 ;
10900 else
10901 {
10902 if (fate == 0)
10903 {
10904 t = TREE_CHAIN (t);
10905 if (! t)
10906 return error_mark_node;
10907 }
10908 champ = t;
10909 }
10910 }
10911
10912 for (t = list; t && t != champ; t = TREE_CHAIN (t))
10913 {
10914 fate = more_specialized_class (champ, t, args);
10915 if (fate != 1)
10916 return error_mark_node;
10917 }
10918
10919 return champ;
10920 }
10921
10922 /* Explicitly instantiate DECL. */
10923
10924 void
10925 do_decl_instantiation (tree decl, tree storage)
10926 {
10927 tree result = NULL_TREE;
10928 int extern_p = 0;
10929
10930 if (!decl)
10931 /* An error occurred, for which grokdeclarator has already issued
10932 an appropriate message. */
10933 return;
10934 else if (! DECL_LANG_SPECIFIC (decl))
10935 {
10936 error ("explicit instantiation of non-template %q#D", decl);
10937 return;
10938 }
10939 else if (TREE_CODE (decl) == VAR_DECL)
10940 {
10941 /* There is an asymmetry here in the way VAR_DECLs and
10942 FUNCTION_DECLs are handled by grokdeclarator. In the case of
10943 the latter, the DECL we get back will be marked as a
10944 template instantiation, and the appropriate
10945 DECL_TEMPLATE_INFO will be set up. This does not happen for
10946 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
10947 should handle VAR_DECLs as it currently handles
10948 FUNCTION_DECLs. */
10949 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
10950 if (!result || TREE_CODE (result) != VAR_DECL)
10951 {
10952 error ("no matching template for %qD found", decl);
10953 return;
10954 }
10955 }
10956 else if (TREE_CODE (decl) != FUNCTION_DECL)
10957 {
10958 error ("explicit instantiation of %q#D", decl);
10959 return;
10960 }
10961 else
10962 result = decl;
10963
10964 /* Check for various error cases. Note that if the explicit
10965 instantiation is valid the RESULT will currently be marked as an
10966 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
10967 until we get here. */
10968
10969 if (DECL_TEMPLATE_SPECIALIZATION (result))
10970 {
10971 /* DR 259 [temp.spec].
10972
10973 Both an explicit instantiation and a declaration of an explicit
10974 specialization shall not appear in a program unless the explicit
10975 instantiation follows a declaration of the explicit specialization.
10976
10977 For a given set of template parameters, if an explicit
10978 instantiation of a template appears after a declaration of an
10979 explicit specialization for that template, the explicit
10980 instantiation has no effect. */
10981 return;
10982 }
10983 else if (DECL_EXPLICIT_INSTANTIATION (result))
10984 {
10985 /* [temp.spec]
10986
10987 No program shall explicitly instantiate any template more
10988 than once.
10989
10990 We check DECL_NOT_REALLY_EXTERN so as not to complain when
10991 the first instantiation was `extern' and the second is not,
10992 and EXTERN_P for the opposite case. */
10993 if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
10994 pedwarn ("duplicate explicit instantiation of %q#D", result);
10995 /* If an "extern" explicit instantiation follows an ordinary
10996 explicit instantiation, the template is instantiated. */
10997 if (extern_p)
10998 return;
10999 }
11000 else if (!DECL_IMPLICIT_INSTANTIATION (result))
11001 {
11002 error ("no matching template for %qD found", result);
11003 return;
11004 }
11005 else if (!DECL_TEMPLATE_INFO (result))
11006 {
11007 pedwarn ("explicit instantiation of non-template %q#D", result);
11008 return;
11009 }
11010
11011 if (storage == NULL_TREE)
11012 ;
11013 else if (storage == ridpointers[(int) RID_EXTERN])
11014 {
11015 if (pedantic && !in_system_header)
11016 pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
11017 "instantiations");
11018 extern_p = 1;
11019 }
11020 else
11021 error ("storage class %qD applied to template instantiation", storage);
11022
11023 mark_decl_instantiated (result, extern_p);
11024 if (! extern_p)
11025 instantiate_decl (result, /*defer_ok=*/1,
11026 /*expl_inst_class_mem_p=*/false);
11027 }
11028
11029 void
11030 mark_class_instantiated (tree t, int extern_p)
11031 {
11032 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
11033 SET_CLASSTYPE_INTERFACE_KNOWN (t);
11034 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
11035 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
11036 if (! extern_p)
11037 {
11038 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
11039 rest_of_type_compilation (t, 1);
11040 }
11041 }
11042
11043 /* Called from do_type_instantiation through binding_table_foreach to
11044 do recursive instantiation for the type bound in ENTRY. */
11045 static void
11046 bt_instantiate_type_proc (binding_entry entry, void *data)
11047 {
11048 tree storage = *(tree *) data;
11049
11050 if (IS_AGGR_TYPE (entry->type)
11051 && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
11052 do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
11053 }
11054
11055 /* Called from do_type_instantiation to instantiate a member
11056 (a member function or a static member variable) of an
11057 explicitly instantiated class template. */
11058 static void
11059 instantiate_class_member (tree decl, int extern_p)
11060 {
11061 mark_decl_instantiated (decl, extern_p);
11062 if (! extern_p)
11063 instantiate_decl (decl, /*defer_ok=*/1,
11064 /*expl_inst_class_mem_p=*/true);
11065 }
11066
11067 /* Perform an explicit instantiation of template class T. STORAGE, if
11068 non-null, is the RID for extern, inline or static. COMPLAIN is
11069 nonzero if this is called from the parser, zero if called recursively,
11070 since the standard is unclear (as detailed below). */
11071
11072 void
11073 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
11074 {
11075 int extern_p = 0;
11076 int nomem_p = 0;
11077 int static_p = 0;
11078 int previous_instantiation_extern_p = 0;
11079
11080 if (TREE_CODE (t) == TYPE_DECL)
11081 t = TREE_TYPE (t);
11082
11083 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
11084 {
11085 error ("explicit instantiation of non-template type %qT", t);
11086 return;
11087 }
11088
11089 complete_type (t);
11090
11091 if (!COMPLETE_TYPE_P (t))
11092 {
11093 if (complain & tf_error)
11094 error ("explicit instantiation of %q#T before definition of template",
11095 t);
11096 return;
11097 }
11098
11099 if (storage != NULL_TREE)
11100 {
11101 if (pedantic && !in_system_header)
11102 pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
11103 storage);
11104
11105 if (storage == ridpointers[(int) RID_INLINE])
11106 nomem_p = 1;
11107 else if (storage == ridpointers[(int) RID_EXTERN])
11108 extern_p = 1;
11109 else if (storage == ridpointers[(int) RID_STATIC])
11110 static_p = 1;
11111 else
11112 {
11113 error ("storage class %qD applied to template instantiation",
11114 storage);
11115 extern_p = 0;
11116 }
11117 }
11118
11119 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
11120 {
11121 /* DR 259 [temp.spec].
11122
11123 Both an explicit instantiation and a declaration of an explicit
11124 specialization shall not appear in a program unless the explicit
11125 instantiation follows a declaration of the explicit specialization.
11126
11127 For a given set of template parameters, if an explicit
11128 instantiation of a template appears after a declaration of an
11129 explicit specialization for that template, the explicit
11130 instantiation has no effect. */
11131 return;
11132 }
11133 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
11134 {
11135 /* [temp.spec]
11136
11137 No program shall explicitly instantiate any template more
11138 than once.
11139
11140 If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
11141 instantiation was `extern'. If EXTERN_P then the second is.
11142 These cases are OK. */
11143 previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
11144
11145 if (!previous_instantiation_extern_p && !extern_p
11146 && (complain & tf_error))
11147 pedwarn ("duplicate explicit instantiation of %q#T", t);
11148
11149 /* If we've already instantiated the template, just return now. */
11150 if (!CLASSTYPE_INTERFACE_ONLY (t))
11151 return;
11152 }
11153
11154 mark_class_instantiated (t, extern_p);
11155
11156 if (nomem_p)
11157 return;
11158
11159 {
11160 tree tmp;
11161
11162 /* In contrast to implicit instantiation, where only the
11163 declarations, and not the definitions, of members are
11164 instantiated, we have here:
11165
11166 [temp.explicit]
11167
11168 The explicit instantiation of a class template specialization
11169 implies the instantiation of all of its members not
11170 previously explicitly specialized in the translation unit
11171 containing the explicit instantiation.
11172
11173 Of course, we can't instantiate member template classes, since
11174 we don't have any arguments for them. Note that the standard
11175 is unclear on whether the instantiation of the members are
11176 *explicit* instantiations or not. However, the most natural
11177 interpretation is that it should be an explicit instantiation. */
11178
11179 if (! static_p)
11180 for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
11181 if (TREE_CODE (tmp) == FUNCTION_DECL
11182 && DECL_TEMPLATE_INSTANTIATION (tmp))
11183 instantiate_class_member (tmp, extern_p);
11184
11185 for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
11186 if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
11187 instantiate_class_member (tmp, extern_p);
11188
11189 if (CLASSTYPE_NESTED_UTDS (t))
11190 binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
11191 bt_instantiate_type_proc, &storage);
11192 }
11193 }
11194
11195 /* Given a function DECL, which is a specialization of TMPL, modify
11196 DECL to be a re-instantiation of TMPL with the same template
11197 arguments. TMPL should be the template into which tsubst'ing
11198 should occur for DECL, not the most general template.
11199
11200 One reason for doing this is a scenario like this:
11201
11202 template <class T>
11203 void f(const T&, int i);
11204
11205 void g() { f(3, 7); }
11206
11207 template <class T>
11208 void f(const T& t, const int i) { }
11209
11210 Note that when the template is first instantiated, with
11211 instantiate_template, the resulting DECL will have no name for the
11212 first parameter, and the wrong type for the second. So, when we go
11213 to instantiate the DECL, we regenerate it. */
11214
11215 static void
11216 regenerate_decl_from_template (tree decl, tree tmpl)
11217 {
11218 /* The arguments used to instantiate DECL, from the most general
11219 template. */
11220 tree args;
11221 tree code_pattern;
11222
11223 args = DECL_TI_ARGS (decl);
11224 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
11225
11226 /* Make sure that we can see identifiers, and compute access
11227 correctly. */
11228 push_access_scope (decl);
11229
11230 if (TREE_CODE (decl) == FUNCTION_DECL)
11231 {
11232 tree decl_parm;
11233 tree pattern_parm;
11234 tree specs;
11235 int args_depth;
11236 int parms_depth;
11237
11238 args_depth = TMPL_ARGS_DEPTH (args);
11239 parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
11240 if (args_depth > parms_depth)
11241 args = get_innermost_template_args (args, parms_depth);
11242
11243 specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
11244 args, tf_error, NULL_TREE);
11245 if (specs)
11246 TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
11247 specs);
11248
11249 /* Merge parameter declarations. */
11250 decl_parm = skip_artificial_parms_for (decl,
11251 DECL_ARGUMENTS (decl));
11252 pattern_parm
11253 = skip_artificial_parms_for (code_pattern,
11254 DECL_ARGUMENTS (code_pattern));
11255 while (decl_parm)
11256 {
11257 tree parm_type;
11258 tree attributes;
11259
11260 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
11261 DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
11262 parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
11263 NULL_TREE);
11264 parm_type = type_decays_to (parm_type);
11265 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
11266 TREE_TYPE (decl_parm) = parm_type;
11267 attributes = DECL_ATTRIBUTES (pattern_parm);
11268 if (DECL_ATTRIBUTES (decl_parm) != attributes)
11269 {
11270 DECL_ATTRIBUTES (decl_parm) = attributes;
11271 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
11272 }
11273 decl_parm = TREE_CHAIN (decl_parm);
11274 pattern_parm = TREE_CHAIN (pattern_parm);
11275 }
11276
11277 /* Merge additional specifiers from the CODE_PATTERN. */
11278 if (DECL_DECLARED_INLINE_P (code_pattern)
11279 && !DECL_DECLARED_INLINE_P (decl))
11280 DECL_DECLARED_INLINE_P (decl) = 1;
11281 if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
11282 DECL_INLINE (decl) = 1;
11283 }
11284 else if (TREE_CODE (decl) == VAR_DECL)
11285 {
11286 if (!DECL_INITIALIZED_IN_CLASS_P (decl)
11287 && DECL_INITIAL (code_pattern))
11288 DECL_INITIAL (decl) =
11289 tsubst_expr (DECL_INITIAL (code_pattern), args,
11290 tf_error, DECL_TI_TEMPLATE (decl));
11291 }
11292 else
11293 gcc_unreachable ();
11294
11295 pop_access_scope (decl);
11296 }
11297
11298 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
11299 substituted to get DECL. */
11300
11301 tree
11302 template_for_substitution (tree decl)
11303 {
11304 tree tmpl = DECL_TI_TEMPLATE (decl);
11305
11306 /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
11307 for the instantiation. This is not always the most general
11308 template. Consider, for example:
11309
11310 template <class T>
11311 struct S { template <class U> void f();
11312 template <> void f<int>(); };
11313
11314 and an instantiation of S<double>::f<int>. We want TD to be the
11315 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
11316 while (/* An instantiation cannot have a definition, so we need a
11317 more general template. */
11318 DECL_TEMPLATE_INSTANTIATION (tmpl)
11319 /* We must also deal with friend templates. Given:
11320
11321 template <class T> struct S {
11322 template <class U> friend void f() {};
11323 };
11324
11325 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
11326 so far as the language is concerned, but that's still
11327 where we get the pattern for the instantiation from. On
11328 other hand, if the definition comes outside the class, say:
11329
11330 template <class T> struct S {
11331 template <class U> friend void f();
11332 };
11333 template <class U> friend void f() {}
11334
11335 we don't need to look any further. That's what the check for
11336 DECL_INITIAL is for. */
11337 || (TREE_CODE (decl) == FUNCTION_DECL
11338 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
11339 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
11340 {
11341 /* The present template, TD, should not be a definition. If it
11342 were a definition, we should be using it! Note that we
11343 cannot restructure the loop to just keep going until we find
11344 a template with a definition, since that might go too far if
11345 a specialization was declared, but not defined. */
11346 gcc_assert (TREE_CODE (decl) != VAR_DECL
11347 || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
11348
11349 /* Fetch the more general template. */
11350 tmpl = DECL_TI_TEMPLATE (tmpl);
11351 }
11352
11353 return tmpl;
11354 }
11355
11356 /* Produce the definition of D, a _DECL generated from a template. If
11357 DEFER_OK is nonzero, then we don't have to actually do the
11358 instantiation now; we just have to do it sometime. Normally it is
11359 an error if this is an explicit instantiation but D is undefined.
11360 EXPL_INST_CLASS_MEM_P is true iff D is a member of an
11361 explicitly instantiated class template. */
11362
11363 tree
11364 instantiate_decl (tree d, int defer_ok,
11365 bool expl_inst_class_mem_p)
11366 {
11367 tree tmpl = DECL_TI_TEMPLATE (d);
11368 tree gen_args;
11369 tree args;
11370 tree td;
11371 tree code_pattern;
11372 tree spec;
11373 tree gen_tmpl;
11374 int pattern_defined;
11375 int need_push;
11376 location_t saved_loc = input_location;
11377
11378 /* This function should only be used to instantiate templates for
11379 functions and static member variables. */
11380 gcc_assert (TREE_CODE (d) == FUNCTION_DECL
11381 || TREE_CODE (d) == VAR_DECL);
11382
11383 /* Variables are never deferred; if instantiation is required, they
11384 are instantiated right away. That allows for better code in the
11385 case that an expression refers to the value of the variable --
11386 if the variable has a constant value the referring expression can
11387 take advantage of that fact. */
11388 if (TREE_CODE (d) == VAR_DECL)
11389 defer_ok = 0;
11390
11391 /* Don't instantiate cloned functions. Instead, instantiate the
11392 functions they cloned. */
11393 if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
11394 d = DECL_CLONED_FUNCTION (d);
11395
11396 if (DECL_TEMPLATE_INSTANTIATED (d))
11397 /* D has already been instantiated. It might seem reasonable to
11398 check whether or not D is an explicit instantiation, and, if so,
11399 stop here. But when an explicit instantiation is deferred
11400 until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
11401 is set, even though we still need to do the instantiation. */
11402 return d;
11403
11404 /* If we already have a specialization of this declaration, then
11405 there's no reason to instantiate it. Note that
11406 retrieve_specialization gives us both instantiations and
11407 specializations, so we must explicitly check
11408 DECL_TEMPLATE_SPECIALIZATION. */
11409 gen_tmpl = most_general_template (tmpl);
11410 gen_args = DECL_TI_ARGS (d);
11411 spec = retrieve_specialization (gen_tmpl, gen_args,
11412 /*class_specializations_p=*/false);
11413 if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
11414 return spec;
11415
11416 /* This needs to happen before any tsubsting. */
11417 if (! push_tinst_level (d))
11418 return d;
11419
11420 timevar_push (TV_PARSE);
11421
11422 /* We may be in the middle of deferred access check. Disable it now. */
11423 push_deferring_access_checks (dk_no_deferred);
11424
11425 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
11426 for the instantiation. */
11427 td = template_for_substitution (d);
11428 code_pattern = DECL_TEMPLATE_RESULT (td);
11429
11430 if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
11431 || DECL_TEMPLATE_SPECIALIZATION (td))
11432 /* In the case of a friend template whose definition is provided
11433 outside the class, we may have too many arguments. Drop the
11434 ones we don't need. The same is true for specializations. */
11435 args = get_innermost_template_args
11436 (gen_args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td)));
11437 else
11438 args = gen_args;
11439
11440 if (TREE_CODE (d) == FUNCTION_DECL)
11441 pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
11442 else
11443 pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
11444 /* Unless an explicit instantiation directive has already determined
11445 the linkage of D, remember that a definition is available for
11446 this entity. */
11447 if (pattern_defined
11448 && !DECL_INTERFACE_KNOWN (d)
11449 && !DECL_NOT_REALLY_EXTERN (d))
11450 mark_definable (d);
11451
11452 input_location = DECL_SOURCE_LOCATION (d);
11453
11454 /* If D is a member of an explicitly instantiated class template,
11455 and no definition is available, treat it like an implicit
11456 instantiation. */
11457 if (!pattern_defined && expl_inst_class_mem_p
11458 && DECL_EXPLICIT_INSTANTIATION (d))
11459 {
11460 DECL_NOT_REALLY_EXTERN (d) = 0;
11461 DECL_INTERFACE_KNOWN (d) = 0;
11462 SET_DECL_IMPLICIT_INSTANTIATION (d);
11463 }
11464
11465 if (!defer_ok)
11466 {
11467 /* Recheck the substitutions to obtain any warning messages
11468 about ignoring cv qualifiers. */
11469 tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
11470 tree type = TREE_TYPE (gen);
11471
11472 /* Make sure that we can see identifiers, and compute access
11473 correctly. D is already the target FUNCTION_DECL with the
11474 right context. */
11475 push_access_scope (d);
11476
11477 if (TREE_CODE (gen) == FUNCTION_DECL)
11478 {
11479 tsubst (DECL_ARGUMENTS (gen), gen_args, tf_error | tf_warning, d);
11480 tsubst (TYPE_RAISES_EXCEPTIONS (type), gen_args,
11481 tf_error | tf_warning, d);
11482 /* Don't simply tsubst the function type, as that will give
11483 duplicate warnings about poor parameter qualifications.
11484 The function arguments are the same as the decl_arguments
11485 without the top level cv qualifiers. */
11486 type = TREE_TYPE (type);
11487 }
11488 tsubst (type, gen_args, tf_error | tf_warning, d);
11489
11490 pop_access_scope (d);
11491 }
11492
11493 /* We should have set up DECL_INITIAL in instantiate_class_template
11494 for in-class definitions of static data members. */
11495 gcc_assert (!(TREE_CODE (d) == VAR_DECL
11496 && DECL_INITIALIZED_IN_CLASS_P (d)
11497 && DECL_INITIAL (d) == NULL_TREE));
11498
11499 /* Do not instantiate templates that we know will be defined
11500 elsewhere. */
11501 if (DECL_INTERFACE_KNOWN (d)
11502 && DECL_REALLY_EXTERN (d)
11503 && ! (TREE_CODE (d) == FUNCTION_DECL
11504 && DECL_INLINE (d)))
11505 goto out;
11506 /* Defer all other templates, unless we have been explicitly
11507 forbidden from doing so. We restore the source position here
11508 because it's used by add_pending_template. */
11509 else if (! pattern_defined || defer_ok)
11510 {
11511 input_location = saved_loc;
11512
11513 if (at_eof && !pattern_defined
11514 && DECL_EXPLICIT_INSTANTIATION (d))
11515 /* [temp.explicit]
11516
11517 The definition of a non-exported function template, a
11518 non-exported member function template, or a non-exported
11519 member function or static data member of a class template
11520 shall be present in every translation unit in which it is
11521 explicitly instantiated. */
11522 pedwarn
11523 ("explicit instantiation of %qD but no definition available", d);
11524
11525 add_pending_template (d);
11526 goto out;
11527 }
11528 /* Tell the repository that D is available in this translation unit
11529 -- and see if it is supposed to be instantiated here. */
11530 if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
11531 {
11532 /* In a PCH file, despite the fact that the repository hasn't
11533 requested instantiation in the PCH it is still possible that
11534 an instantiation will be required in a file that includes the
11535 PCH. */
11536 if (pch_file)
11537 add_pending_template (d);
11538 /* Instantiate inline functions so that the inliner can do its
11539 job, even though we'll not be emitting a copy of this
11540 function. */
11541 if (!(TREE_CODE (d) == FUNCTION_DECL
11542 && flag_inline_trees
11543 && DECL_DECLARED_INLINE_P (d)))
11544 goto out;
11545 }
11546
11547 need_push = !cfun || !global_bindings_p ();
11548 if (need_push)
11549 push_to_top_level ();
11550
11551 /* Mark D as instantiated so that recursive calls to
11552 instantiate_decl do not try to instantiate it again. */
11553 DECL_TEMPLATE_INSTANTIATED (d) = 1;
11554
11555 /* Regenerate the declaration in case the template has been modified
11556 by a subsequent redeclaration. */
11557 regenerate_decl_from_template (d, td);
11558
11559 /* We already set the file and line above. Reset them now in case
11560 they changed as a result of calling regenerate_decl_from_template. */
11561 input_location = DECL_SOURCE_LOCATION (d);
11562
11563 if (TREE_CODE (d) == VAR_DECL)
11564 {
11565 /* Clear out DECL_RTL; whatever was there before may not be right
11566 since we've reset the type of the declaration. */
11567 SET_DECL_RTL (d, NULL_RTX);
11568 DECL_IN_AGGR_P (d) = 0;
11569
11570 /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
11571 initializer. That function will defer actual emission until
11572 we have a chance to determine linkage. */
11573 DECL_EXTERNAL (d) = 0;
11574
11575 /* Enter the scope of D so that access-checking works correctly. */
11576 push_nested_class (DECL_CONTEXT (d));
11577 cp_finish_decl (d,
11578 (!DECL_INITIALIZED_IN_CLASS_P (d)
11579 ? DECL_INITIAL (d) : NULL_TREE),
11580 NULL_TREE, 0);
11581 pop_nested_class ();
11582 }
11583 else if (TREE_CODE (d) == FUNCTION_DECL)
11584 {
11585 htab_t saved_local_specializations;
11586 tree subst_decl;
11587 tree tmpl_parm;
11588 tree spec_parm;
11589
11590 /* Save away the current list, in case we are instantiating one
11591 template from within the body of another. */
11592 saved_local_specializations = local_specializations;
11593
11594 /* Set up the list of local specializations. */
11595 local_specializations = htab_create (37,
11596 hash_local_specialization,
11597 eq_local_specializations,
11598 NULL);
11599
11600 /* Set up context. */
11601 start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
11602
11603 /* Create substitution entries for the parameters. */
11604 subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
11605 tmpl_parm = DECL_ARGUMENTS (subst_decl);
11606 spec_parm = DECL_ARGUMENTS (d);
11607 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
11608 {
11609 register_local_specialization (spec_parm, tmpl_parm);
11610 spec_parm = skip_artificial_parms_for (d, spec_parm);
11611 tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
11612 }
11613 while (tmpl_parm)
11614 {
11615 register_local_specialization (spec_parm, tmpl_parm);
11616 tmpl_parm = TREE_CHAIN (tmpl_parm);
11617 spec_parm = TREE_CHAIN (spec_parm);
11618 }
11619 gcc_assert (!spec_parm);
11620
11621 /* Substitute into the body of the function. */
11622 tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
11623 tf_error | tf_warning, tmpl);
11624
11625 /* We don't need the local specializations any more. */
11626 htab_delete (local_specializations);
11627 local_specializations = saved_local_specializations;
11628
11629 /* Finish the function. */
11630 d = finish_function (0);
11631 expand_or_defer_fn (d);
11632 }
11633
11634 /* We're not deferring instantiation any more. */
11635 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
11636
11637 if (need_push)
11638 pop_from_top_level ();
11639
11640 out:
11641 input_location = saved_loc;
11642 pop_deferring_access_checks ();
11643 pop_tinst_level ();
11644
11645 timevar_pop (TV_PARSE);
11646
11647 return d;
11648 }
11649
11650 /* Run through the list of templates that we wish we could
11651 instantiate, and instantiate any we can. RETRIES is the
11652 number of times we retry pending template instantiation. */
11653
11654 void
11655 instantiate_pending_templates (int retries)
11656 {
11657 tree *t;
11658 tree last = NULL_TREE;
11659 int reconsider;
11660 location_t saved_loc = input_location;
11661 int saved_in_system_header = in_system_header;
11662
11663 /* Instantiating templates may trigger vtable generation. This in turn
11664 may require further template instantiations. We place a limit here
11665 to avoid infinite loop. */
11666 if (pending_templates && retries >= max_tinst_depth)
11667 {
11668 error ("template instantiation depth exceeds maximum of %d"
11669 " instantiating %q+D, possibly from virtual table generation"
11670 " (use -ftemplate-depth-NN to increase the maximum)",
11671 max_tinst_depth, TREE_VALUE (pending_templates));
11672 return;
11673 }
11674
11675 do
11676 {
11677 reconsider = 0;
11678
11679 t = &pending_templates;
11680 while (*t)
11681 {
11682 tree instantiation = TREE_VALUE (*t);
11683
11684 reopen_tinst_level (TREE_PURPOSE (*t));
11685
11686 if (TYPE_P (instantiation))
11687 {
11688 tree fn;
11689
11690 if (!COMPLETE_TYPE_P (instantiation))
11691 {
11692 instantiate_class_template (instantiation);
11693 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
11694 for (fn = TYPE_METHODS (instantiation);
11695 fn;
11696 fn = TREE_CHAIN (fn))
11697 if (! DECL_ARTIFICIAL (fn))
11698 instantiate_decl (fn,
11699 /*defer_ok=*/0,
11700 /*expl_inst_class_mem_p=*/false);
11701 if (COMPLETE_TYPE_P (instantiation))
11702 reconsider = 1;
11703 }
11704
11705 if (COMPLETE_TYPE_P (instantiation))
11706 /* If INSTANTIATION has been instantiated, then we don't
11707 need to consider it again in the future. */
11708 *t = TREE_CHAIN (*t);
11709 else
11710 {
11711 last = *t;
11712 t = &TREE_CHAIN (*t);
11713 }
11714 }
11715 else
11716 {
11717 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
11718 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
11719 {
11720 instantiation
11721 = instantiate_decl (instantiation,
11722 /*defer_ok=*/0,
11723 /*expl_inst_class_mem_p=*/false);
11724 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
11725 reconsider = 1;
11726 }
11727
11728 if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
11729 || DECL_TEMPLATE_INSTANTIATED (instantiation))
11730 /* If INSTANTIATION has been instantiated, then we don't
11731 need to consider it again in the future. */
11732 *t = TREE_CHAIN (*t);
11733 else
11734 {
11735 last = *t;
11736 t = &TREE_CHAIN (*t);
11737 }
11738 }
11739 tinst_depth = 0;
11740 current_tinst_level = NULL_TREE;
11741 }
11742 last_pending_template = last;
11743 }
11744 while (reconsider);
11745
11746 input_location = saved_loc;
11747 in_system_header = saved_in_system_header;
11748 }
11749
11750 /* Substitute ARGVEC into T, which is a list of initializers for
11751 either base class or a non-static data member. The TREE_PURPOSEs
11752 are DECLs, and the TREE_VALUEs are the initializer values. Used by
11753 instantiate_decl. */
11754
11755 static tree
11756 tsubst_initializer_list (tree t, tree argvec)
11757 {
11758 tree inits = NULL_TREE;
11759
11760 for (; t; t = TREE_CHAIN (t))
11761 {
11762 tree decl;
11763 tree init;
11764
11765 decl = tsubst_copy (TREE_PURPOSE (t), argvec, tf_error | tf_warning,
11766 NULL_TREE);
11767 decl = expand_member_init (decl);
11768 if (decl && !DECL_P (decl))
11769 in_base_initializer = 1;
11770
11771 init = tsubst_expr (TREE_VALUE (t), argvec, tf_error | tf_warning,
11772 NULL_TREE);
11773 in_base_initializer = 0;
11774
11775 if (decl)
11776 {
11777 init = build_tree_list (decl, init);
11778 TREE_CHAIN (init) = inits;
11779 inits = init;
11780 }
11781 }
11782 return inits;
11783 }
11784
11785 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
11786
11787 static void
11788 set_current_access_from_decl (tree decl)
11789 {
11790 if (TREE_PRIVATE (decl))
11791 current_access_specifier = access_private_node;
11792 else if (TREE_PROTECTED (decl))
11793 current_access_specifier = access_protected_node;
11794 else
11795 current_access_specifier = access_public_node;
11796 }
11797
11798 /* Instantiate an enumerated type. TAG is the template type, NEWTAG
11799 is the instantiation (which should have been created with
11800 start_enum) and ARGS are the template arguments to use. */
11801
11802 static void
11803 tsubst_enum (tree tag, tree newtag, tree args)
11804 {
11805 tree e;
11806
11807 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
11808 {
11809 tree value;
11810 tree decl;
11811
11812 decl = TREE_VALUE (e);
11813 /* Note that in a template enum, the TREE_VALUE is the
11814 CONST_DECL, not the corresponding INTEGER_CST. */
11815 value = tsubst_expr (DECL_INITIAL (decl),
11816 args, tf_error | tf_warning,
11817 NULL_TREE);
11818
11819 /* Give this enumeration constant the correct access. */
11820 set_current_access_from_decl (decl);
11821
11822 /* Actually build the enumerator itself. */
11823 build_enumerator (DECL_NAME (decl), value, newtag);
11824 }
11825
11826 finish_enum (newtag);
11827 DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
11828 = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
11829 }
11830
11831 /* DECL is a FUNCTION_DECL that is a template specialization. Return
11832 its type -- but without substituting the innermost set of template
11833 arguments. So, innermost set of template parameters will appear in
11834 the type. */
11835
11836 tree
11837 get_mostly_instantiated_function_type (tree decl)
11838 {
11839 tree fn_type;
11840 tree tmpl;
11841 tree targs;
11842 tree tparms;
11843 int parm_depth;
11844
11845 tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11846 targs = DECL_TI_ARGS (decl);
11847 tparms = DECL_TEMPLATE_PARMS (tmpl);
11848 parm_depth = TMPL_PARMS_DEPTH (tparms);
11849
11850 /* There should be as many levels of arguments as there are levels
11851 of parameters. */
11852 gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
11853
11854 fn_type = TREE_TYPE (tmpl);
11855
11856 if (parm_depth == 1)
11857 /* No substitution is necessary. */
11858 ;
11859 else
11860 {
11861 int i, save_access_control;
11862 tree partial_args;
11863
11864 /* Replace the innermost level of the TARGS with NULL_TREEs to
11865 let tsubst know not to substitute for those parameters. */
11866 partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
11867 for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
11868 SET_TMPL_ARGS_LEVEL (partial_args, i,
11869 TMPL_ARGS_LEVEL (targs, i));
11870 SET_TMPL_ARGS_LEVEL (partial_args,
11871 TMPL_ARGS_DEPTH (targs),
11872 make_tree_vec (DECL_NTPARMS (tmpl)));
11873
11874 /* Disable access control as this function is used only during
11875 name-mangling. */
11876 save_access_control = flag_access_control;
11877 flag_access_control = 0;
11878
11879 ++processing_template_decl;
11880 /* Now, do the (partial) substitution to figure out the
11881 appropriate function type. */
11882 fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
11883 --processing_template_decl;
11884
11885 /* Substitute into the template parameters to obtain the real
11886 innermost set of parameters. This step is important if the
11887 innermost set of template parameters contains value
11888 parameters whose types depend on outer template parameters. */
11889 TREE_VEC_LENGTH (partial_args)--;
11890 tparms = tsubst_template_parms (tparms, partial_args, tf_error);
11891
11892 flag_access_control = save_access_control;
11893 }
11894
11895 return fn_type;
11896 }
11897
11898 /* Return truthvalue if we're processing a template different from
11899 the last one involved in diagnostics. */
11900 int
11901 problematic_instantiation_changed (void)
11902 {
11903 return last_template_error_tick != tinst_level_tick;
11904 }
11905
11906 /* Remember current template involved in diagnostics. */
11907 void
11908 record_last_problematic_instantiation (void)
11909 {
11910 last_template_error_tick = tinst_level_tick;
11911 }
11912
11913 tree
11914 current_instantiation (void)
11915 {
11916 return current_tinst_level;
11917 }
11918
11919 /* [temp.param] Check that template non-type parm TYPE is of an allowable
11920 type. Return zero for ok, nonzero for disallowed. Issue error and
11921 warning messages under control of COMPLAIN. */
11922
11923 static int
11924 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
11925 {
11926 if (INTEGRAL_TYPE_P (type))
11927 return 0;
11928 else if (POINTER_TYPE_P (type))
11929 return 0;
11930 else if (TYPE_PTR_TO_MEMBER_P (type))
11931 return 0;
11932 else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11933 return 0;
11934 else if (TREE_CODE (type) == TYPENAME_TYPE)
11935 return 0;
11936
11937 if (complain & tf_error)
11938 error ("%q#T is not a valid type for a template constant parameter", type);
11939 return 1;
11940 }
11941
11942 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
11943 Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
11944
11945 static bool
11946 dependent_type_p_r (tree type)
11947 {
11948 tree scope;
11949
11950 /* [temp.dep.type]
11951
11952 A type is dependent if it is:
11953
11954 -- a template parameter. Template template parameters are types
11955 for us (since TYPE_P holds true for them) so we handle
11956 them here. */
11957 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
11958 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
11959 return true;
11960 /* -- a qualified-id with a nested-name-specifier which contains a
11961 class-name that names a dependent type or whose unqualified-id
11962 names a dependent type. */
11963 if (TREE_CODE (type) == TYPENAME_TYPE)
11964 return true;
11965 /* -- a cv-qualified type where the cv-unqualified type is
11966 dependent. */
11967 type = TYPE_MAIN_VARIANT (type);
11968 /* -- a compound type constructed from any dependent type. */
11969 if (TYPE_PTR_TO_MEMBER_P (type))
11970 return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
11971 || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
11972 (type)));
11973 else if (TREE_CODE (type) == POINTER_TYPE
11974 || TREE_CODE (type) == REFERENCE_TYPE)
11975 return dependent_type_p (TREE_TYPE (type));
11976 else if (TREE_CODE (type) == FUNCTION_TYPE
11977 || TREE_CODE (type) == METHOD_TYPE)
11978 {
11979 tree arg_type;
11980
11981 if (dependent_type_p (TREE_TYPE (type)))
11982 return true;
11983 for (arg_type = TYPE_ARG_TYPES (type);
11984 arg_type;
11985 arg_type = TREE_CHAIN (arg_type))
11986 if (dependent_type_p (TREE_VALUE (arg_type)))
11987 return true;
11988 return false;
11989 }
11990 /* -- an array type constructed from any dependent type or whose
11991 size is specified by a constant expression that is
11992 value-dependent. */
11993 if (TREE_CODE (type) == ARRAY_TYPE)
11994 {
11995 if (TYPE_DOMAIN (type)
11996 && ((value_dependent_expression_p
11997 (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
11998 || (type_dependent_expression_p
11999 (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
12000 return true;
12001 return dependent_type_p (TREE_TYPE (type));
12002 }
12003
12004 /* -- a template-id in which either the template name is a template
12005 parameter ... */
12006 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
12007 return true;
12008 /* ... or any of the template arguments is a dependent type or
12009 an expression that is type-dependent or value-dependent. */
12010 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
12011 && (any_dependent_template_arguments_p
12012 (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
12013 return true;
12014
12015 /* All TYPEOF_TYPEs are dependent; if the argument of the `typeof'
12016 expression is not type-dependent, then it should already been
12017 have resolved. */
12018 if (TREE_CODE (type) == TYPEOF_TYPE)
12019 return true;
12020
12021 /* The standard does not specifically mention types that are local
12022 to template functions or local classes, but they should be
12023 considered dependent too. For example:
12024
12025 template <int I> void f() {
12026 enum E { a = I };
12027 S<sizeof (E)> s;
12028 }
12029
12030 The size of `E' cannot be known until the value of `I' has been
12031 determined. Therefore, `E' must be considered dependent. */
12032 scope = TYPE_CONTEXT (type);
12033 if (scope && TYPE_P (scope))
12034 return dependent_type_p (scope);
12035 else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12036 return type_dependent_expression_p (scope);
12037
12038 /* Other types are non-dependent. */
12039 return false;
12040 }
12041
12042 /* Returns TRUE if TYPE is dependent, in the sense of
12043 [temp.dep.type]. */
12044
12045 bool
12046 dependent_type_p (tree type)
12047 {
12048 /* If there are no template parameters in scope, then there can't be
12049 any dependent types. */
12050 if (!processing_template_decl)
12051 return false;
12052
12053 /* If the type is NULL, we have not computed a type for the entity
12054 in question; in that case, the type is dependent. */
12055 if (!type)
12056 return true;
12057
12058 /* Erroneous types can be considered non-dependent. */
12059 if (type == error_mark_node)
12060 return false;
12061
12062 /* If we have not already computed the appropriate value for TYPE,
12063 do so now. */
12064 if (!TYPE_DEPENDENT_P_VALID (type))
12065 {
12066 TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
12067 TYPE_DEPENDENT_P_VALID (type) = 1;
12068 }
12069
12070 return TYPE_DEPENDENT_P (type);
12071 }
12072
12073 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION. */
12074
12075 static bool
12076 dependent_scope_ref_p (tree expression, bool criterion (tree))
12077 {
12078 tree scope;
12079 tree name;
12080
12081 gcc_assert (TREE_CODE (expression) == SCOPE_REF);
12082
12083 if (!TYPE_P (TREE_OPERAND (expression, 0)))
12084 return true;
12085
12086 scope = TREE_OPERAND (expression, 0);
12087 name = TREE_OPERAND (expression, 1);
12088
12089 /* [temp.dep.expr]
12090
12091 An id-expression is type-dependent if it contains a
12092 nested-name-specifier that contains a class-name that names a
12093 dependent type. */
12094 /* The suggested resolution to Core Issue 2 implies that if the
12095 qualifying type is the current class, then we must peek
12096 inside it. */
12097 if (DECL_P (name)
12098 && currently_open_class (scope)
12099 && !criterion (name))
12100 return false;
12101 if (dependent_type_p (scope))
12102 return true;
12103
12104 return false;
12105 }
12106
12107 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
12108 [temp.dep.constexpr] */
12109
12110 bool
12111 value_dependent_expression_p (tree expression)
12112 {
12113 if (!processing_template_decl)
12114 return false;
12115
12116 /* A name declared with a dependent type. */
12117 if (DECL_P (expression) && type_dependent_expression_p (expression))
12118 return true;
12119
12120 switch (TREE_CODE (expression))
12121 {
12122 case IDENTIFIER_NODE:
12123 /* A name that has not been looked up -- must be dependent. */
12124 return true;
12125
12126 case TEMPLATE_PARM_INDEX:
12127 /* A non-type template parm. */
12128 return true;
12129
12130 case CONST_DECL:
12131 /* A non-type template parm. */
12132 if (DECL_TEMPLATE_PARM_P (expression))
12133 return true;
12134 return false;
12135
12136 case VAR_DECL:
12137 /* A constant with integral or enumeration type and is initialized
12138 with an expression that is value-dependent. */
12139 if (DECL_INITIAL (expression)
12140 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
12141 && value_dependent_expression_p (DECL_INITIAL (expression)))
12142 return true;
12143 return false;
12144
12145 case DYNAMIC_CAST_EXPR:
12146 case STATIC_CAST_EXPR:
12147 case CONST_CAST_EXPR:
12148 case REINTERPRET_CAST_EXPR:
12149 case CAST_EXPR:
12150 /* These expressions are value-dependent if the type to which
12151 the cast occurs is dependent or the expression being casted
12152 is value-dependent. */
12153 {
12154 tree type = TREE_TYPE (expression);
12155
12156 if (dependent_type_p (type))
12157 return true;
12158
12159 /* A functional cast has a list of operands. */
12160 expression = TREE_OPERAND (expression, 0);
12161 if (!expression)
12162 {
12163 /* If there are no operands, it must be an expression such
12164 as "int()". This should not happen for aggregate types
12165 because it would form non-constant expressions. */
12166 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
12167
12168 return false;
12169 }
12170
12171 if (TREE_CODE (expression) == TREE_LIST)
12172 {
12173 for (; expression; expression = TREE_CHAIN (expression))
12174 if (value_dependent_expression_p (TREE_VALUE (expression)))
12175 return true;
12176 return false;
12177 }
12178
12179 return value_dependent_expression_p (expression);
12180 }
12181
12182 case SIZEOF_EXPR:
12183 case ALIGNOF_EXPR:
12184 /* A `sizeof' expression is value-dependent if the operand is
12185 type-dependent. */
12186 expression = TREE_OPERAND (expression, 0);
12187 if (TYPE_P (expression))
12188 return dependent_type_p (expression);
12189 return type_dependent_expression_p (expression);
12190
12191 case SCOPE_REF:
12192 return dependent_scope_ref_p (expression, value_dependent_expression_p);
12193
12194 case COMPONENT_REF:
12195 return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
12196 || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
12197
12198 case CALL_EXPR:
12199 /* A CALL_EXPR is value-dependent if any argument is
12200 value-dependent. Why do we have to handle CALL_EXPRs in this
12201 function at all? First, some function calls, those for which
12202 value_dependent_expression_p is true, man appear in constant
12203 expressions. Second, there appear to be bugs which result in
12204 other CALL_EXPRs reaching this point. */
12205 {
12206 tree function = TREE_OPERAND (expression, 0);
12207 tree args = TREE_OPERAND (expression, 1);
12208
12209 if (value_dependent_expression_p (function))
12210 return true;
12211
12212 if (! args)
12213 return false;
12214
12215 if (TREE_CODE (args) == TREE_LIST)
12216 {
12217 for (; args; args = TREE_CHAIN (args))
12218 if (value_dependent_expression_p (TREE_VALUE (args)))
12219 return true;
12220 return false;
12221 }
12222
12223 return value_dependent_expression_p (args);
12224 }
12225
12226 default:
12227 /* A constant expression is value-dependent if any subexpression is
12228 value-dependent. */
12229 switch (TREE_CODE_CLASS (TREE_CODE (expression)))
12230 {
12231 case tcc_reference:
12232 case tcc_unary:
12233 return (value_dependent_expression_p
12234 (TREE_OPERAND (expression, 0)));
12235
12236 case tcc_comparison:
12237 case tcc_binary:
12238 return ((value_dependent_expression_p
12239 (TREE_OPERAND (expression, 0)))
12240 || (value_dependent_expression_p
12241 (TREE_OPERAND (expression, 1))));
12242
12243 case tcc_expression:
12244 {
12245 int i;
12246 for (i = 0; i < TREE_CODE_LENGTH (TREE_CODE (expression)); ++i)
12247 /* In some cases, some of the operands may be missing.
12248 (For example, in the case of PREDECREMENT_EXPR, the
12249 amount to increment by may be missing.) That doesn't
12250 make the expression dependent. */
12251 if (TREE_OPERAND (expression, i)
12252 && (value_dependent_expression_p
12253 (TREE_OPERAND (expression, i))))
12254 return true;
12255 return false;
12256 }
12257
12258 default:
12259 break;
12260 }
12261 }
12262
12263 /* The expression is not value-dependent. */
12264 return false;
12265 }
12266
12267 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
12268 [temp.dep.expr]. */
12269
12270 bool
12271 type_dependent_expression_p (tree expression)
12272 {
12273 if (!processing_template_decl)
12274 return false;
12275
12276 if (expression == error_mark_node)
12277 return false;
12278
12279 /* An unresolved name is always dependent. */
12280 if (TREE_CODE (expression) == IDENTIFIER_NODE)
12281 return true;
12282
12283 /* Some expression forms are never type-dependent. */
12284 if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
12285 || TREE_CODE (expression) == SIZEOF_EXPR
12286 || TREE_CODE (expression) == ALIGNOF_EXPR
12287 || TREE_CODE (expression) == TYPEID_EXPR
12288 || TREE_CODE (expression) == DELETE_EXPR
12289 || TREE_CODE (expression) == VEC_DELETE_EXPR
12290 || TREE_CODE (expression) == THROW_EXPR)
12291 return false;
12292
12293 /* The types of these expressions depends only on the type to which
12294 the cast occurs. */
12295 if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
12296 || TREE_CODE (expression) == STATIC_CAST_EXPR
12297 || TREE_CODE (expression) == CONST_CAST_EXPR
12298 || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
12299 || TREE_CODE (expression) == CAST_EXPR)
12300 return dependent_type_p (TREE_TYPE (expression));
12301
12302 /* The types of these expressions depends only on the type created
12303 by the expression. */
12304 if (TREE_CODE (expression) == NEW_EXPR
12305 || TREE_CODE (expression) == VEC_NEW_EXPR)
12306 {
12307 /* For NEW_EXPR tree nodes created inside a template, either
12308 the object type itself or a TREE_LIST may appear as the
12309 operand 1. */
12310 tree type = TREE_OPERAND (expression, 1);
12311 if (TREE_CODE (type) == TREE_LIST)
12312 /* This is an array type. We need to check array dimensions
12313 as well. */
12314 return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
12315 || value_dependent_expression_p
12316 (TREE_OPERAND (TREE_VALUE (type), 1));
12317 else
12318 return dependent_type_p (type);
12319 }
12320
12321 if (TREE_CODE (expression) == SCOPE_REF
12322 && dependent_scope_ref_p (expression,
12323 type_dependent_expression_p))
12324 return true;
12325
12326 if (TREE_CODE (expression) == FUNCTION_DECL
12327 && DECL_LANG_SPECIFIC (expression)
12328 && DECL_TEMPLATE_INFO (expression)
12329 && (any_dependent_template_arguments_p
12330 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
12331 return true;
12332
12333 if (TREE_CODE (expression) == TEMPLATE_DECL
12334 && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
12335 return false;
12336
12337 if (TREE_TYPE (expression) == unknown_type_node)
12338 {
12339 if (TREE_CODE (expression) == ADDR_EXPR)
12340 return type_dependent_expression_p (TREE_OPERAND (expression, 0));
12341 if (TREE_CODE (expression) == COMPONENT_REF
12342 || TREE_CODE (expression) == OFFSET_REF)
12343 {
12344 if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
12345 return true;
12346 expression = TREE_OPERAND (expression, 1);
12347 if (TREE_CODE (expression) == IDENTIFIER_NODE)
12348 return false;
12349 }
12350 /* SCOPE_REF with non-null TREE_TYPE is always non-dependent. */
12351 if (TREE_CODE (expression) == SCOPE_REF)
12352 return false;
12353
12354 if (TREE_CODE (expression) == BASELINK)
12355 expression = BASELINK_FUNCTIONS (expression);
12356
12357 if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
12358 {
12359 if (any_dependent_template_arguments_p
12360 (TREE_OPERAND (expression, 1)))
12361 return true;
12362 expression = TREE_OPERAND (expression, 0);
12363 }
12364 gcc_assert (TREE_CODE (expression) == OVERLOAD);
12365
12366 while (expression)
12367 {
12368 if (type_dependent_expression_p (OVL_CURRENT (expression)))
12369 return true;
12370 expression = OVL_NEXT (expression);
12371 }
12372 return false;
12373 }
12374
12375 return (dependent_type_p (TREE_TYPE (expression)));
12376 }
12377
12378 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
12379 contains a type-dependent expression. */
12380
12381 bool
12382 any_type_dependent_arguments_p (tree args)
12383 {
12384 while (args)
12385 {
12386 tree arg = TREE_VALUE (args);
12387
12388 if (type_dependent_expression_p (arg))
12389 return true;
12390 args = TREE_CHAIN (args);
12391 }
12392 return false;
12393 }
12394
12395 /* Returns TRUE if the ARG (a template argument) is dependent. */
12396
12397 static bool
12398 dependent_template_arg_p (tree arg)
12399 {
12400 if (!processing_template_decl)
12401 return false;
12402
12403 if (TREE_CODE (arg) == TEMPLATE_DECL
12404 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
12405 return dependent_template_p (arg);
12406 else if (TYPE_P (arg))
12407 return dependent_type_p (arg);
12408 else
12409 return (type_dependent_expression_p (arg)
12410 || value_dependent_expression_p (arg));
12411 }
12412
12413 /* Returns true if ARGS (a collection of template arguments) contains
12414 any dependent arguments. */
12415
12416 bool
12417 any_dependent_template_arguments_p (tree args)
12418 {
12419 int i;
12420 int j;
12421
12422 if (!args)
12423 return false;
12424
12425 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
12426 {
12427 tree level = TMPL_ARGS_LEVEL (args, i + 1);
12428 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
12429 if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
12430 return true;
12431 }
12432
12433 return false;
12434 }
12435
12436 /* Returns TRUE if the template TMPL is dependent. */
12437
12438 bool
12439 dependent_template_p (tree tmpl)
12440 {
12441 if (TREE_CODE (tmpl) == OVERLOAD)
12442 {
12443 while (tmpl)
12444 {
12445 if (dependent_template_p (OVL_FUNCTION (tmpl)))
12446 return true;
12447 tmpl = OVL_CHAIN (tmpl);
12448 }
12449 return false;
12450 }
12451
12452 /* Template template parameters are dependent. */
12453 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
12454 || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
12455 return true;
12456 /* So are names that have not been looked up. */
12457 if (TREE_CODE (tmpl) == SCOPE_REF
12458 || TREE_CODE (tmpl) == IDENTIFIER_NODE)
12459 return true;
12460 /* So are member templates of dependent classes. */
12461 if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
12462 return dependent_type_p (DECL_CONTEXT (tmpl));
12463 return false;
12464 }
12465
12466 /* Returns TRUE if the specialization TMPL<ARGS> is dependent. */
12467
12468 bool
12469 dependent_template_id_p (tree tmpl, tree args)
12470 {
12471 return (dependent_template_p (tmpl)
12472 || any_dependent_template_arguments_p (args));
12473 }
12474
12475 /* TYPE is a TYPENAME_TYPE. Returns the ordinary TYPE to which the
12476 TYPENAME_TYPE corresponds. Returns ERROR_MARK_NODE if no such TYPE
12477 can be found. Note that this function peers inside uninstantiated
12478 templates and therefore should be used only in extremely limited
12479 situations. ONLY_CURRENT_P restricts this peering to the currently
12480 open classes hierarchy (which is required when comparing types). */
12481
12482 tree
12483 resolve_typename_type (tree type, bool only_current_p)
12484 {
12485 tree scope;
12486 tree name;
12487 tree decl;
12488 int quals;
12489 tree pushed_scope;
12490
12491 gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
12492
12493 scope = TYPE_CONTEXT (type);
12494 name = TYPE_IDENTIFIER (type);
12495
12496 /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
12497 it first before we can figure out what NAME refers to. */
12498 if (TREE_CODE (scope) == TYPENAME_TYPE)
12499 scope = resolve_typename_type (scope, only_current_p);
12500 /* If we don't know what SCOPE refers to, then we cannot resolve the
12501 TYPENAME_TYPE. */
12502 if (scope == error_mark_node || TREE_CODE (scope) == TYPENAME_TYPE)
12503 return error_mark_node;
12504 /* If the SCOPE is a template type parameter, we have no way of
12505 resolving the name. */
12506 if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
12507 return type;
12508 /* If the SCOPE is not the current instantiation, there's no reason
12509 to look inside it. */
12510 if (only_current_p && !currently_open_class (scope))
12511 return error_mark_node;
12512 /* If SCOPE is a partial instantiation, it will not have a valid
12513 TYPE_FIELDS list, so use the original template. */
12514 scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
12515 /* Enter the SCOPE so that name lookup will be resolved as if we
12516 were in the class definition. In particular, SCOPE will no
12517 longer be considered a dependent type. */
12518 pushed_scope = push_scope (scope);
12519 /* Look up the declaration. */
12520 decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
12521 /* Obtain the set of qualifiers applied to the TYPE. */
12522 quals = cp_type_quals (type);
12523 /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
12524 find a TEMPLATE_DECL. Otherwise, we want to find a TYPE_DECL. */
12525 if (!decl)
12526 type = error_mark_node;
12527 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
12528 && TREE_CODE (decl) == TYPE_DECL)
12529 type = TREE_TYPE (decl);
12530 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
12531 && DECL_CLASS_TEMPLATE_P (decl))
12532 {
12533 tree tmpl;
12534 tree args;
12535 /* Obtain the template and the arguments. */
12536 tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
12537 args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
12538 /* Instantiate the template. */
12539 type = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
12540 /*entering_scope=*/0, tf_error | tf_user);
12541 }
12542 else
12543 type = error_mark_node;
12544 /* Qualify the resulting type. */
12545 if (type != error_mark_node && quals)
12546 type = cp_build_qualified_type (type, quals);
12547 /* Leave the SCOPE. */
12548 if (pushed_scope)
12549 pop_scope (pushed_scope);
12550
12551 return type;
12552 }
12553
12554 /* EXPR is an expression which is not type-dependent. Return a proxy
12555 for EXPR that can be used to compute the types of larger
12556 expressions containing EXPR. */
12557
12558 tree
12559 build_non_dependent_expr (tree expr)
12560 {
12561 tree inner_expr;
12562
12563 /* Preserve null pointer constants so that the type of things like
12564 "p == 0" where "p" is a pointer can be determined. */
12565 if (null_ptr_cst_p (expr))
12566 return expr;
12567 /* Preserve OVERLOADs; the functions must be available to resolve
12568 types. */
12569 inner_expr = (TREE_CODE (expr) == ADDR_EXPR ?
12570 TREE_OPERAND (expr, 0) : expr);
12571 if (is_overloaded_fn (inner_expr)
12572 || TREE_CODE (inner_expr) == OFFSET_REF)
12573 return expr;
12574 /* There is no need to return a proxy for a variable. */
12575 if (TREE_CODE (expr) == VAR_DECL)
12576 return expr;
12577 /* Preserve string constants; conversions from string constants to
12578 "char *" are allowed, even though normally a "const char *"
12579 cannot be used to initialize a "char *". */
12580 if (TREE_CODE (expr) == STRING_CST)
12581 return expr;
12582 /* Preserve arithmetic constants, as an optimization -- there is no
12583 reason to create a new node. */
12584 if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
12585 return expr;
12586 /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
12587 There is at least one place where we want to know that a
12588 particular expression is a throw-expression: when checking a ?:
12589 expression, there are special rules if the second or third
12590 argument is a throw-expression. */
12591 if (TREE_CODE (expr) == THROW_EXPR)
12592 return expr;
12593
12594 if (TREE_CODE (expr) == COND_EXPR)
12595 return build3 (COND_EXPR,
12596 TREE_TYPE (expr),
12597 TREE_OPERAND (expr, 0),
12598 (TREE_OPERAND (expr, 1)
12599 ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
12600 : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
12601 build_non_dependent_expr (TREE_OPERAND (expr, 2)));
12602 if (TREE_CODE (expr) == COMPOUND_EXPR
12603 && !COMPOUND_EXPR_OVERLOADED (expr))
12604 return build2 (COMPOUND_EXPR,
12605 TREE_TYPE (expr),
12606 TREE_OPERAND (expr, 0),
12607 build_non_dependent_expr (TREE_OPERAND (expr, 1)));
12608
12609 /* Otherwise, build a NON_DEPENDENT_EXPR.
12610
12611 REFERENCE_TYPEs are not stripped for expressions in templates
12612 because doing so would play havoc with mangling. Consider, for
12613 example:
12614
12615 template <typename T> void f<T& g>() { g(); }
12616
12617 In the body of "f", the expression for "g" will have
12618 REFERENCE_TYPE, even though the standard says that it should
12619 not. The reason is that we must preserve the syntactic form of
12620 the expression so that mangling (say) "f<g>" inside the body of
12621 "f" works out correctly. Therefore, the REFERENCE_TYPE is
12622 stripped here. */
12623 return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
12624 }
12625
12626 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
12627 Return a new TREE_LIST with the various arguments replaced with
12628 equivalent non-dependent expressions. */
12629
12630 tree
12631 build_non_dependent_args (tree args)
12632 {
12633 tree a;
12634 tree new_args;
12635
12636 new_args = NULL_TREE;
12637 for (a = args; a; a = TREE_CHAIN (a))
12638 new_args = tree_cons (NULL_TREE,
12639 build_non_dependent_expr (TREE_VALUE (a)),
12640 new_args);
12641 return nreverse (new_args);
12642 }
12643
12644 #include "gt-cp-pt.h"