]> gcc.gnu.org Git - gcc.git/blob - gcc/cp/pt.c
re PR c++/22233 (ICE with wrong number of template parameters)
[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 return error_mark_node;
3113 }
3114
3115 /* Perhaps we should also check that the parms are used in the
3116 appropriate qualifying scopes in the declarator? */
3117
3118 if (current == decl)
3119 current = ctx;
3120 else
3121 current = TYPE_CONTEXT (current);
3122 }
3123 }
3124
3125 DECL_TEMPLATE_RESULT (tmpl) = decl;
3126 TREE_TYPE (tmpl) = TREE_TYPE (decl);
3127
3128 /* Push template declarations for global functions and types. Note
3129 that we do not try to push a global template friend declared in a
3130 template class; such a thing may well depend on the template
3131 parameters of the class. */
3132 if (new_template_p && !ctx
3133 && !(is_friend && template_class_depth (current_class_type) > 0))
3134 {
3135 tmpl = pushdecl_namespace_level (tmpl);
3136 if (tmpl == error_mark_node)
3137 return error_mark_node;
3138
3139 /* Hide template friend classes that haven't been declared yet. */
3140 if (is_friend && TREE_CODE (decl) == TYPE_DECL)
3141 {
3142 DECL_ANTICIPATED (tmpl) = 1;
3143 DECL_FRIEND_P (tmpl) = 1;
3144 }
3145 }
3146
3147 if (primary)
3148 {
3149 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
3150 if (DECL_CONV_FN_P (tmpl))
3151 {
3152 int depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
3153
3154 /* It is a conversion operator. See if the type converted to
3155 depends on innermost template operands. */
3156
3157 if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
3158 depth))
3159 DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
3160 }
3161 }
3162
3163 /* The DECL_TI_ARGS of DECL contains full set of arguments referring
3164 back to its most general template. If TMPL is a specialization,
3165 ARGS may only have the innermost set of arguments. Add the missing
3166 argument levels if necessary. */
3167 if (DECL_TEMPLATE_INFO (tmpl))
3168 args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
3169
3170 info = tree_cons (tmpl, args, NULL_TREE);
3171
3172 if (DECL_IMPLICIT_TYPEDEF_P (decl))
3173 {
3174 SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
3175 if ((!ctx || TREE_CODE (ctx) != FUNCTION_DECL)
3176 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
3177 /* Don't change the name if we've already set it up. */
3178 && !IDENTIFIER_TEMPLATE (DECL_NAME (decl)))
3179 DECL_NAME (decl) = classtype_mangled_name (TREE_TYPE (decl));
3180 }
3181 else if (DECL_LANG_SPECIFIC (decl))
3182 DECL_TEMPLATE_INFO (decl) = info;
3183
3184 return DECL_TEMPLATE_RESULT (tmpl);
3185 }
3186
3187 tree
3188 push_template_decl (tree decl)
3189 {
3190 return push_template_decl_real (decl, 0);
3191 }
3192
3193 /* Called when a class template TYPE is redeclared with the indicated
3194 template PARMS, e.g.:
3195
3196 template <class T> struct S;
3197 template <class T> struct S {}; */
3198
3199 void
3200 redeclare_class_template (tree type, tree parms)
3201 {
3202 tree tmpl;
3203 tree tmpl_parms;
3204 int i;
3205
3206 if (!TYPE_TEMPLATE_INFO (type))
3207 {
3208 error ("%qT is not a template type", type);
3209 return;
3210 }
3211
3212 tmpl = TYPE_TI_TEMPLATE (type);
3213 if (!PRIMARY_TEMPLATE_P (tmpl))
3214 /* The type is nested in some template class. Nothing to worry
3215 about here; there are no new template parameters for the nested
3216 type. */
3217 return;
3218
3219 if (!parms)
3220 {
3221 error ("template specifiers not specified in declaration of %qD",
3222 tmpl);
3223 return;
3224 }
3225
3226 parms = INNERMOST_TEMPLATE_PARMS (parms);
3227 tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
3228
3229 if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
3230 {
3231 error ("previous declaration %q+D", tmpl);
3232 error ("used %d template parameter(s) instead of %d",
3233 TREE_VEC_LENGTH (tmpl_parms),
3234 TREE_VEC_LENGTH (parms));
3235 return;
3236 }
3237
3238 for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
3239 {
3240 tree tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
3241 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
3242 tree tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
3243 tree parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
3244
3245 /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
3246 TEMPLATE_DECL. */
3247 if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
3248 || (TREE_CODE (tmpl_parm) != TYPE_DECL
3249 && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm))))
3250 {
3251 error ("template parameter %q+#D", tmpl_parm);
3252 error ("redeclared here as %q#D", parm);
3253 return;
3254 }
3255
3256 if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
3257 {
3258 /* We have in [temp.param]:
3259
3260 A template-parameter may not be given default arguments
3261 by two different declarations in the same scope. */
3262 error ("redefinition of default argument for %q#D", parm);
3263 error ("%J original definition appeared here", tmpl_parm);
3264 return;
3265 }
3266
3267 if (parm_default != NULL_TREE)
3268 /* Update the previous template parameters (which are the ones
3269 that will really count) with the new default value. */
3270 TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
3271 else if (tmpl_default != NULL_TREE)
3272 /* Update the new parameters, too; they'll be used as the
3273 parameters for any members. */
3274 TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
3275 }
3276 }
3277
3278 /* Simplify EXPR if it is a non-dependent expression. Returns the
3279 (possibly simplified) expression. */
3280
3281 tree
3282 fold_non_dependent_expr (tree expr)
3283 {
3284 /* If we're in a template, but EXPR isn't value dependent, simplify
3285 it. We're supposed to treat:
3286
3287 template <typename T> void f(T[1 + 1]);
3288 template <typename T> void f(T[2]);
3289
3290 as two declarations of the same function, for example. */
3291 if (processing_template_decl
3292 && !type_dependent_expression_p (expr)
3293 && !value_dependent_expression_p (expr))
3294 {
3295 HOST_WIDE_INT saved_processing_template_decl;
3296
3297 saved_processing_template_decl = processing_template_decl;
3298 processing_template_decl = 0;
3299 expr = tsubst_copy_and_build (expr,
3300 /*args=*/NULL_TREE,
3301 tf_error,
3302 /*in_decl=*/NULL_TREE,
3303 /*function_p=*/false);
3304 processing_template_decl = saved_processing_template_decl;
3305 }
3306 return expr;
3307 }
3308
3309 /* EXPR is an expression which is used in a constant-expression context.
3310 For instance, it could be a VAR_DECL with a constant initializer.
3311 Extract the innest constant expression.
3312
3313 This is basically a more powerful version of
3314 integral_constant_value, which can be used also in templates where
3315 initializers can maintain a syntactic rather than semantic form
3316 (even if they are non-dependent, for access-checking purposes). */
3317
3318 tree
3319 fold_decl_constant_value (tree expr)
3320 {
3321 tree const_expr = expr;
3322 do
3323 {
3324 expr = fold_non_dependent_expr (const_expr);
3325 const_expr = integral_constant_value (expr);
3326 }
3327 while (expr != const_expr);
3328
3329 return expr;
3330 }
3331
3332 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
3333 must be a function or a pointer-to-function type, as specified
3334 in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
3335 and check that the resulting function has external linkage. */
3336
3337 static tree
3338 convert_nontype_argument_function (tree type, tree expr)
3339 {
3340 tree fns = expr;
3341 tree fn, fn_no_ptr;
3342
3343 fn = instantiate_type (type, fns, tf_none);
3344 if (fn == error_mark_node)
3345 return error_mark_node;
3346
3347 fn_no_ptr = fn;
3348 if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
3349 fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
3350
3351 /* [temp.arg.nontype]/1
3352
3353 A template-argument for a non-type, non-template template-parameter
3354 shall be one of:
3355 [...]
3356 -- the address of an object or function with external linkage. */
3357 if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
3358 {
3359 error ("%qE is not a valid template argument for type %qT "
3360 "because function %qD has not external linkage",
3361 expr, type, fn_no_ptr);
3362 return NULL_TREE;
3363 }
3364
3365 return fn;
3366 }
3367
3368 /* Attempt to convert the non-type template parameter EXPR to the
3369 indicated TYPE. If the conversion is successful, return the
3370 converted value. If the conversion is unsuccessful, return
3371 NULL_TREE if we issued an error message, or error_mark_node if we
3372 did not. We issue error messages for out-and-out bad template
3373 parameters, but not simply because the conversion failed, since we
3374 might be just trying to do argument deduction. Both TYPE and EXPR
3375 must be non-dependent.
3376
3377 The conversion follows the special rules described in
3378 [temp.arg.nontype], and it is much more strict than an implicit
3379 conversion.
3380
3381 This function is called twice for each template argument (see
3382 lookup_template_class for a more accurate description of this
3383 problem). This means that we need to handle expressions which
3384 are not valid in a C++ source, but can be created from the
3385 first call (for instance, casts to perform conversions). These
3386 hacks can go away after we fix the double coercion problem. */
3387
3388 static tree
3389 convert_nontype_argument (tree type, tree expr)
3390 {
3391 tree expr_type;
3392
3393 /* Detect immediately string literals as invalid non-type argument.
3394 This special-case is not needed for correctness (we would easily
3395 catch this later), but only to provide better diagnostic for this
3396 common user mistake. As suggested by DR 100, we do not mention
3397 linkage issues in the diagnostic as this is not the point. */
3398 if (TREE_CODE (expr) == STRING_CST)
3399 {
3400 error ("%qE is not a valid template argument for type %qT "
3401 "because string literals can never be used in this context",
3402 expr, type);
3403 return NULL_TREE;
3404 }
3405
3406 /* If we are in a template, EXPR may be non-dependent, but still
3407 have a syntactic, rather than semantic, form. For example, EXPR
3408 might be a SCOPE_REF, rather than the VAR_DECL to which the
3409 SCOPE_REF refers. Preserving the qualifying scope is necessary
3410 so that access checking can be performed when the template is
3411 instantiated -- but here we need the resolved form so that we can
3412 convert the argument. */
3413 expr = fold_non_dependent_expr (expr);
3414 expr_type = TREE_TYPE (expr);
3415
3416 /* HACK: Due to double coercion, we can get a
3417 NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
3418 which is the tree that we built on the first call (see
3419 below when coercing to reference to object or to reference to
3420 function). We just strip everything and get to the arg.
3421 See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
3422 for examples. */
3423 if (TREE_CODE (expr) == NOP_EXPR)
3424 {
3425 if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
3426 {
3427 /* ??? Maybe we could use convert_from_reference here, but we
3428 would need to relax its constraints because the NOP_EXPR
3429 could actually change the type to something more cv-qualified,
3430 and this is not folded by convert_from_reference. */
3431 tree addr = TREE_OPERAND (expr, 0);
3432 gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
3433 gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
3434 gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
3435 gcc_assert (same_type_ignoring_top_level_qualifiers_p
3436 (TREE_TYPE (expr_type),
3437 TREE_TYPE (TREE_TYPE (addr))));
3438
3439 expr = TREE_OPERAND (addr, 0);
3440 expr_type = TREE_TYPE (expr);
3441 }
3442
3443 /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
3444 parameter is a pointer to object, through decay and
3445 qualification conversion. Let's strip everything. */
3446 else if (TYPE_PTROBV_P (type))
3447 {
3448 STRIP_NOPS (expr);
3449 gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
3450 gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
3451 /* Skip the ADDR_EXPR only if it is part of the decay for
3452 an array. Otherwise, it is part of the original argument
3453 in the source code. */
3454 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
3455 expr = TREE_OPERAND (expr, 0);
3456 expr_type = TREE_TYPE (expr);
3457 }
3458 }
3459
3460 /* [temp.arg.nontype]/5, bullet 1
3461
3462 For a non-type template-parameter of integral or enumeration type,
3463 integral promotions (_conv.prom_) and integral conversions
3464 (_conv.integral_) are applied. */
3465 if (INTEGRAL_TYPE_P (type))
3466 {
3467 if (!INTEGRAL_TYPE_P (expr_type))
3468 return error_mark_node;
3469
3470 expr = fold_decl_constant_value (expr);
3471 /* Notice that there are constant expressions like '4 % 0' which
3472 do not fold into integer constants. */
3473 if (TREE_CODE (expr) != INTEGER_CST)
3474 {
3475 error ("%qE is not a valid template argument for type %qT "
3476 "because it is a non-constant expression", expr, type);
3477 return NULL_TREE;
3478 }
3479
3480 /* At this point, an implicit conversion does what we want,
3481 because we already know that the expression is of integral
3482 type. */
3483 expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
3484 if (expr == error_mark_node)
3485 return error_mark_node;
3486
3487 /* Conversion was allowed: fold it to a bare integer constant. */
3488 expr = fold (expr);
3489 }
3490 /* [temp.arg.nontype]/5, bullet 2
3491
3492 For a non-type template-parameter of type pointer to object,
3493 qualification conversions (_conv.qual_) and the array-to-pointer
3494 conversion (_conv.array_) are applied. */
3495 else if (TYPE_PTROBV_P (type))
3496 {
3497 /* [temp.arg.nontype]/1 (TC1 version, DR 49):
3498
3499 A template-argument for a non-type, non-template template-parameter
3500 shall be one of: [...]
3501
3502 -- the name of a non-type template-parameter;
3503 -- the address of an object or function with external linkage, [...]
3504 expressed as "& id-expression" where the & is optional if the name
3505 refers to a function or array, or if the corresponding
3506 template-parameter is a reference.
3507
3508 Here, we do not care about functions, as they are invalid anyway
3509 for a parameter of type pointer-to-object. */
3510 bool constant_address_p =
3511 (TREE_CODE (expr) == ADDR_EXPR
3512 || TREE_CODE (expr_type) == ARRAY_TYPE
3513 || (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr)));
3514
3515 expr = decay_conversion (expr);
3516 if (expr == error_mark_node)
3517 return error_mark_node;
3518
3519 expr = perform_qualification_conversions (type, expr);
3520 if (expr == error_mark_node)
3521 return error_mark_node;
3522
3523 if (!constant_address_p)
3524 {
3525 error ("%qE is not a valid template argument for type %qT "
3526 "because it is not a constant pointer", expr, type);
3527 return NULL_TREE;
3528 }
3529 }
3530 /* [temp.arg.nontype]/5, bullet 3
3531
3532 For a non-type template-parameter of type reference to object, no
3533 conversions apply. The type referred to by the reference may be more
3534 cv-qualified than the (otherwise identical) type of the
3535 template-argument. The template-parameter is bound directly to the
3536 template-argument, which must be an lvalue. */
3537 else if (TYPE_REF_OBJ_P (type))
3538 {
3539 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
3540 expr_type))
3541 return error_mark_node;
3542
3543 if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
3544 {
3545 error ("%qE is not a valid template argument for type %qT "
3546 "because of conflicts in cv-qualification", expr, type);
3547 return NULL_TREE;
3548 }
3549
3550 if (!real_lvalue_p (expr))
3551 {
3552 error ("%qE is not a valid template argument for type %qT "
3553 "because it is not a lvalue", expr, type);
3554 return NULL_TREE;
3555 }
3556
3557 /* [temp.arg.nontype]/1
3558
3559 A template-argument for a non-type, non-template template-parameter
3560 shall be one of: [...]
3561
3562 -- the address of an object or function with external linkage. */
3563 if (!DECL_EXTERNAL_LINKAGE_P (expr))
3564 {
3565 error ("%qE is not a valid template argument for type %qT "
3566 "because object %qD has not external linkage",
3567 expr, type, expr);
3568 return NULL_TREE;
3569 }
3570
3571 expr = build_nop (type, build_address (expr));
3572 }
3573 /* [temp.arg.nontype]/5, bullet 4
3574
3575 For a non-type template-parameter of type pointer to function, only
3576 the function-to-pointer conversion (_conv.func_) is applied. If the
3577 template-argument represents a set of overloaded functions (or a
3578 pointer to such), the matching function is selected from the set
3579 (_over.over_). */
3580 else if (TYPE_PTRFN_P (type))
3581 {
3582 /* If the argument is a template-id, we might not have enough
3583 context information to decay the pointer.
3584 ??? Why static5.C requires decay and subst1.C works fine
3585 even without it? */
3586 if (!type_unknown_p (expr_type))
3587 {
3588 expr = decay_conversion (expr);
3589 if (expr == error_mark_node)
3590 return error_mark_node;
3591 }
3592
3593 expr = convert_nontype_argument_function (type, expr);
3594 if (!expr || expr == error_mark_node)
3595 return expr;
3596 }
3597 /* [temp.arg.nontype]/5, bullet 5
3598
3599 For a non-type template-parameter of type reference to function, no
3600 conversions apply. If the template-argument represents a set of
3601 overloaded functions, the matching function is selected from the set
3602 (_over.over_). */
3603 else if (TYPE_REFFN_P (type))
3604 {
3605 if (TREE_CODE (expr) == ADDR_EXPR)
3606 {
3607 error ("%qE is not a valid template argument for type %qT "
3608 "because it is a pointer", expr, type);
3609 inform ("try using %qE instead", TREE_OPERAND (expr, 0));
3610 return NULL_TREE;
3611 }
3612
3613 expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
3614 if (!expr || expr == error_mark_node)
3615 return expr;
3616
3617 expr = build_nop (type, build_address (expr));
3618 }
3619 /* [temp.arg.nontype]/5, bullet 6
3620
3621 For a non-type template-parameter of type pointer to member function,
3622 no conversions apply. If the template-argument represents a set of
3623 overloaded member functions, the matching member function is selected
3624 from the set (_over.over_). */
3625 else if (TYPE_PTRMEMFUNC_P (type))
3626 {
3627 expr = instantiate_type (type, expr, tf_none);
3628 if (expr == error_mark_node)
3629 return error_mark_node;
3630
3631 /* There is no way to disable standard conversions in
3632 resolve_address_of_overloaded_function (called by
3633 instantiate_type). It is possible that the call succeeded by
3634 converting &B::I to &D::I (where B is a base of D), so we need
3635 to reject this conversion here.
3636
3637 Actually, even if there was a way to disable standard conversions,
3638 it would still be better to reject them here so that we can
3639 provide a superior diagnostic. */
3640 if (!same_type_p (TREE_TYPE (expr), type))
3641 {
3642 /* Make sure we are just one standard conversion off. */
3643 gcc_assert (can_convert (type, TREE_TYPE (expr)));
3644 error ("%qE is not a valid template argument for type %qT "
3645 "because it is of type %qT", expr, type,
3646 TREE_TYPE (expr));
3647 inform ("standard conversions are not allowed in this context");
3648 return NULL_TREE;
3649 }
3650 }
3651 /* [temp.arg.nontype]/5, bullet 7
3652
3653 For a non-type template-parameter of type pointer to data member,
3654 qualification conversions (_conv.qual_) are applied. */
3655 else if (TYPE_PTRMEM_P (type))
3656 {
3657 expr = perform_qualification_conversions (type, expr);
3658 if (expr == error_mark_node)
3659 return expr;
3660 }
3661 /* A template non-type parameter must be one of the above. */
3662 else
3663 gcc_unreachable ();
3664
3665 /* Sanity check: did we actually convert the argument to the
3666 right type? */
3667 gcc_assert (same_type_p (type, TREE_TYPE (expr)));
3668 return expr;
3669 }
3670
3671
3672 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
3673 template template parameters. Both PARM_PARMS and ARG_PARMS are
3674 vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
3675 or PARM_DECL.
3676
3677 ARG_PARMS may contain more parameters than PARM_PARMS. If this is
3678 the case, then extra parameters must have default arguments.
3679
3680 Consider the example:
3681 template <class T, class Allocator = allocator> class vector;
3682 template<template <class U> class TT> class C;
3683
3684 C<vector> is a valid instantiation. PARM_PARMS for the above code
3685 contains a TYPE_DECL (for U), ARG_PARMS contains two TYPE_DECLs (for
3686 T and Allocator) and OUTER_ARGS contains the argument that is used to
3687 substitute the TT parameter. */
3688
3689 static int
3690 coerce_template_template_parms (tree parm_parms,
3691 tree arg_parms,
3692 tsubst_flags_t complain,
3693 tree in_decl,
3694 tree outer_args)
3695 {
3696 int nparms, nargs, i;
3697 tree parm, arg;
3698
3699 gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
3700 gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
3701
3702 nparms = TREE_VEC_LENGTH (parm_parms);
3703 nargs = TREE_VEC_LENGTH (arg_parms);
3704
3705 /* The rule here is opposite of coerce_template_parms. */
3706 if (nargs < nparms
3707 || (nargs > nparms
3708 && TREE_PURPOSE (TREE_VEC_ELT (arg_parms, nparms)) == NULL_TREE))
3709 return 0;
3710
3711 for (i = 0; i < nparms; ++i)
3712 {
3713 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
3714 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
3715
3716 if (arg == NULL_TREE || arg == error_mark_node
3717 || parm == NULL_TREE || parm == error_mark_node)
3718 return 0;
3719
3720 if (TREE_CODE (arg) != TREE_CODE (parm))
3721 return 0;
3722
3723 switch (TREE_CODE (parm))
3724 {
3725 case TYPE_DECL:
3726 break;
3727
3728 case TEMPLATE_DECL:
3729 /* We encounter instantiations of templates like
3730 template <template <template <class> class> class TT>
3731 class C; */
3732 {
3733 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3734 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3735
3736 if (!coerce_template_template_parms
3737 (parmparm, argparm, complain, in_decl, outer_args))
3738 return 0;
3739 }
3740 break;
3741
3742 case PARM_DECL:
3743 /* The tsubst call is used to handle cases such as
3744
3745 template <int> class C {};
3746 template <class T, template <T> class TT> class D {};
3747 D<int, C> d;
3748
3749 i.e. the parameter list of TT depends on earlier parameters. */
3750 if (!dependent_type_p (TREE_TYPE (arg))
3751 && !same_type_p
3752 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
3753 TREE_TYPE (arg)))
3754 return 0;
3755 break;
3756
3757 default:
3758 gcc_unreachable ();
3759 }
3760 }
3761 return 1;
3762 }
3763
3764 /* Convert the indicated template ARG as necessary to match the
3765 indicated template PARM. Returns the converted ARG, or
3766 error_mark_node if the conversion was unsuccessful. Error and
3767 warning messages are issued under control of COMPLAIN. This
3768 conversion is for the Ith parameter in the parameter list. ARGS is
3769 the full set of template arguments deduced so far. */
3770
3771 static tree
3772 convert_template_argument (tree parm,
3773 tree arg,
3774 tree args,
3775 tsubst_flags_t complain,
3776 int i,
3777 tree in_decl)
3778 {
3779 tree val;
3780 tree inner_args;
3781 int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
3782
3783 inner_args = INNERMOST_TEMPLATE_ARGS (args);
3784
3785 if (TREE_CODE (arg) == TREE_LIST
3786 && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
3787 {
3788 /* The template argument was the name of some
3789 member function. That's usually
3790 invalid, but static members are OK. In any
3791 case, grab the underlying fields/functions
3792 and issue an error later if required. */
3793 arg = TREE_VALUE (arg);
3794 TREE_TYPE (arg) = unknown_type_node;
3795 }
3796
3797 requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
3798 requires_type = (TREE_CODE (parm) == TYPE_DECL
3799 || requires_tmpl_type);
3800
3801 is_tmpl_type = ((TREE_CODE (arg) == TEMPLATE_DECL
3802 && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
3803 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3804 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
3805
3806 if (is_tmpl_type
3807 && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3808 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
3809 arg = TYPE_STUB_DECL (arg);
3810
3811 is_type = TYPE_P (arg) || is_tmpl_type;
3812
3813 if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
3814 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
3815 {
3816 pedwarn ("to refer to a type member of a template parameter, "
3817 "use %<typename %E%>", arg);
3818
3819 arg = make_typename_type (TREE_OPERAND (arg, 0),
3820 TREE_OPERAND (arg, 1),
3821 typename_type,
3822 complain & tf_error);
3823 is_type = 1;
3824 }
3825 if (is_type != requires_type)
3826 {
3827 if (in_decl)
3828 {
3829 if (complain & tf_error)
3830 {
3831 error ("type/value mismatch at argument %d in template "
3832 "parameter list for %qD",
3833 i + 1, in_decl);
3834 if (is_type)
3835 error (" expected a constant of type %qT, got %qT",
3836 TREE_TYPE (parm),
3837 (is_tmpl_type ? DECL_NAME (arg) : arg));
3838 else if (requires_tmpl_type)
3839 error (" expected a class template, got %qE", arg);
3840 else
3841 error (" expected a type, got %qE", arg);
3842 }
3843 }
3844 return error_mark_node;
3845 }
3846 if (is_tmpl_type ^ requires_tmpl_type)
3847 {
3848 if (in_decl && (complain & tf_error))
3849 {
3850 error ("type/value mismatch at argument %d in template "
3851 "parameter list for %qD",
3852 i + 1, in_decl);
3853 if (is_tmpl_type)
3854 error (" expected a type, got %qT", DECL_NAME (arg));
3855 else
3856 error (" expected a class template, got %qT", arg);
3857 }
3858 return error_mark_node;
3859 }
3860
3861 if (is_type)
3862 {
3863 if (requires_tmpl_type)
3864 {
3865 if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
3866 /* The number of argument required is not known yet.
3867 Just accept it for now. */
3868 val = TREE_TYPE (arg);
3869 else
3870 {
3871 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3872 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3873
3874 if (coerce_template_template_parms (parmparm, argparm,
3875 complain, in_decl,
3876 inner_args))
3877 {
3878 val = arg;
3879
3880 /* TEMPLATE_TEMPLATE_PARM node is preferred over
3881 TEMPLATE_DECL. */
3882 if (val != error_mark_node
3883 && DECL_TEMPLATE_TEMPLATE_PARM_P (val))
3884 val = TREE_TYPE (val);
3885 }
3886 else
3887 {
3888 if (in_decl && (complain & tf_error))
3889 {
3890 error ("type/value mismatch at argument %d in "
3891 "template parameter list for %qD",
3892 i + 1, in_decl);
3893 error (" expected a template of type %qD, got %qD",
3894 parm, arg);
3895 }
3896
3897 val = error_mark_node;
3898 }
3899 }
3900 }
3901 else
3902 val = arg;
3903 }
3904 else
3905 {
3906 tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
3907
3908 if (invalid_nontype_parm_type_p (t, complain))
3909 return error_mark_node;
3910
3911 if (!uses_template_parms (arg) && !uses_template_parms (t))
3912 /* We used to call digest_init here. However, digest_init
3913 will report errors, which we don't want when complain
3914 is zero. More importantly, digest_init will try too
3915 hard to convert things: for example, `0' should not be
3916 converted to pointer type at this point according to
3917 the standard. Accepting this is not merely an
3918 extension, since deciding whether or not these
3919 conversions can occur is part of determining which
3920 function template to call, or whether a given explicit
3921 argument specification is valid. */
3922 val = convert_nontype_argument (t, arg);
3923 else
3924 val = arg;
3925
3926 if (val == NULL_TREE)
3927 val = error_mark_node;
3928 else if (val == error_mark_node && (complain & tf_error))
3929 error ("could not convert template argument %qE to %qT", arg, t);
3930 }
3931
3932 return val;
3933 }
3934
3935 /* Convert all template arguments to their appropriate types, and
3936 return a vector containing the innermost resulting template
3937 arguments. If any error occurs, return error_mark_node. Error and
3938 warning messages are issued under control of COMPLAIN.
3939
3940 If REQUIRE_ALL_ARGUMENTS is nonzero, all arguments must be
3941 provided in ARGLIST, or else trailing parameters must have default
3942 values. If REQUIRE_ALL_ARGUMENTS is zero, we will attempt argument
3943 deduction for any unspecified trailing arguments. */
3944
3945 static tree
3946 coerce_template_parms (tree parms,
3947 tree args,
3948 tree in_decl,
3949 tsubst_flags_t complain,
3950 int require_all_arguments)
3951 {
3952 int nparms, nargs, i, lost = 0;
3953 tree inner_args;
3954 tree new_args;
3955 tree new_inner_args;
3956
3957 inner_args = INNERMOST_TEMPLATE_ARGS (args);
3958 nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
3959 nparms = TREE_VEC_LENGTH (parms);
3960
3961 if (nargs > nparms
3962 || (nargs < nparms
3963 && require_all_arguments
3964 && TREE_PURPOSE (TREE_VEC_ELT (parms, nargs)) == NULL_TREE))
3965 {
3966 if (complain & tf_error)
3967 {
3968 error ("wrong number of template arguments (%d, should be %d)",
3969 nargs, nparms);
3970
3971 if (in_decl)
3972 error ("provided for %q+D", in_decl);
3973 }
3974
3975 return error_mark_node;
3976 }
3977
3978 new_inner_args = make_tree_vec (nparms);
3979 new_args = add_outermost_template_args (args, new_inner_args);
3980 for (i = 0; i < nparms; i++)
3981 {
3982 tree arg;
3983 tree parm;
3984
3985 /* Get the Ith template parameter. */
3986 parm = TREE_VEC_ELT (parms, i);
3987
3988 /* Calculate the Ith argument. */
3989 if (i < nargs)
3990 arg = TREE_VEC_ELT (inner_args, i);
3991 else if (require_all_arguments)
3992 /* There must be a default arg in this case. */
3993 arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
3994 complain, in_decl);
3995 else
3996 break;
3997
3998 gcc_assert (arg);
3999 if (arg == error_mark_node)
4000 {
4001 if (complain & tf_error)
4002 error ("template argument %d is invalid", i + 1);
4003 }
4004 else
4005 arg = convert_template_argument (TREE_VALUE (parm),
4006 arg, new_args, complain, i,
4007 in_decl);
4008
4009 if (arg == error_mark_node)
4010 lost++;
4011 TREE_VEC_ELT (new_inner_args, i) = arg;
4012 }
4013
4014 if (lost)
4015 return error_mark_node;
4016
4017 return new_inner_args;
4018 }
4019
4020 /* Returns 1 if template args OT and NT are equivalent. */
4021
4022 static int
4023 template_args_equal (tree ot, tree nt)
4024 {
4025 if (nt == ot)
4026 return 1;
4027
4028 if (TREE_CODE (nt) == TREE_VEC)
4029 /* For member templates */
4030 return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
4031 else if (TYPE_P (nt))
4032 return TYPE_P (ot) && same_type_p (ot, nt);
4033 else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
4034 return 0;
4035 else
4036 return cp_tree_equal (ot, nt);
4037 }
4038
4039 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
4040 of template arguments. Returns 0 otherwise. */
4041
4042 int
4043 comp_template_args (tree oldargs, tree newargs)
4044 {
4045 int i;
4046
4047 if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
4048 return 0;
4049
4050 for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
4051 {
4052 tree nt = TREE_VEC_ELT (newargs, i);
4053 tree ot = TREE_VEC_ELT (oldargs, i);
4054
4055 if (! template_args_equal (ot, nt))
4056 return 0;
4057 }
4058 return 1;
4059 }
4060
4061 /* Given class template name and parameter list, produce a user-friendly name
4062 for the instantiation. */
4063
4064 static char *
4065 mangle_class_name_for_template (const char* name, tree parms, tree arglist)
4066 {
4067 static struct obstack scratch_obstack;
4068 static char *scratch_firstobj;
4069 int i, nparms;
4070
4071 if (!scratch_firstobj)
4072 gcc_obstack_init (&scratch_obstack);
4073 else
4074 obstack_free (&scratch_obstack, scratch_firstobj);
4075 scratch_firstobj = obstack_alloc (&scratch_obstack, 1);
4076
4077 #define ccat(C) obstack_1grow (&scratch_obstack, (C));
4078 #define cat(S) obstack_grow (&scratch_obstack, (S), strlen (S))
4079
4080 cat (name);
4081 ccat ('<');
4082 nparms = TREE_VEC_LENGTH (parms);
4083 arglist = INNERMOST_TEMPLATE_ARGS (arglist);
4084 gcc_assert (nparms == TREE_VEC_LENGTH (arglist));
4085 for (i = 0; i < nparms; i++)
4086 {
4087 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4088 tree arg = TREE_VEC_ELT (arglist, i);
4089
4090 if (i)
4091 ccat (',');
4092
4093 if (TREE_CODE (parm) == TYPE_DECL)
4094 {
4095 cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
4096 continue;
4097 }
4098 else if (TREE_CODE (parm) == TEMPLATE_DECL)
4099 {
4100 if (TREE_CODE (arg) == TEMPLATE_DECL)
4101 {
4102 /* Already substituted with real template. Just output
4103 the template name here */
4104 tree context = DECL_CONTEXT (arg);
4105 if (context)
4106 {
4107 /* The template may be defined in a namespace, or
4108 may be a member template. */
4109 gcc_assert (TREE_CODE (context) == NAMESPACE_DECL
4110 || CLASS_TYPE_P (context));
4111 cat (decl_as_string (DECL_CONTEXT (arg),
4112 TFF_PLAIN_IDENTIFIER));
4113 cat ("::");
4114 }
4115 cat (IDENTIFIER_POINTER (DECL_NAME (arg)));
4116 }
4117 else
4118 /* Output the parameter declaration. */
4119 cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
4120 continue;
4121 }
4122 else
4123 gcc_assert (TREE_CODE (parm) == PARM_DECL);
4124
4125 /* No need to check arglist against parmlist here; we did that
4126 in coerce_template_parms, called from lookup_template_class. */
4127 cat (expr_as_string (arg, TFF_PLAIN_IDENTIFIER));
4128 }
4129 {
4130 char *bufp = obstack_next_free (&scratch_obstack);
4131 int offset = 0;
4132 while (bufp[offset - 1] == ' ')
4133 offset--;
4134 obstack_blank_fast (&scratch_obstack, offset);
4135
4136 /* B<C<char> >, not B<C<char>> */
4137 if (bufp[offset - 1] == '>')
4138 ccat (' ');
4139 }
4140 ccat ('>');
4141 ccat ('\0');
4142 return (char *) obstack_base (&scratch_obstack);
4143 }
4144
4145 static tree
4146 classtype_mangled_name (tree t)
4147 {
4148 if (CLASSTYPE_TEMPLATE_INFO (t)
4149 /* Specializations have already had their names set up in
4150 lookup_template_class. */
4151 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
4152 {
4153 tree tmpl = most_general_template (CLASSTYPE_TI_TEMPLATE (t));
4154
4155 /* For non-primary templates, the template parameters are
4156 implicit from their surrounding context. */
4157 if (PRIMARY_TEMPLATE_P (tmpl))
4158 {
4159 tree name = DECL_NAME (tmpl);
4160 char *mangled_name = mangle_class_name_for_template
4161 (IDENTIFIER_POINTER (name),
4162 DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
4163 CLASSTYPE_TI_ARGS (t));
4164 tree id = get_identifier (mangled_name);
4165 IDENTIFIER_TEMPLATE (id) = name;
4166 return id;
4167 }
4168 }
4169
4170 return TYPE_IDENTIFIER (t);
4171 }
4172
4173 static void
4174 add_pending_template (tree d)
4175 {
4176 tree ti = (TYPE_P (d)
4177 ? CLASSTYPE_TEMPLATE_INFO (d)
4178 : DECL_TEMPLATE_INFO (d));
4179 tree pt;
4180 int level;
4181
4182 if (TI_PENDING_TEMPLATE_FLAG (ti))
4183 return;
4184
4185 /* We are called both from instantiate_decl, where we've already had a
4186 tinst_level pushed, and instantiate_template, where we haven't.
4187 Compensate. */
4188 level = !(current_tinst_level && TINST_DECL (current_tinst_level) == d);
4189
4190 if (level)
4191 push_tinst_level (d);
4192
4193 pt = tree_cons (current_tinst_level, d, NULL_TREE);
4194 if (last_pending_template)
4195 TREE_CHAIN (last_pending_template) = pt;
4196 else
4197 pending_templates = pt;
4198
4199 last_pending_template = pt;
4200
4201 TI_PENDING_TEMPLATE_FLAG (ti) = 1;
4202
4203 if (level)
4204 pop_tinst_level ();
4205 }
4206
4207
4208 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
4209 ARGLIST. Valid choices for FNS are given in the cp-tree.def
4210 documentation for TEMPLATE_ID_EXPR. */
4211
4212 tree
4213 lookup_template_function (tree fns, tree arglist)
4214 {
4215 tree type;
4216
4217 if (fns == error_mark_node || arglist == error_mark_node)
4218 return error_mark_node;
4219
4220 gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
4221 gcc_assert (fns && (is_overloaded_fn (fns)
4222 || TREE_CODE (fns) == IDENTIFIER_NODE));
4223
4224 if (BASELINK_P (fns))
4225 {
4226 BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
4227 unknown_type_node,
4228 BASELINK_FUNCTIONS (fns),
4229 arglist);
4230 return fns;
4231 }
4232
4233 type = TREE_TYPE (fns);
4234 if (TREE_CODE (fns) == OVERLOAD || !type)
4235 type = unknown_type_node;
4236
4237 return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
4238 }
4239
4240 /* Within the scope of a template class S<T>, the name S gets bound
4241 (in build_self_reference) to a TYPE_DECL for the class, not a
4242 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
4243 or one of its enclosing classes, and that type is a template,
4244 return the associated TEMPLATE_DECL. Otherwise, the original
4245 DECL is returned. */
4246
4247 tree
4248 maybe_get_template_decl_from_type_decl (tree decl)
4249 {
4250 return (decl != NULL_TREE
4251 && TREE_CODE (decl) == TYPE_DECL
4252 && DECL_ARTIFICIAL (decl)
4253 && CLASS_TYPE_P (TREE_TYPE (decl))
4254 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
4255 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
4256 }
4257
4258 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
4259 parameters, find the desired type.
4260
4261 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
4262
4263 IN_DECL, if non-NULL, is the template declaration we are trying to
4264 instantiate.
4265
4266 If ENTERING_SCOPE is nonzero, we are about to enter the scope of
4267 the class we are looking up.
4268
4269 Issue error and warning messages under control of COMPLAIN.
4270
4271 If the template class is really a local class in a template
4272 function, then the FUNCTION_CONTEXT is the function in which it is
4273 being instantiated.
4274
4275 ??? Note that this function is currently called *twice* for each
4276 template-id: the first time from the parser, while creating the
4277 incomplete type (finish_template_type), and the second type during the
4278 real instantiation (instantiate_template_class). This is surely something
4279 that we want to avoid. It also causes some problems with argument
4280 coercion (see convert_nontype_argument for more information on this). */
4281
4282 tree
4283 lookup_template_class (tree d1,
4284 tree arglist,
4285 tree in_decl,
4286 tree context,
4287 int entering_scope,
4288 tsubst_flags_t complain)
4289 {
4290 tree template = NULL_TREE, parmlist;
4291 tree t;
4292
4293 timevar_push (TV_NAME_LOOKUP);
4294
4295 if (TREE_CODE (d1) == IDENTIFIER_NODE)
4296 {
4297 tree value = innermost_non_namespace_value (d1);
4298 if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
4299 template = value;
4300 else
4301 {
4302 if (context)
4303 push_decl_namespace (context);
4304 template = lookup_name (d1, /*prefer_type=*/0);
4305 template = maybe_get_template_decl_from_type_decl (template);
4306 if (context)
4307 pop_decl_namespace ();
4308 }
4309 if (template)
4310 context = DECL_CONTEXT (template);
4311 }
4312 else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
4313 {
4314 tree type = TREE_TYPE (d1);
4315
4316 /* If we are declaring a constructor, say A<T>::A<T>, we will get
4317 an implicit typename for the second A. Deal with it. */
4318 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
4319 type = TREE_TYPE (type);
4320
4321 if (CLASSTYPE_TEMPLATE_INFO (type))
4322 {
4323 template = CLASSTYPE_TI_TEMPLATE (type);
4324 d1 = DECL_NAME (template);
4325 }
4326 }
4327 else if (TREE_CODE (d1) == ENUMERAL_TYPE
4328 || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
4329 {
4330 template = TYPE_TI_TEMPLATE (d1);
4331 d1 = DECL_NAME (template);
4332 }
4333 else if (TREE_CODE (d1) == TEMPLATE_DECL
4334 && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
4335 {
4336 template = d1;
4337 d1 = DECL_NAME (template);
4338 context = DECL_CONTEXT (template);
4339 }
4340
4341 /* Issue an error message if we didn't find a template. */
4342 if (! template)
4343 {
4344 if (complain & tf_error)
4345 error ("%qT is not a template", d1);
4346 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4347 }
4348
4349 if (TREE_CODE (template) != TEMPLATE_DECL
4350 /* Make sure it's a user visible template, if it was named by
4351 the user. */
4352 || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (template)
4353 && !PRIMARY_TEMPLATE_P (template)))
4354 {
4355 if (complain & tf_error)
4356 {
4357 error ("non-template type %qT used as a template", d1);
4358 if (in_decl)
4359 error ("for template declaration %q+D", in_decl);
4360 }
4361 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4362 }
4363
4364 complain &= ~tf_user;
4365
4366 if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
4367 {
4368 /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
4369 template arguments */
4370
4371 tree parm;
4372 tree arglist2;
4373
4374 parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
4375
4376 /* Consider an example where a template template parameter declared as
4377
4378 template <class T, class U = std::allocator<T> > class TT
4379
4380 The template parameter level of T and U are one level larger than
4381 of TT. To proper process the default argument of U, say when an
4382 instantiation `TT<int>' is seen, we need to build the full
4383 arguments containing {int} as the innermost level. Outer levels,
4384 available when not appearing as default template argument, can be
4385 obtained from `current_template_args ()'.
4386
4387 Suppose that TT is later substituted with std::vector. The above
4388 instantiation is `TT<int, std::allocator<T> >' with TT at
4389 level 1, and T at level 2, while the template arguments at level 1
4390 becomes {std::vector} and the inner level 2 is {int}. */
4391
4392 if (current_template_parms)
4393 arglist = add_to_template_args (current_template_args (), arglist);
4394
4395 arglist2 = coerce_template_parms (parmlist, arglist, template,
4396 complain, /*require_all_args=*/1);
4397 if (arglist2 == error_mark_node
4398 || (!uses_template_parms (arglist2)
4399 && check_instantiated_args (template, arglist2, complain)))
4400 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4401
4402 parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
4403 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
4404 }
4405 else
4406 {
4407 tree template_type = TREE_TYPE (template);
4408 tree gen_tmpl;
4409 tree type_decl;
4410 tree found = NULL_TREE;
4411 int arg_depth;
4412 int parm_depth;
4413 int is_partial_instantiation;
4414
4415 gen_tmpl = most_general_template (template);
4416 parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
4417 parm_depth = TMPL_PARMS_DEPTH (parmlist);
4418 arg_depth = TMPL_ARGS_DEPTH (arglist);
4419
4420 if (arg_depth == 1 && parm_depth > 1)
4421 {
4422 /* We've been given an incomplete set of template arguments.
4423 For example, given:
4424
4425 template <class T> struct S1 {
4426 template <class U> struct S2 {};
4427 template <class U> struct S2<U*> {};
4428 };
4429
4430 we will be called with an ARGLIST of `U*', but the
4431 TEMPLATE will be `template <class T> template
4432 <class U> struct S1<T>::S2'. We must fill in the missing
4433 arguments. */
4434 arglist
4435 = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
4436 arglist);
4437 arg_depth = TMPL_ARGS_DEPTH (arglist);
4438 }
4439
4440 /* Now we should have enough arguments. */
4441 gcc_assert (parm_depth == arg_depth);
4442
4443 /* From here on, we're only interested in the most general
4444 template. */
4445 template = gen_tmpl;
4446
4447 /* Calculate the BOUND_ARGS. These will be the args that are
4448 actually tsubst'd into the definition to create the
4449 instantiation. */
4450 if (parm_depth > 1)
4451 {
4452 /* We have multiple levels of arguments to coerce, at once. */
4453 int i;
4454 int saved_depth = TMPL_ARGS_DEPTH (arglist);
4455
4456 tree bound_args = make_tree_vec (parm_depth);
4457
4458 for (i = saved_depth,
4459 t = DECL_TEMPLATE_PARMS (template);
4460 i > 0 && t != NULL_TREE;
4461 --i, t = TREE_CHAIN (t))
4462 {
4463 tree a = coerce_template_parms (TREE_VALUE (t),
4464 arglist, template,
4465 complain, /*require_all_args=*/1);
4466
4467 /* Don't process further if one of the levels fails. */
4468 if (a == error_mark_node)
4469 {
4470 /* Restore the ARGLIST to its full size. */
4471 TREE_VEC_LENGTH (arglist) = saved_depth;
4472 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4473 }
4474
4475 SET_TMPL_ARGS_LEVEL (bound_args, i, a);
4476
4477 /* We temporarily reduce the length of the ARGLIST so
4478 that coerce_template_parms will see only the arguments
4479 corresponding to the template parameters it is
4480 examining. */
4481 TREE_VEC_LENGTH (arglist)--;
4482 }
4483
4484 /* Restore the ARGLIST to its full size. */
4485 TREE_VEC_LENGTH (arglist) = saved_depth;
4486
4487 arglist = bound_args;
4488 }
4489 else
4490 arglist
4491 = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
4492 INNERMOST_TEMPLATE_ARGS (arglist),
4493 template,
4494 complain, /*require_all_args=*/1);
4495
4496 if (arglist == error_mark_node)
4497 /* We were unable to bind the arguments. */
4498 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4499
4500 /* In the scope of a template class, explicit references to the
4501 template class refer to the type of the template, not any
4502 instantiation of it. For example, in:
4503
4504 template <class T> class C { void f(C<T>); }
4505
4506 the `C<T>' is just the same as `C'. Outside of the
4507 class, however, such a reference is an instantiation. */
4508 if (comp_template_args (TYPE_TI_ARGS (template_type),
4509 arglist))
4510 {
4511 found = template_type;
4512
4513 if (!entering_scope && PRIMARY_TEMPLATE_P (template))
4514 {
4515 tree ctx;
4516
4517 for (ctx = current_class_type;
4518 ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
4519 ctx = (TYPE_P (ctx)
4520 ? TYPE_CONTEXT (ctx)
4521 : DECL_CONTEXT (ctx)))
4522 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
4523 goto found_ctx;
4524
4525 /* We're not in the scope of the class, so the
4526 TEMPLATE_TYPE is not the type we want after all. */
4527 found = NULL_TREE;
4528 found_ctx:;
4529 }
4530 }
4531 if (found)
4532 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4533
4534 /* If we already have this specialization, return it. */
4535 found = retrieve_specialization (template, arglist,
4536 /*class_specializations_p=*/false);
4537 if (found)
4538 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4539
4540 /* This type is a "partial instantiation" if any of the template
4541 arguments still involve template parameters. Note that we set
4542 IS_PARTIAL_INSTANTIATION for partial specializations as
4543 well. */
4544 is_partial_instantiation = uses_template_parms (arglist);
4545
4546 /* If the deduced arguments are invalid, then the binding
4547 failed. */
4548 if (!is_partial_instantiation
4549 && check_instantiated_args (template,
4550 INNERMOST_TEMPLATE_ARGS (arglist),
4551 complain))
4552 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4553
4554 if (!is_partial_instantiation
4555 && !PRIMARY_TEMPLATE_P (template)
4556 && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
4557 {
4558 found = xref_tag_from_type (TREE_TYPE (template),
4559 DECL_NAME (template),
4560 /*tag_scope=*/ts_global);
4561 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4562 }
4563
4564 context = tsubst (DECL_CONTEXT (template), arglist,
4565 complain, in_decl);
4566 if (!context)
4567 context = global_namespace;
4568
4569 /* Create the type. */
4570 if (TREE_CODE (template_type) == ENUMERAL_TYPE)
4571 {
4572 if (!is_partial_instantiation)
4573 {
4574 set_current_access_from_decl (TYPE_NAME (template_type));
4575 t = start_enum (TYPE_IDENTIFIER (template_type));
4576 }
4577 else
4578 /* We don't want to call start_enum for this type, since
4579 the values for the enumeration constants may involve
4580 template parameters. And, no one should be interested
4581 in the enumeration constants for such a type. */
4582 t = make_node (ENUMERAL_TYPE);
4583 }
4584 else
4585 {
4586 t = make_aggr_type (TREE_CODE (template_type));
4587 CLASSTYPE_DECLARED_CLASS (t)
4588 = CLASSTYPE_DECLARED_CLASS (template_type);
4589 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
4590 TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
4591
4592 /* A local class. Make sure the decl gets registered properly. */
4593 if (context == current_function_decl)
4594 pushtag (DECL_NAME (template), t, /*tag_scope=*/ts_current);
4595 }
4596
4597 /* If we called start_enum or pushtag above, this information
4598 will already be set up. */
4599 if (!TYPE_NAME (t))
4600 {
4601 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
4602
4603 type_decl = create_implicit_typedef (DECL_NAME (template), t);
4604 DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
4605 TYPE_STUB_DECL (t) = type_decl;
4606 DECL_SOURCE_LOCATION (type_decl)
4607 = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
4608 }
4609 else
4610 type_decl = TYPE_NAME (t);
4611
4612 TREE_PRIVATE (type_decl)
4613 = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
4614 TREE_PROTECTED (type_decl)
4615 = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
4616 DECL_IN_SYSTEM_HEADER (type_decl)
4617 = DECL_IN_SYSTEM_HEADER (template);
4618 if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
4619 {
4620 DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
4621 DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
4622 }
4623
4624 /* Set up the template information. We have to figure out which
4625 template is the immediate parent if this is a full
4626 instantiation. */
4627 if (parm_depth == 1 || is_partial_instantiation
4628 || !PRIMARY_TEMPLATE_P (template))
4629 /* This case is easy; there are no member templates involved. */
4630 found = template;
4631 else
4632 {
4633 /* This is a full instantiation of a member template. Look
4634 for a partial instantiation of which this is an instance. */
4635
4636 for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
4637 found; found = TREE_CHAIN (found))
4638 {
4639 int success;
4640 tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
4641
4642 /* We only want partial instantiations, here, not
4643 specializations or full instantiations. */
4644 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
4645 || !uses_template_parms (TREE_VALUE (found)))
4646 continue;
4647
4648 /* Temporarily reduce by one the number of levels in the
4649 ARGLIST and in FOUND so as to avoid comparing the
4650 last set of arguments. */
4651 TREE_VEC_LENGTH (arglist)--;
4652 TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
4653
4654 /* See if the arguments match. If they do, then TMPL is
4655 the partial instantiation we want. */
4656 success = comp_template_args (TREE_PURPOSE (found), arglist);
4657
4658 /* Restore the argument vectors to their full size. */
4659 TREE_VEC_LENGTH (arglist)++;
4660 TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
4661
4662 if (success)
4663 {
4664 found = tmpl;
4665 break;
4666 }
4667 }
4668
4669 if (!found)
4670 {
4671 /* There was no partial instantiation. This happens
4672 where C<T> is a member template of A<T> and it's used
4673 in something like
4674
4675 template <typename T> struct B { A<T>::C<int> m; };
4676 B<float>;
4677
4678 Create the partial instantiation.
4679 */
4680 TREE_VEC_LENGTH (arglist)--;
4681 found = tsubst (template, arglist, complain, NULL_TREE);
4682 TREE_VEC_LENGTH (arglist)++;
4683 }
4684 }
4685
4686 SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
4687 DECL_TEMPLATE_INSTANTIATIONS (template)
4688 = tree_cons (arglist, t,
4689 DECL_TEMPLATE_INSTANTIATIONS (template));
4690
4691 if (TREE_CODE (t) == ENUMERAL_TYPE
4692 && !is_partial_instantiation)
4693 /* Now that the type has been registered on the instantiations
4694 list, we set up the enumerators. Because the enumeration
4695 constants may involve the enumeration type itself, we make
4696 sure to register the type first, and then create the
4697 constants. That way, doing tsubst_expr for the enumeration
4698 constants won't result in recursive calls here; we'll find
4699 the instantiation and exit above. */
4700 tsubst_enum (template_type, t, arglist);
4701
4702 /* Reset the name of the type, now that CLASSTYPE_TEMPLATE_INFO
4703 is set up. */
4704 if (TREE_CODE (t) != ENUMERAL_TYPE)
4705 DECL_NAME (type_decl) = classtype_mangled_name (t);
4706 if (is_partial_instantiation)
4707 /* If the type makes use of template parameters, the
4708 code that generates debugging information will crash. */
4709 DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
4710
4711 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
4712 }
4713 timevar_pop (TV_NAME_LOOKUP);
4714 }
4715 \f
4716 struct pair_fn_data
4717 {
4718 tree_fn_t fn;
4719 void *data;
4720 struct pointer_set_t *visited;
4721 };
4722
4723 /* Called from for_each_template_parm via walk_tree. */
4724
4725 static tree
4726 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
4727 {
4728 tree t = *tp;
4729 struct pair_fn_data *pfd = (struct pair_fn_data *) d;
4730 tree_fn_t fn = pfd->fn;
4731 void *data = pfd->data;
4732
4733 if (TYPE_P (t)
4734 && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited))
4735 return error_mark_node;
4736
4737 switch (TREE_CODE (t))
4738 {
4739 case RECORD_TYPE:
4740 if (TYPE_PTRMEMFUNC_P (t))
4741 break;
4742 /* Fall through. */
4743
4744 case UNION_TYPE:
4745 case ENUMERAL_TYPE:
4746 if (!TYPE_TEMPLATE_INFO (t))
4747 *walk_subtrees = 0;
4748 else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
4749 fn, data, pfd->visited))
4750 return error_mark_node;
4751 break;
4752
4753 case METHOD_TYPE:
4754 /* Since we're not going to walk subtrees, we have to do this
4755 explicitly here. */
4756 if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
4757 pfd->visited))
4758 return error_mark_node;
4759 /* Fall through. */
4760
4761 case FUNCTION_TYPE:
4762 /* Check the return type. */
4763 if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
4764 return error_mark_node;
4765
4766 /* Check the parameter types. Since default arguments are not
4767 instantiated until they are needed, the TYPE_ARG_TYPES may
4768 contain expressions that involve template parameters. But,
4769 no-one should be looking at them yet. And, once they're
4770 instantiated, they don't contain template parameters, so
4771 there's no point in looking at them then, either. */
4772 {
4773 tree parm;
4774
4775 for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
4776 if (for_each_template_parm (TREE_VALUE (parm), fn, data,
4777 pfd->visited))
4778 return error_mark_node;
4779
4780 /* Since we've already handled the TYPE_ARG_TYPES, we don't
4781 want walk_tree walking into them itself. */
4782 *walk_subtrees = 0;
4783 }
4784 break;
4785
4786 case TYPEOF_TYPE:
4787 if (for_each_template_parm (TYPE_FIELDS (t), fn, data,
4788 pfd->visited))
4789 return error_mark_node;
4790 break;
4791
4792 case FUNCTION_DECL:
4793 case VAR_DECL:
4794 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
4795 && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
4796 pfd->visited))
4797 return error_mark_node;
4798 /* Fall through. */
4799
4800 case PARM_DECL:
4801 case CONST_DECL:
4802 if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
4803 && for_each_template_parm (DECL_INITIAL (t), fn, data,
4804 pfd->visited))
4805 return error_mark_node;
4806 if (DECL_CONTEXT (t)
4807 && for_each_template_parm (DECL_CONTEXT (t), fn, data,
4808 pfd->visited))
4809 return error_mark_node;
4810 break;
4811
4812 case BOUND_TEMPLATE_TEMPLATE_PARM:
4813 /* Record template parameters such as `T' inside `TT<T>'. */
4814 if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited))
4815 return error_mark_node;
4816 /* Fall through. */
4817
4818 case TEMPLATE_TEMPLATE_PARM:
4819 case TEMPLATE_TYPE_PARM:
4820 case TEMPLATE_PARM_INDEX:
4821 if (fn && (*fn)(t, data))
4822 return error_mark_node;
4823 else if (!fn)
4824 return error_mark_node;
4825 break;
4826
4827 case TEMPLATE_DECL:
4828 /* A template template parameter is encountered. */
4829 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
4830 && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
4831 return error_mark_node;
4832
4833 /* Already substituted template template parameter */
4834 *walk_subtrees = 0;
4835 break;
4836
4837 case TYPENAME_TYPE:
4838 if (!fn
4839 || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
4840 data, pfd->visited))
4841 return error_mark_node;
4842 break;
4843
4844 case CONSTRUCTOR:
4845 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
4846 && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
4847 (TREE_TYPE (t)), fn, data,
4848 pfd->visited))
4849 return error_mark_node;
4850 break;
4851
4852 case INDIRECT_REF:
4853 case COMPONENT_REF:
4854 /* If there's no type, then this thing must be some expression
4855 involving template parameters. */
4856 if (!fn && !TREE_TYPE (t))
4857 return error_mark_node;
4858 break;
4859
4860 case MODOP_EXPR:
4861 case CAST_EXPR:
4862 case REINTERPRET_CAST_EXPR:
4863 case CONST_CAST_EXPR:
4864 case STATIC_CAST_EXPR:
4865 case DYNAMIC_CAST_EXPR:
4866 case ARROW_EXPR:
4867 case DOTSTAR_EXPR:
4868 case TYPEID_EXPR:
4869 case PSEUDO_DTOR_EXPR:
4870 if (!fn)
4871 return error_mark_node;
4872 break;
4873
4874 case BASELINK:
4875 /* If we do not handle this case specially, we end up walking
4876 the BINFO hierarchy, which is circular, and therefore
4877 confuses walk_tree. */
4878 *walk_subtrees = 0;
4879 if (for_each_template_parm (BASELINK_FUNCTIONS (*tp), fn, data,
4880 pfd->visited))
4881 return error_mark_node;
4882 break;
4883
4884 default:
4885 break;
4886 }
4887
4888 /* We didn't find any template parameters we liked. */
4889 return NULL_TREE;
4890 }
4891
4892 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
4893 BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
4894 call FN with the parameter and the DATA.
4895 If FN returns nonzero, the iteration is terminated, and
4896 for_each_template_parm returns 1. Otherwise, the iteration
4897 continues. If FN never returns a nonzero value, the value
4898 returned by for_each_template_parm is 0. If FN is NULL, it is
4899 considered to be the function which always returns 1. */
4900
4901 static int
4902 for_each_template_parm (tree t, tree_fn_t fn, void* data,
4903 struct pointer_set_t *visited)
4904 {
4905 struct pair_fn_data pfd;
4906 int result;
4907
4908 /* Set up. */
4909 pfd.fn = fn;
4910 pfd.data = data;
4911
4912 /* Walk the tree. (Conceptually, we would like to walk without
4913 duplicates, but for_each_template_parm_r recursively calls
4914 for_each_template_parm, so we would need to reorganize a fair
4915 bit to use walk_tree_without_duplicates, so we keep our own
4916 visited list.) */
4917 if (visited)
4918 pfd.visited = visited;
4919 else
4920 pfd.visited = pointer_set_create ();
4921 result = walk_tree (&t,
4922 for_each_template_parm_r,
4923 &pfd,
4924 pfd.visited) != NULL_TREE;
4925
4926 /* Clean up. */
4927 if (!visited)
4928 {
4929 pointer_set_destroy (pfd.visited);
4930 pfd.visited = 0;
4931 }
4932
4933 return result;
4934 }
4935
4936 /* Returns true if T depends on any template parameter. */
4937
4938 int
4939 uses_template_parms (tree t)
4940 {
4941 bool dependent_p;
4942 int saved_processing_template_decl;
4943
4944 saved_processing_template_decl = processing_template_decl;
4945 if (!saved_processing_template_decl)
4946 processing_template_decl = 1;
4947 if (TYPE_P (t))
4948 dependent_p = dependent_type_p (t);
4949 else if (TREE_CODE (t) == TREE_VEC)
4950 dependent_p = any_dependent_template_arguments_p (t);
4951 else if (TREE_CODE (t) == TREE_LIST)
4952 dependent_p = (uses_template_parms (TREE_VALUE (t))
4953 || uses_template_parms (TREE_CHAIN (t)));
4954 else if (DECL_P (t)
4955 || EXPR_P (t)
4956 || TREE_CODE (t) == TEMPLATE_PARM_INDEX
4957 || TREE_CODE (t) == OVERLOAD
4958 || TREE_CODE (t) == BASELINK
4959 || CONSTANT_CLASS_P (t))
4960 dependent_p = (type_dependent_expression_p (t)
4961 || value_dependent_expression_p (t));
4962 else
4963 {
4964 gcc_assert (t == error_mark_node);
4965 dependent_p = false;
4966 }
4967
4968 processing_template_decl = saved_processing_template_decl;
4969
4970 return dependent_p;
4971 }
4972
4973 /* Returns true if T depends on any template parameter with level LEVEL. */
4974
4975 int
4976 uses_template_parms_level (tree t, int level)
4977 {
4978 return for_each_template_parm (t, template_parm_this_level_p, &level, NULL);
4979 }
4980
4981 static int tinst_depth;
4982 extern int max_tinst_depth;
4983 #ifdef GATHER_STATISTICS
4984 int depth_reached;
4985 #endif
4986 static int tinst_level_tick;
4987 static int last_template_error_tick;
4988
4989 /* We're starting to instantiate D; record the template instantiation context
4990 for diagnostics and to restore it later. */
4991
4992 int
4993 push_tinst_level (tree d)
4994 {
4995 tree new;
4996
4997 if (tinst_depth >= max_tinst_depth)
4998 {
4999 /* If the instantiation in question still has unbound template parms,
5000 we don't really care if we can't instantiate it, so just return.
5001 This happens with base instantiation for implicit `typename'. */
5002 if (uses_template_parms (d))
5003 return 0;
5004
5005 last_template_error_tick = tinst_level_tick;
5006 error ("template instantiation depth exceeds maximum of %d (use "
5007 "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
5008 max_tinst_depth, d);
5009
5010 print_instantiation_context ();
5011
5012 return 0;
5013 }
5014
5015 new = make_node (TINST_LEVEL);
5016 TINST_DECL (new) = d;
5017 TINST_LOCATION (new) = input_location;
5018 TINST_IN_SYSTEM_HEADER_P (new) = in_system_header;
5019 TREE_CHAIN (new) = current_tinst_level;
5020 current_tinst_level = new;
5021
5022 ++tinst_depth;
5023 #ifdef GATHER_STATISTICS
5024 if (tinst_depth > depth_reached)
5025 depth_reached = tinst_depth;
5026 #endif
5027
5028 ++tinst_level_tick;
5029 return 1;
5030 }
5031
5032 /* We're done instantiating this template; return to the instantiation
5033 context. */
5034
5035 void
5036 pop_tinst_level (void)
5037 {
5038 tree old = current_tinst_level;
5039
5040 /* Restore the filename and line number stashed away when we started
5041 this instantiation. */
5042 input_location = TINST_LOCATION (old);
5043 in_system_header = TINST_IN_SYSTEM_HEADER_P (old);
5044 current_tinst_level = TREE_CHAIN (old);
5045 --tinst_depth;
5046 ++tinst_level_tick;
5047 }
5048
5049 /* We're instantiating a deferred template; restore the template
5050 instantiation context in which the instantiation was requested, which
5051 is one step out from LEVEL. */
5052
5053 static void
5054 reopen_tinst_level (tree level)
5055 {
5056 tree t;
5057
5058 tinst_depth = 0;
5059 for (t = level; t; t = TREE_CHAIN (t))
5060 ++tinst_depth;
5061
5062 current_tinst_level = level;
5063 pop_tinst_level ();
5064 }
5065
5066 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
5067 vector of template arguments, as for tsubst.
5068
5069 Returns an appropriate tsubst'd friend declaration. */
5070
5071 static tree
5072 tsubst_friend_function (tree decl, tree args)
5073 {
5074 tree new_friend;
5075
5076 if (TREE_CODE (decl) == FUNCTION_DECL
5077 && DECL_TEMPLATE_INSTANTIATION (decl)
5078 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
5079 /* This was a friend declared with an explicit template
5080 argument list, e.g.:
5081
5082 friend void f<>(T);
5083
5084 to indicate that f was a template instantiation, not a new
5085 function declaration. Now, we have to figure out what
5086 instantiation of what template. */
5087 {
5088 tree template_id, arglist, fns;
5089 tree new_args;
5090 tree tmpl;
5091 tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
5092
5093 /* Friend functions are looked up in the containing namespace scope.
5094 We must enter that scope, to avoid finding member functions of the
5095 current cless with same name. */
5096 push_nested_namespace (ns);
5097 fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
5098 tf_error | tf_warning, NULL_TREE);
5099 pop_nested_namespace (ns);
5100 arglist = tsubst (DECL_TI_ARGS (decl), args,
5101 tf_error | tf_warning, NULL_TREE);
5102 template_id = lookup_template_function (fns, arglist);
5103
5104 new_friend = tsubst (decl, args, tf_error | tf_warning, NULL_TREE);
5105 tmpl = determine_specialization (template_id, new_friend,
5106 &new_args,
5107 /*need_member_template=*/0,
5108 TREE_VEC_LENGTH (args));
5109 return instantiate_template (tmpl, new_args, tf_error);
5110 }
5111
5112 new_friend = tsubst (decl, args, tf_error | tf_warning, NULL_TREE);
5113
5114 /* The NEW_FRIEND will look like an instantiation, to the
5115 compiler, but is not an instantiation from the point of view of
5116 the language. For example, we might have had:
5117
5118 template <class T> struct S {
5119 template <class U> friend void f(T, U);
5120 };
5121
5122 Then, in S<int>, template <class U> void f(int, U) is not an
5123 instantiation of anything. */
5124 if (new_friend == error_mark_node)
5125 return error_mark_node;
5126
5127 DECL_USE_TEMPLATE (new_friend) = 0;
5128 if (TREE_CODE (decl) == TEMPLATE_DECL)
5129 {
5130 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
5131 DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
5132 = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
5133 }
5134
5135 /* The mangled name for the NEW_FRIEND is incorrect. The function
5136 is not a template instantiation and should not be mangled like
5137 one. Therefore, we forget the mangling here; we'll recompute it
5138 later if we need it. */
5139 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
5140 {
5141 SET_DECL_RTL (new_friend, NULL_RTX);
5142 SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
5143 }
5144
5145 if (DECL_NAMESPACE_SCOPE_P (new_friend))
5146 {
5147 tree old_decl;
5148 tree new_friend_template_info;
5149 tree new_friend_result_template_info;
5150 tree ns;
5151 int new_friend_is_defn;
5152
5153 /* We must save some information from NEW_FRIEND before calling
5154 duplicate decls since that function will free NEW_FRIEND if
5155 possible. */
5156 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
5157 new_friend_is_defn =
5158 (DECL_INITIAL (DECL_TEMPLATE_RESULT
5159 (template_for_substitution (new_friend)))
5160 != NULL_TREE);
5161 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
5162 {
5163 /* This declaration is a `primary' template. */
5164 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
5165
5166 new_friend_result_template_info
5167 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
5168 }
5169 else
5170 new_friend_result_template_info = NULL_TREE;
5171
5172 /* Inside pushdecl_namespace_level, we will push into the
5173 current namespace. However, the friend function should go
5174 into the namespace of the template. */
5175 ns = decl_namespace_context (new_friend);
5176 push_nested_namespace (ns);
5177 old_decl = pushdecl_namespace_level (new_friend);
5178 pop_nested_namespace (ns);
5179
5180 if (old_decl != new_friend)
5181 {
5182 /* This new friend declaration matched an existing
5183 declaration. For example, given:
5184
5185 template <class T> void f(T);
5186 template <class U> class C {
5187 template <class T> friend void f(T) {}
5188 };
5189
5190 the friend declaration actually provides the definition
5191 of `f', once C has been instantiated for some type. So,
5192 old_decl will be the out-of-class template declaration,
5193 while new_friend is the in-class definition.
5194
5195 But, if `f' was called before this point, the
5196 instantiation of `f' will have DECL_TI_ARGS corresponding
5197 to `T' but not to `U', references to which might appear
5198 in the definition of `f'. Previously, the most general
5199 template for an instantiation of `f' was the out-of-class
5200 version; now it is the in-class version. Therefore, we
5201 run through all specialization of `f', adding to their
5202 DECL_TI_ARGS appropriately. In particular, they need a
5203 new set of outer arguments, corresponding to the
5204 arguments for this class instantiation.
5205
5206 The same situation can arise with something like this:
5207
5208 friend void f(int);
5209 template <class T> class C {
5210 friend void f(T) {}
5211 };
5212
5213 when `C<int>' is instantiated. Now, `f(int)' is defined
5214 in the class. */
5215
5216 if (!new_friend_is_defn)
5217 /* On the other hand, if the in-class declaration does
5218 *not* provide a definition, then we don't want to alter
5219 existing definitions. We can just leave everything
5220 alone. */
5221 ;
5222 else
5223 {
5224 /* Overwrite whatever template info was there before, if
5225 any, with the new template information pertaining to
5226 the declaration. */
5227 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
5228
5229 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
5230 reregister_specialization (new_friend,
5231 most_general_template (old_decl),
5232 old_decl);
5233 else
5234 {
5235 tree t;
5236 tree new_friend_args;
5237
5238 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
5239 = new_friend_result_template_info;
5240
5241 new_friend_args = TI_ARGS (new_friend_template_info);
5242 for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
5243 t != NULL_TREE;
5244 t = TREE_CHAIN (t))
5245 {
5246 tree spec = TREE_VALUE (t);
5247
5248 DECL_TI_ARGS (spec)
5249 = add_outermost_template_args (new_friend_args,
5250 DECL_TI_ARGS (spec));
5251 }
5252
5253 /* Now, since specializations are always supposed to
5254 hang off of the most general template, we must move
5255 them. */
5256 t = most_general_template (old_decl);
5257 if (t != old_decl)
5258 {
5259 DECL_TEMPLATE_SPECIALIZATIONS (t)
5260 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
5261 DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
5262 DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
5263 }
5264 }
5265 }
5266
5267 /* The information from NEW_FRIEND has been merged into OLD_DECL
5268 by duplicate_decls. */
5269 new_friend = old_decl;
5270 }
5271 }
5272 else
5273 {
5274 tree context = DECL_CONTEXT (new_friend);
5275 bool dependent_p;
5276
5277 /* In the code
5278 template <class T> class C {
5279 template <class U> friend void C1<U>::f (); // case 1
5280 friend void C2<T>::f (); // case 2
5281 };
5282 we only need to make sure CONTEXT is a complete type for
5283 case 2. To distinguish between the two cases, we note that
5284 CONTEXT of case 1 remains dependent type after tsubst while
5285 this isn't true for case 2. */
5286 ++processing_template_decl;
5287 dependent_p = dependent_type_p (context);
5288 --processing_template_decl;
5289
5290 if (!dependent_p
5291 && !complete_type_or_else (context, NULL_TREE))
5292 return error_mark_node;
5293
5294 if (COMPLETE_TYPE_P (context))
5295 {
5296 /* Check to see that the declaration is really present, and,
5297 possibly obtain an improved declaration. */
5298 tree fn = check_classfn (context,
5299 new_friend, NULL_TREE);
5300
5301 if (fn)
5302 new_friend = fn;
5303 }
5304 }
5305
5306 return new_friend;
5307 }
5308
5309 /* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
5310 template arguments, as for tsubst.
5311
5312 Returns an appropriate tsubst'd friend type or error_mark_node on
5313 failure. */
5314
5315 static tree
5316 tsubst_friend_class (tree friend_tmpl, tree args)
5317 {
5318 tree friend_type;
5319 tree tmpl;
5320 tree context;
5321
5322 context = DECL_CONTEXT (friend_tmpl);
5323
5324 if (context)
5325 {
5326 if (TREE_CODE (context) == NAMESPACE_DECL)
5327 push_nested_namespace (context);
5328 else
5329 push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
5330 }
5331
5332 /* First, we look for a class template. */
5333 tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/0);
5334
5335 /* But, if we don't find one, it might be because we're in a
5336 situation like this:
5337
5338 template <class T>
5339 struct S {
5340 template <class U>
5341 friend struct S;
5342 };
5343
5344 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
5345 for `S<int>', not the TEMPLATE_DECL. */
5346 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5347 {
5348 tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/1);
5349 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
5350 }
5351
5352 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
5353 {
5354 /* The friend template has already been declared. Just
5355 check to see that the declarations match, and install any new
5356 default parameters. We must tsubst the default parameters,
5357 of course. We only need the innermost template parameters
5358 because that is all that redeclare_class_template will look
5359 at. */
5360 if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
5361 > TMPL_ARGS_DEPTH (args))
5362 {
5363 tree parms;
5364 parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
5365 args, tf_error | tf_warning);
5366 redeclare_class_template (TREE_TYPE (tmpl), parms);
5367 }
5368
5369 friend_type = TREE_TYPE (tmpl);
5370 }
5371 else
5372 {
5373 /* The friend template has not already been declared. In this
5374 case, the instantiation of the template class will cause the
5375 injection of this template into the global scope. */
5376 tmpl = tsubst (friend_tmpl, args, tf_error | tf_warning, NULL_TREE);
5377
5378 /* The new TMPL is not an instantiation of anything, so we
5379 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
5380 the new type because that is supposed to be the corresponding
5381 template decl, i.e., TMPL. */
5382 DECL_USE_TEMPLATE (tmpl) = 0;
5383 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
5384 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
5385 CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
5386 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
5387
5388 /* Inject this template into the global scope. */
5389 friend_type = TREE_TYPE (pushdecl_top_level (tmpl));
5390 }
5391
5392 if (context)
5393 {
5394 if (TREE_CODE (context) == NAMESPACE_DECL)
5395 pop_nested_namespace (context);
5396 else
5397 pop_nested_class ();
5398 }
5399
5400 return friend_type;
5401 }
5402
5403 /* Returns zero if TYPE cannot be completed later due to circularity.
5404 Otherwise returns one. */
5405
5406 static int
5407 can_complete_type_without_circularity (tree type)
5408 {
5409 if (type == NULL_TREE || type == error_mark_node)
5410 return 0;
5411 else if (COMPLETE_TYPE_P (type))
5412 return 1;
5413 else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
5414 return can_complete_type_without_circularity (TREE_TYPE (type));
5415 else if (CLASS_TYPE_P (type)
5416 && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
5417 return 0;
5418 else
5419 return 1;
5420 }
5421
5422 tree
5423 instantiate_class_template (tree type)
5424 {
5425 tree template, args, pattern, t, member;
5426 tree typedecl;
5427 tree pbinfo;
5428 tree base_list;
5429
5430 if (type == error_mark_node)
5431 return error_mark_node;
5432
5433 if (TYPE_BEING_DEFINED (type)
5434 || COMPLETE_TYPE_P (type)
5435 || dependent_type_p (type))
5436 return type;
5437
5438 /* Figure out which template is being instantiated. */
5439 template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
5440 gcc_assert (TREE_CODE (template) == TEMPLATE_DECL);
5441
5442 /* Figure out which arguments are being used to do the
5443 instantiation. */
5444 args = CLASSTYPE_TI_ARGS (type);
5445
5446 /* Determine what specialization of the original template to
5447 instantiate. */
5448 t = most_specialized_class (template, args);
5449 if (t == error_mark_node)
5450 {
5451 const char *str = "candidates are:";
5452 error ("ambiguous class template instantiation for %q#T", type);
5453 for (t = DECL_TEMPLATE_SPECIALIZATIONS (template); t;
5454 t = TREE_CHAIN (t))
5455 {
5456 if (get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args))
5457 {
5458 error ("%s %+#T", str, TREE_TYPE (t));
5459 str = " ";
5460 }
5461 }
5462 TYPE_BEING_DEFINED (type) = 1;
5463 return error_mark_node;
5464 }
5465
5466 if (t)
5467 pattern = TREE_TYPE (t);
5468 else
5469 pattern = TREE_TYPE (template);
5470
5471 /* If the template we're instantiating is incomplete, then clearly
5472 there's nothing we can do. */
5473 if (!COMPLETE_TYPE_P (pattern))
5474 return type;
5475
5476 /* If we've recursively instantiated too many templates, stop. */
5477 if (! push_tinst_level (type))
5478 return type;
5479
5480 /* Now we're really doing the instantiation. Mark the type as in
5481 the process of being defined. */
5482 TYPE_BEING_DEFINED (type) = 1;
5483
5484 /* We may be in the middle of deferred access check. Disable
5485 it now. */
5486 push_deferring_access_checks (dk_no_deferred);
5487
5488 push_to_top_level ();
5489
5490 if (t)
5491 {
5492 /* This TYPE is actually an instantiation of a partial
5493 specialization. We replace the innermost set of ARGS with
5494 the arguments appropriate for substitution. For example,
5495 given:
5496
5497 template <class T> struct S {};
5498 template <class T> struct S<T*> {};
5499
5500 and supposing that we are instantiating S<int*>, ARGS will
5501 present be {int*} but we need {int}. */
5502 tree inner_args
5503 = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t),
5504 args);
5505
5506 /* If there were multiple levels in ARGS, replacing the
5507 innermost level would alter CLASSTYPE_TI_ARGS, which we don't
5508 want, so we make a copy first. */
5509 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
5510 {
5511 args = copy_node (args);
5512 SET_TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args), inner_args);
5513 }
5514 else
5515 args = inner_args;
5516 }
5517
5518 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
5519
5520 /* Set the input location to the template definition. This is needed
5521 if tsubsting causes an error. */
5522 typedecl = TYPE_MAIN_DECL (type);
5523 input_location = DECL_SOURCE_LOCATION (typedecl);
5524 in_system_header = DECL_IN_SYSTEM_HEADER (typedecl);
5525
5526 TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
5527 TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
5528 TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
5529 TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
5530 TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
5531 TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
5532 TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
5533 TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
5534 TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
5535 TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
5536 TYPE_PACKED (type) = TYPE_PACKED (pattern);
5537 TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
5538 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
5539 TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
5540 if (ANON_AGGR_TYPE_P (pattern))
5541 SET_ANON_AGGR_TYPE_P (type);
5542 if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
5543 {
5544 CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
5545 CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
5546 }
5547
5548 pbinfo = TYPE_BINFO (pattern);
5549
5550 /* We should never instantiate a nested class before its enclosing
5551 class; we need to look up the nested class by name before we can
5552 instantiate it, and that lookup should instantiate the enclosing
5553 class. */
5554 gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
5555 || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
5556 || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
5557
5558 base_list = NULL_TREE;
5559 if (BINFO_N_BASE_BINFOS (pbinfo))
5560 {
5561 tree pbase_binfo;
5562 tree context = TYPE_CONTEXT (type);
5563 tree pushed_scope;
5564 int i;
5565
5566 /* We must enter the scope containing the type, as that is where
5567 the accessibility of types named in dependent bases are
5568 looked up from. */
5569 pushed_scope = push_scope (context ? context : global_namespace);
5570
5571 /* Substitute into each of the bases to determine the actual
5572 basetypes. */
5573 for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
5574 {
5575 tree base;
5576 tree access = BINFO_BASE_ACCESS (pbinfo, i);
5577
5578 /* Substitute to figure out the base class. */
5579 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, NULL_TREE);
5580 if (base == error_mark_node)
5581 continue;
5582
5583 base_list = tree_cons (access, base, base_list);
5584 if (BINFO_VIRTUAL_P (pbase_binfo))
5585 TREE_TYPE (base_list) = integer_type_node;
5586 }
5587
5588 /* The list is now in reverse order; correct that. */
5589 base_list = nreverse (base_list);
5590
5591 if (pushed_scope)
5592 pop_scope (pushed_scope);
5593 }
5594 /* Now call xref_basetypes to set up all the base-class
5595 information. */
5596 xref_basetypes (type, base_list);
5597
5598
5599 /* Now that our base classes are set up, enter the scope of the
5600 class, so that name lookups into base classes, etc. will work
5601 correctly. This is precisely analogous to what we do in
5602 begin_class_definition when defining an ordinary non-template
5603 class. */
5604 pushclass (type);
5605
5606 /* Now members are processed in the order of declaration. */
5607 for (member = CLASSTYPE_DECL_LIST (pattern);
5608 member; member = TREE_CHAIN (member))
5609 {
5610 tree t = TREE_VALUE (member);
5611
5612 if (TREE_PURPOSE (member))
5613 {
5614 if (TYPE_P (t))
5615 {
5616 /* Build new CLASSTYPE_NESTED_UTDS. */
5617
5618 tree tag = t;
5619 tree name = TYPE_IDENTIFIER (tag);
5620 tree newtag;
5621 bool class_template_p;
5622
5623 class_template_p = (TREE_CODE (tag) != ENUMERAL_TYPE
5624 && TYPE_LANG_SPECIFIC (tag)
5625 && CLASSTYPE_IS_TEMPLATE (tag));
5626 /* If the member is a class template, then -- even after
5627 substitution -- there may be dependent types in the
5628 template argument list for the class. We increment
5629 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
5630 that function will assume that no types are dependent
5631 when outside of a template. */
5632 if (class_template_p)
5633 ++processing_template_decl;
5634 newtag = tsubst (tag, args, tf_error, NULL_TREE);
5635 if (class_template_p)
5636 --processing_template_decl;
5637 if (newtag == error_mark_node)
5638 continue;
5639
5640 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
5641 {
5642 if (class_template_p)
5643 /* Unfortunately, lookup_template_class sets
5644 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
5645 instantiation (i.e., for the type of a member
5646 template class nested within a template class.)
5647 This behavior is required for
5648 maybe_process_partial_specialization to work
5649 correctly, but is not accurate in this case;
5650 the TAG is not an instantiation of anything.
5651 (The corresponding TEMPLATE_DECL is an
5652 instantiation, but the TYPE is not.) */
5653 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
5654
5655 /* Now, we call pushtag to put this NEWTAG into the scope of
5656 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
5657 pushtag calling push_template_decl. We don't have to do
5658 this for enums because it will already have been done in
5659 tsubst_enum. */
5660 if (name)
5661 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
5662 pushtag (name, newtag, /*tag_scope=*/ts_current);
5663 }
5664 }
5665 else if (TREE_CODE (t) == FUNCTION_DECL
5666 || DECL_FUNCTION_TEMPLATE_P (t))
5667 {
5668 /* Build new TYPE_METHODS. */
5669 tree r;
5670
5671 if (TREE_CODE (t) == TEMPLATE_DECL)
5672 ++processing_template_decl;
5673 r = tsubst (t, args, tf_error, NULL_TREE);
5674 if (TREE_CODE (t) == TEMPLATE_DECL)
5675 --processing_template_decl;
5676 set_current_access_from_decl (r);
5677 grok_special_member_properties (r);
5678 finish_member_declaration (r);
5679 }
5680 else
5681 {
5682 /* Build new TYPE_FIELDS. */
5683
5684 if (TREE_CODE (t) != CONST_DECL)
5685 {
5686 tree r;
5687
5688 /* The the file and line for this declaration, to
5689 assist in error message reporting. Since we
5690 called push_tinst_level above, we don't need to
5691 restore these. */
5692 input_location = DECL_SOURCE_LOCATION (t);
5693
5694 if (TREE_CODE (t) == TEMPLATE_DECL)
5695 ++processing_template_decl;
5696 r = tsubst (t, args, tf_error | tf_warning, NULL_TREE);
5697 if (TREE_CODE (t) == TEMPLATE_DECL)
5698 --processing_template_decl;
5699 if (TREE_CODE (r) == VAR_DECL)
5700 {
5701 tree init;
5702
5703 if (DECL_INITIALIZED_IN_CLASS_P (r))
5704 init = tsubst_expr (DECL_INITIAL (t), args,
5705 tf_error | tf_warning, NULL_TREE);
5706 else
5707 init = NULL_TREE;
5708
5709 finish_static_data_member_decl
5710 (r, init, /*asmspec_tree=*/NULL_TREE, /*flags=*/0);
5711
5712 if (DECL_INITIALIZED_IN_CLASS_P (r))
5713 check_static_variable_definition (r, TREE_TYPE (r));
5714 }
5715 else if (TREE_CODE (r) == FIELD_DECL)
5716 {
5717 /* Determine whether R has a valid type and can be
5718 completed later. If R is invalid, then it is
5719 replaced by error_mark_node so that it will not be
5720 added to TYPE_FIELDS. */
5721 tree rtype = TREE_TYPE (r);
5722 if (can_complete_type_without_circularity (rtype))
5723 complete_type (rtype);
5724
5725 if (!COMPLETE_TYPE_P (rtype))
5726 {
5727 cxx_incomplete_type_error (r, rtype);
5728 r = error_mark_node;
5729 }
5730 }
5731
5732 /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
5733 such a thing will already have been added to the field
5734 list by tsubst_enum in finish_member_declaration in the
5735 CLASSTYPE_NESTED_UTDS case above. */
5736 if (!(TREE_CODE (r) == TYPE_DECL
5737 && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
5738 && DECL_ARTIFICIAL (r)))
5739 {
5740 set_current_access_from_decl (r);
5741 finish_member_declaration (r);
5742 }
5743 }
5744 }
5745 }
5746 else
5747 {
5748 if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
5749 {
5750 /* Build new CLASSTYPE_FRIEND_CLASSES. */
5751
5752 tree friend_type = t;
5753 bool adjust_processing_template_decl = false;
5754
5755 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5756 {
5757 /* template <class T> friend class C; */
5758 friend_type = tsubst_friend_class (friend_type, args);
5759 adjust_processing_template_decl = true;
5760 }
5761 else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
5762 {
5763 /* template <class T> friend class C::D; */
5764 friend_type = tsubst (friend_type, args,
5765 tf_error | tf_warning, NULL_TREE);
5766 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5767 friend_type = TREE_TYPE (friend_type);
5768 adjust_processing_template_decl = true;
5769 }
5770 else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
5771 {
5772 /* This could be either
5773
5774 friend class T::C;
5775
5776 when dependent_type_p is false or
5777
5778 template <class U> friend class T::C;
5779
5780 otherwise. */
5781 friend_type = tsubst (friend_type, args,
5782 tf_error | tf_warning, NULL_TREE);
5783 /* Bump processing_template_decl for correct
5784 dependent_type_p calculation. */
5785 ++processing_template_decl;
5786 if (dependent_type_p (friend_type))
5787 adjust_processing_template_decl = true;
5788 --processing_template_decl;
5789 }
5790 else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
5791 && hidden_name_p (TYPE_NAME (friend_type)))
5792 {
5793 /* friend class C;
5794
5795 where C hasn't been declared yet. Let's lookup name
5796 from namespace scope directly, bypassing any name that
5797 come from dependent base class. */
5798 tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
5799
5800 /* The call to xref_tag_from_type does injection for friend
5801 classes. */
5802 push_nested_namespace (ns);
5803 friend_type =
5804 xref_tag_from_type (friend_type, NULL_TREE,
5805 /*tag_scope=*/ts_current);
5806 pop_nested_namespace (ns);
5807 }
5808 else if (uses_template_parms (friend_type))
5809 /* friend class C<T>; */
5810 friend_type = tsubst (friend_type, args,
5811 tf_error | tf_warning, NULL_TREE);
5812 /* Otherwise it's
5813
5814 friend class C;
5815
5816 where C is already declared or
5817
5818 friend class C<int>;
5819
5820 We don't have to do anything in these cases. */
5821
5822 if (adjust_processing_template_decl)
5823 /* Trick make_friend_class into realizing that the friend
5824 we're adding is a template, not an ordinary class. It's
5825 important that we use make_friend_class since it will
5826 perform some error-checking and output cross-reference
5827 information. */
5828 ++processing_template_decl;
5829
5830 if (friend_type != error_mark_node)
5831 make_friend_class (type, friend_type, /*complain=*/false);
5832
5833 if (adjust_processing_template_decl)
5834 --processing_template_decl;
5835 }
5836 else
5837 {
5838 /* Build new DECL_FRIENDLIST. */
5839 tree r;
5840
5841 /* The the file and line for this declaration, to
5842 assist in error message reporting. Since we
5843 called push_tinst_level above, we don't need to
5844 restore these. */
5845 input_location = DECL_SOURCE_LOCATION (t);
5846
5847 if (TREE_CODE (t) == TEMPLATE_DECL)
5848 {
5849 ++processing_template_decl;
5850 push_deferring_access_checks (dk_no_check);
5851 }
5852
5853 r = tsubst_friend_function (t, args);
5854 add_friend (type, r, /*complain=*/false);
5855 if (TREE_CODE (t) == TEMPLATE_DECL)
5856 {
5857 pop_deferring_access_checks ();
5858 --processing_template_decl;
5859 }
5860 }
5861 }
5862 }
5863
5864 /* Set the file and line number information to whatever is given for
5865 the class itself. This puts error messages involving generated
5866 implicit functions at a predictable point, and the same point
5867 that would be used for non-template classes. */
5868 input_location = DECL_SOURCE_LOCATION (typedecl);
5869
5870 unreverse_member_declarations (type);
5871 finish_struct_1 (type);
5872 TYPE_BEING_DEFINED (type) = 0;
5873
5874 /* Now that the class is complete, instantiate default arguments for
5875 any member functions. We don't do this earlier because the
5876 default arguments may reference members of the class. */
5877 if (!PRIMARY_TEMPLATE_P (template))
5878 for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
5879 if (TREE_CODE (t) == FUNCTION_DECL
5880 /* Implicitly generated member functions will not have template
5881 information; they are not instantiations, but instead are
5882 created "fresh" for each instantiation. */
5883 && DECL_TEMPLATE_INFO (t))
5884 tsubst_default_arguments (t);
5885
5886 popclass ();
5887 pop_from_top_level ();
5888 pop_deferring_access_checks ();
5889 pop_tinst_level ();
5890
5891 /* The vtable for a template class can be emitted in any translation
5892 unit in which the class is instantiated. When there is no key
5893 method, however, finish_struct_1 will already have added TYPE to
5894 the keyed_classes list. */
5895 if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
5896 keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
5897
5898 return type;
5899 }
5900
5901 static tree
5902 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
5903 {
5904 tree r;
5905
5906 if (!t)
5907 r = t;
5908 else if (TYPE_P (t))
5909 r = tsubst (t, args, complain, in_decl);
5910 else
5911 {
5912 r = tsubst_expr (t, args, complain, in_decl);
5913
5914 if (!uses_template_parms (r))
5915 {
5916 /* Sometimes, one of the args was an expression involving a
5917 template constant parameter, like N - 1. Now that we've
5918 tsubst'd, we might have something like 2 - 1. This will
5919 confuse lookup_template_class, so we do constant folding
5920 here. We have to unset processing_template_decl, to fool
5921 tsubst_copy_and_build() into building an actual tree. */
5922
5923 /* If the TREE_TYPE of ARG is not NULL_TREE, ARG is already
5924 as simple as it's going to get, and trying to reprocess
5925 the trees will break. Once tsubst_expr et al DTRT for
5926 non-dependent exprs, this code can go away, as the type
5927 will always be set. */
5928 if (!TREE_TYPE (r))
5929 {
5930 int saved_processing_template_decl = processing_template_decl;
5931 processing_template_decl = 0;
5932 r = tsubst_copy_and_build (r, /*args=*/NULL_TREE,
5933 tf_error, /*in_decl=*/NULL_TREE,
5934 /*function_p=*/false);
5935 processing_template_decl = saved_processing_template_decl;
5936 }
5937 r = fold (r);
5938 }
5939 }
5940 return r;
5941 }
5942
5943 /* Substitute ARGS into the vector or list of template arguments T. */
5944
5945 static tree
5946 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
5947 {
5948 int len = TREE_VEC_LENGTH (t);
5949 int need_new = 0, i;
5950 tree *elts = alloca (len * sizeof (tree));
5951
5952 for (i = 0; i < len; i++)
5953 {
5954 tree orig_arg = TREE_VEC_ELT (t, i);
5955 tree new_arg;
5956
5957 if (TREE_CODE (orig_arg) == TREE_VEC)
5958 new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
5959 else
5960 new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
5961
5962 if (new_arg == error_mark_node)
5963 return error_mark_node;
5964
5965 elts[i] = new_arg;
5966 if (new_arg != orig_arg)
5967 need_new = 1;
5968 }
5969
5970 if (!need_new)
5971 return t;
5972
5973 t = make_tree_vec (len);
5974 for (i = 0; i < len; i++)
5975 TREE_VEC_ELT (t, i) = elts[i];
5976
5977 return t;
5978 }
5979
5980 /* Return the result of substituting ARGS into the template parameters
5981 given by PARMS. If there are m levels of ARGS and m + n levels of
5982 PARMS, then the result will contain n levels of PARMS. For
5983 example, if PARMS is `template <class T> template <class U>
5984 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
5985 result will be `template <int*, double, class V>'. */
5986
5987 static tree
5988 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
5989 {
5990 tree r = NULL_TREE;
5991 tree* new_parms;
5992
5993 for (new_parms = &r;
5994 TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
5995 new_parms = &(TREE_CHAIN (*new_parms)),
5996 parms = TREE_CHAIN (parms))
5997 {
5998 tree new_vec =
5999 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
6000 int i;
6001
6002 for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
6003 {
6004 tree tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
6005 tree default_value = TREE_PURPOSE (tuple);
6006 tree parm_decl = TREE_VALUE (tuple);
6007
6008 parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
6009 if (TREE_CODE (parm_decl) == PARM_DECL
6010 && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
6011 parm_decl = error_mark_node;
6012 default_value = tsubst_template_arg (default_value, args,
6013 complain, NULL_TREE);
6014
6015 tuple = build_tree_list (default_value, parm_decl);
6016 TREE_VEC_ELT (new_vec, i) = tuple;
6017 }
6018
6019 *new_parms =
6020 tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
6021 - TMPL_ARGS_DEPTH (args)),
6022 new_vec, NULL_TREE);
6023 }
6024
6025 return r;
6026 }
6027
6028 /* Substitute the ARGS into the indicated aggregate (or enumeration)
6029 type T. If T is not an aggregate or enumeration type, it is
6030 handled as if by tsubst. IN_DECL is as for tsubst. If
6031 ENTERING_SCOPE is nonzero, T is the context for a template which
6032 we are presently tsubst'ing. Return the substituted value. */
6033
6034 static tree
6035 tsubst_aggr_type (tree t,
6036 tree args,
6037 tsubst_flags_t complain,
6038 tree in_decl,
6039 int entering_scope)
6040 {
6041 if (t == NULL_TREE)
6042 return NULL_TREE;
6043
6044 switch (TREE_CODE (t))
6045 {
6046 case RECORD_TYPE:
6047 if (TYPE_PTRMEMFUNC_P (t))
6048 return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
6049
6050 /* Else fall through. */
6051 case ENUMERAL_TYPE:
6052 case UNION_TYPE:
6053 if (TYPE_TEMPLATE_INFO (t))
6054 {
6055 tree argvec;
6056 tree context;
6057 tree r;
6058
6059 /* First, determine the context for the type we are looking
6060 up. */
6061 context = TYPE_CONTEXT (t);
6062 if (context)
6063 context = tsubst_aggr_type (context, args, complain,
6064 in_decl, /*entering_scope=*/1);
6065
6066 /* Then, figure out what arguments are appropriate for the
6067 type we are trying to find. For example, given:
6068
6069 template <class T> struct S;
6070 template <class T, class U> void f(T, U) { S<U> su; }
6071
6072 and supposing that we are instantiating f<int, double>,
6073 then our ARGS will be {int, double}, but, when looking up
6074 S we only want {double}. */
6075 argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
6076 complain, in_decl);
6077 if (argvec == error_mark_node)
6078 return error_mark_node;
6079
6080 r = lookup_template_class (t, argvec, in_decl, context,
6081 entering_scope, complain);
6082
6083 return cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
6084 }
6085 else
6086 /* This is not a template type, so there's nothing to do. */
6087 return t;
6088
6089 default:
6090 return tsubst (t, args, complain, in_decl);
6091 }
6092 }
6093
6094 /* Substitute into the default argument ARG (a default argument for
6095 FN), which has the indicated TYPE. */
6096
6097 tree
6098 tsubst_default_argument (tree fn, tree type, tree arg)
6099 {
6100 tree saved_class_ptr = NULL_TREE;
6101 tree saved_class_ref = NULL_TREE;
6102
6103 /* This default argument came from a template. Instantiate the
6104 default argument here, not in tsubst. In the case of
6105 something like:
6106
6107 template <class T>
6108 struct S {
6109 static T t();
6110 void f(T = t());
6111 };
6112
6113 we must be careful to do name lookup in the scope of S<T>,
6114 rather than in the current class. */
6115 push_access_scope (fn);
6116 /* The default argument expression should not be considered to be
6117 within the scope of FN. Since push_access_scope sets
6118 current_function_decl, we must explicitly clear it here. */
6119 current_function_decl = NULL_TREE;
6120 /* The "this" pointer is not valid in a default argument. */
6121 if (cfun)
6122 {
6123 saved_class_ptr = current_class_ptr;
6124 cp_function_chain->x_current_class_ptr = NULL_TREE;
6125 saved_class_ref = current_class_ref;
6126 cp_function_chain->x_current_class_ref = NULL_TREE;
6127 }
6128
6129 push_deferring_access_checks(dk_no_deferred);
6130 arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
6131 tf_error | tf_warning, NULL_TREE);
6132 pop_deferring_access_checks();
6133
6134 /* Restore the "this" pointer. */
6135 if (cfun)
6136 {
6137 cp_function_chain->x_current_class_ptr = saved_class_ptr;
6138 cp_function_chain->x_current_class_ref = saved_class_ref;
6139 }
6140
6141 pop_access_scope (fn);
6142
6143 /* Make sure the default argument is reasonable. */
6144 arg = check_default_argument (type, arg);
6145
6146 return arg;
6147 }
6148
6149 /* Substitute into all the default arguments for FN. */
6150
6151 static void
6152 tsubst_default_arguments (tree fn)
6153 {
6154 tree arg;
6155 tree tmpl_args;
6156
6157 tmpl_args = DECL_TI_ARGS (fn);
6158
6159 /* If this function is not yet instantiated, we certainly don't need
6160 its default arguments. */
6161 if (uses_template_parms (tmpl_args))
6162 return;
6163
6164 for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
6165 arg;
6166 arg = TREE_CHAIN (arg))
6167 if (TREE_PURPOSE (arg))
6168 TREE_PURPOSE (arg) = tsubst_default_argument (fn,
6169 TREE_VALUE (arg),
6170 TREE_PURPOSE (arg));
6171 }
6172
6173 /* Substitute the ARGS into the T, which is a _DECL. Return the
6174 result of the substitution. Issue error and warning messages under
6175 control of COMPLAIN. */
6176
6177 static tree
6178 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
6179 {
6180 location_t saved_loc;
6181 tree r = NULL_TREE;
6182 tree in_decl = t;
6183
6184 /* Set the filename and linenumber to improve error-reporting. */
6185 saved_loc = input_location;
6186 input_location = DECL_SOURCE_LOCATION (t);
6187
6188 switch (TREE_CODE (t))
6189 {
6190 case TEMPLATE_DECL:
6191 {
6192 /* We can get here when processing a member function template,
6193 member class template, and template template parameter of
6194 a template class. */
6195 tree decl = DECL_TEMPLATE_RESULT (t);
6196 tree spec;
6197 tree tmpl_args;
6198 tree full_args;
6199
6200 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
6201 {
6202 /* Template template parameter is treated here. */
6203 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6204 if (new_type == error_mark_node)
6205 return error_mark_node;
6206
6207 r = copy_decl (t);
6208 TREE_CHAIN (r) = NULL_TREE;
6209 TREE_TYPE (r) = new_type;
6210 DECL_TEMPLATE_RESULT (r)
6211 = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
6212 DECL_TEMPLATE_PARMS (r)
6213 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
6214 complain);
6215 TYPE_NAME (new_type) = r;
6216 break;
6217 }
6218
6219 /* We might already have an instance of this template.
6220 The ARGS are for the surrounding class type, so the
6221 full args contain the tsubst'd args for the context,
6222 plus the innermost args from the template decl. */
6223 tmpl_args = DECL_CLASS_TEMPLATE_P (t)
6224 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
6225 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
6226 full_args = tsubst_template_args (tmpl_args, args,
6227 complain, in_decl);
6228 if (full_args == error_mark_node)
6229 return error_mark_node;
6230
6231 /* tsubst_template_args doesn't copy the vector if
6232 nothing changed. But, *something* should have
6233 changed. */
6234 gcc_assert (full_args != tmpl_args);
6235
6236 spec = retrieve_specialization (t, full_args,
6237 /*class_specializations_p=*/true);
6238 if (spec != NULL_TREE)
6239 {
6240 r = spec;
6241 break;
6242 }
6243
6244 /* Make a new template decl. It will be similar to the
6245 original, but will record the current template arguments.
6246 We also create a new function declaration, which is just
6247 like the old one, but points to this new template, rather
6248 than the old one. */
6249 r = copy_decl (t);
6250 gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
6251 TREE_CHAIN (r) = NULL_TREE;
6252
6253 DECL_CONTEXT (r)
6254 = tsubst_aggr_type (DECL_CONTEXT (t), args,
6255 complain, in_decl,
6256 /*entering_scope=*/1);
6257 DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
6258
6259 if (TREE_CODE (decl) == TYPE_DECL)
6260 {
6261 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6262 if (new_type == error_mark_node)
6263 return error_mark_node;
6264
6265 TREE_TYPE (r) = new_type;
6266 CLASSTYPE_TI_TEMPLATE (new_type) = r;
6267 DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
6268 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
6269 }
6270 else
6271 {
6272 tree new_decl = tsubst (decl, args, complain, in_decl);
6273 if (new_decl == error_mark_node)
6274 return error_mark_node;
6275
6276 DECL_TEMPLATE_RESULT (r) = new_decl;
6277 DECL_TI_TEMPLATE (new_decl) = r;
6278 TREE_TYPE (r) = TREE_TYPE (new_decl);
6279 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
6280 }
6281
6282 SET_DECL_IMPLICIT_INSTANTIATION (r);
6283 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
6284 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
6285
6286 /* The template parameters for this new template are all the
6287 template parameters for the old template, except the
6288 outermost level of parameters. */
6289 DECL_TEMPLATE_PARMS (r)
6290 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
6291 complain);
6292
6293 if (PRIMARY_TEMPLATE_P (t))
6294 DECL_PRIMARY_TEMPLATE (r) = r;
6295
6296 if (TREE_CODE (decl) != TYPE_DECL)
6297 /* Record this non-type partial instantiation. */
6298 register_specialization (r, t,
6299 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)));
6300 }
6301 break;
6302
6303 case FUNCTION_DECL:
6304 {
6305 tree ctx;
6306 tree argvec = NULL_TREE;
6307 tree *friends;
6308 tree gen_tmpl;
6309 tree type;
6310 int member;
6311 int args_depth;
6312 int parms_depth;
6313
6314 /* Nobody should be tsubst'ing into non-template functions. */
6315 gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
6316
6317 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
6318 {
6319 tree spec;
6320 bool dependent_p;
6321
6322 /* If T is not dependent, just return it. We have to
6323 increment PROCESSING_TEMPLATE_DECL because
6324 value_dependent_expression_p assumes that nothing is
6325 dependent when PROCESSING_TEMPLATE_DECL is zero. */
6326 ++processing_template_decl;
6327 dependent_p = value_dependent_expression_p (t);
6328 --processing_template_decl;
6329 if (!dependent_p)
6330 return t;
6331
6332 /* Calculate the most general template of which R is a
6333 specialization, and the complete set of arguments used to
6334 specialize R. */
6335 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
6336 argvec = tsubst_template_args (DECL_TI_ARGS
6337 (DECL_TEMPLATE_RESULT (gen_tmpl)),
6338 args, complain, in_decl);
6339
6340 /* Check to see if we already have this specialization. */
6341 spec = retrieve_specialization (gen_tmpl, argvec,
6342 /*class_specializations_p=*/false);
6343
6344 if (spec)
6345 {
6346 r = spec;
6347 break;
6348 }
6349
6350 /* We can see more levels of arguments than parameters if
6351 there was a specialization of a member template, like
6352 this:
6353
6354 template <class T> struct S { template <class U> void f(); }
6355 template <> template <class U> void S<int>::f(U);
6356
6357 Here, we'll be substituting into the specialization,
6358 because that's where we can find the code we actually
6359 want to generate, but we'll have enough arguments for
6360 the most general template.
6361
6362 We also deal with the peculiar case:
6363
6364 template <class T> struct S {
6365 template <class U> friend void f();
6366 };
6367 template <class U> void f() {}
6368 template S<int>;
6369 template void f<double>();
6370
6371 Here, the ARGS for the instantiation of will be {int,
6372 double}. But, we only need as many ARGS as there are
6373 levels of template parameters in CODE_PATTERN. We are
6374 careful not to get fooled into reducing the ARGS in
6375 situations like:
6376
6377 template <class T> struct S { template <class U> void f(U); }
6378 template <class T> template <> void S<T>::f(int) {}
6379
6380 which we can spot because the pattern will be a
6381 specialization in this case. */
6382 args_depth = TMPL_ARGS_DEPTH (args);
6383 parms_depth =
6384 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
6385 if (args_depth > parms_depth
6386 && !DECL_TEMPLATE_SPECIALIZATION (t))
6387 args = get_innermost_template_args (args, parms_depth);
6388 }
6389 else
6390 {
6391 /* This special case arises when we have something like this:
6392
6393 template <class T> struct S {
6394 friend void f<int>(int, double);
6395 };
6396
6397 Here, the DECL_TI_TEMPLATE for the friend declaration
6398 will be an IDENTIFIER_NODE. We are being called from
6399 tsubst_friend_function, and we want only to create a
6400 new decl (R) with appropriate types so that we can call
6401 determine_specialization. */
6402 gen_tmpl = NULL_TREE;
6403 }
6404
6405 if (DECL_CLASS_SCOPE_P (t))
6406 {
6407 if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
6408 member = 2;
6409 else
6410 member = 1;
6411 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
6412 complain, t, /*entering_scope=*/1);
6413 }
6414 else
6415 {
6416 member = 0;
6417 ctx = DECL_CONTEXT (t);
6418 }
6419 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6420 if (type == error_mark_node)
6421 return error_mark_node;
6422
6423 /* We do NOT check for matching decls pushed separately at this
6424 point, as they may not represent instantiations of this
6425 template, and in any case are considered separate under the
6426 discrete model. */
6427 r = copy_decl (t);
6428 DECL_USE_TEMPLATE (r) = 0;
6429 TREE_TYPE (r) = type;
6430 /* Clear out the mangled name and RTL for the instantiation. */
6431 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
6432 SET_DECL_RTL (r, NULL_RTX);
6433 DECL_INITIAL (r) = NULL_TREE;
6434 DECL_CONTEXT (r) = ctx;
6435
6436 if (member && DECL_CONV_FN_P (r))
6437 /* Type-conversion operator. Reconstruct the name, in
6438 case it's the name of one of the template's parameters. */
6439 DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
6440
6441 DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
6442 complain, t);
6443 DECL_RESULT (r) = NULL_TREE;
6444
6445 TREE_STATIC (r) = 0;
6446 TREE_PUBLIC (r) = TREE_PUBLIC (t);
6447 DECL_EXTERNAL (r) = 1;
6448 /* If this is an instantiation of a function with internal
6449 linkage, we already know what object file linkage will be
6450 assigned to the instantiation. */
6451 DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
6452 DECL_DEFER_OUTPUT (r) = 0;
6453 TREE_CHAIN (r) = NULL_TREE;
6454 DECL_PENDING_INLINE_INFO (r) = 0;
6455 DECL_PENDING_INLINE_P (r) = 0;
6456 DECL_SAVED_TREE (r) = NULL_TREE;
6457 TREE_USED (r) = 0;
6458 if (DECL_CLONED_FUNCTION (r))
6459 {
6460 DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
6461 args, complain, t);
6462 TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
6463 TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
6464 }
6465
6466 /* Set up the DECL_TEMPLATE_INFO for R. There's no need to do
6467 this in the special friend case mentioned above where
6468 GEN_TMPL is NULL. */
6469 if (gen_tmpl)
6470 {
6471 DECL_TEMPLATE_INFO (r)
6472 = tree_cons (gen_tmpl, argvec, NULL_TREE);
6473 SET_DECL_IMPLICIT_INSTANTIATION (r);
6474 register_specialization (r, gen_tmpl, argvec);
6475
6476 /* We're not supposed to instantiate default arguments
6477 until they are called, for a template. But, for a
6478 declaration like:
6479
6480 template <class T> void f ()
6481 { extern void g(int i = T()); }
6482
6483 we should do the substitution when the template is
6484 instantiated. We handle the member function case in
6485 instantiate_class_template since the default arguments
6486 might refer to other members of the class. */
6487 if (!member
6488 && !PRIMARY_TEMPLATE_P (gen_tmpl)
6489 && !uses_template_parms (argvec))
6490 tsubst_default_arguments (r);
6491 }
6492
6493 /* Copy the list of befriending classes. */
6494 for (friends = &DECL_BEFRIENDING_CLASSES (r);
6495 *friends;
6496 friends = &TREE_CHAIN (*friends))
6497 {
6498 *friends = copy_node (*friends);
6499 TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
6500 args, complain,
6501 in_decl);
6502 }
6503
6504 if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
6505 {
6506 maybe_retrofit_in_chrg (r);
6507 if (DECL_CONSTRUCTOR_P (r))
6508 grok_ctor_properties (ctx, r);
6509 /* If this is an instantiation of a member template, clone it.
6510 If it isn't, that'll be handled by
6511 clone_constructors_and_destructors. */
6512 if (PRIMARY_TEMPLATE_P (gen_tmpl))
6513 clone_function_decl (r, /*update_method_vec_p=*/0);
6514 }
6515 else if (IDENTIFIER_OPNAME_P (DECL_NAME (r)))
6516 grok_op_properties (r, (complain & tf_error) != 0);
6517
6518 if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
6519 SET_DECL_FRIEND_CONTEXT (r,
6520 tsubst (DECL_FRIEND_CONTEXT (t),
6521 args, complain, in_decl));
6522 }
6523 break;
6524
6525 case PARM_DECL:
6526 {
6527 tree type;
6528
6529 r = copy_node (t);
6530 if (DECL_TEMPLATE_PARM_P (t))
6531 SET_DECL_TEMPLATE_PARM_P (r);
6532
6533 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6534 type = type_decays_to (type);
6535 TREE_TYPE (r) = type;
6536 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
6537
6538 if (DECL_INITIAL (r))
6539 {
6540 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
6541 DECL_INITIAL (r) = TREE_TYPE (r);
6542 else
6543 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
6544 complain, in_decl);
6545 }
6546
6547 DECL_CONTEXT (r) = NULL_TREE;
6548
6549 if (!DECL_TEMPLATE_PARM_P (r))
6550 DECL_ARG_TYPE (r) = type_passed_as (type);
6551 if (TREE_CHAIN (t))
6552 TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
6553 complain, TREE_CHAIN (t));
6554 }
6555 break;
6556
6557 case FIELD_DECL:
6558 {
6559 tree type;
6560
6561 r = copy_decl (t);
6562 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6563 if (type == error_mark_node)
6564 return error_mark_node;
6565 TREE_TYPE (r) = type;
6566 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
6567
6568 /* We don't have to set DECL_CONTEXT here; it is set by
6569 finish_member_declaration. */
6570 DECL_INITIAL (r) = tsubst_expr (DECL_INITIAL (t), args,
6571 complain, in_decl);
6572 TREE_CHAIN (r) = NULL_TREE;
6573 if (VOID_TYPE_P (type))
6574 error ("instantiation of %q+D as type %qT", r, type);
6575 }
6576 break;
6577
6578 case USING_DECL:
6579 /* We reach here only for member using decls. */
6580 if (DECL_DEPENDENT_P (t))
6581 {
6582 r = do_class_using_decl
6583 (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
6584 tsubst_copy (DECL_NAME (t), args, complain, in_decl));
6585 if (!r)
6586 r = error_mark_node;
6587 }
6588 else
6589 {
6590 r = copy_node (t);
6591 TREE_CHAIN (r) = NULL_TREE;
6592 }
6593 break;
6594
6595 case TYPE_DECL:
6596 case VAR_DECL:
6597 {
6598 tree argvec = NULL_TREE;
6599 tree gen_tmpl = NULL_TREE;
6600 tree spec;
6601 tree tmpl = NULL_TREE;
6602 tree ctx;
6603 tree type = NULL_TREE;
6604 int local_p;
6605
6606 if (TREE_CODE (t) == TYPE_DECL)
6607 {
6608 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6609 if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
6610 || t == TYPE_MAIN_DECL (TREE_TYPE (t)))
6611 {
6612 /* If this is the canonical decl, we don't have to
6613 mess with instantiations, and often we can't (for
6614 typename, template type parms and such). Note that
6615 TYPE_NAME is not correct for the above test if
6616 we've copied the type for a typedef. */
6617 r = TYPE_NAME (type);
6618 break;
6619 }
6620 }
6621
6622 /* Assume this is a non-local variable. */
6623 local_p = 0;
6624
6625 if (TYPE_P (CP_DECL_CONTEXT (t)))
6626 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
6627 complain,
6628 in_decl, /*entering_scope=*/1);
6629 else if (DECL_NAMESPACE_SCOPE_P (t))
6630 ctx = DECL_CONTEXT (t);
6631 else
6632 {
6633 /* Subsequent calls to pushdecl will fill this in. */
6634 ctx = NULL_TREE;
6635 local_p = 1;
6636 }
6637
6638 /* Check to see if we already have this specialization. */
6639 if (!local_p)
6640 {
6641 tmpl = DECL_TI_TEMPLATE (t);
6642 gen_tmpl = most_general_template (tmpl);
6643 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
6644 spec = retrieve_specialization (gen_tmpl, argvec,
6645 /*class_specializations_p=*/false);
6646 }
6647 else
6648 spec = retrieve_local_specialization (t);
6649
6650 if (spec)
6651 {
6652 r = spec;
6653 break;
6654 }
6655
6656 r = copy_decl (t);
6657 if (TREE_CODE (r) == VAR_DECL)
6658 {
6659 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6660 if (type == error_mark_node)
6661 return error_mark_node;
6662 type = complete_type (type);
6663 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
6664 = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
6665 type = check_var_type (DECL_NAME (r), type);
6666 }
6667 else if (DECL_SELF_REFERENCE_P (t))
6668 SET_DECL_SELF_REFERENCE_P (r);
6669 TREE_TYPE (r) = type;
6670 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
6671 DECL_CONTEXT (r) = ctx;
6672 /* Clear out the mangled name and RTL for the instantiation. */
6673 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
6674 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
6675 SET_DECL_RTL (r, NULL_RTX);
6676
6677 /* Don't try to expand the initializer until someone tries to use
6678 this variable; otherwise we run into circular dependencies. */
6679 DECL_INITIAL (r) = NULL_TREE;
6680 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
6681 SET_DECL_RTL (r, NULL_RTX);
6682 DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
6683
6684 /* Even if the original location is out of scope, the newly
6685 substituted one is not. */
6686 if (TREE_CODE (r) == VAR_DECL)
6687 {
6688 DECL_DEAD_FOR_LOCAL (r) = 0;
6689 DECL_INITIALIZED_P (r) = 0;
6690 }
6691
6692 if (!local_p)
6693 {
6694 /* A static data member declaration is always marked
6695 external when it is declared in-class, even if an
6696 initializer is present. We mimic the non-template
6697 processing here. */
6698 DECL_EXTERNAL (r) = 1;
6699
6700 register_specialization (r, gen_tmpl, argvec);
6701 DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
6702 SET_DECL_IMPLICIT_INSTANTIATION (r);
6703 }
6704 else
6705 register_local_specialization (r, t);
6706
6707 TREE_CHAIN (r) = NULL_TREE;
6708 layout_decl (r, 0);
6709 }
6710 break;
6711
6712 default:
6713 gcc_unreachable ();
6714 }
6715
6716 /* Restore the file and line information. */
6717 input_location = saved_loc;
6718
6719 return r;
6720 }
6721
6722 /* Substitute into the ARG_TYPES of a function type. */
6723
6724 static tree
6725 tsubst_arg_types (tree arg_types,
6726 tree args,
6727 tsubst_flags_t complain,
6728 tree in_decl)
6729 {
6730 tree remaining_arg_types;
6731 tree type;
6732 tree default_arg;
6733 tree result = NULL_TREE;
6734
6735 if (!arg_types || arg_types == void_list_node)
6736 return arg_types;
6737
6738 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
6739 args, complain, in_decl);
6740 if (remaining_arg_types == error_mark_node)
6741 return error_mark_node;
6742
6743 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
6744 if (type == error_mark_node)
6745 return error_mark_node;
6746 if (VOID_TYPE_P (type))
6747 {
6748 if (complain & tf_error)
6749 {
6750 error ("invalid parameter type %qT", type);
6751 if (in_decl)
6752 error ("in declaration %q+D", in_decl);
6753 }
6754 return error_mark_node;
6755 }
6756
6757 /* Do array-to-pointer, function-to-pointer conversion, and ignore
6758 top-level qualifiers as required. */
6759 type = TYPE_MAIN_VARIANT (type_decays_to (type));
6760
6761 /* We do not substitute into default arguments here. The standard
6762 mandates that they be instantiated only when needed, which is
6763 done in build_over_call. */
6764 default_arg = TREE_PURPOSE (arg_types);
6765
6766 if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
6767 {
6768 /* We've instantiated a template before its default arguments
6769 have been parsed. This can happen for a nested template
6770 class, and is not an error unless we require the default
6771 argument in a call of this function. */
6772 result = tree_cons (default_arg, type, remaining_arg_types);
6773 VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), result);
6774 }
6775 else
6776 result = hash_tree_cons (default_arg, type, remaining_arg_types);
6777
6778 return result;
6779 }
6780
6781 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
6782 *not* handle the exception-specification for FNTYPE, because the
6783 initial substitution of explicitly provided template parameters
6784 during argument deduction forbids substitution into the
6785 exception-specification:
6786
6787 [temp.deduct]
6788
6789 All references in the function type of the function template to the
6790 corresponding template parameters are replaced by the specified tem-
6791 plate argument values. If a substitution in a template parameter or
6792 in the function type of the function template results in an invalid
6793 type, type deduction fails. [Note: The equivalent substitution in
6794 exception specifications is done only when the function is instanti-
6795 ated, at which point a program is ill-formed if the substitution
6796 results in an invalid type.] */
6797
6798 static tree
6799 tsubst_function_type (tree t,
6800 tree args,
6801 tsubst_flags_t complain,
6802 tree in_decl)
6803 {
6804 tree return_type;
6805 tree arg_types;
6806 tree fntype;
6807
6808 /* The TYPE_CONTEXT is not used for function/method types. */
6809 gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
6810
6811 /* Substitute the return type. */
6812 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6813 if (return_type == error_mark_node)
6814 return error_mark_node;
6815 /* The standard does not presently indicate that creation of a
6816 function type with an invalid return type is a deduction failure.
6817 However, that is clearly analogous to creating an array of "void"
6818 or a reference to a reference. This is core issue #486. */
6819 if (TREE_CODE (return_type) == ARRAY_TYPE
6820 || TREE_CODE (return_type) == FUNCTION_TYPE)
6821 {
6822 if (complain & tf_error)
6823 {
6824 if (TREE_CODE (return_type) == ARRAY_TYPE)
6825 error ("function returning an array");
6826 else
6827 error ("function returning a function");
6828 }
6829 return error_mark_node;
6830 }
6831
6832 /* Substitute the argument types. */
6833 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
6834 complain, in_decl);
6835 if (arg_types == error_mark_node)
6836 return error_mark_node;
6837
6838 /* Construct a new type node and return it. */
6839 if (TREE_CODE (t) == FUNCTION_TYPE)
6840 fntype = build_function_type (return_type, arg_types);
6841 else
6842 {
6843 tree r = TREE_TYPE (TREE_VALUE (arg_types));
6844 if (! IS_AGGR_TYPE (r))
6845 {
6846 /* [temp.deduct]
6847
6848 Type deduction may fail for any of the following
6849 reasons:
6850
6851 -- Attempting to create "pointer to member of T" when T
6852 is not a class type. */
6853 if (complain & tf_error)
6854 error ("creating pointer to member function of non-class type %qT",
6855 r);
6856 return error_mark_node;
6857 }
6858
6859 fntype = build_method_type_directly (r, return_type,
6860 TREE_CHAIN (arg_types));
6861 }
6862 fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
6863 fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
6864
6865 return fntype;
6866 }
6867
6868 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE. Substitute the template
6869 ARGS into that specification, and return the substituted
6870 specification. If there is no specification, return NULL_TREE. */
6871
6872 static tree
6873 tsubst_exception_specification (tree fntype,
6874 tree args,
6875 tsubst_flags_t complain,
6876 tree in_decl)
6877 {
6878 tree specs;
6879 tree new_specs;
6880
6881 specs = TYPE_RAISES_EXCEPTIONS (fntype);
6882 new_specs = NULL_TREE;
6883 if (specs)
6884 {
6885 if (! TREE_VALUE (specs))
6886 new_specs = specs;
6887 else
6888 while (specs)
6889 {
6890 tree spec;
6891 spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
6892 if (spec == error_mark_node)
6893 return spec;
6894 new_specs = add_exception_specifier (new_specs, spec, complain);
6895 specs = TREE_CHAIN (specs);
6896 }
6897 }
6898 return new_specs;
6899 }
6900
6901 /* Substitute into the PARMS of a call-declarator. */
6902
6903 static tree
6904 tsubst_call_declarator_parms (tree parms,
6905 tree args,
6906 tsubst_flags_t complain,
6907 tree in_decl)
6908 {
6909 tree new_parms;
6910 tree type;
6911 tree defarg;
6912
6913 if (!parms || parms == void_list_node)
6914 return parms;
6915
6916 new_parms = tsubst_call_declarator_parms (TREE_CHAIN (parms),
6917 args, complain, in_decl);
6918
6919 /* Figure out the type of this parameter. */
6920 type = tsubst (TREE_VALUE (parms), args, complain, in_decl);
6921
6922 /* Figure out the default argument as well. Note that we use
6923 tsubst_expr since the default argument is really an expression. */
6924 defarg = tsubst_expr (TREE_PURPOSE (parms), args, complain, in_decl);
6925
6926 /* Chain this parameter on to the front of those we have already
6927 processed. We don't use hash_tree_cons because that function
6928 doesn't check TREE_PARMLIST. */
6929 new_parms = tree_cons (defarg, type, new_parms);
6930
6931 return new_parms;
6932 }
6933
6934 /* Take the tree structure T and replace template parameters used
6935 therein with the argument vector ARGS. IN_DECL is an associated
6936 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
6937 Issue error and warning messages under control of COMPLAIN. Note
6938 that we must be relatively non-tolerant of extensions here, in
6939 order to preserve conformance; if we allow substitutions that
6940 should not be allowed, we may allow argument deductions that should
6941 not succeed, and therefore report ambiguous overload situations
6942 where there are none. In theory, we could allow the substitution,
6943 but indicate that it should have failed, and allow our caller to
6944 make sure that the right thing happens, but we don't try to do this
6945 yet.
6946
6947 This function is used for dealing with types, decls and the like;
6948 for expressions, use tsubst_expr or tsubst_copy. */
6949
6950 static tree
6951 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
6952 {
6953 tree type, r;
6954
6955 if (t == NULL_TREE || t == error_mark_node
6956 || t == integer_type_node
6957 || t == void_type_node
6958 || t == char_type_node
6959 || t == unknown_type_node
6960 || TREE_CODE (t) == NAMESPACE_DECL)
6961 return t;
6962
6963 if (DECL_P (t))
6964 return tsubst_decl (t, args, complain);
6965
6966 if (TREE_CODE (t) == IDENTIFIER_NODE)
6967 type = IDENTIFIER_TYPE_VALUE (t);
6968 else
6969 type = TREE_TYPE (t);
6970
6971 gcc_assert (type != unknown_type_node);
6972
6973 if (type
6974 && TREE_CODE (t) != TYPENAME_TYPE
6975 && TREE_CODE (t) != IDENTIFIER_NODE
6976 && TREE_CODE (t) != FUNCTION_TYPE
6977 && TREE_CODE (t) != METHOD_TYPE)
6978 type = tsubst (type, args, complain, in_decl);
6979 if (type == error_mark_node)
6980 return error_mark_node;
6981
6982 switch (TREE_CODE (t))
6983 {
6984 case RECORD_TYPE:
6985 case UNION_TYPE:
6986 case ENUMERAL_TYPE:
6987 return tsubst_aggr_type (t, args, complain, in_decl,
6988 /*entering_scope=*/0);
6989
6990 case ERROR_MARK:
6991 case IDENTIFIER_NODE:
6992 case VOID_TYPE:
6993 case REAL_TYPE:
6994 case COMPLEX_TYPE:
6995 case VECTOR_TYPE:
6996 case BOOLEAN_TYPE:
6997 case INTEGER_CST:
6998 case REAL_CST:
6999 case STRING_CST:
7000 return t;
7001
7002 case INTEGER_TYPE:
7003 if (t == integer_type_node)
7004 return t;
7005
7006 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
7007 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
7008 return t;
7009
7010 {
7011 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
7012
7013 /* The array dimension behaves like a non-type template arg,
7014 in that we want to fold it as much as possible. */
7015 max = tsubst_template_arg (omax, args, complain, in_decl);
7016 max = fold_decl_constant_value (max);
7017
7018 if (integer_zerop (omax))
7019 {
7020 /* Still allow an explicit array of size zero. */
7021 if (pedantic)
7022 pedwarn ("creating array with size zero");
7023 }
7024 else if (integer_zerop (max)
7025 || (TREE_CODE (max) == INTEGER_CST
7026 && INT_CST_LT (max, integer_zero_node)))
7027 {
7028 /* [temp.deduct]
7029
7030 Type deduction may fail for any of the following
7031 reasons:
7032
7033 Attempting to create an array with a size that is
7034 zero or negative. */
7035 if (complain & tf_error)
7036 error ("creating array with size zero (%qE)", max);
7037
7038 return error_mark_node;
7039 }
7040
7041 return compute_array_index_type (NULL_TREE, max);
7042 }
7043
7044 case TEMPLATE_TYPE_PARM:
7045 case TEMPLATE_TEMPLATE_PARM:
7046 case BOUND_TEMPLATE_TEMPLATE_PARM:
7047 case TEMPLATE_PARM_INDEX:
7048 {
7049 int idx;
7050 int level;
7051 int levels;
7052 tree arg = NULL_TREE;
7053
7054 r = NULL_TREE;
7055
7056 gcc_assert (TREE_VEC_LENGTH (args) > 0);
7057 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
7058 || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
7059 || TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
7060 {
7061 idx = TEMPLATE_TYPE_IDX (t);
7062 level = TEMPLATE_TYPE_LEVEL (t);
7063 }
7064 else
7065 {
7066 idx = TEMPLATE_PARM_IDX (t);
7067 level = TEMPLATE_PARM_LEVEL (t);
7068 }
7069
7070 levels = TMPL_ARGS_DEPTH (args);
7071 if (level <= levels)
7072 arg = TMPL_ARG (args, level, idx);
7073
7074 if (arg == error_mark_node)
7075 return error_mark_node;
7076 else if (arg != NULL_TREE)
7077 {
7078 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
7079 {
7080 gcc_assert (TYPE_P (arg));
7081 return cp_build_qualified_type_real
7082 (arg, cp_type_quals (arg) | cp_type_quals (t),
7083 complain | tf_ignore_bad_quals);
7084 }
7085 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
7086 {
7087 /* We are processing a type constructed from a
7088 template template parameter. */
7089 tree argvec = tsubst (TYPE_TI_ARGS (t),
7090 args, complain, in_decl);
7091 if (argvec == error_mark_node)
7092 return error_mark_node;
7093
7094 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
7095 are resolving nested-types in the signature of a
7096 member function templates. Otherwise ARG is a
7097 TEMPLATE_DECL and is the real template to be
7098 instantiated. */
7099 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
7100 arg = TYPE_NAME (arg);
7101
7102 r = lookup_template_class (arg,
7103 argvec, in_decl,
7104 DECL_CONTEXT (arg),
7105 /*entering_scope=*/0,
7106 complain);
7107 return cp_build_qualified_type_real
7108 (r, TYPE_QUALS (t), complain);
7109 }
7110 else
7111 /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX. */
7112 return arg;
7113 }
7114
7115 if (level == 1)
7116 /* This can happen during the attempted tsubst'ing in
7117 unify. This means that we don't yet have any information
7118 about the template parameter in question. */
7119 return t;
7120
7121 /* If we get here, we must have been looking at a parm for a
7122 more deeply nested template. Make a new version of this
7123 template parameter, but with a lower level. */
7124 switch (TREE_CODE (t))
7125 {
7126 case TEMPLATE_TYPE_PARM:
7127 case TEMPLATE_TEMPLATE_PARM:
7128 case BOUND_TEMPLATE_TEMPLATE_PARM:
7129 if (cp_type_quals (t))
7130 {
7131 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
7132 r = cp_build_qualified_type_real
7133 (r, cp_type_quals (t),
7134 complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
7135 ? tf_ignore_bad_quals : 0));
7136 }
7137 else
7138 {
7139 r = copy_type (t);
7140 TEMPLATE_TYPE_PARM_INDEX (r)
7141 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
7142 r, levels);
7143 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
7144 TYPE_MAIN_VARIANT (r) = r;
7145 TYPE_POINTER_TO (r) = NULL_TREE;
7146 TYPE_REFERENCE_TO (r) = NULL_TREE;
7147
7148 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
7149 {
7150 tree argvec = tsubst (TYPE_TI_ARGS (t), args,
7151 complain, in_decl);
7152 if (argvec == error_mark_node)
7153 return error_mark_node;
7154
7155 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
7156 = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
7157 }
7158 }
7159 break;
7160
7161 case TEMPLATE_PARM_INDEX:
7162 r = reduce_template_parm_level (t, type, levels);
7163 break;
7164
7165 default:
7166 gcc_unreachable ();
7167 }
7168
7169 return r;
7170 }
7171
7172 case TREE_LIST:
7173 {
7174 tree purpose, value, chain;
7175
7176 if (t == void_list_node)
7177 return t;
7178
7179 purpose = TREE_PURPOSE (t);
7180 if (purpose)
7181 {
7182 purpose = tsubst (purpose, args, complain, in_decl);
7183 if (purpose == error_mark_node)
7184 return error_mark_node;
7185 }
7186 value = TREE_VALUE (t);
7187 if (value)
7188 {
7189 value = tsubst (value, args, complain, in_decl);
7190 if (value == error_mark_node)
7191 return error_mark_node;
7192 }
7193 chain = TREE_CHAIN (t);
7194 if (chain && chain != void_type_node)
7195 {
7196 chain = tsubst (chain, args, complain, in_decl);
7197 if (chain == error_mark_node)
7198 return error_mark_node;
7199 }
7200 if (purpose == TREE_PURPOSE (t)
7201 && value == TREE_VALUE (t)
7202 && chain == TREE_CHAIN (t))
7203 return t;
7204 return hash_tree_cons (purpose, value, chain);
7205 }
7206
7207 case TREE_BINFO:
7208 /* We should never be tsubsting a binfo. */
7209 gcc_unreachable ();
7210
7211 case TREE_VEC:
7212 /* A vector of template arguments. */
7213 gcc_assert (!type);
7214 return tsubst_template_args (t, args, complain, in_decl);
7215
7216 case POINTER_TYPE:
7217 case REFERENCE_TYPE:
7218 {
7219 enum tree_code code;
7220
7221 if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
7222 return t;
7223
7224 code = TREE_CODE (t);
7225
7226
7227 /* [temp.deduct]
7228
7229 Type deduction may fail for any of the following
7230 reasons:
7231
7232 -- Attempting to create a pointer to reference type.
7233 -- Attempting to create a reference to a reference type or
7234 a reference to void. */
7235 if (TREE_CODE (type) == REFERENCE_TYPE
7236 || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
7237 {
7238 static location_t last_loc;
7239
7240 /* We keep track of the last time we issued this error
7241 message to avoid spewing a ton of messages during a
7242 single bad template instantiation. */
7243 if (complain & tf_error
7244 #ifdef USE_MAPPED_LOCATION
7245 && last_loc != input_location
7246 #else
7247 && (last_loc.line != input_line
7248 || last_loc.file != input_filename)
7249 #endif
7250 )
7251 {
7252 if (TREE_CODE (type) == VOID_TYPE)
7253 error ("forming reference to void");
7254 else
7255 error ("forming %s to reference type %qT",
7256 (code == POINTER_TYPE) ? "pointer" : "reference",
7257 type);
7258 last_loc = input_location;
7259 }
7260
7261 return error_mark_node;
7262 }
7263 else if (code == POINTER_TYPE)
7264 {
7265 r = build_pointer_type (type);
7266 if (TREE_CODE (type) == METHOD_TYPE)
7267 r = build_ptrmemfunc_type (r);
7268 }
7269 else
7270 r = build_reference_type (type);
7271 r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7272
7273 if (r != error_mark_node)
7274 /* Will this ever be needed for TYPE_..._TO values? */
7275 layout_type (r);
7276
7277 return r;
7278 }
7279 case OFFSET_TYPE:
7280 {
7281 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
7282 if (r == error_mark_node || !IS_AGGR_TYPE (r))
7283 {
7284 /* [temp.deduct]
7285
7286 Type deduction may fail for any of the following
7287 reasons:
7288
7289 -- Attempting to create "pointer to member of T" when T
7290 is not a class type. */
7291 if (complain & tf_error)
7292 error ("creating pointer to member of non-class type %qT", r);
7293 return error_mark_node;
7294 }
7295 if (TREE_CODE (type) == REFERENCE_TYPE)
7296 {
7297 if (complain & tf_error)
7298 error ("creating pointer to member reference type %qT", type);
7299 return error_mark_node;
7300 }
7301 if (TREE_CODE (type) == VOID_TYPE)
7302 {
7303 if (complain & tf_error)
7304 error ("creating pointer to member of type void");
7305 return error_mark_node;
7306 }
7307 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
7308 if (TREE_CODE (type) == FUNCTION_TYPE)
7309 {
7310 /* The type of the implicit object parameter gets its
7311 cv-qualifiers from the FUNCTION_TYPE. */
7312 tree method_type;
7313 tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
7314 cp_type_quals (type));
7315 tree memptr;
7316 method_type = build_method_type_directly (this_type,
7317 TREE_TYPE (type),
7318 TYPE_ARG_TYPES (type));
7319 memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
7320 return cp_build_qualified_type_real (memptr, cp_type_quals (t),
7321 complain);
7322 }
7323 else
7324 return cp_build_qualified_type_real (build_ptrmem_type (r, type),
7325 TYPE_QUALS (t),
7326 complain);
7327 }
7328 case FUNCTION_TYPE:
7329 case METHOD_TYPE:
7330 {
7331 tree fntype;
7332 tree specs;
7333 fntype = tsubst_function_type (t, args, complain, in_decl);
7334 if (fntype == error_mark_node)
7335 return error_mark_node;
7336
7337 /* Substitute the exception specification. */
7338 specs = tsubst_exception_specification (t, args, complain,
7339 in_decl);
7340 if (specs == error_mark_node)
7341 return error_mark_node;
7342 if (specs)
7343 fntype = build_exception_variant (fntype, specs);
7344 return fntype;
7345 }
7346 case ARRAY_TYPE:
7347 {
7348 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
7349 if (domain == error_mark_node)
7350 return error_mark_node;
7351
7352 /* As an optimization, we avoid regenerating the array type if
7353 it will obviously be the same as T. */
7354 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
7355 return t;
7356
7357 /* These checks should match the ones in grokdeclarator.
7358
7359 [temp.deduct]
7360
7361 The deduction may fail for any of the following reasons:
7362
7363 -- Attempting to create an array with an element type that
7364 is void, a function type, or a reference type, or [DR337]
7365 an abstract class type. */
7366 if (TREE_CODE (type) == VOID_TYPE
7367 || TREE_CODE (type) == FUNCTION_TYPE
7368 || TREE_CODE (type) == REFERENCE_TYPE)
7369 {
7370 if (complain & tf_error)
7371 error ("creating array of %qT", type);
7372 return error_mark_node;
7373 }
7374 if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
7375 {
7376 if (complain & tf_error)
7377 error ("creating array of %qT, which is an abstract class type",
7378 type);
7379 return error_mark_node;
7380 }
7381
7382 r = build_cplus_array_type (type, domain);
7383 return r;
7384 }
7385
7386 case PLUS_EXPR:
7387 case MINUS_EXPR:
7388 {
7389 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7390 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
7391
7392 if (e1 == error_mark_node || e2 == error_mark_node)
7393 return error_mark_node;
7394
7395 return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
7396 }
7397
7398 case NEGATE_EXPR:
7399 case NOP_EXPR:
7400 {
7401 tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7402 if (e == error_mark_node)
7403 return error_mark_node;
7404
7405 return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
7406 }
7407
7408 case TYPENAME_TYPE:
7409 {
7410 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
7411 in_decl, /*entering_scope=*/1);
7412 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
7413 complain, in_decl);
7414
7415 if (ctx == error_mark_node || f == error_mark_node)
7416 return error_mark_node;
7417
7418 if (!IS_AGGR_TYPE (ctx))
7419 {
7420 if (complain & tf_error)
7421 error ("%qT is not a class, struct, or union type", ctx);
7422 return error_mark_node;
7423 }
7424 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
7425 {
7426 /* Normally, make_typename_type does not require that the CTX
7427 have complete type in order to allow things like:
7428
7429 template <class T> struct S { typename S<T>::X Y; };
7430
7431 But, such constructs have already been resolved by this
7432 point, so here CTX really should have complete type, unless
7433 it's a partial instantiation. */
7434 ctx = complete_type (ctx);
7435 if (!COMPLETE_TYPE_P (ctx))
7436 {
7437 if (complain & tf_error)
7438 cxx_incomplete_type_error (NULL_TREE, ctx);
7439 return error_mark_node;
7440 }
7441 }
7442
7443 f = make_typename_type (ctx, f, typename_type,
7444 (complain & tf_error) | tf_keep_type_decl);
7445 if (f == error_mark_node)
7446 return f;
7447 if (TREE_CODE (f) == TYPE_DECL)
7448 {
7449 complain |= tf_ignore_bad_quals;
7450 f = TREE_TYPE (f);
7451 }
7452
7453 if (TREE_CODE (f) != TYPENAME_TYPE)
7454 {
7455 if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
7456 error ("%qT resolves to %qT, which is not an enumeration type",
7457 t, f);
7458 else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
7459 error ("%qT resolves to %qT, which is is not a class type",
7460 t, f);
7461 }
7462
7463 return cp_build_qualified_type_real
7464 (f, cp_type_quals (f) | cp_type_quals (t), complain);
7465 }
7466
7467 case UNBOUND_CLASS_TEMPLATE:
7468 {
7469 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
7470 in_decl, /*entering_scope=*/1);
7471 tree name = TYPE_IDENTIFIER (t);
7472 tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
7473
7474 if (ctx == error_mark_node || name == error_mark_node)
7475 return error_mark_node;
7476
7477 if (parm_list)
7478 parm_list = tsubst_template_parms (parm_list, args, complain);
7479 return make_unbound_class_template (ctx, name, parm_list, complain);
7480 }
7481
7482 case INDIRECT_REF:
7483 case ADDR_EXPR:
7484 case CALL_EXPR:
7485 gcc_unreachable ();
7486
7487 case ARRAY_REF:
7488 {
7489 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7490 tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl);
7491 if (e1 == error_mark_node || e2 == error_mark_node)
7492 return error_mark_node;
7493
7494 return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
7495 }
7496
7497 case SCOPE_REF:
7498 {
7499 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7500 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
7501 if (e1 == error_mark_node || e2 == error_mark_node)
7502 return error_mark_node;
7503
7504 return build_nt (TREE_CODE (t), e1, e2);
7505 }
7506
7507 case TYPEOF_TYPE:
7508 {
7509 tree type;
7510
7511 type = finish_typeof (tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
7512 complain, in_decl));
7513 return cp_build_qualified_type_real (type,
7514 cp_type_quals (t)
7515 | cp_type_quals (type),
7516 complain);
7517 }
7518
7519 default:
7520 sorry ("use of %qs in template",
7521 tree_code_name [(int) TREE_CODE (t)]);
7522 return error_mark_node;
7523 }
7524 }
7525
7526 /* Like tsubst_expr for a BASELINK. OBJECT_TYPE, if non-NULL, is the
7527 type of the expression on the left-hand side of the "." or "->"
7528 operator. */
7529
7530 static tree
7531 tsubst_baselink (tree baselink, tree object_type,
7532 tree args, tsubst_flags_t complain, tree in_decl)
7533 {
7534 tree name;
7535 tree qualifying_scope;
7536 tree fns;
7537 tree template_args = 0;
7538 bool template_id_p = false;
7539
7540 /* A baselink indicates a function from a base class. The
7541 BASELINK_ACCESS_BINFO and BASELINK_BINFO are going to have
7542 non-dependent types; otherwise, the lookup could not have
7543 succeeded. However, they may indicate bases of the template
7544 class, rather than the instantiated class.
7545
7546 In addition, lookups that were not ambiguous before may be
7547 ambiguous now. Therefore, we perform the lookup again. */
7548 qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
7549 fns = BASELINK_FUNCTIONS (baselink);
7550 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7551 {
7552 template_id_p = true;
7553 template_args = TREE_OPERAND (fns, 1);
7554 fns = TREE_OPERAND (fns, 0);
7555 if (template_args)
7556 template_args = tsubst_template_args (template_args, args,
7557 complain, in_decl);
7558 }
7559 name = DECL_NAME (get_first_fn (fns));
7560 baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
7561
7562 /* If lookup found a single function, mark it as used at this
7563 point. (If it lookup found multiple functions the one selected
7564 later by overload resolution will be marked as used at that
7565 point.) */
7566 if (BASELINK_P (baselink))
7567 fns = BASELINK_FUNCTIONS (baselink);
7568 if (!template_id_p && !really_overloaded_fn (fns))
7569 mark_used (OVL_CURRENT (fns));
7570
7571 /* Add back the template arguments, if present. */
7572 if (BASELINK_P (baselink) && template_id_p)
7573 BASELINK_FUNCTIONS (baselink)
7574 = build_nt (TEMPLATE_ID_EXPR,
7575 BASELINK_FUNCTIONS (baselink),
7576 template_args);
7577
7578 if (!object_type)
7579 object_type = current_class_type;
7580 return adjust_result_of_qualified_name_lookup (baselink,
7581 qualifying_scope,
7582 object_type);
7583 }
7584
7585 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID. DONE is
7586 true if the qualified-id will be a postfix-expression in-and-of
7587 itself; false if more of the postfix-expression follows the
7588 QUALIFIED_ID. ADDRESS_P is true if the qualified-id is the operand
7589 of "&". */
7590
7591 static tree
7592 tsubst_qualified_id (tree qualified_id, tree args,
7593 tsubst_flags_t complain, tree in_decl,
7594 bool done, bool address_p)
7595 {
7596 tree expr;
7597 tree scope;
7598 tree name;
7599 bool is_template;
7600 tree template_args;
7601
7602 gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
7603
7604 /* Figure out what name to look up. */
7605 name = TREE_OPERAND (qualified_id, 1);
7606 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
7607 {
7608 is_template = true;
7609 template_args = TREE_OPERAND (name, 1);
7610 if (template_args)
7611 template_args = tsubst_template_args (template_args, args,
7612 complain, in_decl);
7613 name = TREE_OPERAND (name, 0);
7614 }
7615 else
7616 {
7617 is_template = false;
7618 template_args = NULL_TREE;
7619 }
7620
7621 /* Substitute into the qualifying scope. When there are no ARGS, we
7622 are just trying to simplify a non-dependent expression. In that
7623 case the qualifying scope may be dependent, and, in any case,
7624 substituting will not help. */
7625 scope = TREE_OPERAND (qualified_id, 0);
7626 if (args)
7627 {
7628 scope = tsubst (scope, args, complain, in_decl);
7629 expr = tsubst_copy (name, args, complain, in_decl);
7630 }
7631 else
7632 expr = name;
7633
7634 if (dependent_type_p (scope))
7635 return build_nt (SCOPE_REF, scope, expr);
7636
7637 if (!BASELINK_P (name) && !DECL_P (expr))
7638 {
7639 expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
7640 if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
7641 ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
7642 {
7643 if (complain & tf_error)
7644 {
7645 error ("dependent-name %qE is parsed as a non-type, but "
7646 "instantiation yields a type", qualified_id);
7647 inform ("say %<typename %E%> if a type is meant", qualified_id);
7648 }
7649 return error_mark_node;
7650 }
7651 }
7652
7653 if (DECL_P (expr))
7654 {
7655 check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
7656 scope);
7657 /* Remember that there was a reference to this entity. */
7658 mark_used (expr);
7659 }
7660
7661 if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
7662 {
7663 if (complain & tf_error)
7664 qualified_name_lookup_error (scope,
7665 TREE_OPERAND (qualified_id, 1),
7666 expr);
7667 return error_mark_node;
7668 }
7669
7670 if (is_template)
7671 expr = lookup_template_function (expr, template_args);
7672
7673 if (expr == error_mark_node && complain & tf_error)
7674 qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
7675 expr);
7676 else if (TYPE_P (scope))
7677 {
7678 expr = (adjust_result_of_qualified_name_lookup
7679 (expr, scope, current_class_type));
7680 expr = finish_qualified_id_expr (scope, expr, done, address_p);
7681 }
7682
7683 expr = convert_from_reference (expr);
7684
7685 return expr;
7686 }
7687
7688 /* Like tsubst, but deals with expressions. This function just replaces
7689 template parms; to finish processing the resultant expression, use
7690 tsubst_expr. */
7691
7692 static tree
7693 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7694 {
7695 enum tree_code code;
7696 tree r;
7697
7698 if (t == NULL_TREE || t == error_mark_node)
7699 return t;
7700
7701 code = TREE_CODE (t);
7702
7703 switch (code)
7704 {
7705 case PARM_DECL:
7706 r = retrieve_local_specialization (t);
7707 gcc_assert (r != NULL);
7708 mark_used (r);
7709 return r;
7710
7711 case CONST_DECL:
7712 {
7713 tree enum_type;
7714 tree v;
7715
7716 if (DECL_TEMPLATE_PARM_P (t))
7717 return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
7718 /* There is no need to substitute into namespace-scope
7719 enumerators. */
7720 if (DECL_NAMESPACE_SCOPE_P (t))
7721 return t;
7722 /* If ARGS is NULL, then T is known to be non-dependent. */
7723 if (args == NULL_TREE)
7724 return integral_constant_value (t);
7725
7726 /* Unfortunately, we cannot just call lookup_name here.
7727 Consider:
7728
7729 template <int I> int f() {
7730 enum E { a = I };
7731 struct S { void g() { E e = a; } };
7732 };
7733
7734 When we instantiate f<7>::S::g(), say, lookup_name is not
7735 clever enough to find f<7>::a. */
7736 enum_type
7737 = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
7738 /*entering_scope=*/0);
7739
7740 for (v = TYPE_VALUES (enum_type);
7741 v != NULL_TREE;
7742 v = TREE_CHAIN (v))
7743 if (TREE_PURPOSE (v) == DECL_NAME (t))
7744 return TREE_VALUE (v);
7745
7746 /* We didn't find the name. That should never happen; if
7747 name-lookup found it during preliminary parsing, we
7748 should find it again here during instantiation. */
7749 gcc_unreachable ();
7750 }
7751 return t;
7752
7753 case FIELD_DECL:
7754 if (DECL_CONTEXT (t))
7755 {
7756 tree ctx;
7757
7758 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
7759 /*entering_scope=*/1);
7760 if (ctx != DECL_CONTEXT (t))
7761 {
7762 tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
7763 if (!r)
7764 {
7765 if (complain & tf_error)
7766 error ("using invalid field %qD", t);
7767 return error_mark_node;
7768 }
7769 return r;
7770 }
7771 }
7772
7773 return t;
7774
7775 case VAR_DECL:
7776 case FUNCTION_DECL:
7777 if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
7778 || local_variable_p (t))
7779 t = tsubst (t, args, complain, in_decl);
7780 mark_used (t);
7781 return t;
7782
7783 case BASELINK:
7784 return tsubst_baselink (t, current_class_type, args, complain, in_decl);
7785
7786 case TEMPLATE_DECL:
7787 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7788 return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
7789 args, complain, in_decl);
7790 else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
7791 return tsubst (t, args, complain, in_decl);
7792 else if (DECL_CLASS_SCOPE_P (t)
7793 && uses_template_parms (DECL_CONTEXT (t)))
7794 {
7795 /* Template template argument like the following example need
7796 special treatment:
7797
7798 template <template <class> class TT> struct C {};
7799 template <class T> struct D {
7800 template <class U> struct E {};
7801 C<E> c; // #1
7802 };
7803 D<int> d; // #2
7804
7805 We are processing the template argument `E' in #1 for
7806 the template instantiation #2. Originally, `E' is a
7807 TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT. Now we
7808 have to substitute this with one having context `D<int>'. */
7809
7810 tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
7811 return lookup_field (context, DECL_NAME(t), 0, false);
7812 }
7813 else
7814 /* Ordinary template template argument. */
7815 return t;
7816
7817 case CAST_EXPR:
7818 case REINTERPRET_CAST_EXPR:
7819 case CONST_CAST_EXPR:
7820 case STATIC_CAST_EXPR:
7821 case DYNAMIC_CAST_EXPR:
7822 case NOP_EXPR:
7823 return build1
7824 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7825 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
7826
7827 case INDIRECT_REF:
7828 case NEGATE_EXPR:
7829 case TRUTH_NOT_EXPR:
7830 case BIT_NOT_EXPR:
7831 case ADDR_EXPR:
7832 case UNARY_PLUS_EXPR: /* Unary + */
7833 case SIZEOF_EXPR:
7834 case ALIGNOF_EXPR:
7835 case ARROW_EXPR:
7836 case THROW_EXPR:
7837 case TYPEID_EXPR:
7838 case REALPART_EXPR:
7839 case IMAGPART_EXPR:
7840 return build1
7841 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7842 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
7843
7844 case COMPONENT_REF:
7845 {
7846 tree object;
7847 tree name;
7848
7849 object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
7850 name = TREE_OPERAND (t, 1);
7851 if (TREE_CODE (name) == BIT_NOT_EXPR)
7852 {
7853 name = tsubst_copy (TREE_OPERAND (name, 0), args,
7854 complain, in_decl);
7855 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7856 }
7857 else if (TREE_CODE (name) == SCOPE_REF
7858 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
7859 {
7860 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
7861 complain, in_decl);
7862 name = TREE_OPERAND (name, 1);
7863 name = tsubst_copy (TREE_OPERAND (name, 0), args,
7864 complain, in_decl);
7865 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7866 name = build_nt (SCOPE_REF, base, name);
7867 }
7868 else if (TREE_CODE (name) == BASELINK)
7869 name = tsubst_baselink (name,
7870 non_reference (TREE_TYPE (object)),
7871 args, complain,
7872 in_decl);
7873 else
7874 name = tsubst_copy (name, args, complain, in_decl);
7875 return build_nt (COMPONENT_REF, object, name, NULL_TREE);
7876 }
7877
7878 case PLUS_EXPR:
7879 case MINUS_EXPR:
7880 case MULT_EXPR:
7881 case TRUNC_DIV_EXPR:
7882 case CEIL_DIV_EXPR:
7883 case FLOOR_DIV_EXPR:
7884 case ROUND_DIV_EXPR:
7885 case EXACT_DIV_EXPR:
7886 case BIT_AND_EXPR:
7887 case BIT_IOR_EXPR:
7888 case BIT_XOR_EXPR:
7889 case TRUNC_MOD_EXPR:
7890 case FLOOR_MOD_EXPR:
7891 case TRUTH_ANDIF_EXPR:
7892 case TRUTH_ORIF_EXPR:
7893 case TRUTH_AND_EXPR:
7894 case TRUTH_OR_EXPR:
7895 case RSHIFT_EXPR:
7896 case LSHIFT_EXPR:
7897 case RROTATE_EXPR:
7898 case LROTATE_EXPR:
7899 case EQ_EXPR:
7900 case NE_EXPR:
7901 case MAX_EXPR:
7902 case MIN_EXPR:
7903 case LE_EXPR:
7904 case GE_EXPR:
7905 case LT_EXPR:
7906 case GT_EXPR:
7907 case COMPOUND_EXPR:
7908 case SCOPE_REF:
7909 case DOTSTAR_EXPR:
7910 case MEMBER_REF:
7911 case PREDECREMENT_EXPR:
7912 case PREINCREMENT_EXPR:
7913 case POSTDECREMENT_EXPR:
7914 case POSTINCREMENT_EXPR:
7915 return build_nt
7916 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7917 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
7918
7919 case ARRAY_REF:
7920 return build_nt
7921 (ARRAY_REF,
7922 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7923 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7924 NULL_TREE, NULL_TREE);
7925
7926 case CALL_EXPR:
7927 return build_nt (code,
7928 tsubst_copy (TREE_OPERAND (t, 0), args,
7929 complain, in_decl),
7930 tsubst_copy (TREE_OPERAND (t, 1), args, complain,
7931 in_decl),
7932 NULL_TREE);
7933
7934 case COND_EXPR:
7935 case MODOP_EXPR:
7936 case PSEUDO_DTOR_EXPR:
7937 {
7938 r = build_nt
7939 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7940 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7941 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
7942 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
7943 return r;
7944 }
7945
7946 case NEW_EXPR:
7947 {
7948 r = build_nt
7949 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7950 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7951 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
7952 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
7953 return r;
7954 }
7955
7956 case DELETE_EXPR:
7957 {
7958 r = build_nt
7959 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7960 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
7961 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
7962 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
7963 return r;
7964 }
7965
7966 case TEMPLATE_ID_EXPR:
7967 {
7968 /* Substituted template arguments */
7969 tree fn = TREE_OPERAND (t, 0);
7970 tree targs = TREE_OPERAND (t, 1);
7971
7972 fn = tsubst_copy (fn, args, complain, in_decl);
7973 if (targs)
7974 targs = tsubst_template_args (targs, args, complain, in_decl);
7975
7976 return lookup_template_function (fn, targs);
7977 }
7978
7979 case TREE_LIST:
7980 {
7981 tree purpose, value, chain;
7982
7983 if (t == void_list_node)
7984 return t;
7985
7986 purpose = TREE_PURPOSE (t);
7987 if (purpose)
7988 purpose = tsubst_copy (purpose, args, complain, in_decl);
7989 value = TREE_VALUE (t);
7990 if (value)
7991 value = tsubst_copy (value, args, complain, in_decl);
7992 chain = TREE_CHAIN (t);
7993 if (chain && chain != void_type_node)
7994 chain = tsubst_copy (chain, args, complain, in_decl);
7995 if (purpose == TREE_PURPOSE (t)
7996 && value == TREE_VALUE (t)
7997 && chain == TREE_CHAIN (t))
7998 return t;
7999 return tree_cons (purpose, value, chain);
8000 }
8001
8002 case RECORD_TYPE:
8003 case UNION_TYPE:
8004 case ENUMERAL_TYPE:
8005 case INTEGER_TYPE:
8006 case TEMPLATE_TYPE_PARM:
8007 case TEMPLATE_TEMPLATE_PARM:
8008 case BOUND_TEMPLATE_TEMPLATE_PARM:
8009 case TEMPLATE_PARM_INDEX:
8010 case POINTER_TYPE:
8011 case REFERENCE_TYPE:
8012 case OFFSET_TYPE:
8013 case FUNCTION_TYPE:
8014 case METHOD_TYPE:
8015 case ARRAY_TYPE:
8016 case TYPENAME_TYPE:
8017 case UNBOUND_CLASS_TEMPLATE:
8018 case TYPEOF_TYPE:
8019 case TYPE_DECL:
8020 return tsubst (t, args, complain, in_decl);
8021
8022 case IDENTIFIER_NODE:
8023 if (IDENTIFIER_TYPENAME_P (t))
8024 {
8025 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8026 return mangle_conv_op_name_for_type (new_type);
8027 }
8028 else
8029 return t;
8030
8031 case CONSTRUCTOR:
8032 /* This is handled by tsubst_copy_and_build. */
8033 gcc_unreachable ();
8034
8035 case VA_ARG_EXPR:
8036 return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
8037 in_decl),
8038 tsubst (TREE_TYPE (t), args, complain, in_decl));
8039
8040 case CLEANUP_POINT_EXPR:
8041 /* We shouldn't have built any of these during initial template
8042 generation. Instead, they should be built during instantiation
8043 in response to the saved STMT_IS_FULL_EXPR_P setting. */
8044 gcc_unreachable ();
8045
8046 default:
8047 return t;
8048 }
8049 }
8050
8051 /* Like tsubst_copy for expressions, etc. but also does semantic
8052 processing. */
8053
8054 static tree
8055 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8056 {
8057 tree stmt, tmp;
8058
8059 if (t == NULL_TREE || t == error_mark_node)
8060 return t;
8061
8062 if (EXPR_HAS_LOCATION (t))
8063 input_location = EXPR_LOCATION (t);
8064 if (STATEMENT_CODE_P (TREE_CODE (t)))
8065 current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
8066
8067 switch (TREE_CODE (t))
8068 {
8069 case STATEMENT_LIST:
8070 {
8071 tree_stmt_iterator i;
8072 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
8073 tsubst_expr (tsi_stmt (i), args, complain, in_decl);
8074 break;
8075 }
8076
8077 case CTOR_INITIALIZER:
8078 finish_mem_initializers (tsubst_initializer_list
8079 (TREE_OPERAND (t, 0), args));
8080 break;
8081
8082 case RETURN_EXPR:
8083 finish_return_stmt (tsubst_expr (TREE_OPERAND (t, 0),
8084 args, complain, in_decl));
8085 break;
8086
8087 case EXPR_STMT:
8088 tmp = tsubst_expr (EXPR_STMT_EXPR (t), args, complain, in_decl);
8089 if (EXPR_STMT_STMT_EXPR_RESULT (t))
8090 finish_stmt_expr_expr (tmp, cur_stmt_expr);
8091 else
8092 finish_expr_stmt (tmp);
8093 break;
8094
8095 case USING_STMT:
8096 do_using_directive (tsubst_expr (USING_STMT_NAMESPACE (t),
8097 args, complain, in_decl));
8098 break;
8099
8100 case DECL_EXPR:
8101 {
8102 tree decl;
8103 tree init;
8104
8105 decl = DECL_EXPR_DECL (t);
8106 if (TREE_CODE (decl) == LABEL_DECL)
8107 finish_label_decl (DECL_NAME (decl));
8108 else if (TREE_CODE (decl) == USING_DECL)
8109 {
8110 tree scope = USING_DECL_SCOPE (decl);
8111 tree name = DECL_NAME (decl);
8112 tree decl;
8113
8114 scope = tsubst_expr (scope, args, complain, in_decl);
8115 decl = lookup_qualified_name (scope, name,
8116 /*is_type_p=*/false,
8117 /*complain=*/false);
8118 if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
8119 qualified_name_lookup_error (scope, name, decl);
8120 else
8121 do_local_using_decl (decl, scope, name);
8122 }
8123 else
8124 {
8125 init = DECL_INITIAL (decl);
8126 decl = tsubst (decl, args, complain, in_decl);
8127 if (decl != error_mark_node)
8128 {
8129 if (init)
8130 DECL_INITIAL (decl) = error_mark_node;
8131 /* By marking the declaration as instantiated, we avoid
8132 trying to instantiate it. Since instantiate_decl can't
8133 handle local variables, and since we've already done
8134 all that needs to be done, that's the right thing to
8135 do. */
8136 if (TREE_CODE (decl) == VAR_DECL)
8137 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
8138 if (TREE_CODE (decl) == VAR_DECL
8139 && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
8140 /* Anonymous aggregates are a special case. */
8141 finish_anon_union (decl);
8142 else
8143 {
8144 maybe_push_decl (decl);
8145 if (TREE_CODE (decl) == VAR_DECL
8146 && DECL_PRETTY_FUNCTION_P (decl))
8147 {
8148 /* For __PRETTY_FUNCTION__ we have to adjust the
8149 initializer. */
8150 const char *const name
8151 = cxx_printable_name (current_function_decl, 2);
8152 init = cp_fname_init (name, &TREE_TYPE (decl));
8153 }
8154 else
8155 init = tsubst_expr (init, args, complain, in_decl);
8156 cp_finish_decl (decl, init, NULL_TREE, 0);
8157 }
8158 }
8159 }
8160
8161 /* A DECL_EXPR can also be used as an expression, in the condition
8162 clause of an if/for/while construct. */
8163 return decl;
8164 }
8165
8166 case FOR_STMT:
8167 stmt = begin_for_stmt ();
8168 tsubst_expr (FOR_INIT_STMT (t), args, complain, in_decl);
8169 finish_for_init_stmt (stmt);
8170 tmp = tsubst_expr (FOR_COND (t), args, complain, in_decl);
8171 finish_for_cond (tmp, stmt);
8172 tmp = tsubst_expr (FOR_EXPR (t), args, complain, in_decl);
8173 finish_for_expr (tmp, stmt);
8174 tsubst_expr (FOR_BODY (t), args, complain, in_decl);
8175 finish_for_stmt (stmt);
8176 break;
8177
8178 case WHILE_STMT:
8179 stmt = begin_while_stmt ();
8180 tmp = tsubst_expr (WHILE_COND (t), args, complain, in_decl);
8181 finish_while_stmt_cond (tmp, stmt);
8182 tsubst_expr (WHILE_BODY (t), args, complain, in_decl);
8183 finish_while_stmt (stmt);
8184 break;
8185
8186 case DO_STMT:
8187 stmt = begin_do_stmt ();
8188 tsubst_expr (DO_BODY (t), args, complain, in_decl);
8189 finish_do_body (stmt);
8190 tmp = tsubst_expr (DO_COND (t), args, complain, in_decl);
8191 finish_do_stmt (tmp, stmt);
8192 break;
8193
8194 case IF_STMT:
8195 stmt = begin_if_stmt ();
8196 tmp = tsubst_expr (IF_COND (t), args, complain, in_decl);
8197 finish_if_stmt_cond (tmp, stmt);
8198 tsubst_expr (THEN_CLAUSE (t), args, complain, in_decl);
8199 finish_then_clause (stmt);
8200
8201 if (ELSE_CLAUSE (t))
8202 {
8203 begin_else_clause (stmt);
8204 tsubst_expr (ELSE_CLAUSE (t), args, complain, in_decl);
8205 finish_else_clause (stmt);
8206 }
8207
8208 finish_if_stmt (stmt);
8209 break;
8210
8211 case BIND_EXPR:
8212 if (BIND_EXPR_BODY_BLOCK (t))
8213 stmt = begin_function_body ();
8214 else
8215 stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
8216 ? BCS_TRY_BLOCK : 0);
8217
8218 tsubst_expr (BIND_EXPR_BODY (t), args, complain, in_decl);
8219
8220 if (BIND_EXPR_BODY_BLOCK (t))
8221 finish_function_body (stmt);
8222 else
8223 finish_compound_stmt (stmt);
8224 break;
8225
8226 case BREAK_STMT:
8227 finish_break_stmt ();
8228 break;
8229
8230 case CONTINUE_STMT:
8231 finish_continue_stmt ();
8232 break;
8233
8234 case SWITCH_STMT:
8235 stmt = begin_switch_stmt ();
8236 tmp = tsubst_expr (SWITCH_STMT_COND (t), args, complain, in_decl);
8237 finish_switch_cond (tmp, stmt);
8238 tsubst_expr (SWITCH_STMT_BODY (t), args, complain, in_decl);
8239 finish_switch_stmt (stmt);
8240 break;
8241
8242 case CASE_LABEL_EXPR:
8243 finish_case_label (tsubst_expr (CASE_LOW (t), args, complain, in_decl),
8244 tsubst_expr (CASE_HIGH (t), args, complain,
8245 in_decl));
8246 break;
8247
8248 case LABEL_EXPR:
8249 finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
8250 break;
8251
8252 case GOTO_EXPR:
8253 tmp = GOTO_DESTINATION (t);
8254 if (TREE_CODE (tmp) != LABEL_DECL)
8255 /* Computed goto's must be tsubst'd into. On the other hand,
8256 non-computed gotos must not be; the identifier in question
8257 will have no binding. */
8258 tmp = tsubst_expr (tmp, args, complain, in_decl);
8259 else
8260 tmp = DECL_NAME (tmp);
8261 finish_goto_stmt (tmp);
8262 break;
8263
8264 case ASM_EXPR:
8265 tmp = finish_asm_stmt
8266 (ASM_VOLATILE_P (t),
8267 tsubst_expr (ASM_STRING (t), args, complain, in_decl),
8268 tsubst_expr (ASM_OUTPUTS (t), args, complain, in_decl),
8269 tsubst_expr (ASM_INPUTS (t), args, complain, in_decl),
8270 tsubst_expr (ASM_CLOBBERS (t), args, complain, in_decl));
8271 {
8272 tree asm_expr = tmp;
8273 if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
8274 asm_expr = TREE_OPERAND (asm_expr, 0);
8275 ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
8276 }
8277 break;
8278
8279 case TRY_BLOCK:
8280 if (CLEANUP_P (t))
8281 {
8282 stmt = begin_try_block ();
8283 tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
8284 finish_cleanup_try_block (stmt);
8285 finish_cleanup (tsubst_expr (TRY_HANDLERS (t), args,
8286 complain, in_decl),
8287 stmt);
8288 }
8289 else
8290 {
8291 if (FN_TRY_BLOCK_P (t))
8292 stmt = begin_function_try_block ();
8293 else
8294 stmt = begin_try_block ();
8295
8296 tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
8297
8298 if (FN_TRY_BLOCK_P (t))
8299 finish_function_try_block (stmt);
8300 else
8301 finish_try_block (stmt);
8302
8303 tsubst_expr (TRY_HANDLERS (t), args, complain, in_decl);
8304 if (FN_TRY_BLOCK_P (t))
8305 finish_function_handler_sequence (stmt);
8306 else
8307 finish_handler_sequence (stmt);
8308 }
8309 break;
8310
8311 case HANDLER:
8312 {
8313 tree decl;
8314
8315 stmt = begin_handler ();
8316 if (HANDLER_PARMS (t))
8317 {
8318 decl = HANDLER_PARMS (t);
8319 decl = tsubst (decl, args, complain, in_decl);
8320 /* Prevent instantiate_decl from trying to instantiate
8321 this variable. We've already done all that needs to be
8322 done. */
8323 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
8324 }
8325 else
8326 decl = NULL_TREE;
8327 finish_handler_parms (decl, stmt);
8328 tsubst_expr (HANDLER_BODY (t), args, complain, in_decl);
8329 finish_handler (stmt);
8330 }
8331 break;
8332
8333 case TAG_DEFN:
8334 tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
8335 break;
8336
8337 default:
8338 gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
8339
8340 return tsubst_copy_and_build (t, args, complain, in_decl,
8341 /*function_p=*/false);
8342 }
8343
8344 return NULL_TREE;
8345 }
8346
8347 /* T is a postfix-expression that is not being used in a function
8348 call. Return the substituted version of T. */
8349
8350 static tree
8351 tsubst_non_call_postfix_expression (tree t, tree args,
8352 tsubst_flags_t complain,
8353 tree in_decl)
8354 {
8355 if (TREE_CODE (t) == SCOPE_REF)
8356 t = tsubst_qualified_id (t, args, complain, in_decl,
8357 /*done=*/false, /*address_p=*/false);
8358 else
8359 t = tsubst_copy_and_build (t, args, complain, in_decl,
8360 /*function_p=*/false);
8361
8362 return t;
8363 }
8364
8365 /* Like tsubst but deals with expressions and performs semantic
8366 analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
8367
8368 tree
8369 tsubst_copy_and_build (tree t,
8370 tree args,
8371 tsubst_flags_t complain,
8372 tree in_decl,
8373 bool function_p)
8374 {
8375 #define RECUR(NODE) \
8376 tsubst_copy_and_build (NODE, args, complain, in_decl, /*function_p=*/false)
8377
8378 tree op1;
8379
8380 if (t == NULL_TREE || t == error_mark_node)
8381 return t;
8382
8383 switch (TREE_CODE (t))
8384 {
8385 case USING_DECL:
8386 t = DECL_NAME (t);
8387 /* Fall through. */
8388 case IDENTIFIER_NODE:
8389 {
8390 tree decl;
8391 cp_id_kind idk;
8392 tree qualifying_class;
8393 bool non_integral_constant_expression_p;
8394 const char *error_msg;
8395
8396 if (IDENTIFIER_TYPENAME_P (t))
8397 {
8398 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8399 t = mangle_conv_op_name_for_type (new_type);
8400 }
8401
8402 /* Look up the name. */
8403 decl = lookup_name (t, 0);
8404
8405 /* By convention, expressions use ERROR_MARK_NODE to indicate
8406 failure, not NULL_TREE. */
8407 if (decl == NULL_TREE)
8408 decl = error_mark_node;
8409
8410 decl = finish_id_expression (t, decl, NULL_TREE,
8411 &idk,
8412 &qualifying_class,
8413 /*integral_constant_expression_p=*/false,
8414 /*allow_non_integral_constant_expression_p=*/false,
8415 &non_integral_constant_expression_p,
8416 &error_msg);
8417 if (error_msg)
8418 error (error_msg);
8419 if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
8420 decl = unqualified_name_lookup_error (decl);
8421 return decl;
8422 }
8423
8424 case TEMPLATE_ID_EXPR:
8425 {
8426 tree object;
8427 tree template = RECUR (TREE_OPERAND (t, 0));
8428 tree targs = TREE_OPERAND (t, 1);
8429
8430 if (targs)
8431 targs = tsubst_template_args (targs, args, complain, in_decl);
8432
8433 if (TREE_CODE (template) == COMPONENT_REF)
8434 {
8435 object = TREE_OPERAND (template, 0);
8436 template = TREE_OPERAND (template, 1);
8437 }
8438 else
8439 object = NULL_TREE;
8440 template = lookup_template_function (template, targs);
8441
8442 if (object)
8443 return build3 (COMPONENT_REF, TREE_TYPE (template),
8444 object, template, NULL_TREE);
8445 else
8446 return template;
8447 }
8448
8449 case INDIRECT_REF:
8450 {
8451 tree r = RECUR (TREE_OPERAND (t, 0));
8452
8453 if (REFERENCE_REF_P (t))
8454 {
8455 /* A type conversion to reference type will be enclosed in
8456 such an indirect ref, but the substitution of the cast
8457 will have also added such an indirect ref. */
8458 if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
8459 r = convert_from_reference (r);
8460 }
8461 else
8462 r = build_x_indirect_ref (r, "unary *");
8463 return r;
8464 }
8465
8466 case NOP_EXPR:
8467 return build_nop
8468 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8469 RECUR (TREE_OPERAND (t, 0)));
8470
8471 case CAST_EXPR:
8472 return build_functional_cast
8473 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8474 RECUR (TREE_OPERAND (t, 0)));
8475
8476 case REINTERPRET_CAST_EXPR:
8477 return build_reinterpret_cast
8478 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8479 RECUR (TREE_OPERAND (t, 0)));
8480
8481 case CONST_CAST_EXPR:
8482 return build_const_cast
8483 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8484 RECUR (TREE_OPERAND (t, 0)));
8485
8486 case DYNAMIC_CAST_EXPR:
8487 return build_dynamic_cast
8488 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8489 RECUR (TREE_OPERAND (t, 0)));
8490
8491 case STATIC_CAST_EXPR:
8492 return build_static_cast
8493 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8494 RECUR (TREE_OPERAND (t, 0)));
8495
8496 case POSTDECREMENT_EXPR:
8497 case POSTINCREMENT_EXPR:
8498 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8499 args, complain, in_decl);
8500 return build_x_unary_op (TREE_CODE (t), op1);
8501
8502 case PREDECREMENT_EXPR:
8503 case PREINCREMENT_EXPR:
8504 case NEGATE_EXPR:
8505 case BIT_NOT_EXPR:
8506 case ABS_EXPR:
8507 case TRUTH_NOT_EXPR:
8508 case UNARY_PLUS_EXPR: /* Unary + */
8509 case REALPART_EXPR:
8510 case IMAGPART_EXPR:
8511 return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
8512
8513 case ADDR_EXPR:
8514 op1 = TREE_OPERAND (t, 0);
8515 if (TREE_CODE (op1) == SCOPE_REF)
8516 op1 = tsubst_qualified_id (op1, args, complain, in_decl,
8517 /*done=*/true, /*address_p=*/true);
8518 else
8519 op1 = tsubst_non_call_postfix_expression (op1, args, complain,
8520 in_decl);
8521 if (TREE_CODE (op1) == LABEL_DECL)
8522 return finish_label_address_expr (DECL_NAME (op1));
8523 return build_x_unary_op (ADDR_EXPR, op1);
8524
8525 case PLUS_EXPR:
8526 case MINUS_EXPR:
8527 case MULT_EXPR:
8528 case TRUNC_DIV_EXPR:
8529 case CEIL_DIV_EXPR:
8530 case FLOOR_DIV_EXPR:
8531 case ROUND_DIV_EXPR:
8532 case EXACT_DIV_EXPR:
8533 case BIT_AND_EXPR:
8534 case BIT_IOR_EXPR:
8535 case BIT_XOR_EXPR:
8536 case TRUNC_MOD_EXPR:
8537 case FLOOR_MOD_EXPR:
8538 case TRUTH_ANDIF_EXPR:
8539 case TRUTH_ORIF_EXPR:
8540 case TRUTH_AND_EXPR:
8541 case TRUTH_OR_EXPR:
8542 case RSHIFT_EXPR:
8543 case LSHIFT_EXPR:
8544 case RROTATE_EXPR:
8545 case LROTATE_EXPR:
8546 case EQ_EXPR:
8547 case NE_EXPR:
8548 case MAX_EXPR:
8549 case MIN_EXPR:
8550 case LE_EXPR:
8551 case GE_EXPR:
8552 case LT_EXPR:
8553 case GT_EXPR:
8554 case MEMBER_REF:
8555 case DOTSTAR_EXPR:
8556 return build_x_binary_op
8557 (TREE_CODE (t),
8558 RECUR (TREE_OPERAND (t, 0)),
8559 RECUR (TREE_OPERAND (t, 1)),
8560 /*overloaded_p=*/NULL);
8561
8562 case SCOPE_REF:
8563 return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
8564 /*address_p=*/false);
8565 case ARRAY_REF:
8566 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8567 args, complain, in_decl);
8568 return build_x_binary_op (ARRAY_REF, op1, RECUR (TREE_OPERAND (t, 1)),
8569 /*overloaded_p=*/NULL);
8570
8571 case SIZEOF_EXPR:
8572 case ALIGNOF_EXPR:
8573 op1 = TREE_OPERAND (t, 0);
8574 if (!args)
8575 {
8576 /* When there are no ARGS, we are trying to evaluate a
8577 non-dependent expression from the parser. Trying to do
8578 the substitutions may not work. */
8579 if (!TYPE_P (op1))
8580 op1 = TREE_TYPE (op1);
8581 }
8582 else
8583 {
8584 ++skip_evaluation;
8585 op1 = RECUR (op1);
8586 --skip_evaluation;
8587 }
8588 if (TYPE_P (op1))
8589 return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
8590 else
8591 return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
8592
8593 case MODOP_EXPR:
8594 {
8595 tree r = build_x_modify_expr
8596 (RECUR (TREE_OPERAND (t, 0)),
8597 TREE_CODE (TREE_OPERAND (t, 1)),
8598 RECUR (TREE_OPERAND (t, 2)));
8599 /* TREE_NO_WARNING must be set if either the expression was
8600 parenthesized or it uses an operator such as >>= rather
8601 than plain assignment. In the former case, it was already
8602 set and must be copied. In the latter case,
8603 build_x_modify_expr sets it and it must not be reset
8604 here. */
8605 if (TREE_NO_WARNING (t))
8606 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
8607 return r;
8608 }
8609
8610 case ARROW_EXPR:
8611 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8612 args, complain, in_decl);
8613 /* Remember that there was a reference to this entity. */
8614 if (DECL_P (op1))
8615 mark_used (op1);
8616 return build_x_arrow (op1);
8617
8618 case NEW_EXPR:
8619 return build_new
8620 (RECUR (TREE_OPERAND (t, 0)),
8621 RECUR (TREE_OPERAND (t, 1)),
8622 RECUR (TREE_OPERAND (t, 2)),
8623 RECUR (TREE_OPERAND (t, 3)),
8624 NEW_EXPR_USE_GLOBAL (t));
8625
8626 case DELETE_EXPR:
8627 return delete_sanity
8628 (RECUR (TREE_OPERAND (t, 0)),
8629 RECUR (TREE_OPERAND (t, 1)),
8630 DELETE_EXPR_USE_VEC (t),
8631 DELETE_EXPR_USE_GLOBAL (t));
8632
8633 case COMPOUND_EXPR:
8634 return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
8635 RECUR (TREE_OPERAND (t, 1)));
8636
8637 case CALL_EXPR:
8638 {
8639 tree function;
8640 tree call_args;
8641 bool qualified_p;
8642 bool koenig_p;
8643
8644 function = TREE_OPERAND (t, 0);
8645 /* When we parsed the expression, we determined whether or
8646 not Koenig lookup should be performed. */
8647 koenig_p = KOENIG_LOOKUP_P (t);
8648 if (TREE_CODE (function) == SCOPE_REF)
8649 {
8650 qualified_p = true;
8651 function = tsubst_qualified_id (function, args, complain, in_decl,
8652 /*done=*/false,
8653 /*address_p=*/false);
8654 }
8655 else
8656 {
8657 qualified_p = (TREE_CODE (function) == COMPONENT_REF
8658 && (TREE_CODE (TREE_OPERAND (function, 1))
8659 == SCOPE_REF));
8660 function = tsubst_copy_and_build (function, args, complain,
8661 in_decl,
8662 !qualified_p);
8663 if (BASELINK_P (function))
8664 qualified_p = true;
8665 }
8666
8667 call_args = RECUR (TREE_OPERAND (t, 1));
8668
8669 /* We do not perform argument-dependent lookup if normal
8670 lookup finds a non-function, in accordance with the
8671 expected resolution of DR 218. */
8672 if (koenig_p
8673 && ((is_overloaded_fn (function)
8674 /* If lookup found a member function, the Koenig lookup is
8675 not appropriate, even if an unqualified-name was used
8676 to denote the function. */
8677 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
8678 || TREE_CODE (function) == IDENTIFIER_NODE))
8679 function = perform_koenig_lookup (function, call_args);
8680
8681 if (TREE_CODE (function) == IDENTIFIER_NODE)
8682 {
8683 unqualified_name_lookup_error (function);
8684 return error_mark_node;
8685 }
8686
8687 /* Remember that there was a reference to this entity. */
8688 if (DECL_P (function))
8689 mark_used (function);
8690
8691 if (TREE_CODE (function) == OFFSET_REF)
8692 return build_offset_ref_call_from_tree (function, call_args);
8693 if (TREE_CODE (function) == COMPONENT_REF)
8694 {
8695 if (!BASELINK_P (TREE_OPERAND (function, 1)))
8696 return finish_call_expr (function, call_args,
8697 /*disallow_virtual=*/false,
8698 /*koenig_p=*/false);
8699 else
8700 return (build_new_method_call
8701 (TREE_OPERAND (function, 0),
8702 TREE_OPERAND (function, 1),
8703 call_args, NULL_TREE,
8704 qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL));
8705 }
8706 return finish_call_expr (function, call_args,
8707 /*disallow_virtual=*/qualified_p,
8708 koenig_p);
8709 }
8710
8711 case COND_EXPR:
8712 return build_x_conditional_expr
8713 (RECUR (TREE_OPERAND (t, 0)),
8714 RECUR (TREE_OPERAND (t, 1)),
8715 RECUR (TREE_OPERAND (t, 2)));
8716
8717 case PSEUDO_DTOR_EXPR:
8718 return finish_pseudo_destructor_expr
8719 (RECUR (TREE_OPERAND (t, 0)),
8720 RECUR (TREE_OPERAND (t, 1)),
8721 RECUR (TREE_OPERAND (t, 2)));
8722
8723 case TREE_LIST:
8724 {
8725 tree purpose, value, chain;
8726
8727 if (t == void_list_node)
8728 return t;
8729
8730 purpose = TREE_PURPOSE (t);
8731 if (purpose)
8732 purpose = RECUR (purpose);
8733 value = TREE_VALUE (t);
8734 if (value)
8735 value = RECUR (value);
8736 chain = TREE_CHAIN (t);
8737 if (chain && chain != void_type_node)
8738 chain = RECUR (chain);
8739 if (purpose == TREE_PURPOSE (t)
8740 && value == TREE_VALUE (t)
8741 && chain == TREE_CHAIN (t))
8742 return t;
8743 return tree_cons (purpose, value, chain);
8744 }
8745
8746 case COMPONENT_REF:
8747 {
8748 tree object;
8749 tree member;
8750
8751 object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8752 args, complain, in_decl);
8753 /* Remember that there was a reference to this entity. */
8754 if (DECL_P (object))
8755 mark_used (object);
8756
8757 member = TREE_OPERAND (t, 1);
8758 if (BASELINK_P (member))
8759 member = tsubst_baselink (member,
8760 non_reference (TREE_TYPE (object)),
8761 args, complain, in_decl);
8762 else
8763 member = tsubst_copy (member, args, complain, in_decl);
8764
8765 if (member == error_mark_node)
8766 return error_mark_node;
8767 else if (!CLASS_TYPE_P (TREE_TYPE (object)))
8768 {
8769 if (TREE_CODE (member) == BIT_NOT_EXPR)
8770 return finish_pseudo_destructor_expr (object,
8771 NULL_TREE,
8772 TREE_TYPE (object));
8773 else if (TREE_CODE (member) == SCOPE_REF
8774 && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
8775 return finish_pseudo_destructor_expr (object,
8776 object,
8777 TREE_TYPE (object));
8778 }
8779 else if (TREE_CODE (member) == SCOPE_REF
8780 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
8781 {
8782 tree tmpl;
8783 tree args;
8784
8785 /* Lookup the template functions now that we know what the
8786 scope is. */
8787 tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
8788 args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
8789 member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
8790 /*is_type_p=*/false,
8791 /*complain=*/false);
8792 if (BASELINK_P (member))
8793 {
8794 BASELINK_FUNCTIONS (member)
8795 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
8796 args);
8797 member = (adjust_result_of_qualified_name_lookup
8798 (member, BINFO_TYPE (BASELINK_BINFO (member)),
8799 TREE_TYPE (object)));
8800 }
8801 else
8802 {
8803 qualified_name_lookup_error (TREE_TYPE (object), tmpl,
8804 member);
8805 return error_mark_node;
8806 }
8807 }
8808 else if (TREE_CODE (member) == SCOPE_REF
8809 && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
8810 && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
8811 {
8812 if (complain & tf_error)
8813 {
8814 if (TYPE_P (TREE_OPERAND (member, 0)))
8815 error ("%qT is not a class or namespace",
8816 TREE_OPERAND (member, 0));
8817 else
8818 error ("%qD is not a class or namespace",
8819 TREE_OPERAND (member, 0));
8820 }
8821 return error_mark_node;
8822 }
8823 else if (TREE_CODE (member) == FIELD_DECL)
8824 return finish_non_static_data_member (member, object, NULL_TREE);
8825
8826 return finish_class_member_access_expr (object, member);
8827 }
8828
8829 case THROW_EXPR:
8830 return build_throw
8831 (RECUR (TREE_OPERAND (t, 0)));
8832
8833 case CONSTRUCTOR:
8834 {
8835 VEC(constructor_elt,gc) *n;
8836 constructor_elt *ce;
8837 unsigned HOST_WIDE_INT idx;
8838 tree r;
8839 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8840 bool process_index_p;
8841
8842 /* digest_init will do the wrong thing if we let it. */
8843 if (type && TYPE_PTRMEMFUNC_P (type))
8844 return t;
8845
8846 /* We do not want to process the index of aggregate
8847 initializers as they are identifier nodes which will be
8848 looked up by digest_init. */
8849 process_index_p = !(type && IS_AGGR_TYPE (type));
8850
8851 n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
8852 for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
8853 {
8854 if (ce->index && process_index_p)
8855 ce->index = RECUR (ce->index);
8856 ce->value = RECUR (ce->value);
8857 }
8858
8859 r = build_constructor (NULL_TREE, n);
8860 TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
8861
8862 if (type)
8863 return digest_init (type, r);
8864 return r;
8865 }
8866
8867 case TYPEID_EXPR:
8868 {
8869 tree operand_0 = RECUR (TREE_OPERAND (t, 0));
8870 if (TYPE_P (operand_0))
8871 return get_typeid (operand_0);
8872 return build_typeid (operand_0);
8873 }
8874
8875 case VAR_DECL:
8876 if (!args)
8877 return t;
8878 /* Fall through */
8879
8880 case PARM_DECL:
8881 {
8882 tree r = tsubst_copy (t, args, complain, in_decl);
8883
8884 if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
8885 /* If the original type was a reference, we'll be wrapped in
8886 the appropriate INDIRECT_REF. */
8887 r = convert_from_reference (r);
8888 return r;
8889 }
8890
8891 case VA_ARG_EXPR:
8892 return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
8893 tsubst_copy (TREE_TYPE (t), args, complain,
8894 in_decl));
8895
8896 case OFFSETOF_EXPR:
8897 return fold_offsetof (RECUR (TREE_OPERAND (t, 0)));
8898
8899 case STMT_EXPR:
8900 {
8901 tree old_stmt_expr = cur_stmt_expr;
8902 tree stmt_expr = begin_stmt_expr ();
8903
8904 cur_stmt_expr = stmt_expr;
8905 tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl);
8906 stmt_expr = finish_stmt_expr (stmt_expr, false);
8907 cur_stmt_expr = old_stmt_expr;
8908
8909 return stmt_expr;
8910 }
8911
8912 case CONST_DECL:
8913 t = tsubst_copy (t, args, complain, in_decl);
8914 /* As in finish_id_expression, we resolve enumeration constants
8915 to their underlying values. */
8916 if (TREE_CODE (t) == CONST_DECL)
8917 return DECL_INITIAL (t);
8918 return t;
8919
8920 default:
8921 /* Handle Objective-C++ constructs, if appropriate. */
8922 {
8923 tree subst
8924 = objcp_tsubst_copy_and_build (t, args, complain,
8925 in_decl, /*function_p=*/false);
8926 if (subst)
8927 return subst;
8928 }
8929 return tsubst_copy (t, args, complain, in_decl);
8930 }
8931
8932 #undef RECUR
8933 }
8934
8935 /* Verify that the instantiated ARGS are valid. For type arguments,
8936 make sure that the type's linkage is ok. For non-type arguments,
8937 make sure they are constants if they are integral or enumerations.
8938 Emit an error under control of COMPLAIN, and return TRUE on error. */
8939
8940 static bool
8941 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
8942 {
8943 int ix, len = DECL_NTPARMS (tmpl);
8944 bool result = false;
8945 bool error_p = complain & tf_error;
8946
8947 for (ix = 0; ix != len; ix++)
8948 {
8949 tree t = TREE_VEC_ELT (args, ix);
8950
8951 if (TYPE_P (t))
8952 {
8953 /* [basic.link]: A name with no linkage (notably, the name
8954 of a class or enumeration declared in a local scope)
8955 shall not be used to declare an entity with linkage.
8956 This implies that names with no linkage cannot be used as
8957 template arguments. */
8958 tree nt = no_linkage_check (t, /*relaxed_p=*/false);
8959
8960 if (nt)
8961 {
8962 if (TYPE_ANONYMOUS_P (nt))
8963 error ("%qT is/uses anonymous type", t);
8964 else
8965 error ("%qT uses local type %qT", t, nt);
8966 result = true;
8967 error_p = true;
8968 }
8969 /* In order to avoid all sorts of complications, we do not
8970 allow variably-modified types as template arguments. */
8971 else if (variably_modified_type_p (t, NULL_TREE))
8972 {
8973 if (complain & tf_error)
8974 error ("%qT is a variably modified type", t);
8975 result = true;
8976 }
8977 }
8978 /* A non-type argument of integral or enumerated type must be a
8979 constant. */
8980 else if (TREE_TYPE (t)
8981 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
8982 && !TREE_CONSTANT (t))
8983 {
8984 if (complain & tf_error)
8985 error ("integral expression %qE is not constant", t);
8986 result = true;
8987 }
8988 }
8989 if (result && error_p)
8990 error (" trying to instantiate %qD", tmpl);
8991 return result;
8992 }
8993
8994 /* Instantiate the indicated variable or function template TMPL with
8995 the template arguments in TARG_PTR. */
8996
8997 tree
8998 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
8999 {
9000 tree fndecl;
9001 tree gen_tmpl;
9002 tree spec;
9003
9004 if (tmpl == error_mark_node)
9005 return error_mark_node;
9006
9007 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
9008
9009 /* If this function is a clone, handle it specially. */
9010 if (DECL_CLONED_FUNCTION_P (tmpl))
9011 {
9012 tree spec;
9013 tree clone;
9014
9015 spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
9016 complain);
9017 if (spec == error_mark_node)
9018 return error_mark_node;
9019
9020 /* Look for the clone. */
9021 FOR_EACH_CLONE (clone, spec)
9022 if (DECL_NAME (clone) == DECL_NAME (tmpl))
9023 return clone;
9024 /* We should always have found the clone by now. */
9025 gcc_unreachable ();
9026 return NULL_TREE;
9027 }
9028
9029 /* Check to see if we already have this specialization. */
9030 spec = retrieve_specialization (tmpl, targ_ptr,
9031 /*class_specializations_p=*/false);
9032 if (spec != NULL_TREE)
9033 return spec;
9034
9035 gen_tmpl = most_general_template (tmpl);
9036 if (tmpl != gen_tmpl)
9037 {
9038 /* The TMPL is a partial instantiation. To get a full set of
9039 arguments we must add the arguments used to perform the
9040 partial instantiation. */
9041 targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
9042 targ_ptr);
9043
9044 /* Check to see if we already have this specialization. */
9045 spec = retrieve_specialization (gen_tmpl, targ_ptr,
9046 /*class_specializations_p=*/false);
9047 if (spec != NULL_TREE)
9048 return spec;
9049 }
9050
9051 if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
9052 complain))
9053 return error_mark_node;
9054
9055 /* We are building a FUNCTION_DECL, during which the access of its
9056 parameters and return types have to be checked. However this
9057 FUNCTION_DECL which is the desired context for access checking
9058 is not built yet. We solve this chicken-and-egg problem by
9059 deferring all checks until we have the FUNCTION_DECL. */
9060 push_deferring_access_checks (dk_deferred);
9061
9062 /* Substitute template parameters. */
9063 fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
9064 targ_ptr, complain, gen_tmpl);
9065
9066 /* Now we know the specialization, compute access previously
9067 deferred. */
9068 push_access_scope (fndecl);
9069 perform_deferred_access_checks ();
9070 pop_access_scope (fndecl);
9071 pop_deferring_access_checks ();
9072
9073 /* The DECL_TI_TEMPLATE should always be the immediate parent
9074 template, not the most general template. */
9075 DECL_TI_TEMPLATE (fndecl) = tmpl;
9076
9077 /* If we've just instantiated the main entry point for a function,
9078 instantiate all the alternate entry points as well. We do this
9079 by cloning the instantiation of the main entry point, not by
9080 instantiating the template clones. */
9081 if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
9082 clone_function_decl (fndecl, /*update_method_vec_p=*/0);
9083
9084 return fndecl;
9085 }
9086
9087 /* The FN is a TEMPLATE_DECL for a function. The ARGS are the
9088 arguments that are being used when calling it. TARGS is a vector
9089 into which the deduced template arguments are placed.
9090
9091 Return zero for success, 2 for an incomplete match that doesn't resolve
9092 all the types, and 1 for complete failure. An error message will be
9093 printed only for an incomplete match.
9094
9095 If FN is a conversion operator, or we are trying to produce a specific
9096 specialization, RETURN_TYPE is the return type desired.
9097
9098 The EXPLICIT_TARGS are explicit template arguments provided via a
9099 template-id.
9100
9101 The parameter STRICT is one of:
9102
9103 DEDUCE_CALL:
9104 We are deducing arguments for a function call, as in
9105 [temp.deduct.call].
9106
9107 DEDUCE_CONV:
9108 We are deducing arguments for a conversion function, as in
9109 [temp.deduct.conv].
9110
9111 DEDUCE_EXACT:
9112 We are deducing arguments when doing an explicit instantiation
9113 as in [temp.explicit], when determining an explicit specialization
9114 as in [temp.expl.spec], or when taking the address of a function
9115 template, as in [temp.deduct.funcaddr]. */
9116
9117 int
9118 fn_type_unification (tree fn,
9119 tree explicit_targs,
9120 tree targs,
9121 tree args,
9122 tree return_type,
9123 unification_kind_t strict,
9124 int flags)
9125 {
9126 tree parms;
9127 tree fntype;
9128 int result;
9129
9130 gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
9131
9132 fntype = TREE_TYPE (fn);
9133 if (explicit_targs)
9134 {
9135 /* [temp.deduct]
9136
9137 The specified template arguments must match the template
9138 parameters in kind (i.e., type, nontype, template), and there
9139 must not be more arguments than there are parameters;
9140 otherwise type deduction fails.
9141
9142 Nontype arguments must match the types of the corresponding
9143 nontype template parameters, or must be convertible to the
9144 types of the corresponding nontype parameters as specified in
9145 _temp.arg.nontype_, otherwise type deduction fails.
9146
9147 All references in the function type of the function template
9148 to the corresponding template parameters are replaced by the
9149 specified template argument values. If a substitution in a
9150 template parameter or in the function type of the function
9151 template results in an invalid type, type deduction fails. */
9152 int i;
9153 tree converted_args;
9154 bool incomplete;
9155
9156 if (explicit_targs == error_mark_node)
9157 return 1;
9158
9159 converted_args
9160 = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
9161 explicit_targs, NULL_TREE, tf_none,
9162 /*require_all_arguments=*/0));
9163 if (converted_args == error_mark_node)
9164 return 1;
9165
9166 /* Substitute the explicit args into the function type. This is
9167 necessary so that, for instance, explicitly declared function
9168 arguments can match null pointed constants. If we were given
9169 an incomplete set of explicit args, we must not do semantic
9170 processing during substitution as we could create partial
9171 instantiations. */
9172 incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
9173 processing_template_decl += incomplete;
9174 fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
9175 processing_template_decl -= incomplete;
9176
9177 if (fntype == error_mark_node)
9178 return 1;
9179
9180 /* Place the explicitly specified arguments in TARGS. */
9181 for (i = NUM_TMPL_ARGS (converted_args); i--;)
9182 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
9183 }
9184
9185 parms = TYPE_ARG_TYPES (fntype);
9186 /* Never do unification on the 'this' parameter. */
9187 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
9188 parms = TREE_CHAIN (parms);
9189
9190 if (return_type)
9191 {
9192 parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
9193 args = tree_cons (NULL_TREE, return_type, args);
9194 }
9195
9196 /* We allow incomplete unification without an error message here
9197 because the standard doesn't seem to explicitly prohibit it. Our
9198 callers must be ready to deal with unification failures in any
9199 event. */
9200 result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
9201 targs, parms, args, /*subr=*/0,
9202 strict, flags);
9203
9204 if (result == 0)
9205 /* All is well so far. Now, check:
9206
9207 [temp.deduct]
9208
9209 When all template arguments have been deduced, all uses of
9210 template parameters in nondeduced contexts are replaced with
9211 the corresponding deduced argument values. If the
9212 substitution results in an invalid type, as described above,
9213 type deduction fails. */
9214 if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
9215 == error_mark_node)
9216 return 1;
9217
9218 return result;
9219 }
9220
9221 /* Adjust types before performing type deduction, as described in
9222 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
9223 sections are symmetric. PARM is the type of a function parameter
9224 or the return type of the conversion function. ARG is the type of
9225 the argument passed to the call, or the type of the value
9226 initialized with the result of the conversion function. */
9227
9228 static int
9229 maybe_adjust_types_for_deduction (unification_kind_t strict,
9230 tree* parm,
9231 tree* arg)
9232 {
9233 int result = 0;
9234
9235 switch (strict)
9236 {
9237 case DEDUCE_CALL:
9238 break;
9239
9240 case DEDUCE_CONV:
9241 {
9242 /* Swap PARM and ARG throughout the remainder of this
9243 function; the handling is precisely symmetric since PARM
9244 will initialize ARG rather than vice versa. */
9245 tree* temp = parm;
9246 parm = arg;
9247 arg = temp;
9248 break;
9249 }
9250
9251 case DEDUCE_EXACT:
9252 /* There is nothing to do in this case. */
9253 return 0;
9254
9255 default:
9256 gcc_unreachable ();
9257 }
9258
9259 if (TREE_CODE (*parm) != REFERENCE_TYPE)
9260 {
9261 /* [temp.deduct.call]
9262
9263 If P is not a reference type:
9264
9265 --If A is an array type, the pointer type produced by the
9266 array-to-pointer standard conversion (_conv.array_) is
9267 used in place of A for type deduction; otherwise,
9268
9269 --If A is a function type, the pointer type produced by
9270 the function-to-pointer standard conversion
9271 (_conv.func_) is used in place of A for type deduction;
9272 otherwise,
9273
9274 --If A is a cv-qualified type, the top level
9275 cv-qualifiers of A's type are ignored for type
9276 deduction. */
9277 if (TREE_CODE (*arg) == ARRAY_TYPE)
9278 *arg = build_pointer_type (TREE_TYPE (*arg));
9279 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
9280 *arg = build_pointer_type (*arg);
9281 else
9282 *arg = TYPE_MAIN_VARIANT (*arg);
9283 }
9284
9285 /* [temp.deduct.call]
9286
9287 If P is a cv-qualified type, the top level cv-qualifiers
9288 of P's type are ignored for type deduction. If P is a
9289 reference type, the type referred to by P is used for
9290 type deduction. */
9291 *parm = TYPE_MAIN_VARIANT (*parm);
9292 if (TREE_CODE (*parm) == REFERENCE_TYPE)
9293 {
9294 *parm = TREE_TYPE (*parm);
9295 result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9296 }
9297
9298 /* DR 322. For conversion deduction, remove a reference type on parm
9299 too (which has been swapped into ARG). */
9300 if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
9301 *arg = TREE_TYPE (*arg);
9302
9303 return result;
9304 }
9305
9306 /* Most parms like fn_type_unification.
9307
9308 If SUBR is 1, we're being called recursively (to unify the
9309 arguments of a function or method parameter of a function
9310 template). */
9311
9312 static int
9313 type_unification_real (tree tparms,
9314 tree targs,
9315 tree xparms,
9316 tree xargs,
9317 int subr,
9318 unification_kind_t strict,
9319 int flags)
9320 {
9321 tree parm, arg;
9322 int i;
9323 int ntparms = TREE_VEC_LENGTH (tparms);
9324 int sub_strict;
9325 int saw_undeduced = 0;
9326 tree parms, args;
9327
9328 gcc_assert (TREE_CODE (tparms) == TREE_VEC);
9329 gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
9330 gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
9331 gcc_assert (ntparms > 0);
9332
9333 switch (strict)
9334 {
9335 case DEDUCE_CALL:
9336 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
9337 | UNIFY_ALLOW_DERIVED);
9338 break;
9339
9340 case DEDUCE_CONV:
9341 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
9342 break;
9343
9344 case DEDUCE_EXACT:
9345 sub_strict = UNIFY_ALLOW_NONE;
9346 break;
9347
9348 default:
9349 gcc_unreachable ();
9350 }
9351
9352 again:
9353 parms = xparms;
9354 args = xargs;
9355
9356 while (parms && parms != void_list_node
9357 && args && args != void_list_node)
9358 {
9359 parm = TREE_VALUE (parms);
9360 parms = TREE_CHAIN (parms);
9361 arg = TREE_VALUE (args);
9362 args = TREE_CHAIN (args);
9363
9364 if (arg == error_mark_node)
9365 return 1;
9366 if (arg == unknown_type_node)
9367 /* We can't deduce anything from this, but we might get all the
9368 template args from other function args. */
9369 continue;
9370
9371 /* Conversions will be performed on a function argument that
9372 corresponds with a function parameter that contains only
9373 non-deducible template parameters and explicitly specified
9374 template parameters. */
9375 if (!uses_template_parms (parm))
9376 {
9377 tree type;
9378
9379 if (!TYPE_P (arg))
9380 type = TREE_TYPE (arg);
9381 else
9382 type = arg;
9383
9384 if (same_type_p (parm, type))
9385 continue;
9386 if (strict != DEDUCE_EXACT
9387 && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
9388 flags))
9389 continue;
9390
9391 return 1;
9392 }
9393
9394 if (!TYPE_P (arg))
9395 {
9396 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
9397 if (type_unknown_p (arg))
9398 {
9399 /* [temp.deduct.type] A template-argument can be deduced from
9400 a pointer to function or pointer to member function
9401 argument if the set of overloaded functions does not
9402 contain function templates and at most one of a set of
9403 overloaded functions provides a unique match. */
9404
9405 if (resolve_overloaded_unification
9406 (tparms, targs, parm, arg, strict, sub_strict)
9407 != 0)
9408 return 1;
9409 continue;
9410 }
9411 arg = TREE_TYPE (arg);
9412 if (arg == error_mark_node)
9413 return 1;
9414 }
9415
9416 {
9417 int arg_strict = sub_strict;
9418
9419 if (!subr)
9420 arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9421
9422 if (unify (tparms, targs, parm, arg, arg_strict))
9423 return 1;
9424 }
9425 }
9426
9427 /* Fail if we've reached the end of the parm list, and more args
9428 are present, and the parm list isn't variadic. */
9429 if (args && args != void_list_node && parms == void_list_node)
9430 return 1;
9431 /* Fail if parms are left and they don't have default values. */
9432 if (parms && parms != void_list_node
9433 && TREE_PURPOSE (parms) == NULL_TREE)
9434 return 1;
9435
9436 if (!subr)
9437 for (i = 0; i < ntparms; i++)
9438 if (!TREE_VEC_ELT (targs, i))
9439 {
9440 tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
9441
9442 /* If this is an undeduced nontype parameter that depends on
9443 a type parameter, try another pass; its type may have been
9444 deduced from a later argument than the one from which
9445 this parameter can be deduced. */
9446 if (TREE_CODE (tparm) == PARM_DECL
9447 && uses_template_parms (TREE_TYPE (tparm))
9448 && !saw_undeduced++)
9449 goto again;
9450
9451 return 2;
9452 }
9453
9454 return 0;
9455 }
9456
9457 /* Subroutine of type_unification_real. Args are like the variables at the
9458 call site. ARG is an overloaded function (or template-id); we try
9459 deducing template args from each of the overloads, and if only one
9460 succeeds, we go with that. Modifies TARGS and returns 0 on success. */
9461
9462 static int
9463 resolve_overloaded_unification (tree tparms,
9464 tree targs,
9465 tree parm,
9466 tree arg,
9467 unification_kind_t strict,
9468 int sub_strict)
9469 {
9470 tree tempargs = copy_node (targs);
9471 int good = 0;
9472 bool addr_p;
9473
9474 if (TREE_CODE (arg) == ADDR_EXPR)
9475 {
9476 arg = TREE_OPERAND (arg, 0);
9477 addr_p = true;
9478 }
9479 else
9480 addr_p = false;
9481
9482 if (TREE_CODE (arg) == COMPONENT_REF)
9483 /* Handle `&x' where `x' is some static or non-static member
9484 function name. */
9485 arg = TREE_OPERAND (arg, 1);
9486
9487 if (TREE_CODE (arg) == OFFSET_REF)
9488 arg = TREE_OPERAND (arg, 1);
9489
9490 /* Strip baselink information. */
9491 if (BASELINK_P (arg))
9492 arg = BASELINK_FUNCTIONS (arg);
9493
9494 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
9495 {
9496 /* If we got some explicit template args, we need to plug them into
9497 the affected templates before we try to unify, in case the
9498 explicit args will completely resolve the templates in question. */
9499
9500 tree expl_subargs = TREE_OPERAND (arg, 1);
9501 arg = TREE_OPERAND (arg, 0);
9502
9503 for (; arg; arg = OVL_NEXT (arg))
9504 {
9505 tree fn = OVL_CURRENT (arg);
9506 tree subargs, elem;
9507
9508 if (TREE_CODE (fn) != TEMPLATE_DECL)
9509 continue;
9510
9511 subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
9512 expl_subargs, /*check_ret=*/false);
9513 if (subargs)
9514 {
9515 elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
9516 good += try_one_overload (tparms, targs, tempargs, parm,
9517 elem, strict, sub_strict, addr_p);
9518 }
9519 }
9520 }
9521 else
9522 {
9523 gcc_assert (TREE_CODE (arg) == OVERLOAD
9524 || TREE_CODE (arg) == FUNCTION_DECL);
9525
9526 for (; arg; arg = OVL_NEXT (arg))
9527 good += try_one_overload (tparms, targs, tempargs, parm,
9528 TREE_TYPE (OVL_CURRENT (arg)),
9529 strict, sub_strict, addr_p);
9530 }
9531
9532 /* [temp.deduct.type] A template-argument can be deduced from a pointer
9533 to function or pointer to member function argument if the set of
9534 overloaded functions does not contain function templates and at most
9535 one of a set of overloaded functions provides a unique match.
9536
9537 So if we found multiple possibilities, we return success but don't
9538 deduce anything. */
9539
9540 if (good == 1)
9541 {
9542 int i = TREE_VEC_LENGTH (targs);
9543 for (; i--; )
9544 if (TREE_VEC_ELT (tempargs, i))
9545 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
9546 }
9547 if (good)
9548 return 0;
9549
9550 return 1;
9551 }
9552
9553 /* Subroutine of resolve_overloaded_unification; does deduction for a single
9554 overload. Fills TARGS with any deduced arguments, or error_mark_node if
9555 different overloads deduce different arguments for a given parm.
9556 ADDR_P is true if the expression for which deduction is being
9557 performed was of the form "& fn" rather than simply "fn".
9558
9559 Returns 1 on success. */
9560
9561 static int
9562 try_one_overload (tree tparms,
9563 tree orig_targs,
9564 tree targs,
9565 tree parm,
9566 tree arg,
9567 unification_kind_t strict,
9568 int sub_strict,
9569 bool addr_p)
9570 {
9571 int nargs;
9572 tree tempargs;
9573 int i;
9574
9575 /* [temp.deduct.type] A template-argument can be deduced from a pointer
9576 to function or pointer to member function argument if the set of
9577 overloaded functions does not contain function templates and at most
9578 one of a set of overloaded functions provides a unique match.
9579
9580 So if this is a template, just return success. */
9581
9582 if (uses_template_parms (arg))
9583 return 1;
9584
9585 if (TREE_CODE (arg) == METHOD_TYPE)
9586 arg = build_ptrmemfunc_type (build_pointer_type (arg));
9587 else if (addr_p)
9588 arg = build_pointer_type (arg);
9589
9590 sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9591
9592 /* We don't copy orig_targs for this because if we have already deduced
9593 some template args from previous args, unify would complain when we
9594 try to deduce a template parameter for the same argument, even though
9595 there isn't really a conflict. */
9596 nargs = TREE_VEC_LENGTH (targs);
9597 tempargs = make_tree_vec (nargs);
9598
9599 if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
9600 return 0;
9601
9602 /* First make sure we didn't deduce anything that conflicts with
9603 explicitly specified args. */
9604 for (i = nargs; i--; )
9605 {
9606 tree elt = TREE_VEC_ELT (tempargs, i);
9607 tree oldelt = TREE_VEC_ELT (orig_targs, i);
9608
9609 if (!elt)
9610 /*NOP*/;
9611 else if (uses_template_parms (elt))
9612 /* Since we're unifying against ourselves, we will fill in
9613 template args used in the function parm list with our own
9614 template parms. Discard them. */
9615 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
9616 else if (oldelt && !template_args_equal (oldelt, elt))
9617 return 0;
9618 }
9619
9620 for (i = nargs; i--; )
9621 {
9622 tree elt = TREE_VEC_ELT (tempargs, i);
9623
9624 if (elt)
9625 TREE_VEC_ELT (targs, i) = elt;
9626 }
9627
9628 return 1;
9629 }
9630
9631 /* Verify that nondeduce template argument agrees with the type
9632 obtained from argument deduction. Return nonzero if the
9633 verification fails.
9634
9635 For example:
9636
9637 struct A { typedef int X; };
9638 template <class T, class U> struct C {};
9639 template <class T> struct C<T, typename T::X> {};
9640
9641 Then with the instantiation `C<A, int>', we can deduce that
9642 `T' is `A' but unify () does not check whether `typename T::X'
9643 is `int'. This function ensure that they agree.
9644
9645 TARGS, PARMS are the same as the arguments of unify.
9646 ARGS contains template arguments from all levels. */
9647
9648 static int
9649 verify_class_unification (tree targs, tree parms, tree args)
9650 {
9651 parms = tsubst (parms, add_outermost_template_args (args, targs),
9652 tf_none, NULL_TREE);
9653 if (parms == error_mark_node)
9654 return 1;
9655
9656 return !comp_template_args (parms, INNERMOST_TEMPLATE_ARGS (args));
9657 }
9658
9659 /* PARM is a template class (perhaps with unbound template
9660 parameters). ARG is a fully instantiated type. If ARG can be
9661 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
9662 TARGS are as for unify. */
9663
9664 static tree
9665 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
9666 {
9667 tree copy_of_targs;
9668
9669 if (!CLASSTYPE_TEMPLATE_INFO (arg)
9670 || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
9671 != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
9672 return NULL_TREE;
9673
9674 /* We need to make a new template argument vector for the call to
9675 unify. If we used TARGS, we'd clutter it up with the result of
9676 the attempted unification, even if this class didn't work out.
9677 We also don't want to commit ourselves to all the unifications
9678 we've already done, since unification is supposed to be done on
9679 an argument-by-argument basis. In other words, consider the
9680 following pathological case:
9681
9682 template <int I, int J, int K>
9683 struct S {};
9684
9685 template <int I, int J>
9686 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
9687
9688 template <int I, int J, int K>
9689 void f(S<I, J, K>, S<I, I, I>);
9690
9691 void g() {
9692 S<0, 0, 0> s0;
9693 S<0, 1, 2> s2;
9694
9695 f(s0, s2);
9696 }
9697
9698 Now, by the time we consider the unification involving `s2', we
9699 already know that we must have `f<0, 0, 0>'. But, even though
9700 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
9701 because there are two ways to unify base classes of S<0, 1, 2>
9702 with S<I, I, I>. If we kept the already deduced knowledge, we
9703 would reject the possibility I=1. */
9704 copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
9705
9706 /* If unification failed, we're done. */
9707 if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
9708 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
9709 return NULL_TREE;
9710
9711 return arg;
9712 }
9713
9714 /* Given a template type PARM and a class type ARG, find the unique
9715 base type in ARG that is an instance of PARM. We do not examine
9716 ARG itself; only its base-classes. If there is not exactly one
9717 appropriate base class, return NULL_TREE. PARM may be the type of
9718 a partial specialization, as well as a plain template type. Used
9719 by unify. */
9720
9721 static tree
9722 get_template_base (tree tparms, tree targs, tree parm, tree arg)
9723 {
9724 tree rval = NULL_TREE;
9725 tree binfo;
9726
9727 gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
9728
9729 binfo = TYPE_BINFO (complete_type (arg));
9730 if (!binfo)
9731 /* The type could not be completed. */
9732 return NULL_TREE;
9733
9734 /* Walk in inheritance graph order. The search order is not
9735 important, and this avoids multiple walks of virtual bases. */
9736 for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
9737 {
9738 tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
9739
9740 if (r)
9741 {
9742 /* If there is more than one satisfactory baseclass, then:
9743
9744 [temp.deduct.call]
9745
9746 If they yield more than one possible deduced A, the type
9747 deduction fails.
9748
9749 applies. */
9750 if (rval && !same_type_p (r, rval))
9751 return NULL_TREE;
9752
9753 rval = r;
9754 }
9755 }
9756
9757 return rval;
9758 }
9759
9760 /* Returns the level of DECL, which declares a template parameter. */
9761
9762 static int
9763 template_decl_level (tree decl)
9764 {
9765 switch (TREE_CODE (decl))
9766 {
9767 case TYPE_DECL:
9768 case TEMPLATE_DECL:
9769 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
9770
9771 case PARM_DECL:
9772 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
9773
9774 default:
9775 gcc_unreachable ();
9776 }
9777 return 0;
9778 }
9779
9780 /* Decide whether ARG can be unified with PARM, considering only the
9781 cv-qualifiers of each type, given STRICT as documented for unify.
9782 Returns nonzero iff the unification is OK on that basis. */
9783
9784 static int
9785 check_cv_quals_for_unify (int strict, tree arg, tree parm)
9786 {
9787 int arg_quals = cp_type_quals (arg);
9788 int parm_quals = cp_type_quals (parm);
9789
9790 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
9791 && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
9792 {
9793 /* Although a CVR qualifier is ignored when being applied to a
9794 substituted template parameter ([8.3.2]/1 for example), that
9795 does not apply during deduction [14.8.2.4]/1, (even though
9796 that is not explicitly mentioned, [14.8.2.4]/9 indicates
9797 this). Except when we're allowing additional CV qualifiers
9798 at the outer level [14.8.2.1]/3,1st bullet. */
9799 if ((TREE_CODE (arg) == REFERENCE_TYPE
9800 || TREE_CODE (arg) == FUNCTION_TYPE
9801 || TREE_CODE (arg) == METHOD_TYPE)
9802 && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
9803 return 0;
9804
9805 if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
9806 && (parm_quals & TYPE_QUAL_RESTRICT))
9807 return 0;
9808 }
9809
9810 if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
9811 && (arg_quals & parm_quals) != parm_quals)
9812 return 0;
9813
9814 if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
9815 && (parm_quals & arg_quals) != arg_quals)
9816 return 0;
9817
9818 return 1;
9819 }
9820
9821 /* Takes parameters as for type_unification. Returns 0 if the
9822 type deduction succeeds, 1 otherwise. The parameter STRICT is a
9823 bitwise or of the following flags:
9824
9825 UNIFY_ALLOW_NONE:
9826 Require an exact match between PARM and ARG.
9827 UNIFY_ALLOW_MORE_CV_QUAL:
9828 Allow the deduced ARG to be more cv-qualified (by qualification
9829 conversion) than ARG.
9830 UNIFY_ALLOW_LESS_CV_QUAL:
9831 Allow the deduced ARG to be less cv-qualified than ARG.
9832 UNIFY_ALLOW_DERIVED:
9833 Allow the deduced ARG to be a template base class of ARG,
9834 or a pointer to a template base class of the type pointed to by
9835 ARG.
9836 UNIFY_ALLOW_INTEGER:
9837 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
9838 case for more information.
9839 UNIFY_ALLOW_OUTER_LEVEL:
9840 This is the outermost level of a deduction. Used to determine validity
9841 of qualification conversions. A valid qualification conversion must
9842 have const qualified pointers leading up to the inner type which
9843 requires additional CV quals, except at the outer level, where const
9844 is not required [conv.qual]. It would be normal to set this flag in
9845 addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
9846 UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
9847 This is the outermost level of a deduction, and PARM can be more CV
9848 qualified at this point.
9849 UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
9850 This is the outermost level of a deduction, and PARM can be less CV
9851 qualified at this point. */
9852
9853 static int
9854 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
9855 {
9856 int idx;
9857 tree targ;
9858 tree tparm;
9859 int strict_in = strict;
9860
9861 /* I don't think this will do the right thing with respect to types.
9862 But the only case I've seen it in so far has been array bounds, where
9863 signedness is the only information lost, and I think that will be
9864 okay. */
9865 while (TREE_CODE (parm) == NOP_EXPR)
9866 parm = TREE_OPERAND (parm, 0);
9867
9868 if (arg == error_mark_node)
9869 return 1;
9870 if (arg == unknown_type_node)
9871 /* We can't deduce anything from this, but we might get all the
9872 template args from other function args. */
9873 return 0;
9874
9875 /* If PARM uses template parameters, then we can't bail out here,
9876 even if ARG == PARM, since we won't record unifications for the
9877 template parameters. We might need them if we're trying to
9878 figure out which of two things is more specialized. */
9879 if (arg == parm && !uses_template_parms (parm))
9880 return 0;
9881
9882 /* Immediately reject some pairs that won't unify because of
9883 cv-qualification mismatches. */
9884 if (TREE_CODE (arg) == TREE_CODE (parm)
9885 && TYPE_P (arg)
9886 /* It is the elements of the array which hold the cv quals of an array
9887 type, and the elements might be template type parms. We'll check
9888 when we recurse. */
9889 && TREE_CODE (arg) != ARRAY_TYPE
9890 /* We check the cv-qualifiers when unifying with template type
9891 parameters below. We want to allow ARG `const T' to unify with
9892 PARM `T' for example, when computing which of two templates
9893 is more specialized, for example. */
9894 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
9895 && !check_cv_quals_for_unify (strict_in, arg, parm))
9896 return 1;
9897
9898 if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
9899 && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
9900 strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
9901 strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
9902 strict &= ~UNIFY_ALLOW_DERIVED;
9903 strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9904 strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
9905
9906 switch (TREE_CODE (parm))
9907 {
9908 case TYPENAME_TYPE:
9909 case SCOPE_REF:
9910 case UNBOUND_CLASS_TEMPLATE:
9911 /* In a type which contains a nested-name-specifier, template
9912 argument values cannot be deduced for template parameters used
9913 within the nested-name-specifier. */
9914 return 0;
9915
9916 case TEMPLATE_TYPE_PARM:
9917 case TEMPLATE_TEMPLATE_PARM:
9918 case BOUND_TEMPLATE_TEMPLATE_PARM:
9919 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
9920
9921 if (TEMPLATE_TYPE_LEVEL (parm)
9922 != template_decl_level (tparm))
9923 /* The PARM is not one we're trying to unify. Just check
9924 to see if it matches ARG. */
9925 return (TREE_CODE (arg) == TREE_CODE (parm)
9926 && same_type_p (parm, arg)) ? 0 : 1;
9927 idx = TEMPLATE_TYPE_IDX (parm);
9928 targ = TREE_VEC_ELT (targs, idx);
9929 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
9930
9931 /* Check for mixed types and values. */
9932 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
9933 && TREE_CODE (tparm) != TYPE_DECL)
9934 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
9935 && TREE_CODE (tparm) != TEMPLATE_DECL))
9936 return 1;
9937
9938 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
9939 {
9940 /* ARG must be constructed from a template class or a template
9941 template parameter. */
9942 if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
9943 && (TREE_CODE (arg) != RECORD_TYPE || !CLASSTYPE_TEMPLATE_INFO (arg)))
9944 return 1;
9945
9946 {
9947 tree parmtmpl = TYPE_TI_TEMPLATE (parm);
9948 tree parmvec = TYPE_TI_ARGS (parm);
9949 tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
9950 tree argtmplvec
9951 = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
9952 int i;
9953
9954 /* The parameter and argument roles have to be switched here
9955 in order to handle default arguments properly. For example,
9956 template<template <class> class TT> void f(TT<int>)
9957 should be able to accept vector<int> which comes from
9958 template <class T, class Allocator = allocator>
9959 class vector. */
9960
9961 if (coerce_template_parms (argtmplvec, parmvec, parmtmpl, 0, 1)
9962 == error_mark_node)
9963 return 1;
9964
9965 /* Deduce arguments T, i from TT<T> or TT<i>.
9966 We check each element of PARMVEC and ARGVEC individually
9967 rather than the whole TREE_VEC since they can have
9968 different number of elements. */
9969
9970 for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
9971 {
9972 if (unify (tparms, targs,
9973 TREE_VEC_ELT (parmvec, i),
9974 TREE_VEC_ELT (argvec, i),
9975 UNIFY_ALLOW_NONE))
9976 return 1;
9977 }
9978 }
9979 arg = TYPE_TI_TEMPLATE (arg);
9980
9981 /* Fall through to deduce template name. */
9982 }
9983
9984 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
9985 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
9986 {
9987 /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>. */
9988
9989 /* Simple cases: Value already set, does match or doesn't. */
9990 if (targ != NULL_TREE && template_args_equal (targ, arg))
9991 return 0;
9992 else if (targ)
9993 return 1;
9994 }
9995 else
9996 {
9997 /* If PARM is `const T' and ARG is only `int', we don't have
9998 a match unless we are allowing additional qualification.
9999 If ARG is `const int' and PARM is just `T' that's OK;
10000 that binds `const int' to `T'. */
10001 if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
10002 arg, parm))
10003 return 1;
10004
10005 /* Consider the case where ARG is `const volatile int' and
10006 PARM is `const T'. Then, T should be `volatile int'. */
10007 arg = cp_build_qualified_type_real
10008 (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
10009 if (arg == error_mark_node)
10010 return 1;
10011
10012 /* Simple cases: Value already set, does match or doesn't. */
10013 if (targ != NULL_TREE && same_type_p (targ, arg))
10014 return 0;
10015 else if (targ)
10016 return 1;
10017
10018 /* Make sure that ARG is not a variable-sized array. (Note
10019 that were talking about variable-sized arrays (like
10020 `int[n]'), rather than arrays of unknown size (like
10021 `int[]').) We'll get very confused by such a type since
10022 the bound of the array will not be computable in an
10023 instantiation. Besides, such types are not allowed in
10024 ISO C++, so we can do as we please here. */
10025 if (variably_modified_type_p (arg, NULL_TREE))
10026 return 1;
10027 }
10028
10029 TREE_VEC_ELT (targs, idx) = arg;
10030 return 0;
10031
10032 case TEMPLATE_PARM_INDEX:
10033 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
10034
10035 if (TEMPLATE_PARM_LEVEL (parm)
10036 != template_decl_level (tparm))
10037 /* The PARM is not one we're trying to unify. Just check
10038 to see if it matches ARG. */
10039 return !(TREE_CODE (arg) == TREE_CODE (parm)
10040 && cp_tree_equal (parm, arg));
10041
10042 idx = TEMPLATE_PARM_IDX (parm);
10043 targ = TREE_VEC_ELT (targs, idx);
10044
10045 if (targ)
10046 return !cp_tree_equal (targ, arg);
10047
10048 /* [temp.deduct.type] If, in the declaration of a function template
10049 with a non-type template-parameter, the non-type
10050 template-parameter is used in an expression in the function
10051 parameter-list and, if the corresponding template-argument is
10052 deduced, the template-argument type shall match the type of the
10053 template-parameter exactly, except that a template-argument
10054 deduced from an array bound may be of any integral type.
10055 The non-type parameter might use already deduced type parameters. */
10056 tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
10057 if (!TREE_TYPE (arg))
10058 /* Template-parameter dependent expression. Just accept it for now.
10059 It will later be processed in convert_template_argument. */
10060 ;
10061 else if (same_type_p (TREE_TYPE (arg), tparm))
10062 /* OK */;
10063 else if ((strict & UNIFY_ALLOW_INTEGER)
10064 && (TREE_CODE (tparm) == INTEGER_TYPE
10065 || TREE_CODE (tparm) == BOOLEAN_TYPE))
10066 /* Convert the ARG to the type of PARM; the deduced non-type
10067 template argument must exactly match the types of the
10068 corresponding parameter. */
10069 arg = fold (build_nop (TREE_TYPE (parm), arg));
10070 else if (uses_template_parms (tparm))
10071 /* We haven't deduced the type of this parameter yet. Try again
10072 later. */
10073 return 0;
10074 else
10075 return 1;
10076
10077 TREE_VEC_ELT (targs, idx) = arg;
10078 return 0;
10079
10080 case PTRMEM_CST:
10081 {
10082 /* A pointer-to-member constant can be unified only with
10083 another constant. */
10084 if (TREE_CODE (arg) != PTRMEM_CST)
10085 return 1;
10086
10087 /* Just unify the class member. It would be useless (and possibly
10088 wrong, depending on the strict flags) to unify also
10089 PTRMEM_CST_CLASS, because we want to be sure that both parm and
10090 arg refer to the same variable, even if through different
10091 classes. For instance:
10092
10093 struct A { int x; };
10094 struct B : A { };
10095
10096 Unification of &A::x and &B::x must succeed. */
10097 return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
10098 PTRMEM_CST_MEMBER (arg), strict);
10099 }
10100
10101 case POINTER_TYPE:
10102 {
10103 if (TREE_CODE (arg) != POINTER_TYPE)
10104 return 1;
10105
10106 /* [temp.deduct.call]
10107
10108 A can be another pointer or pointer to member type that can
10109 be converted to the deduced A via a qualification
10110 conversion (_conv.qual_).
10111
10112 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
10113 This will allow for additional cv-qualification of the
10114 pointed-to types if appropriate. */
10115
10116 if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
10117 /* The derived-to-base conversion only persists through one
10118 level of pointers. */
10119 strict |= (strict_in & UNIFY_ALLOW_DERIVED);
10120
10121 return unify (tparms, targs, TREE_TYPE (parm),
10122 TREE_TYPE (arg), strict);
10123 }
10124
10125 case REFERENCE_TYPE:
10126 if (TREE_CODE (arg) != REFERENCE_TYPE)
10127 return 1;
10128 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10129 strict & UNIFY_ALLOW_MORE_CV_QUAL);
10130
10131 case ARRAY_TYPE:
10132 if (TREE_CODE (arg) != ARRAY_TYPE)
10133 return 1;
10134 if ((TYPE_DOMAIN (parm) == NULL_TREE)
10135 != (TYPE_DOMAIN (arg) == NULL_TREE))
10136 return 1;
10137 if (TYPE_DOMAIN (parm) != NULL_TREE)
10138 {
10139 tree parm_max;
10140 tree arg_max;
10141
10142 parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
10143 arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
10144
10145 /* Our representation of array types uses "N - 1" as the
10146 TYPE_MAX_VALUE for an array with "N" elements, if "N" is
10147 not an integer constant. */
10148 if (TREE_CODE (parm_max) == MINUS_EXPR)
10149 {
10150 arg_max = fold_build2 (PLUS_EXPR,
10151 integer_type_node,
10152 arg_max,
10153 TREE_OPERAND (parm_max, 1));
10154 parm_max = TREE_OPERAND (parm_max, 0);
10155 }
10156
10157 if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
10158 return 1;
10159 }
10160 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10161 strict & UNIFY_ALLOW_MORE_CV_QUAL);
10162
10163 case REAL_TYPE:
10164 case COMPLEX_TYPE:
10165 case VECTOR_TYPE:
10166 case INTEGER_TYPE:
10167 case BOOLEAN_TYPE:
10168 case ENUMERAL_TYPE:
10169 case VOID_TYPE:
10170 if (TREE_CODE (arg) != TREE_CODE (parm))
10171 return 1;
10172
10173 /* We have already checked cv-qualification at the top of the
10174 function. */
10175 if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
10176 return 1;
10177
10178 /* As far as unification is concerned, this wins. Later checks
10179 will invalidate it if necessary. */
10180 return 0;
10181
10182 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
10183 /* Type INTEGER_CST can come from ordinary constant template args. */
10184 case INTEGER_CST:
10185 while (TREE_CODE (arg) == NOP_EXPR)
10186 arg = TREE_OPERAND (arg, 0);
10187
10188 if (TREE_CODE (arg) != INTEGER_CST)
10189 return 1;
10190 return !tree_int_cst_equal (parm, arg);
10191
10192 case TREE_VEC:
10193 {
10194 int i;
10195 if (TREE_CODE (arg) != TREE_VEC)
10196 return 1;
10197 if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
10198 return 1;
10199 for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
10200 if (unify (tparms, targs,
10201 TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
10202 UNIFY_ALLOW_NONE))
10203 return 1;
10204 return 0;
10205 }
10206
10207 case RECORD_TYPE:
10208 case UNION_TYPE:
10209 if (TREE_CODE (arg) != TREE_CODE (parm))
10210 return 1;
10211
10212 if (TYPE_PTRMEMFUNC_P (parm))
10213 {
10214 if (!TYPE_PTRMEMFUNC_P (arg))
10215 return 1;
10216
10217 return unify (tparms, targs,
10218 TYPE_PTRMEMFUNC_FN_TYPE (parm),
10219 TYPE_PTRMEMFUNC_FN_TYPE (arg),
10220 strict);
10221 }
10222
10223 if (CLASSTYPE_TEMPLATE_INFO (parm))
10224 {
10225 tree t = NULL_TREE;
10226
10227 if (strict_in & UNIFY_ALLOW_DERIVED)
10228 {
10229 /* First, we try to unify the PARM and ARG directly. */
10230 t = try_class_unification (tparms, targs,
10231 parm, arg);
10232
10233 if (!t)
10234 {
10235 /* Fallback to the special case allowed in
10236 [temp.deduct.call]:
10237
10238 If P is a class, and P has the form
10239 template-id, then A can be a derived class of
10240 the deduced A. Likewise, if P is a pointer to
10241 a class of the form template-id, A can be a
10242 pointer to a derived class pointed to by the
10243 deduced A. */
10244 t = get_template_base (tparms, targs, parm, arg);
10245
10246 if (!t)
10247 return 1;
10248 }
10249 }
10250 else if (CLASSTYPE_TEMPLATE_INFO (arg)
10251 && (CLASSTYPE_TI_TEMPLATE (parm)
10252 == CLASSTYPE_TI_TEMPLATE (arg)))
10253 /* Perhaps PARM is something like S<U> and ARG is S<int>.
10254 Then, we should unify `int' and `U'. */
10255 t = arg;
10256 else
10257 /* There's no chance of unification succeeding. */
10258 return 1;
10259
10260 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
10261 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
10262 }
10263 else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
10264 return 1;
10265 return 0;
10266
10267 case METHOD_TYPE:
10268 case FUNCTION_TYPE:
10269 if (TREE_CODE (arg) != TREE_CODE (parm))
10270 return 1;
10271
10272 /* CV qualifications for methods can never be deduced, they must
10273 match exactly. We need to check them explicitly here,
10274 because type_unification_real treats them as any other
10275 cvqualified parameter. */
10276 if (TREE_CODE (parm) == METHOD_TYPE
10277 && (!check_cv_quals_for_unify
10278 (UNIFY_ALLOW_NONE,
10279 TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
10280 TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
10281 return 1;
10282
10283 if (unify (tparms, targs, TREE_TYPE (parm),
10284 TREE_TYPE (arg), UNIFY_ALLOW_NONE))
10285 return 1;
10286 return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
10287 TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
10288 LOOKUP_NORMAL);
10289
10290 case OFFSET_TYPE:
10291 /* Unify a pointer to member with a pointer to member function, which
10292 deduces the type of the member as a function type. */
10293 if (TYPE_PTRMEMFUNC_P (arg))
10294 {
10295 tree method_type;
10296 tree fntype;
10297 cp_cv_quals cv_quals;
10298
10299 /* Check top-level cv qualifiers */
10300 if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
10301 return 1;
10302
10303 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
10304 TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
10305 return 1;
10306
10307 /* Determine the type of the function we are unifying against. */
10308 method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
10309 fntype =
10310 build_function_type (TREE_TYPE (method_type),
10311 TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
10312
10313 /* Extract the cv-qualifiers of the member function from the
10314 implicit object parameter and place them on the function
10315 type to be restored later. */
10316 cv_quals =
10317 cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
10318 fntype = build_qualified_type (fntype, cv_quals);
10319 return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
10320 }
10321
10322 if (TREE_CODE (arg) != OFFSET_TYPE)
10323 return 1;
10324 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
10325 TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
10326 return 1;
10327 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10328 strict);
10329
10330 case CONST_DECL:
10331 if (DECL_TEMPLATE_PARM_P (parm))
10332 return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
10333 if (arg != integral_constant_value (parm))
10334 return 1;
10335 return 0;
10336
10337 case FIELD_DECL:
10338 case TEMPLATE_DECL:
10339 /* Matched cases are handled by the ARG == PARM test above. */
10340 return 1;
10341
10342 default:
10343 gcc_assert (EXPR_P (parm));
10344
10345 /* We must be looking at an expression. This can happen with
10346 something like:
10347
10348 template <int I>
10349 void foo(S<I>, S<I + 2>);
10350
10351 This is a "nondeduced context":
10352
10353 [deduct.type]
10354
10355 The nondeduced contexts are:
10356
10357 --A type that is a template-id in which one or more of
10358 the template-arguments is an expression that references
10359 a template-parameter.
10360
10361 In these cases, we assume deduction succeeded, but don't
10362 actually infer any unifications. */
10363
10364 if (!uses_template_parms (parm)
10365 && !template_args_equal (parm, arg))
10366 return 1;
10367 else
10368 return 0;
10369 }
10370 }
10371 \f
10372 /* Note that DECL can be defined in this translation unit, if
10373 required. */
10374
10375 static void
10376 mark_definable (tree decl)
10377 {
10378 tree clone;
10379 DECL_NOT_REALLY_EXTERN (decl) = 1;
10380 FOR_EACH_CLONE (clone, decl)
10381 DECL_NOT_REALLY_EXTERN (clone) = 1;
10382 }
10383
10384 /* Called if RESULT is explicitly instantiated, or is a member of an
10385 explicitly instantiated class. */
10386
10387 void
10388 mark_decl_instantiated (tree result, int extern_p)
10389 {
10390 SET_DECL_EXPLICIT_INSTANTIATION (result);
10391
10392 /* If this entity has already been written out, it's too late to
10393 make any modifications. */
10394 if (TREE_ASM_WRITTEN (result))
10395 return;
10396
10397 if (TREE_CODE (result) != FUNCTION_DECL)
10398 /* The TREE_PUBLIC flag for function declarations will have been
10399 set correctly by tsubst. */
10400 TREE_PUBLIC (result) = 1;
10401
10402 /* This might have been set by an earlier implicit instantiation. */
10403 DECL_COMDAT (result) = 0;
10404
10405 if (extern_p)
10406 DECL_NOT_REALLY_EXTERN (result) = 0;
10407 else
10408 {
10409 mark_definable (result);
10410 /* Always make artificials weak. */
10411 if (DECL_ARTIFICIAL (result) && flag_weak)
10412 comdat_linkage (result);
10413 /* For WIN32 we also want to put explicit instantiations in
10414 linkonce sections. */
10415 else if (TREE_PUBLIC (result))
10416 maybe_make_one_only (result);
10417 }
10418
10419 /* If EXTERN_P, then this function will not be emitted -- unless
10420 followed by an explicit instantiation, at which point its linkage
10421 will be adjusted. If !EXTERN_P, then this function will be
10422 emitted here. In neither circumstance do we want
10423 import_export_decl to adjust the linkage. */
10424 DECL_INTERFACE_KNOWN (result) = 1;
10425 }
10426
10427 /* Given two function templates PAT1 and PAT2, return:
10428
10429 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
10430 -1 if PAT2 is more specialized than PAT1.
10431 0 if neither is more specialized.
10432
10433 LEN indicates the number of parameters we should consider
10434 (defaulted parameters should not be considered).
10435
10436 The 1998 std underspecified function template partial ordering, and
10437 DR214 addresses the issue. We take pairs of arguments, one from
10438 each of the templates, and deduce them against each other. One of
10439 the templates will be more specialized if all the *other*
10440 template's arguments deduce against its arguments and at least one
10441 of its arguments *does* *not* deduce against the other template's
10442 corresponding argument. Deduction is done as for class templates.
10443 The arguments used in deduction have reference and top level cv
10444 qualifiers removed. Iff both arguments were originally reference
10445 types *and* deduction succeeds in both directions, the template
10446 with the more cv-qualified argument wins for that pairing (if
10447 neither is more cv-qualified, they both are equal). Unlike regular
10448 deduction, after all the arguments have been deduced in this way,
10449 we do *not* verify the deduced template argument values can be
10450 substituted into non-deduced contexts, nor do we have to verify
10451 that all template arguments have been deduced. */
10452
10453 int
10454 more_specialized_fn (tree pat1, tree pat2, int len)
10455 {
10456 tree decl1 = DECL_TEMPLATE_RESULT (pat1);
10457 tree decl2 = DECL_TEMPLATE_RESULT (pat2);
10458 tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
10459 tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
10460 tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
10461 tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
10462 tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
10463 tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
10464 int better1 = 0;
10465 int better2 = 0;
10466
10467 /* If only one is a member function, they are unordered. */
10468 if (DECL_FUNCTION_MEMBER_P (decl1) != DECL_FUNCTION_MEMBER_P (decl2))
10469 return 0;
10470
10471 /* Don't consider 'this' parameter. */
10472 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
10473 args1 = TREE_CHAIN (args1);
10474 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
10475 args2 = TREE_CHAIN (args2);
10476
10477 /* If only one is a conversion operator, they are unordered. */
10478 if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
10479 return 0;
10480
10481 /* Consider the return type for a conversion function */
10482 if (DECL_CONV_FN_P (decl1))
10483 {
10484 args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
10485 args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
10486 len++;
10487 }
10488
10489 processing_template_decl++;
10490
10491 while (len--)
10492 {
10493 tree arg1 = TREE_VALUE (args1);
10494 tree arg2 = TREE_VALUE (args2);
10495 int deduce1, deduce2;
10496 int quals1 = -1;
10497 int quals2 = -1;
10498
10499 if (TREE_CODE (arg1) == REFERENCE_TYPE)
10500 {
10501 arg1 = TREE_TYPE (arg1);
10502 quals1 = cp_type_quals (arg1);
10503 }
10504
10505 if (TREE_CODE (arg2) == REFERENCE_TYPE)
10506 {
10507 arg2 = TREE_TYPE (arg2);
10508 quals2 = cp_type_quals (arg2);
10509 }
10510
10511 if ((quals1 < 0) != (quals2 < 0))
10512 {
10513 /* Only of the args is a reference, see if we should apply
10514 array/function pointer decay to it. This is not part of
10515 DR214, but is, IMHO, consistent with the deduction rules
10516 for the function call itself, and with our earlier
10517 implementation of the underspecified partial ordering
10518 rules. (nathan). */
10519 if (quals1 >= 0)
10520 {
10521 switch (TREE_CODE (arg1))
10522 {
10523 case ARRAY_TYPE:
10524 arg1 = TREE_TYPE (arg1);
10525 /* FALLTHROUGH. */
10526 case FUNCTION_TYPE:
10527 arg1 = build_pointer_type (arg1);
10528 break;
10529
10530 default:
10531 break;
10532 }
10533 }
10534 else
10535 {
10536 switch (TREE_CODE (arg2))
10537 {
10538 case ARRAY_TYPE:
10539 arg2 = TREE_TYPE (arg2);
10540 /* FALLTHROUGH. */
10541 case FUNCTION_TYPE:
10542 arg2 = build_pointer_type (arg2);
10543 break;
10544
10545 default:
10546 break;
10547 }
10548 }
10549 }
10550
10551 arg1 = TYPE_MAIN_VARIANT (arg1);
10552 arg2 = TYPE_MAIN_VARIANT (arg2);
10553
10554 deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
10555 deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
10556
10557 if (!deduce1)
10558 better2 = -1;
10559 if (!deduce2)
10560 better1 = -1;
10561 if (better1 < 0 && better2 < 0)
10562 /* We've failed to deduce something in either direction.
10563 These must be unordered. */
10564 break;
10565
10566 if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
10567 {
10568 /* Deduces in both directions, see if quals can
10569 disambiguate. Pretend the worse one failed to deduce. */
10570 if ((quals1 & quals2) == quals2)
10571 deduce1 = 0;
10572 if ((quals1 & quals2) == quals1)
10573 deduce2 = 0;
10574 }
10575 if (deduce1 && !deduce2 && !better2)
10576 better2 = 1;
10577 if (deduce2 && !deduce1 && !better1)
10578 better1 = 1;
10579
10580 args1 = TREE_CHAIN (args1);
10581 args2 = TREE_CHAIN (args2);
10582 }
10583
10584 processing_template_decl--;
10585
10586 return (better1 > 0) - (better2 > 0);
10587 }
10588
10589 /* Given two class template specialization list nodes PAT1 and PAT2, return:
10590
10591 1 if PAT1 is more specialized than PAT2 as described in [temp.class.order].
10592 -1 if PAT2 is more specialized than PAT1.
10593 0 if neither is more specialized.
10594
10595 FULL_ARGS is the full set of template arguments that triggers this
10596 partial ordering. */
10597
10598 int
10599 more_specialized_class (tree pat1, tree pat2, tree full_args)
10600 {
10601 tree targs;
10602 int winner = 0;
10603
10604 /* Just like what happens for functions, if we are ordering between
10605 different class template specializations, we may encounter dependent
10606 types in the arguments, and we need our dependency check functions
10607 to behave correctly. */
10608 ++processing_template_decl;
10609 targs = get_class_bindings (TREE_VALUE (pat1), TREE_PURPOSE (pat1),
10610 add_outermost_template_args (full_args, TREE_PURPOSE (pat2)));
10611 if (targs)
10612 --winner;
10613
10614 targs = get_class_bindings (TREE_VALUE (pat2), TREE_PURPOSE (pat2),
10615 add_outermost_template_args (full_args, TREE_PURPOSE (pat1)));
10616 if (targs)
10617 ++winner;
10618 --processing_template_decl;
10619
10620 return winner;
10621 }
10622
10623 /* Return the template arguments that will produce the function signature
10624 DECL from the function template FN, with the explicit template
10625 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is true, the return type must
10626 also match. Return NULL_TREE if no satisfactory arguments could be
10627 found. */
10628
10629 static tree
10630 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
10631 {
10632 int ntparms = DECL_NTPARMS (fn);
10633 tree targs = make_tree_vec (ntparms);
10634 tree decl_type;
10635 tree decl_arg_types;
10636
10637 /* Substitute the explicit template arguments into the type of DECL.
10638 The call to fn_type_unification will handle substitution into the
10639 FN. */
10640 decl_type = TREE_TYPE (decl);
10641 if (explicit_args && uses_template_parms (decl_type))
10642 {
10643 tree tmpl;
10644 tree converted_args;
10645
10646 if (DECL_TEMPLATE_INFO (decl))
10647 tmpl = DECL_TI_TEMPLATE (decl);
10648 else
10649 /* We can get here for some invalid specializations. */
10650 return NULL_TREE;
10651
10652 converted_args
10653 = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
10654 explicit_args, NULL_TREE,
10655 tf_none, /*require_all_arguments=*/0));
10656 if (converted_args == error_mark_node)
10657 return NULL_TREE;
10658
10659 decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
10660 if (decl_type == error_mark_node)
10661 return NULL_TREE;
10662 }
10663
10664 decl_arg_types = TYPE_ARG_TYPES (decl_type);
10665 /* Never do unification on the 'this' parameter. */
10666 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10667 decl_arg_types = TREE_CHAIN (decl_arg_types);
10668
10669 if (fn_type_unification (fn, explicit_args, targs,
10670 decl_arg_types,
10671 (check_rettype || DECL_CONV_FN_P (fn)
10672 ? TREE_TYPE (decl_type) : NULL_TREE),
10673 DEDUCE_EXACT, LOOKUP_NORMAL))
10674 return NULL_TREE;
10675
10676 return targs;
10677 }
10678
10679 /* Return the innermost template arguments that, when applied to a
10680 template specialization whose innermost template parameters are
10681 TPARMS, and whose specialization arguments are PARMS, yield the
10682 ARGS.
10683
10684 For example, suppose we have:
10685
10686 template <class T, class U> struct S {};
10687 template <class T> struct S<T*, int> {};
10688
10689 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
10690 {T}, the PARMS will be {T*, int} and the ARGS will be {double*,
10691 int}. The resulting vector will be {double}, indicating that `T'
10692 is bound to `double'. */
10693
10694 static tree
10695 get_class_bindings (tree tparms, tree parms, tree args)
10696 {
10697 int i, ntparms = TREE_VEC_LENGTH (tparms);
10698 tree vec = make_tree_vec (ntparms);
10699
10700 if (unify (tparms, vec, parms, INNERMOST_TEMPLATE_ARGS (args),
10701 UNIFY_ALLOW_NONE))
10702 return NULL_TREE;
10703
10704 for (i = 0; i < ntparms; ++i)
10705 if (! TREE_VEC_ELT (vec, i))
10706 return NULL_TREE;
10707
10708 if (verify_class_unification (vec, parms, args))
10709 return NULL_TREE;
10710
10711 return vec;
10712 }
10713
10714 /* In INSTANTIATIONS is a list of <INSTANTIATION, TEMPLATE> pairs.
10715 Pick the most specialized template, and return the corresponding
10716 instantiation, or if there is no corresponding instantiation, the
10717 template itself. If there is no most specialized template,
10718 error_mark_node is returned. If there are no templates at all,
10719 NULL_TREE is returned. */
10720
10721 tree
10722 most_specialized_instantiation (tree instantiations)
10723 {
10724 tree fn, champ;
10725
10726 if (!instantiations)
10727 return NULL_TREE;
10728
10729 ++processing_template_decl;
10730
10731 champ = instantiations;
10732 for (fn = TREE_CHAIN (instantiations); fn; fn = TREE_CHAIN (fn))
10733 {
10734 int fate = 0;
10735
10736 if (get_bindings (TREE_VALUE (champ),
10737 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
10738 NULL_TREE, /*check_ret=*/false))
10739 fate--;
10740
10741 if (get_bindings (TREE_VALUE (fn),
10742 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
10743 NULL_TREE, /*check_ret=*/false))
10744 fate++;
10745
10746 if (fate != 1)
10747 {
10748 if (!fate)
10749 /* Equally specialized, move to next function. If there
10750 is no next function, nothing's most specialized. */
10751 fn = TREE_CHAIN (fn);
10752 champ = fn;
10753 }
10754 }
10755
10756 if (champ)
10757 /* Now verify that champ is better than everything earlier in the
10758 instantiation list. */
10759 for (fn = instantiations; fn != champ; fn = TREE_CHAIN (fn))
10760 if (get_bindings (TREE_VALUE (champ),
10761 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
10762 NULL_TREE, /*check_ret=*/false)
10763 || !get_bindings (TREE_VALUE (fn),
10764 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
10765 NULL_TREE, /*check_ret=*/false))
10766 {
10767 champ = NULL_TREE;
10768 break;
10769 }
10770
10771 processing_template_decl--;
10772
10773 if (!champ)
10774 return error_mark_node;
10775
10776 return TREE_PURPOSE (champ) ? TREE_PURPOSE (champ) : TREE_VALUE (champ);
10777 }
10778
10779 /* Return the most specialized of the list of templates in FNS that can
10780 produce an instantiation matching DECL, given the explicit template
10781 arguments EXPLICIT_ARGS. */
10782
10783 static tree
10784 most_specialized (tree fns, tree decl, tree explicit_args)
10785 {
10786 tree candidates = NULL_TREE;
10787 tree fn, args;
10788
10789 for (fn = fns; fn; fn = TREE_CHAIN (fn))
10790 {
10791 tree candidate = TREE_VALUE (fn);
10792
10793 args = get_bindings (candidate, decl, explicit_args, /*check_ret=*/true);
10794 if (args)
10795 candidates = tree_cons (NULL_TREE, candidate, candidates);
10796 }
10797
10798 return most_specialized_instantiation (candidates);
10799 }
10800
10801 /* If DECL is a specialization of some template, return the most
10802 general such template. Otherwise, returns NULL_TREE.
10803
10804 For example, given:
10805
10806 template <class T> struct S { template <class U> void f(U); };
10807
10808 if TMPL is `template <class U> void S<int>::f(U)' this will return
10809 the full template. This function will not trace past partial
10810 specializations, however. For example, given in addition:
10811
10812 template <class T> struct S<T*> { template <class U> void f(U); };
10813
10814 if TMPL is `template <class U> void S<int*>::f(U)' this will return
10815 `template <class T> template <class U> S<T*>::f(U)'. */
10816
10817 tree
10818 most_general_template (tree decl)
10819 {
10820 /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
10821 an immediate specialization. */
10822 if (TREE_CODE (decl) == FUNCTION_DECL)
10823 {
10824 if (DECL_TEMPLATE_INFO (decl)) {
10825 decl = DECL_TI_TEMPLATE (decl);
10826
10827 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
10828 template friend. */
10829 if (TREE_CODE (decl) != TEMPLATE_DECL)
10830 return NULL_TREE;
10831 } else
10832 return NULL_TREE;
10833 }
10834
10835 /* Look for more and more general templates. */
10836 while (DECL_TEMPLATE_INFO (decl))
10837 {
10838 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
10839 (See cp-tree.h for details.) */
10840 if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
10841 break;
10842
10843 if (CLASS_TYPE_P (TREE_TYPE (decl))
10844 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
10845 break;
10846
10847 /* Stop if we run into an explicitly specialized class template. */
10848 if (!DECL_NAMESPACE_SCOPE_P (decl)
10849 && DECL_CONTEXT (decl)
10850 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
10851 break;
10852
10853 decl = DECL_TI_TEMPLATE (decl);
10854 }
10855
10856 return decl;
10857 }
10858
10859 /* Return the most specialized of the class template specializations
10860 of TMPL which can produce an instantiation matching ARGS, or
10861 error_mark_node if the choice is ambiguous. */
10862
10863 static tree
10864 most_specialized_class (tree tmpl, tree args)
10865 {
10866 tree list = NULL_TREE;
10867 tree t;
10868 tree champ;
10869 int fate;
10870
10871 tmpl = most_general_template (tmpl);
10872 for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
10873 {
10874 tree spec_args
10875 = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args);
10876 if (spec_args)
10877 {
10878 list = tree_cons (TREE_PURPOSE (t), TREE_VALUE (t), list);
10879 TREE_TYPE (list) = TREE_TYPE (t);
10880 }
10881 }
10882
10883 if (! list)
10884 return NULL_TREE;
10885
10886 t = list;
10887 champ = t;
10888 t = TREE_CHAIN (t);
10889 for (; t; t = TREE_CHAIN (t))
10890 {
10891 fate = more_specialized_class (champ, t, args);
10892 if (fate == 1)
10893 ;
10894 else
10895 {
10896 if (fate == 0)
10897 {
10898 t = TREE_CHAIN (t);
10899 if (! t)
10900 return error_mark_node;
10901 }
10902 champ = t;
10903 }
10904 }
10905
10906 for (t = list; t && t != champ; t = TREE_CHAIN (t))
10907 {
10908 fate = more_specialized_class (champ, t, args);
10909 if (fate != 1)
10910 return error_mark_node;
10911 }
10912
10913 return champ;
10914 }
10915
10916 /* Explicitly instantiate DECL. */
10917
10918 void
10919 do_decl_instantiation (tree decl, tree storage)
10920 {
10921 tree result = NULL_TREE;
10922 int extern_p = 0;
10923
10924 if (!decl)
10925 /* An error occurred, for which grokdeclarator has already issued
10926 an appropriate message. */
10927 return;
10928 else if (! DECL_LANG_SPECIFIC (decl))
10929 {
10930 error ("explicit instantiation of non-template %q#D", decl);
10931 return;
10932 }
10933 else if (TREE_CODE (decl) == VAR_DECL)
10934 {
10935 /* There is an asymmetry here in the way VAR_DECLs and
10936 FUNCTION_DECLs are handled by grokdeclarator. In the case of
10937 the latter, the DECL we get back will be marked as a
10938 template instantiation, and the appropriate
10939 DECL_TEMPLATE_INFO will be set up. This does not happen for
10940 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
10941 should handle VAR_DECLs as it currently handles
10942 FUNCTION_DECLs. */
10943 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
10944 if (!result || TREE_CODE (result) != VAR_DECL)
10945 {
10946 error ("no matching template for %qD found", decl);
10947 return;
10948 }
10949 }
10950 else if (TREE_CODE (decl) != FUNCTION_DECL)
10951 {
10952 error ("explicit instantiation of %q#D", decl);
10953 return;
10954 }
10955 else
10956 result = decl;
10957
10958 /* Check for various error cases. Note that if the explicit
10959 instantiation is valid the RESULT will currently be marked as an
10960 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
10961 until we get here. */
10962
10963 if (DECL_TEMPLATE_SPECIALIZATION (result))
10964 {
10965 /* DR 259 [temp.spec].
10966
10967 Both an explicit instantiation and a declaration of an explicit
10968 specialization shall not appear in a program unless the explicit
10969 instantiation follows a declaration of the explicit specialization.
10970
10971 For a given set of template parameters, if an explicit
10972 instantiation of a template appears after a declaration of an
10973 explicit specialization for that template, the explicit
10974 instantiation has no effect. */
10975 return;
10976 }
10977 else if (DECL_EXPLICIT_INSTANTIATION (result))
10978 {
10979 /* [temp.spec]
10980
10981 No program shall explicitly instantiate any template more
10982 than once.
10983
10984 We check DECL_NOT_REALLY_EXTERN so as not to complain when
10985 the first instantiation was `extern' and the second is not,
10986 and EXTERN_P for the opposite case. */
10987 if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
10988 pedwarn ("duplicate explicit instantiation of %q#D", result);
10989 /* If an "extern" explicit instantiation follows an ordinary
10990 explicit instantiation, the template is instantiated. */
10991 if (extern_p)
10992 return;
10993 }
10994 else if (!DECL_IMPLICIT_INSTANTIATION (result))
10995 {
10996 error ("no matching template for %qD found", result);
10997 return;
10998 }
10999 else if (!DECL_TEMPLATE_INFO (result))
11000 {
11001 pedwarn ("explicit instantiation of non-template %q#D", result);
11002 return;
11003 }
11004
11005 if (storage == NULL_TREE)
11006 ;
11007 else if (storage == ridpointers[(int) RID_EXTERN])
11008 {
11009 if (pedantic && !in_system_header)
11010 pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
11011 "instantiations");
11012 extern_p = 1;
11013 }
11014 else
11015 error ("storage class %qD applied to template instantiation", storage);
11016
11017 mark_decl_instantiated (result, extern_p);
11018 if (! extern_p)
11019 instantiate_decl (result, /*defer_ok=*/1,
11020 /*expl_inst_class_mem_p=*/false);
11021 }
11022
11023 void
11024 mark_class_instantiated (tree t, int extern_p)
11025 {
11026 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
11027 SET_CLASSTYPE_INTERFACE_KNOWN (t);
11028 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
11029 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
11030 if (! extern_p)
11031 {
11032 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
11033 rest_of_type_compilation (t, 1);
11034 }
11035 }
11036
11037 /* Called from do_type_instantiation through binding_table_foreach to
11038 do recursive instantiation for the type bound in ENTRY. */
11039 static void
11040 bt_instantiate_type_proc (binding_entry entry, void *data)
11041 {
11042 tree storage = *(tree *) data;
11043
11044 if (IS_AGGR_TYPE (entry->type)
11045 && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
11046 do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
11047 }
11048
11049 /* Called from do_type_instantiation to instantiate a member
11050 (a member function or a static member variable) of an
11051 explicitly instantiated class template. */
11052 static void
11053 instantiate_class_member (tree decl, int extern_p)
11054 {
11055 mark_decl_instantiated (decl, extern_p);
11056 if (! extern_p)
11057 instantiate_decl (decl, /*defer_ok=*/1,
11058 /*expl_inst_class_mem_p=*/true);
11059 }
11060
11061 /* Perform an explicit instantiation of template class T. STORAGE, if
11062 non-null, is the RID for extern, inline or static. COMPLAIN is
11063 nonzero if this is called from the parser, zero if called recursively,
11064 since the standard is unclear (as detailed below). */
11065
11066 void
11067 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
11068 {
11069 int extern_p = 0;
11070 int nomem_p = 0;
11071 int static_p = 0;
11072 int previous_instantiation_extern_p = 0;
11073
11074 if (TREE_CODE (t) == TYPE_DECL)
11075 t = TREE_TYPE (t);
11076
11077 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
11078 {
11079 error ("explicit instantiation of non-template type %qT", t);
11080 return;
11081 }
11082
11083 complete_type (t);
11084
11085 if (!COMPLETE_TYPE_P (t))
11086 {
11087 if (complain & tf_error)
11088 error ("explicit instantiation of %q#T before definition of template",
11089 t);
11090 return;
11091 }
11092
11093 if (storage != NULL_TREE)
11094 {
11095 if (pedantic && !in_system_header)
11096 pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
11097 storage);
11098
11099 if (storage == ridpointers[(int) RID_INLINE])
11100 nomem_p = 1;
11101 else if (storage == ridpointers[(int) RID_EXTERN])
11102 extern_p = 1;
11103 else if (storage == ridpointers[(int) RID_STATIC])
11104 static_p = 1;
11105 else
11106 {
11107 error ("storage class %qD applied to template instantiation",
11108 storage);
11109 extern_p = 0;
11110 }
11111 }
11112
11113 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
11114 {
11115 /* DR 259 [temp.spec].
11116
11117 Both an explicit instantiation and a declaration of an explicit
11118 specialization shall not appear in a program unless the explicit
11119 instantiation follows a declaration of the explicit specialization.
11120
11121 For a given set of template parameters, if an explicit
11122 instantiation of a template appears after a declaration of an
11123 explicit specialization for that template, the explicit
11124 instantiation has no effect. */
11125 return;
11126 }
11127 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
11128 {
11129 /* [temp.spec]
11130
11131 No program shall explicitly instantiate any template more
11132 than once.
11133
11134 If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
11135 instantiation was `extern'. If EXTERN_P then the second is.
11136 These cases are OK. */
11137 previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
11138
11139 if (!previous_instantiation_extern_p && !extern_p
11140 && (complain & tf_error))
11141 pedwarn ("duplicate explicit instantiation of %q#T", t);
11142
11143 /* If we've already instantiated the template, just return now. */
11144 if (!CLASSTYPE_INTERFACE_ONLY (t))
11145 return;
11146 }
11147
11148 mark_class_instantiated (t, extern_p);
11149
11150 if (nomem_p)
11151 return;
11152
11153 {
11154 tree tmp;
11155
11156 /* In contrast to implicit instantiation, where only the
11157 declarations, and not the definitions, of members are
11158 instantiated, we have here:
11159
11160 [temp.explicit]
11161
11162 The explicit instantiation of a class template specialization
11163 implies the instantiation of all of its members not
11164 previously explicitly specialized in the translation unit
11165 containing the explicit instantiation.
11166
11167 Of course, we can't instantiate member template classes, since
11168 we don't have any arguments for them. Note that the standard
11169 is unclear on whether the instantiation of the members are
11170 *explicit* instantiations or not. However, the most natural
11171 interpretation is that it should be an explicit instantiation. */
11172
11173 if (! static_p)
11174 for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
11175 if (TREE_CODE (tmp) == FUNCTION_DECL
11176 && DECL_TEMPLATE_INSTANTIATION (tmp))
11177 instantiate_class_member (tmp, extern_p);
11178
11179 for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
11180 if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
11181 instantiate_class_member (tmp, extern_p);
11182
11183 if (CLASSTYPE_NESTED_UTDS (t))
11184 binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
11185 bt_instantiate_type_proc, &storage);
11186 }
11187 }
11188
11189 /* Given a function DECL, which is a specialization of TMPL, modify
11190 DECL to be a re-instantiation of TMPL with the same template
11191 arguments. TMPL should be the template into which tsubst'ing
11192 should occur for DECL, not the most general template.
11193
11194 One reason for doing this is a scenario like this:
11195
11196 template <class T>
11197 void f(const T&, int i);
11198
11199 void g() { f(3, 7); }
11200
11201 template <class T>
11202 void f(const T& t, const int i) { }
11203
11204 Note that when the template is first instantiated, with
11205 instantiate_template, the resulting DECL will have no name for the
11206 first parameter, and the wrong type for the second. So, when we go
11207 to instantiate the DECL, we regenerate it. */
11208
11209 static void
11210 regenerate_decl_from_template (tree decl, tree tmpl)
11211 {
11212 /* The arguments used to instantiate DECL, from the most general
11213 template. */
11214 tree args;
11215 tree code_pattern;
11216
11217 args = DECL_TI_ARGS (decl);
11218 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
11219
11220 /* Make sure that we can see identifiers, and compute access
11221 correctly. */
11222 push_access_scope (decl);
11223
11224 if (TREE_CODE (decl) == FUNCTION_DECL)
11225 {
11226 tree decl_parm;
11227 tree pattern_parm;
11228 tree specs;
11229 int args_depth;
11230 int parms_depth;
11231
11232 args_depth = TMPL_ARGS_DEPTH (args);
11233 parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
11234 if (args_depth > parms_depth)
11235 args = get_innermost_template_args (args, parms_depth);
11236
11237 specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
11238 args, tf_error, NULL_TREE);
11239 if (specs)
11240 TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
11241 specs);
11242
11243 /* Merge parameter declarations. */
11244 decl_parm = skip_artificial_parms_for (decl,
11245 DECL_ARGUMENTS (decl));
11246 pattern_parm
11247 = skip_artificial_parms_for (code_pattern,
11248 DECL_ARGUMENTS (code_pattern));
11249 while (decl_parm)
11250 {
11251 tree parm_type;
11252 tree attributes;
11253
11254 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
11255 DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
11256 parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
11257 NULL_TREE);
11258 parm_type = type_decays_to (parm_type);
11259 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
11260 TREE_TYPE (decl_parm) = parm_type;
11261 attributes = DECL_ATTRIBUTES (pattern_parm);
11262 if (DECL_ATTRIBUTES (decl_parm) != attributes)
11263 {
11264 DECL_ATTRIBUTES (decl_parm) = attributes;
11265 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
11266 }
11267 decl_parm = TREE_CHAIN (decl_parm);
11268 pattern_parm = TREE_CHAIN (pattern_parm);
11269 }
11270
11271 /* Merge additional specifiers from the CODE_PATTERN. */
11272 if (DECL_DECLARED_INLINE_P (code_pattern)
11273 && !DECL_DECLARED_INLINE_P (decl))
11274 DECL_DECLARED_INLINE_P (decl) = 1;
11275 if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
11276 DECL_INLINE (decl) = 1;
11277 }
11278 else if (TREE_CODE (decl) == VAR_DECL)
11279 {
11280 if (!DECL_INITIALIZED_IN_CLASS_P (decl)
11281 && DECL_INITIAL (code_pattern))
11282 DECL_INITIAL (decl) =
11283 tsubst_expr (DECL_INITIAL (code_pattern), args,
11284 tf_error, DECL_TI_TEMPLATE (decl));
11285 }
11286 else
11287 gcc_unreachable ();
11288
11289 pop_access_scope (decl);
11290 }
11291
11292 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
11293 substituted to get DECL. */
11294
11295 tree
11296 template_for_substitution (tree decl)
11297 {
11298 tree tmpl = DECL_TI_TEMPLATE (decl);
11299
11300 /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
11301 for the instantiation. This is not always the most general
11302 template. Consider, for example:
11303
11304 template <class T>
11305 struct S { template <class U> void f();
11306 template <> void f<int>(); };
11307
11308 and an instantiation of S<double>::f<int>. We want TD to be the
11309 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
11310 while (/* An instantiation cannot have a definition, so we need a
11311 more general template. */
11312 DECL_TEMPLATE_INSTANTIATION (tmpl)
11313 /* We must also deal with friend templates. Given:
11314
11315 template <class T> struct S {
11316 template <class U> friend void f() {};
11317 };
11318
11319 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
11320 so far as the language is concerned, but that's still
11321 where we get the pattern for the instantiation from. On
11322 other hand, if the definition comes outside the class, say:
11323
11324 template <class T> struct S {
11325 template <class U> friend void f();
11326 };
11327 template <class U> friend void f() {}
11328
11329 we don't need to look any further. That's what the check for
11330 DECL_INITIAL is for. */
11331 || (TREE_CODE (decl) == FUNCTION_DECL
11332 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
11333 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
11334 {
11335 /* The present template, TD, should not be a definition. If it
11336 were a definition, we should be using it! Note that we
11337 cannot restructure the loop to just keep going until we find
11338 a template with a definition, since that might go too far if
11339 a specialization was declared, but not defined. */
11340 gcc_assert (TREE_CODE (decl) != VAR_DECL
11341 || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
11342
11343 /* Fetch the more general template. */
11344 tmpl = DECL_TI_TEMPLATE (tmpl);
11345 }
11346
11347 return tmpl;
11348 }
11349
11350 /* Produce the definition of D, a _DECL generated from a template. If
11351 DEFER_OK is nonzero, then we don't have to actually do the
11352 instantiation now; we just have to do it sometime. Normally it is
11353 an error if this is an explicit instantiation but D is undefined.
11354 EXPL_INST_CLASS_MEM_P is true iff D is a member of an
11355 explicitly instantiated class template. */
11356
11357 tree
11358 instantiate_decl (tree d, int defer_ok,
11359 bool expl_inst_class_mem_p)
11360 {
11361 tree tmpl = DECL_TI_TEMPLATE (d);
11362 tree gen_args;
11363 tree args;
11364 tree td;
11365 tree code_pattern;
11366 tree spec;
11367 tree gen_tmpl;
11368 int pattern_defined;
11369 int need_push;
11370 location_t saved_loc = input_location;
11371
11372 /* This function should only be used to instantiate templates for
11373 functions and static member variables. */
11374 gcc_assert (TREE_CODE (d) == FUNCTION_DECL
11375 || TREE_CODE (d) == VAR_DECL);
11376
11377 /* Variables are never deferred; if instantiation is required, they
11378 are instantiated right away. That allows for better code in the
11379 case that an expression refers to the value of the variable --
11380 if the variable has a constant value the referring expression can
11381 take advantage of that fact. */
11382 if (TREE_CODE (d) == VAR_DECL)
11383 defer_ok = 0;
11384
11385 /* Don't instantiate cloned functions. Instead, instantiate the
11386 functions they cloned. */
11387 if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
11388 d = DECL_CLONED_FUNCTION (d);
11389
11390 if (DECL_TEMPLATE_INSTANTIATED (d))
11391 /* D has already been instantiated. It might seem reasonable to
11392 check whether or not D is an explicit instantiation, and, if so,
11393 stop here. But when an explicit instantiation is deferred
11394 until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
11395 is set, even though we still need to do the instantiation. */
11396 return d;
11397
11398 /* If we already have a specialization of this declaration, then
11399 there's no reason to instantiate it. Note that
11400 retrieve_specialization gives us both instantiations and
11401 specializations, so we must explicitly check
11402 DECL_TEMPLATE_SPECIALIZATION. */
11403 gen_tmpl = most_general_template (tmpl);
11404 gen_args = DECL_TI_ARGS (d);
11405 spec = retrieve_specialization (gen_tmpl, gen_args,
11406 /*class_specializations_p=*/false);
11407 if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
11408 return spec;
11409
11410 /* This needs to happen before any tsubsting. */
11411 if (! push_tinst_level (d))
11412 return d;
11413
11414 timevar_push (TV_PARSE);
11415
11416 /* We may be in the middle of deferred access check. Disable it now. */
11417 push_deferring_access_checks (dk_no_deferred);
11418
11419 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
11420 for the instantiation. */
11421 td = template_for_substitution (d);
11422 code_pattern = DECL_TEMPLATE_RESULT (td);
11423
11424 if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
11425 || DECL_TEMPLATE_SPECIALIZATION (td))
11426 /* In the case of a friend template whose definition is provided
11427 outside the class, we may have too many arguments. Drop the
11428 ones we don't need. The same is true for specializations. */
11429 args = get_innermost_template_args
11430 (gen_args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td)));
11431 else
11432 args = gen_args;
11433
11434 if (TREE_CODE (d) == FUNCTION_DECL)
11435 pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
11436 else
11437 pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
11438 /* Unless an explicit instantiation directive has already determined
11439 the linkage of D, remember that a definition is available for
11440 this entity. */
11441 if (pattern_defined
11442 && !DECL_INTERFACE_KNOWN (d)
11443 && !DECL_NOT_REALLY_EXTERN (d))
11444 mark_definable (d);
11445
11446 input_location = DECL_SOURCE_LOCATION (d);
11447
11448 /* If D is a member of an explicitly instantiated class template,
11449 and no definition is available, treat it like an implicit
11450 instantiation. */
11451 if (!pattern_defined && expl_inst_class_mem_p
11452 && DECL_EXPLICIT_INSTANTIATION (d))
11453 {
11454 DECL_NOT_REALLY_EXTERN (d) = 0;
11455 DECL_INTERFACE_KNOWN (d) = 0;
11456 SET_DECL_IMPLICIT_INSTANTIATION (d);
11457 }
11458
11459 if (!defer_ok)
11460 {
11461 /* Recheck the substitutions to obtain any warning messages
11462 about ignoring cv qualifiers. */
11463 tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
11464 tree type = TREE_TYPE (gen);
11465
11466 /* Make sure that we can see identifiers, and compute access
11467 correctly. D is already the target FUNCTION_DECL with the
11468 right context. */
11469 push_access_scope (d);
11470
11471 if (TREE_CODE (gen) == FUNCTION_DECL)
11472 {
11473 tsubst (DECL_ARGUMENTS (gen), gen_args, tf_error | tf_warning, d);
11474 tsubst (TYPE_RAISES_EXCEPTIONS (type), gen_args,
11475 tf_error | tf_warning, d);
11476 /* Don't simply tsubst the function type, as that will give
11477 duplicate warnings about poor parameter qualifications.
11478 The function arguments are the same as the decl_arguments
11479 without the top level cv qualifiers. */
11480 type = TREE_TYPE (type);
11481 }
11482 tsubst (type, gen_args, tf_error | tf_warning, d);
11483
11484 pop_access_scope (d);
11485 }
11486
11487 /* We should have set up DECL_INITIAL in instantiate_class_template
11488 for in-class definitions of static data members. */
11489 gcc_assert (!(TREE_CODE (d) == VAR_DECL
11490 && DECL_INITIALIZED_IN_CLASS_P (d)
11491 && DECL_INITIAL (d) == NULL_TREE));
11492
11493 /* Do not instantiate templates that we know will be defined
11494 elsewhere. */
11495 if (DECL_INTERFACE_KNOWN (d)
11496 && DECL_REALLY_EXTERN (d)
11497 && ! (TREE_CODE (d) == FUNCTION_DECL
11498 && DECL_INLINE (d)))
11499 goto out;
11500 /* Defer all other templates, unless we have been explicitly
11501 forbidden from doing so. We restore the source position here
11502 because it's used by add_pending_template. */
11503 else if (! pattern_defined || defer_ok)
11504 {
11505 input_location = saved_loc;
11506
11507 if (at_eof && !pattern_defined
11508 && DECL_EXPLICIT_INSTANTIATION (d))
11509 /* [temp.explicit]
11510
11511 The definition of a non-exported function template, a
11512 non-exported member function template, or a non-exported
11513 member function or static data member of a class template
11514 shall be present in every translation unit in which it is
11515 explicitly instantiated. */
11516 pedwarn
11517 ("explicit instantiation of %qD but no definition available", d);
11518
11519 add_pending_template (d);
11520 goto out;
11521 }
11522 /* Tell the repository that D is available in this translation unit
11523 -- and see if it is supposed to be instantiated here. */
11524 if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
11525 {
11526 /* In a PCH file, despite the fact that the repository hasn't
11527 requested instantiation in the PCH it is still possible that
11528 an instantiation will be required in a file that includes the
11529 PCH. */
11530 if (pch_file)
11531 add_pending_template (d);
11532 /* Instantiate inline functions so that the inliner can do its
11533 job, even though we'll not be emitting a copy of this
11534 function. */
11535 if (!(TREE_CODE (d) == FUNCTION_DECL
11536 && flag_inline_trees
11537 && DECL_DECLARED_INLINE_P (d)))
11538 goto out;
11539 }
11540
11541 need_push = !cfun || !global_bindings_p ();
11542 if (need_push)
11543 push_to_top_level ();
11544
11545 /* Mark D as instantiated so that recursive calls to
11546 instantiate_decl do not try to instantiate it again. */
11547 DECL_TEMPLATE_INSTANTIATED (d) = 1;
11548
11549 /* Regenerate the declaration in case the template has been modified
11550 by a subsequent redeclaration. */
11551 regenerate_decl_from_template (d, td);
11552
11553 /* We already set the file and line above. Reset them now in case
11554 they changed as a result of calling regenerate_decl_from_template. */
11555 input_location = DECL_SOURCE_LOCATION (d);
11556
11557 if (TREE_CODE (d) == VAR_DECL)
11558 {
11559 /* Clear out DECL_RTL; whatever was there before may not be right
11560 since we've reset the type of the declaration. */
11561 SET_DECL_RTL (d, NULL_RTX);
11562 DECL_IN_AGGR_P (d) = 0;
11563
11564 /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
11565 initializer. That function will defer actual emission until
11566 we have a chance to determine linkage. */
11567 DECL_EXTERNAL (d) = 0;
11568
11569 /* Enter the scope of D so that access-checking works correctly. */
11570 push_nested_class (DECL_CONTEXT (d));
11571 cp_finish_decl (d,
11572 (!DECL_INITIALIZED_IN_CLASS_P (d)
11573 ? DECL_INITIAL (d) : NULL_TREE),
11574 NULL_TREE, 0);
11575 pop_nested_class ();
11576 }
11577 else if (TREE_CODE (d) == FUNCTION_DECL)
11578 {
11579 htab_t saved_local_specializations;
11580 tree subst_decl;
11581 tree tmpl_parm;
11582 tree spec_parm;
11583
11584 /* Save away the current list, in case we are instantiating one
11585 template from within the body of another. */
11586 saved_local_specializations = local_specializations;
11587
11588 /* Set up the list of local specializations. */
11589 local_specializations = htab_create (37,
11590 hash_local_specialization,
11591 eq_local_specializations,
11592 NULL);
11593
11594 /* Set up context. */
11595 start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
11596
11597 /* Create substitution entries for the parameters. */
11598 subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
11599 tmpl_parm = DECL_ARGUMENTS (subst_decl);
11600 spec_parm = DECL_ARGUMENTS (d);
11601 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
11602 {
11603 register_local_specialization (spec_parm, tmpl_parm);
11604 spec_parm = skip_artificial_parms_for (d, spec_parm);
11605 tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
11606 }
11607 while (tmpl_parm)
11608 {
11609 register_local_specialization (spec_parm, tmpl_parm);
11610 tmpl_parm = TREE_CHAIN (tmpl_parm);
11611 spec_parm = TREE_CHAIN (spec_parm);
11612 }
11613 gcc_assert (!spec_parm);
11614
11615 /* Substitute into the body of the function. */
11616 tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
11617 tf_error | tf_warning, tmpl);
11618
11619 /* We don't need the local specializations any more. */
11620 htab_delete (local_specializations);
11621 local_specializations = saved_local_specializations;
11622
11623 /* Finish the function. */
11624 d = finish_function (0);
11625 expand_or_defer_fn (d);
11626 }
11627
11628 /* We're not deferring instantiation any more. */
11629 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
11630
11631 if (need_push)
11632 pop_from_top_level ();
11633
11634 out:
11635 input_location = saved_loc;
11636 pop_deferring_access_checks ();
11637 pop_tinst_level ();
11638
11639 timevar_pop (TV_PARSE);
11640
11641 return d;
11642 }
11643
11644 /* Run through the list of templates that we wish we could
11645 instantiate, and instantiate any we can. RETRIES is the
11646 number of times we retry pending template instantiation. */
11647
11648 void
11649 instantiate_pending_templates (int retries)
11650 {
11651 tree *t;
11652 tree last = NULL_TREE;
11653 int reconsider;
11654 location_t saved_loc = input_location;
11655 int saved_in_system_header = in_system_header;
11656
11657 /* Instantiating templates may trigger vtable generation. This in turn
11658 may require further template instantiations. We place a limit here
11659 to avoid infinite loop. */
11660 if (pending_templates && retries >= max_tinst_depth)
11661 {
11662 error ("template instantiation depth exceeds maximum of %d"
11663 " instantiating %q+D, possibly from virtual table generation"
11664 " (use -ftemplate-depth-NN to increase the maximum)",
11665 max_tinst_depth, TREE_VALUE (pending_templates));
11666 return;
11667 }
11668
11669 do
11670 {
11671 reconsider = 0;
11672
11673 t = &pending_templates;
11674 while (*t)
11675 {
11676 tree instantiation = TREE_VALUE (*t);
11677
11678 reopen_tinst_level (TREE_PURPOSE (*t));
11679
11680 if (TYPE_P (instantiation))
11681 {
11682 tree fn;
11683
11684 if (!COMPLETE_TYPE_P (instantiation))
11685 {
11686 instantiate_class_template (instantiation);
11687 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
11688 for (fn = TYPE_METHODS (instantiation);
11689 fn;
11690 fn = TREE_CHAIN (fn))
11691 if (! DECL_ARTIFICIAL (fn))
11692 instantiate_decl (fn,
11693 /*defer_ok=*/0,
11694 /*expl_inst_class_mem_p=*/false);
11695 if (COMPLETE_TYPE_P (instantiation))
11696 reconsider = 1;
11697 }
11698
11699 if (COMPLETE_TYPE_P (instantiation))
11700 /* If INSTANTIATION has been instantiated, then we don't
11701 need to consider it again in the future. */
11702 *t = TREE_CHAIN (*t);
11703 else
11704 {
11705 last = *t;
11706 t = &TREE_CHAIN (*t);
11707 }
11708 }
11709 else
11710 {
11711 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
11712 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
11713 {
11714 instantiation
11715 = instantiate_decl (instantiation,
11716 /*defer_ok=*/0,
11717 /*expl_inst_class_mem_p=*/false);
11718 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
11719 reconsider = 1;
11720 }
11721
11722 if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
11723 || DECL_TEMPLATE_INSTANTIATED (instantiation))
11724 /* If INSTANTIATION has been instantiated, then we don't
11725 need to consider it again in the future. */
11726 *t = TREE_CHAIN (*t);
11727 else
11728 {
11729 last = *t;
11730 t = &TREE_CHAIN (*t);
11731 }
11732 }
11733 tinst_depth = 0;
11734 current_tinst_level = NULL_TREE;
11735 }
11736 last_pending_template = last;
11737 }
11738 while (reconsider);
11739
11740 input_location = saved_loc;
11741 in_system_header = saved_in_system_header;
11742 }
11743
11744 /* Substitute ARGVEC into T, which is a list of initializers for
11745 either base class or a non-static data member. The TREE_PURPOSEs
11746 are DECLs, and the TREE_VALUEs are the initializer values. Used by
11747 instantiate_decl. */
11748
11749 static tree
11750 tsubst_initializer_list (tree t, tree argvec)
11751 {
11752 tree inits = NULL_TREE;
11753
11754 for (; t; t = TREE_CHAIN (t))
11755 {
11756 tree decl;
11757 tree init;
11758
11759 decl = tsubst_copy (TREE_PURPOSE (t), argvec, tf_error | tf_warning,
11760 NULL_TREE);
11761 decl = expand_member_init (decl);
11762 if (decl && !DECL_P (decl))
11763 in_base_initializer = 1;
11764
11765 init = tsubst_expr (TREE_VALUE (t), argvec, tf_error | tf_warning,
11766 NULL_TREE);
11767 in_base_initializer = 0;
11768
11769 if (decl)
11770 {
11771 init = build_tree_list (decl, init);
11772 TREE_CHAIN (init) = inits;
11773 inits = init;
11774 }
11775 }
11776 return inits;
11777 }
11778
11779 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
11780
11781 static void
11782 set_current_access_from_decl (tree decl)
11783 {
11784 if (TREE_PRIVATE (decl))
11785 current_access_specifier = access_private_node;
11786 else if (TREE_PROTECTED (decl))
11787 current_access_specifier = access_protected_node;
11788 else
11789 current_access_specifier = access_public_node;
11790 }
11791
11792 /* Instantiate an enumerated type. TAG is the template type, NEWTAG
11793 is the instantiation (which should have been created with
11794 start_enum) and ARGS are the template arguments to use. */
11795
11796 static void
11797 tsubst_enum (tree tag, tree newtag, tree args)
11798 {
11799 tree e;
11800
11801 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
11802 {
11803 tree value;
11804 tree decl;
11805
11806 decl = TREE_VALUE (e);
11807 /* Note that in a template enum, the TREE_VALUE is the
11808 CONST_DECL, not the corresponding INTEGER_CST. */
11809 value = tsubst_expr (DECL_INITIAL (decl),
11810 args, tf_error | tf_warning,
11811 NULL_TREE);
11812
11813 /* Give this enumeration constant the correct access. */
11814 set_current_access_from_decl (decl);
11815
11816 /* Actually build the enumerator itself. */
11817 build_enumerator (DECL_NAME (decl), value, newtag);
11818 }
11819
11820 finish_enum (newtag);
11821 DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
11822 = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
11823 }
11824
11825 /* DECL is a FUNCTION_DECL that is a template specialization. Return
11826 its type -- but without substituting the innermost set of template
11827 arguments. So, innermost set of template parameters will appear in
11828 the type. */
11829
11830 tree
11831 get_mostly_instantiated_function_type (tree decl)
11832 {
11833 tree fn_type;
11834 tree tmpl;
11835 tree targs;
11836 tree tparms;
11837 int parm_depth;
11838
11839 tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11840 targs = DECL_TI_ARGS (decl);
11841 tparms = DECL_TEMPLATE_PARMS (tmpl);
11842 parm_depth = TMPL_PARMS_DEPTH (tparms);
11843
11844 /* There should be as many levels of arguments as there are levels
11845 of parameters. */
11846 gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
11847
11848 fn_type = TREE_TYPE (tmpl);
11849
11850 if (parm_depth == 1)
11851 /* No substitution is necessary. */
11852 ;
11853 else
11854 {
11855 int i, save_access_control;
11856 tree partial_args;
11857
11858 /* Replace the innermost level of the TARGS with NULL_TREEs to
11859 let tsubst know not to substitute for those parameters. */
11860 partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
11861 for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
11862 SET_TMPL_ARGS_LEVEL (partial_args, i,
11863 TMPL_ARGS_LEVEL (targs, i));
11864 SET_TMPL_ARGS_LEVEL (partial_args,
11865 TMPL_ARGS_DEPTH (targs),
11866 make_tree_vec (DECL_NTPARMS (tmpl)));
11867
11868 /* Disable access control as this function is used only during
11869 name-mangling. */
11870 save_access_control = flag_access_control;
11871 flag_access_control = 0;
11872
11873 ++processing_template_decl;
11874 /* Now, do the (partial) substitution to figure out the
11875 appropriate function type. */
11876 fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
11877 --processing_template_decl;
11878
11879 /* Substitute into the template parameters to obtain the real
11880 innermost set of parameters. This step is important if the
11881 innermost set of template parameters contains value
11882 parameters whose types depend on outer template parameters. */
11883 TREE_VEC_LENGTH (partial_args)--;
11884 tparms = tsubst_template_parms (tparms, partial_args, tf_error);
11885
11886 flag_access_control = save_access_control;
11887 }
11888
11889 return fn_type;
11890 }
11891
11892 /* Return truthvalue if we're processing a template different from
11893 the last one involved in diagnostics. */
11894 int
11895 problematic_instantiation_changed (void)
11896 {
11897 return last_template_error_tick != tinst_level_tick;
11898 }
11899
11900 /* Remember current template involved in diagnostics. */
11901 void
11902 record_last_problematic_instantiation (void)
11903 {
11904 last_template_error_tick = tinst_level_tick;
11905 }
11906
11907 tree
11908 current_instantiation (void)
11909 {
11910 return current_tinst_level;
11911 }
11912
11913 /* [temp.param] Check that template non-type parm TYPE is of an allowable
11914 type. Return zero for ok, nonzero for disallowed. Issue error and
11915 warning messages under control of COMPLAIN. */
11916
11917 static int
11918 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
11919 {
11920 if (INTEGRAL_TYPE_P (type))
11921 return 0;
11922 else if (POINTER_TYPE_P (type))
11923 return 0;
11924 else if (TYPE_PTR_TO_MEMBER_P (type))
11925 return 0;
11926 else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11927 return 0;
11928 else if (TREE_CODE (type) == TYPENAME_TYPE)
11929 return 0;
11930
11931 if (complain & tf_error)
11932 error ("%q#T is not a valid type for a template constant parameter", type);
11933 return 1;
11934 }
11935
11936 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
11937 Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
11938
11939 static bool
11940 dependent_type_p_r (tree type)
11941 {
11942 tree scope;
11943
11944 /* [temp.dep.type]
11945
11946 A type is dependent if it is:
11947
11948 -- a template parameter. Template template parameters are types
11949 for us (since TYPE_P holds true for them) so we handle
11950 them here. */
11951 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
11952 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
11953 return true;
11954 /* -- a qualified-id with a nested-name-specifier which contains a
11955 class-name that names a dependent type or whose unqualified-id
11956 names a dependent type. */
11957 if (TREE_CODE (type) == TYPENAME_TYPE)
11958 return true;
11959 /* -- a cv-qualified type where the cv-unqualified type is
11960 dependent. */
11961 type = TYPE_MAIN_VARIANT (type);
11962 /* -- a compound type constructed from any dependent type. */
11963 if (TYPE_PTR_TO_MEMBER_P (type))
11964 return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
11965 || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
11966 (type)));
11967 else if (TREE_CODE (type) == POINTER_TYPE
11968 || TREE_CODE (type) == REFERENCE_TYPE)
11969 return dependent_type_p (TREE_TYPE (type));
11970 else if (TREE_CODE (type) == FUNCTION_TYPE
11971 || TREE_CODE (type) == METHOD_TYPE)
11972 {
11973 tree arg_type;
11974
11975 if (dependent_type_p (TREE_TYPE (type)))
11976 return true;
11977 for (arg_type = TYPE_ARG_TYPES (type);
11978 arg_type;
11979 arg_type = TREE_CHAIN (arg_type))
11980 if (dependent_type_p (TREE_VALUE (arg_type)))
11981 return true;
11982 return false;
11983 }
11984 /* -- an array type constructed from any dependent type or whose
11985 size is specified by a constant expression that is
11986 value-dependent. */
11987 if (TREE_CODE (type) == ARRAY_TYPE)
11988 {
11989 if (TYPE_DOMAIN (type)
11990 && ((value_dependent_expression_p
11991 (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
11992 || (type_dependent_expression_p
11993 (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
11994 return true;
11995 return dependent_type_p (TREE_TYPE (type));
11996 }
11997
11998 /* -- a template-id in which either the template name is a template
11999 parameter ... */
12000 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
12001 return true;
12002 /* ... or any of the template arguments is a dependent type or
12003 an expression that is type-dependent or value-dependent. */
12004 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
12005 && (any_dependent_template_arguments_p
12006 (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
12007 return true;
12008
12009 /* All TYPEOF_TYPEs are dependent; if the argument of the `typeof'
12010 expression is not type-dependent, then it should already been
12011 have resolved. */
12012 if (TREE_CODE (type) == TYPEOF_TYPE)
12013 return true;
12014
12015 /* The standard does not specifically mention types that are local
12016 to template functions or local classes, but they should be
12017 considered dependent too. For example:
12018
12019 template <int I> void f() {
12020 enum E { a = I };
12021 S<sizeof (E)> s;
12022 }
12023
12024 The size of `E' cannot be known until the value of `I' has been
12025 determined. Therefore, `E' must be considered dependent. */
12026 scope = TYPE_CONTEXT (type);
12027 if (scope && TYPE_P (scope))
12028 return dependent_type_p (scope);
12029 else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12030 return type_dependent_expression_p (scope);
12031
12032 /* Other types are non-dependent. */
12033 return false;
12034 }
12035
12036 /* Returns TRUE if TYPE is dependent, in the sense of
12037 [temp.dep.type]. */
12038
12039 bool
12040 dependent_type_p (tree type)
12041 {
12042 /* If there are no template parameters in scope, then there can't be
12043 any dependent types. */
12044 if (!processing_template_decl)
12045 return false;
12046
12047 /* If the type is NULL, we have not computed a type for the entity
12048 in question; in that case, the type is dependent. */
12049 if (!type)
12050 return true;
12051
12052 /* Erroneous types can be considered non-dependent. */
12053 if (type == error_mark_node)
12054 return false;
12055
12056 /* If we have not already computed the appropriate value for TYPE,
12057 do so now. */
12058 if (!TYPE_DEPENDENT_P_VALID (type))
12059 {
12060 TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
12061 TYPE_DEPENDENT_P_VALID (type) = 1;
12062 }
12063
12064 return TYPE_DEPENDENT_P (type);
12065 }
12066
12067 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION. */
12068
12069 static bool
12070 dependent_scope_ref_p (tree expression, bool criterion (tree))
12071 {
12072 tree scope;
12073 tree name;
12074
12075 gcc_assert (TREE_CODE (expression) == SCOPE_REF);
12076
12077 if (!TYPE_P (TREE_OPERAND (expression, 0)))
12078 return true;
12079
12080 scope = TREE_OPERAND (expression, 0);
12081 name = TREE_OPERAND (expression, 1);
12082
12083 /* [temp.dep.expr]
12084
12085 An id-expression is type-dependent if it contains a
12086 nested-name-specifier that contains a class-name that names a
12087 dependent type. */
12088 /* The suggested resolution to Core Issue 2 implies that if the
12089 qualifying type is the current class, then we must peek
12090 inside it. */
12091 if (DECL_P (name)
12092 && currently_open_class (scope)
12093 && !criterion (name))
12094 return false;
12095 if (dependent_type_p (scope))
12096 return true;
12097
12098 return false;
12099 }
12100
12101 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
12102 [temp.dep.constexpr] */
12103
12104 bool
12105 value_dependent_expression_p (tree expression)
12106 {
12107 if (!processing_template_decl)
12108 return false;
12109
12110 /* A name declared with a dependent type. */
12111 if (DECL_P (expression) && type_dependent_expression_p (expression))
12112 return true;
12113
12114 switch (TREE_CODE (expression))
12115 {
12116 case IDENTIFIER_NODE:
12117 /* A name that has not been looked up -- must be dependent. */
12118 return true;
12119
12120 case TEMPLATE_PARM_INDEX:
12121 /* A non-type template parm. */
12122 return true;
12123
12124 case CONST_DECL:
12125 /* A non-type template parm. */
12126 if (DECL_TEMPLATE_PARM_P (expression))
12127 return true;
12128 return false;
12129
12130 case VAR_DECL:
12131 /* A constant with integral or enumeration type and is initialized
12132 with an expression that is value-dependent. */
12133 if (DECL_INITIAL (expression)
12134 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
12135 && value_dependent_expression_p (DECL_INITIAL (expression)))
12136 return true;
12137 return false;
12138
12139 case DYNAMIC_CAST_EXPR:
12140 case STATIC_CAST_EXPR:
12141 case CONST_CAST_EXPR:
12142 case REINTERPRET_CAST_EXPR:
12143 case CAST_EXPR:
12144 /* These expressions are value-dependent if the type to which
12145 the cast occurs is dependent or the expression being casted
12146 is value-dependent. */
12147 {
12148 tree type = TREE_TYPE (expression);
12149
12150 if (dependent_type_p (type))
12151 return true;
12152
12153 /* A functional cast has a list of operands. */
12154 expression = TREE_OPERAND (expression, 0);
12155 if (!expression)
12156 {
12157 /* If there are no operands, it must be an expression such
12158 as "int()". This should not happen for aggregate types
12159 because it would form non-constant expressions. */
12160 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
12161
12162 return false;
12163 }
12164
12165 if (TREE_CODE (expression) == TREE_LIST)
12166 {
12167 for (; expression; expression = TREE_CHAIN (expression))
12168 if (value_dependent_expression_p (TREE_VALUE (expression)))
12169 return true;
12170 return false;
12171 }
12172
12173 return value_dependent_expression_p (expression);
12174 }
12175
12176 case SIZEOF_EXPR:
12177 case ALIGNOF_EXPR:
12178 /* A `sizeof' expression is value-dependent if the operand is
12179 type-dependent. */
12180 expression = TREE_OPERAND (expression, 0);
12181 if (TYPE_P (expression))
12182 return dependent_type_p (expression);
12183 return type_dependent_expression_p (expression);
12184
12185 case SCOPE_REF:
12186 return dependent_scope_ref_p (expression, value_dependent_expression_p);
12187
12188 case COMPONENT_REF:
12189 return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
12190 || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
12191
12192 case CALL_EXPR:
12193 /* A CALL_EXPR is value-dependent if any argument is
12194 value-dependent. Why do we have to handle CALL_EXPRs in this
12195 function at all? First, some function calls, those for which
12196 value_dependent_expression_p is true, man appear in constant
12197 expressions. Second, there appear to be bugs which result in
12198 other CALL_EXPRs reaching this point. */
12199 {
12200 tree function = TREE_OPERAND (expression, 0);
12201 tree args = TREE_OPERAND (expression, 1);
12202
12203 if (value_dependent_expression_p (function))
12204 return true;
12205
12206 if (! args)
12207 return false;
12208
12209 if (TREE_CODE (args) == TREE_LIST)
12210 {
12211 for (; args; args = TREE_CHAIN (args))
12212 if (value_dependent_expression_p (TREE_VALUE (args)))
12213 return true;
12214 return false;
12215 }
12216
12217 return value_dependent_expression_p (args);
12218 }
12219
12220 default:
12221 /* A constant expression is value-dependent if any subexpression is
12222 value-dependent. */
12223 switch (TREE_CODE_CLASS (TREE_CODE (expression)))
12224 {
12225 case tcc_reference:
12226 case tcc_unary:
12227 return (value_dependent_expression_p
12228 (TREE_OPERAND (expression, 0)));
12229
12230 case tcc_comparison:
12231 case tcc_binary:
12232 return ((value_dependent_expression_p
12233 (TREE_OPERAND (expression, 0)))
12234 || (value_dependent_expression_p
12235 (TREE_OPERAND (expression, 1))));
12236
12237 case tcc_expression:
12238 {
12239 int i;
12240 for (i = 0; i < TREE_CODE_LENGTH (TREE_CODE (expression)); ++i)
12241 /* In some cases, some of the operands may be missing.
12242 (For example, in the case of PREDECREMENT_EXPR, the
12243 amount to increment by may be missing.) That doesn't
12244 make the expression dependent. */
12245 if (TREE_OPERAND (expression, i)
12246 && (value_dependent_expression_p
12247 (TREE_OPERAND (expression, i))))
12248 return true;
12249 return false;
12250 }
12251
12252 default:
12253 break;
12254 }
12255 }
12256
12257 /* The expression is not value-dependent. */
12258 return false;
12259 }
12260
12261 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
12262 [temp.dep.expr]. */
12263
12264 bool
12265 type_dependent_expression_p (tree expression)
12266 {
12267 if (!processing_template_decl)
12268 return false;
12269
12270 if (expression == error_mark_node)
12271 return false;
12272
12273 /* An unresolved name is always dependent. */
12274 if (TREE_CODE (expression) == IDENTIFIER_NODE)
12275 return true;
12276
12277 /* Some expression forms are never type-dependent. */
12278 if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
12279 || TREE_CODE (expression) == SIZEOF_EXPR
12280 || TREE_CODE (expression) == ALIGNOF_EXPR
12281 || TREE_CODE (expression) == TYPEID_EXPR
12282 || TREE_CODE (expression) == DELETE_EXPR
12283 || TREE_CODE (expression) == VEC_DELETE_EXPR
12284 || TREE_CODE (expression) == THROW_EXPR)
12285 return false;
12286
12287 /* The types of these expressions depends only on the type to which
12288 the cast occurs. */
12289 if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
12290 || TREE_CODE (expression) == STATIC_CAST_EXPR
12291 || TREE_CODE (expression) == CONST_CAST_EXPR
12292 || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
12293 || TREE_CODE (expression) == CAST_EXPR)
12294 return dependent_type_p (TREE_TYPE (expression));
12295
12296 /* The types of these expressions depends only on the type created
12297 by the expression. */
12298 if (TREE_CODE (expression) == NEW_EXPR
12299 || TREE_CODE (expression) == VEC_NEW_EXPR)
12300 {
12301 /* For NEW_EXPR tree nodes created inside a template, either
12302 the object type itself or a TREE_LIST may appear as the
12303 operand 1. */
12304 tree type = TREE_OPERAND (expression, 1);
12305 if (TREE_CODE (type) == TREE_LIST)
12306 /* This is an array type. We need to check array dimensions
12307 as well. */
12308 return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
12309 || value_dependent_expression_p
12310 (TREE_OPERAND (TREE_VALUE (type), 1));
12311 else
12312 return dependent_type_p (type);
12313 }
12314
12315 if (TREE_CODE (expression) == SCOPE_REF
12316 && dependent_scope_ref_p (expression,
12317 type_dependent_expression_p))
12318 return true;
12319
12320 if (TREE_CODE (expression) == FUNCTION_DECL
12321 && DECL_LANG_SPECIFIC (expression)
12322 && DECL_TEMPLATE_INFO (expression)
12323 && (any_dependent_template_arguments_p
12324 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
12325 return true;
12326
12327 if (TREE_CODE (expression) == TEMPLATE_DECL
12328 && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
12329 return false;
12330
12331 if (TREE_TYPE (expression) == unknown_type_node)
12332 {
12333 if (TREE_CODE (expression) == ADDR_EXPR)
12334 return type_dependent_expression_p (TREE_OPERAND (expression, 0));
12335 if (TREE_CODE (expression) == COMPONENT_REF
12336 || TREE_CODE (expression) == OFFSET_REF)
12337 {
12338 if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
12339 return true;
12340 expression = TREE_OPERAND (expression, 1);
12341 if (TREE_CODE (expression) == IDENTIFIER_NODE)
12342 return false;
12343 }
12344 /* SCOPE_REF with non-null TREE_TYPE is always non-dependent. */
12345 if (TREE_CODE (expression) == SCOPE_REF)
12346 return false;
12347
12348 if (TREE_CODE (expression) == BASELINK)
12349 expression = BASELINK_FUNCTIONS (expression);
12350
12351 if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
12352 {
12353 if (any_dependent_template_arguments_p
12354 (TREE_OPERAND (expression, 1)))
12355 return true;
12356 expression = TREE_OPERAND (expression, 0);
12357 }
12358 gcc_assert (TREE_CODE (expression) == OVERLOAD);
12359
12360 while (expression)
12361 {
12362 if (type_dependent_expression_p (OVL_CURRENT (expression)))
12363 return true;
12364 expression = OVL_NEXT (expression);
12365 }
12366 return false;
12367 }
12368
12369 return (dependent_type_p (TREE_TYPE (expression)));
12370 }
12371
12372 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
12373 contains a type-dependent expression. */
12374
12375 bool
12376 any_type_dependent_arguments_p (tree args)
12377 {
12378 while (args)
12379 {
12380 tree arg = TREE_VALUE (args);
12381
12382 if (type_dependent_expression_p (arg))
12383 return true;
12384 args = TREE_CHAIN (args);
12385 }
12386 return false;
12387 }
12388
12389 /* Returns TRUE if the ARG (a template argument) is dependent. */
12390
12391 static bool
12392 dependent_template_arg_p (tree arg)
12393 {
12394 if (!processing_template_decl)
12395 return false;
12396
12397 if (TREE_CODE (arg) == TEMPLATE_DECL
12398 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
12399 return dependent_template_p (arg);
12400 else if (TYPE_P (arg))
12401 return dependent_type_p (arg);
12402 else
12403 return (type_dependent_expression_p (arg)
12404 || value_dependent_expression_p (arg));
12405 }
12406
12407 /* Returns true if ARGS (a collection of template arguments) contains
12408 any dependent arguments. */
12409
12410 bool
12411 any_dependent_template_arguments_p (tree args)
12412 {
12413 int i;
12414 int j;
12415
12416 if (!args)
12417 return false;
12418
12419 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
12420 {
12421 tree level = TMPL_ARGS_LEVEL (args, i + 1);
12422 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
12423 if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
12424 return true;
12425 }
12426
12427 return false;
12428 }
12429
12430 /* Returns TRUE if the template TMPL is dependent. */
12431
12432 bool
12433 dependent_template_p (tree tmpl)
12434 {
12435 if (TREE_CODE (tmpl) == OVERLOAD)
12436 {
12437 while (tmpl)
12438 {
12439 if (dependent_template_p (OVL_FUNCTION (tmpl)))
12440 return true;
12441 tmpl = OVL_CHAIN (tmpl);
12442 }
12443 return false;
12444 }
12445
12446 /* Template template parameters are dependent. */
12447 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
12448 || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
12449 return true;
12450 /* So are names that have not been looked up. */
12451 if (TREE_CODE (tmpl) == SCOPE_REF
12452 || TREE_CODE (tmpl) == IDENTIFIER_NODE)
12453 return true;
12454 /* So are member templates of dependent classes. */
12455 if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
12456 return dependent_type_p (DECL_CONTEXT (tmpl));
12457 return false;
12458 }
12459
12460 /* Returns TRUE if the specialization TMPL<ARGS> is dependent. */
12461
12462 bool
12463 dependent_template_id_p (tree tmpl, tree args)
12464 {
12465 return (dependent_template_p (tmpl)
12466 || any_dependent_template_arguments_p (args));
12467 }
12468
12469 /* TYPE is a TYPENAME_TYPE. Returns the ordinary TYPE to which the
12470 TYPENAME_TYPE corresponds. Returns ERROR_MARK_NODE if no such TYPE
12471 can be found. Note that this function peers inside uninstantiated
12472 templates and therefore should be used only in extremely limited
12473 situations. ONLY_CURRENT_P restricts this peering to the currently
12474 open classes hierarchy (which is required when comparing types). */
12475
12476 tree
12477 resolve_typename_type (tree type, bool only_current_p)
12478 {
12479 tree scope;
12480 tree name;
12481 tree decl;
12482 int quals;
12483 tree pushed_scope;
12484
12485 gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
12486
12487 scope = TYPE_CONTEXT (type);
12488 name = TYPE_IDENTIFIER (type);
12489
12490 /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
12491 it first before we can figure out what NAME refers to. */
12492 if (TREE_CODE (scope) == TYPENAME_TYPE)
12493 scope = resolve_typename_type (scope, only_current_p);
12494 /* If we don't know what SCOPE refers to, then we cannot resolve the
12495 TYPENAME_TYPE. */
12496 if (scope == error_mark_node || TREE_CODE (scope) == TYPENAME_TYPE)
12497 return error_mark_node;
12498 /* If the SCOPE is a template type parameter, we have no way of
12499 resolving the name. */
12500 if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
12501 return type;
12502 /* If the SCOPE is not the current instantiation, there's no reason
12503 to look inside it. */
12504 if (only_current_p && !currently_open_class (scope))
12505 return error_mark_node;
12506 /* If SCOPE is a partial instantiation, it will not have a valid
12507 TYPE_FIELDS list, so use the original template. */
12508 scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
12509 /* Enter the SCOPE so that name lookup will be resolved as if we
12510 were in the class definition. In particular, SCOPE will no
12511 longer be considered a dependent type. */
12512 pushed_scope = push_scope (scope);
12513 /* Look up the declaration. */
12514 decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
12515 /* Obtain the set of qualifiers applied to the TYPE. */
12516 quals = cp_type_quals (type);
12517 /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
12518 find a TEMPLATE_DECL. Otherwise, we want to find a TYPE_DECL. */
12519 if (!decl)
12520 type = error_mark_node;
12521 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
12522 && TREE_CODE (decl) == TYPE_DECL)
12523 type = TREE_TYPE (decl);
12524 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
12525 && DECL_CLASS_TEMPLATE_P (decl))
12526 {
12527 tree tmpl;
12528 tree args;
12529 /* Obtain the template and the arguments. */
12530 tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
12531 args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
12532 /* Instantiate the template. */
12533 type = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
12534 /*entering_scope=*/0, tf_error | tf_user);
12535 }
12536 else
12537 type = error_mark_node;
12538 /* Qualify the resulting type. */
12539 if (type != error_mark_node && quals)
12540 type = cp_build_qualified_type (type, quals);
12541 /* Leave the SCOPE. */
12542 if (pushed_scope)
12543 pop_scope (pushed_scope);
12544
12545 return type;
12546 }
12547
12548 /* EXPR is an expression which is not type-dependent. Return a proxy
12549 for EXPR that can be used to compute the types of larger
12550 expressions containing EXPR. */
12551
12552 tree
12553 build_non_dependent_expr (tree expr)
12554 {
12555 tree inner_expr;
12556
12557 /* Preserve null pointer constants so that the type of things like
12558 "p == 0" where "p" is a pointer can be determined. */
12559 if (null_ptr_cst_p (expr))
12560 return expr;
12561 /* Preserve OVERLOADs; the functions must be available to resolve
12562 types. */
12563 inner_expr = (TREE_CODE (expr) == ADDR_EXPR ?
12564 TREE_OPERAND (expr, 0) : expr);
12565 if (is_overloaded_fn (inner_expr)
12566 || TREE_CODE (inner_expr) == OFFSET_REF)
12567 return expr;
12568 /* There is no need to return a proxy for a variable. */
12569 if (TREE_CODE (expr) == VAR_DECL)
12570 return expr;
12571 /* Preserve string constants; conversions from string constants to
12572 "char *" are allowed, even though normally a "const char *"
12573 cannot be used to initialize a "char *". */
12574 if (TREE_CODE (expr) == STRING_CST)
12575 return expr;
12576 /* Preserve arithmetic constants, as an optimization -- there is no
12577 reason to create a new node. */
12578 if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
12579 return expr;
12580 /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
12581 There is at least one place where we want to know that a
12582 particular expression is a throw-expression: when checking a ?:
12583 expression, there are special rules if the second or third
12584 argument is a throw-expression. */
12585 if (TREE_CODE (expr) == THROW_EXPR)
12586 return expr;
12587
12588 if (TREE_CODE (expr) == COND_EXPR)
12589 return build3 (COND_EXPR,
12590 TREE_TYPE (expr),
12591 TREE_OPERAND (expr, 0),
12592 (TREE_OPERAND (expr, 1)
12593 ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
12594 : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
12595 build_non_dependent_expr (TREE_OPERAND (expr, 2)));
12596 if (TREE_CODE (expr) == COMPOUND_EXPR
12597 && !COMPOUND_EXPR_OVERLOADED (expr))
12598 return build2 (COMPOUND_EXPR,
12599 TREE_TYPE (expr),
12600 TREE_OPERAND (expr, 0),
12601 build_non_dependent_expr (TREE_OPERAND (expr, 1)));
12602
12603 /* Otherwise, build a NON_DEPENDENT_EXPR.
12604
12605 REFERENCE_TYPEs are not stripped for expressions in templates
12606 because doing so would play havoc with mangling. Consider, for
12607 example:
12608
12609 template <typename T> void f<T& g>() { g(); }
12610
12611 In the body of "f", the expression for "g" will have
12612 REFERENCE_TYPE, even though the standard says that it should
12613 not. The reason is that we must preserve the syntactic form of
12614 the expression so that mangling (say) "f<g>" inside the body of
12615 "f" works out correctly. Therefore, the REFERENCE_TYPE is
12616 stripped here. */
12617 return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
12618 }
12619
12620 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
12621 Return a new TREE_LIST with the various arguments replaced with
12622 equivalent non-dependent expressions. */
12623
12624 tree
12625 build_non_dependent_args (tree args)
12626 {
12627 tree a;
12628 tree new_args;
12629
12630 new_args = NULL_TREE;
12631 for (a = args; a; a = TREE_CHAIN (a))
12632 new_args = tree_cons (NULL_TREE,
12633 build_non_dependent_expr (TREE_VALUE (a)),
12634 new_args);
12635 return nreverse (new_args);
12636 }
12637
12638 #include "gt-cp-pt.h"
This page took 0.577295 seconds and 6 git commands to generate.