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