pt.c (lookup_template_class): Make sure it's a primary template or template_template_...
[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 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 GNU CC.
8
9 GNU CC 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 GNU CC 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 GNU CC; see the file COPYING. If not, write to
21 the Free Software Foundation, 59 Temple Place - Suite 330,
22 Boston, MA 02111-1307, 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 "obstack.h"
32
33 #include "tree.h"
34 #include "flags.h"
35 #include "cp-tree.h"
36 #include "decl.h"
37 #include "parse.h"
38 #include "lex.h"
39 #include "output.h"
40 #include "except.h"
41 #include "toplev.h"
42 #include "rtl.h"
43 #include "ggc.h"
44 #include "timevar.h"
45
46 /* The type of functions taking a tree, and some additional data, and
47 returning an int. */
48 typedef int (*tree_fn_t) PARAMS ((tree, void*));
49
50 extern struct obstack permanent_obstack;
51
52 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
53 instantiations have been deferred, either because their definitions
54 were not yet available, or because we were putting off doing the
55 work. The TREE_PURPOSE of each entry is a SRCLOC indicating where
56 the instantiate request occurred; the TREE_VALUE is a either a DECL
57 (for a function or static data member), or a TYPE (for a class)
58 indicating what we are hoping to instantiate. */
59 static tree pending_templates;
60 static tree *template_tail = &pending_templates;
61
62 static tree maybe_templates;
63 static tree *maybe_template_tail = &maybe_templates;
64
65 int processing_template_parmlist;
66 static int template_header_count;
67
68 static tree saved_trees;
69 static varray_type inline_parm_levels;
70 static size_t inline_parm_levels_used;
71
72 static tree current_tinst_level;
73
74 /* A map from local variable declarations in the body of the template
75 presently being instantiated to the corresponding instantiated
76 local variables. */
77 static htab_t local_specializations;
78
79 #define obstack_chunk_alloc xmalloc
80 #define obstack_chunk_free free
81
82 #define UNIFY_ALLOW_NONE 0
83 #define UNIFY_ALLOW_MORE_CV_QUAL 1
84 #define UNIFY_ALLOW_LESS_CV_QUAL 2
85 #define UNIFY_ALLOW_DERIVED 4
86 #define UNIFY_ALLOW_INTEGER 8
87 #define UNIFY_ALLOW_OUTER_LEVEL 16
88 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
89 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
90
91 #define GTB_VIA_VIRTUAL 1 /* The base class we are examining is
92 virtual, or a base class of a virtual
93 base. */
94 #define GTB_IGNORE_TYPE 2 /* We don't need to try to unify the current
95 type with the desired type. */
96
97 static int resolve_overloaded_unification PARAMS ((tree, tree, tree, tree,
98 unification_kind_t, int));
99 static int try_one_overload PARAMS ((tree, tree, tree, tree, tree,
100 unification_kind_t, int));
101 static int unify PARAMS ((tree, tree, tree, tree, int));
102 static void add_pending_template PARAMS ((tree));
103 static int push_tinst_level PARAMS ((tree));
104 static void reopen_tinst_level PARAMS ((tree));
105 static tree classtype_mangled_name PARAMS ((tree));
106 static char *mangle_class_name_for_template PARAMS ((const char *, tree, tree));
107 static tree tsubst_initializer_list PARAMS ((tree, tree));
108 static int list_eq PARAMS ((tree, tree));
109 static tree get_class_bindings PARAMS ((tree, tree, tree));
110 static tree coerce_template_parms PARAMS ((tree, tree, tree, int, int));
111 static void tsubst_enum PARAMS ((tree, tree, tree));
112 static tree add_to_template_args PARAMS ((tree, tree));
113 static tree add_outermost_template_args PARAMS ((tree, tree));
114 static int maybe_adjust_types_for_deduction PARAMS ((unification_kind_t, tree*,
115 tree*));
116 static int type_unification_real PARAMS ((tree, tree, tree, tree,
117 int, unification_kind_t, int, int));
118 static void note_template_header PARAMS ((int));
119 static tree maybe_fold_nontype_arg PARAMS ((tree));
120 static tree convert_nontype_argument PARAMS ((tree, tree));
121 static tree convert_template_argument PARAMS ((tree, tree, tree, int,
122 int , tree));
123 static tree get_bindings_overload PARAMS ((tree, tree, tree));
124 static int for_each_template_parm PARAMS ((tree, tree_fn_t, void*));
125 static tree build_template_parm_index PARAMS ((int, int, int, tree, tree));
126 static int inline_needs_template_parms PARAMS ((tree));
127 static void push_inline_template_parms_recursive PARAMS ((tree, int));
128 static tree retrieve_specialization PARAMS ((tree, tree));
129 static tree retrieve_local_specialization PARAMS ((tree));
130 static tree register_specialization PARAMS ((tree, tree, tree));
131 static void register_local_specialization PARAMS ((tree, tree));
132 static int unregister_specialization PARAMS ((tree, tree));
133 static tree reduce_template_parm_level PARAMS ((tree, tree, int));
134 static tree build_template_decl PARAMS ((tree, tree));
135 static int mark_template_parm PARAMS ((tree, void *));
136 static tree tsubst_friend_function PARAMS ((tree, tree));
137 static tree tsubst_friend_class PARAMS ((tree, tree));
138 static tree get_bindings_real PARAMS ((tree, tree, tree, int, int, int));
139 static int template_decl_level PARAMS ((tree));
140 static tree maybe_get_template_decl_from_type_decl PARAMS ((tree));
141 static int check_cv_quals_for_unify PARAMS ((int, tree, tree));
142 static tree tsubst_template_arg_vector PARAMS ((tree, tree, int));
143 static tree tsubst_template_parms PARAMS ((tree, tree, int));
144 static void regenerate_decl_from_template PARAMS ((tree, tree));
145 static tree most_specialized PARAMS ((tree, tree, tree));
146 static tree most_specialized_class PARAMS ((tree, tree));
147 static void set_mangled_name_for_template_decl PARAMS ((tree));
148 static int template_class_depth_real PARAMS ((tree, int));
149 static tree tsubst_aggr_type PARAMS ((tree, tree, int, tree, int));
150 static tree tsubst_decl PARAMS ((tree, tree, tree));
151 static tree tsubst_arg_types PARAMS ((tree, tree, int, tree));
152 static tree tsubst_function_type PARAMS ((tree, tree, int, tree));
153 static void check_specialization_scope PARAMS ((void));
154 static tree process_partial_specialization PARAMS ((tree));
155 static void set_current_access_from_decl PARAMS ((tree));
156 static void check_default_tmpl_args PARAMS ((tree, tree, int, int));
157 static tree tsubst_call_declarator_parms PARAMS ((tree, tree, int, tree));
158 static tree get_template_base_recursive PARAMS ((tree, tree,
159 tree, tree, tree, int));
160 static tree get_template_base PARAMS ((tree, tree, tree, tree));
161 static int verify_class_unification PARAMS ((tree, tree, tree));
162 static tree try_class_unification PARAMS ((tree, tree, tree, tree));
163 static int coerce_template_template_parms PARAMS ((tree, tree, int,
164 tree, tree));
165 static tree determine_specialization PARAMS ((tree, tree, tree *, int));
166 static int template_args_equal PARAMS ((tree, tree));
167 static void tsubst_default_arguments PARAMS ((tree));
168 static tree for_each_template_parm_r PARAMS ((tree *, int *, void *));
169 static tree instantiate_clone PARAMS ((tree, tree));
170 static tree copy_default_args_to_explicit_spec_1 PARAMS ((tree, tree));
171 static void copy_default_args_to_explicit_spec PARAMS ((tree));
172 static int invalid_nontype_parm_type_p PARAMS ((tree, int));
173
174 /* Called once to initialize pt.c. */
175
176 void
177 init_pt ()
178 {
179 ggc_add_tree_root (&pending_templates, 1);
180 ggc_add_tree_root (&maybe_templates, 1);
181 ggc_add_tree_root (&saved_trees, 1);
182 ggc_add_tree_root (&current_tinst_level, 1);
183 }
184
185 /* Do any processing required when DECL (a member template declaration
186 using TEMPLATE_PARAMETERS as its innermost parameter list) is
187 finished. Returns the TEMPLATE_DECL corresponding to DECL, unless
188 it is a specialization, in which case the DECL itself is returned. */
189
190 tree
191 finish_member_template_decl (decl)
192 tree decl;
193 {
194 if (decl == NULL_TREE || decl == void_type_node)
195 return NULL_TREE;
196 else if (decl == error_mark_node)
197 /* By returning NULL_TREE, the parser will just ignore this
198 declaration. We have already issued the error. */
199 return NULL_TREE;
200 else if (TREE_CODE (decl) == TREE_LIST)
201 {
202 /* Assume that the class is the only declspec. */
203 decl = TREE_VALUE (decl);
204 if (IS_AGGR_TYPE (decl) && CLASSTYPE_TEMPLATE_INFO (decl)
205 && ! CLASSTYPE_TEMPLATE_SPECIALIZATION (decl))
206 {
207 tree tmpl = CLASSTYPE_TI_TEMPLATE (decl);
208 check_member_template (tmpl);
209 return tmpl;
210 }
211 return NULL_TREE;
212 }
213 else if (TREE_CODE (decl) == FIELD_DECL)
214 cp_error ("data member `%D' cannot be a member template", decl);
215 else if (DECL_TEMPLATE_INFO (decl))
216 {
217 if (!DECL_TEMPLATE_SPECIALIZATION (decl))
218 {
219 check_member_template (DECL_TI_TEMPLATE (decl));
220 return DECL_TI_TEMPLATE (decl);
221 }
222 else
223 return decl;
224 }
225 else
226 cp_error ("invalid member template declaration `%D'", decl);
227
228 return error_mark_node;
229 }
230
231 /* Returns the template nesting level of the indicated class TYPE.
232
233 For example, in:
234 template <class T>
235 struct A
236 {
237 template <class U>
238 struct B {};
239 };
240
241 A<T>::B<U> has depth two, while A<T> has depth one.
242 Both A<T>::B<int> and A<int>::B<U> have depth one, if
243 COUNT_SPECIALIZATIONS is 0 or if they are instantiations, not
244 specializations.
245
246 This function is guaranteed to return 0 if passed NULL_TREE so
247 that, for example, `template_class_depth (current_class_type)' is
248 always safe. */
249
250 static int
251 template_class_depth_real (type, count_specializations)
252 tree type;
253 int count_specializations;
254 {
255 int depth;
256
257 for (depth = 0;
258 type && TREE_CODE (type) != NAMESPACE_DECL;
259 type = (TREE_CODE (type) == FUNCTION_DECL)
260 ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
261 {
262 if (TREE_CODE (type) != FUNCTION_DECL)
263 {
264 if (CLASSTYPE_TEMPLATE_INFO (type)
265 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type))
266 && ((count_specializations
267 && CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
268 || uses_template_parms (CLASSTYPE_TI_ARGS (type))))
269 ++depth;
270 }
271 else
272 {
273 if (DECL_TEMPLATE_INFO (type)
274 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (type))
275 && ((count_specializations
276 && DECL_TEMPLATE_SPECIALIZATION (type))
277 || uses_template_parms (DECL_TI_ARGS (type))))
278 ++depth;
279 }
280 }
281
282 return depth;
283 }
284
285 /* Returns the template nesting level of the indicated class TYPE.
286 Like template_class_depth_real, but instantiations do not count in
287 the depth. */
288
289 int
290 template_class_depth (type)
291 tree type;
292 {
293 return template_class_depth_real (type, /*count_specializations=*/0);
294 }
295
296 /* Returns 1 if processing DECL as part of do_pending_inlines
297 needs us to push template parms. */
298
299 static int
300 inline_needs_template_parms (decl)
301 tree decl;
302 {
303 if (! DECL_TEMPLATE_INFO (decl))
304 return 0;
305
306 return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
307 > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
308 }
309
310 /* Subroutine of maybe_begin_member_template_processing.
311 Push the template parms in PARMS, starting from LEVELS steps into the
312 chain, and ending at the beginning, since template parms are listed
313 innermost first. */
314
315 static void
316 push_inline_template_parms_recursive (parmlist, levels)
317 tree parmlist;
318 int levels;
319 {
320 tree parms = TREE_VALUE (parmlist);
321 int i;
322
323 if (levels > 1)
324 push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
325
326 ++processing_template_decl;
327 current_template_parms
328 = tree_cons (size_int (processing_template_decl),
329 parms, current_template_parms);
330 TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
331
332 pushlevel (0);
333 for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
334 {
335 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
336 my_friendly_assert (DECL_P (parm), 0);
337
338 switch (TREE_CODE (parm))
339 {
340 case TYPE_DECL:
341 case TEMPLATE_DECL:
342 pushdecl (parm);
343 break;
344
345 case PARM_DECL:
346 {
347 /* Make a CONST_DECL as is done in process_template_parm.
348 It is ugly that we recreate this here; the original
349 version built in process_template_parm is no longer
350 available. */
351 tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
352 TREE_TYPE (parm));
353 DECL_ARTIFICIAL (decl) = 1;
354 DECL_INITIAL (decl) = DECL_INITIAL (parm);
355 SET_DECL_TEMPLATE_PARM_P (decl);
356 pushdecl (decl);
357 }
358 break;
359
360 default:
361 my_friendly_abort (0);
362 }
363 }
364 }
365
366 /* Restore the template parameter context for a member template or
367 a friend template defined in a class definition. */
368
369 void
370 maybe_begin_member_template_processing (decl)
371 tree decl;
372 {
373 tree parms;
374 int levels = 0;
375
376 if (inline_needs_template_parms (decl))
377 {
378 parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
379 levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
380
381 if (DECL_TEMPLATE_SPECIALIZATION (decl))
382 {
383 --levels;
384 parms = TREE_CHAIN (parms);
385 }
386
387 push_inline_template_parms_recursive (parms, levels);
388 }
389
390 /* Remember how many levels of template parameters we pushed so that
391 we can pop them later. */
392 if (!inline_parm_levels)
393 VARRAY_INT_INIT (inline_parm_levels, 4, "inline_parm_levels");
394 if (inline_parm_levels_used == inline_parm_levels->num_elements)
395 VARRAY_GROW (inline_parm_levels, 2 * inline_parm_levels_used);
396 VARRAY_INT (inline_parm_levels, inline_parm_levels_used) = levels;
397 ++inline_parm_levels_used;
398 }
399
400 /* Undo the effects of begin_member_template_processing. */
401
402 void
403 maybe_end_member_template_processing ()
404 {
405 int i;
406
407 if (!inline_parm_levels_used)
408 return;
409
410 --inline_parm_levels_used;
411 for (i = 0;
412 i < VARRAY_INT (inline_parm_levels, inline_parm_levels_used);
413 ++i)
414 {
415 --processing_template_decl;
416 current_template_parms = TREE_CHAIN (current_template_parms);
417 poplevel (0, 0, 0);
418 }
419 }
420
421 /* Returns non-zero iff T is a member template function. We must be
422 careful as in
423
424 template <class T> class C { void f(); }
425
426 Here, f is a template function, and a member, but not a member
427 template. This function does not concern itself with the origin of
428 T, only its present state. So if we have
429
430 template <class T> class C { template <class U> void f(U); }
431
432 then neither C<int>::f<char> nor C<T>::f<double> is considered
433 to be a member template. But, `template <class U> void
434 C<int>::f(U)' is considered a member template. */
435
436 int
437 is_member_template (t)
438 tree t;
439 {
440 if (!DECL_FUNCTION_TEMPLATE_P (t))
441 /* Anything that isn't a function or a template function is
442 certainly not a member template. */
443 return 0;
444
445 /* A local class can't have member templates. */
446 if (decl_function_context (t))
447 return 0;
448
449 return (DECL_FUNCTION_MEMBER_P (DECL_TEMPLATE_RESULT (t))
450 /* If there are more levels of template parameters than
451 there are template classes surrounding the declaration,
452 then we have a member template. */
453 && (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (t)) >
454 template_class_depth (DECL_CONTEXT (t))));
455 }
456
457 #if 0 /* UNUSED */
458 /* Returns non-zero iff T is a member template class. See
459 is_member_template for a description of what precisely constitutes
460 a member template. */
461
462 int
463 is_member_template_class (t)
464 tree t;
465 {
466 if (!DECL_CLASS_TEMPLATE_P (t))
467 /* Anything that isn't a class template, is certainly not a member
468 template. */
469 return 0;
470
471 if (!DECL_CLASS_SCOPE_P (t))
472 /* Anything whose context isn't a class type is surely not a
473 member template. */
474 return 0;
475
476 /* If there are more levels of template parameters than there are
477 template classes surrounding the declaration, then we have a
478 member template. */
479 return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (t)) >
480 template_class_depth (DECL_CONTEXT (t)));
481 }
482 #endif
483
484 /* Return a new template argument vector which contains all of ARGS,
485 but has as its innermost set of arguments the EXTRA_ARGS. */
486
487 static tree
488 add_to_template_args (args, extra_args)
489 tree args;
490 tree extra_args;
491 {
492 tree new_args;
493 int extra_depth;
494 int i;
495 int j;
496
497 extra_depth = TMPL_ARGS_DEPTH (extra_args);
498 new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
499
500 for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
501 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
502
503 for (j = 1; j <= extra_depth; ++j, ++i)
504 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
505
506 return new_args;
507 }
508
509 /* Like add_to_template_args, but only the outermost ARGS are added to
510 the EXTRA_ARGS. In particular, all but TMPL_ARGS_DEPTH
511 (EXTRA_ARGS) levels are added. This function is used to combine
512 the template arguments from a partial instantiation with the
513 template arguments used to attain the full instantiation from the
514 partial instantiation. */
515
516 static tree
517 add_outermost_template_args (args, extra_args)
518 tree args;
519 tree extra_args;
520 {
521 tree new_args;
522
523 /* If there are more levels of EXTRA_ARGS than there are ARGS,
524 something very fishy is going on. */
525 my_friendly_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args),
526 0);
527
528 /* If *all* the new arguments will be the EXTRA_ARGS, just return
529 them. */
530 if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
531 return extra_args;
532
533 /* For the moment, we make ARGS look like it contains fewer levels. */
534 TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
535
536 new_args = add_to_template_args (args, extra_args);
537
538 /* Now, we restore ARGS to its full dimensions. */
539 TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
540
541 return new_args;
542 }
543
544 /* Return the N levels of innermost template arguments from the ARGS. */
545
546 tree
547 get_innermost_template_args (args, n)
548 tree args;
549 int n;
550 {
551 tree new_args;
552 int extra_levels;
553 int i;
554
555 my_friendly_assert (n >= 0, 20000603);
556
557 /* If N is 1, just return the innermost set of template arguments. */
558 if (n == 1)
559 return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
560
561 /* If we're not removing anything, just return the arguments we were
562 given. */
563 extra_levels = TMPL_ARGS_DEPTH (args) - n;
564 my_friendly_assert (extra_levels >= 0, 20000603);
565 if (extra_levels == 0)
566 return args;
567
568 /* Make a new set of arguments, not containing the outer arguments. */
569 new_args = make_tree_vec (n);
570 for (i = 1; i <= n; ++i)
571 SET_TMPL_ARGS_LEVEL (new_args, i,
572 TMPL_ARGS_LEVEL (args, i + extra_levels));
573
574 return new_args;
575 }
576
577 /* We've got a template header coming up; push to a new level for storing
578 the parms. */
579
580 void
581 begin_template_parm_list ()
582 {
583 /* We use a non-tag-transparent scope here, which causes pushtag to
584 put tags in this scope, rather than in the enclosing class or
585 namespace scope. This is the right thing, since we want
586 TEMPLATE_DECLS, and not TYPE_DECLS for template classes. For a
587 global template class, push_template_decl handles putting the
588 TEMPLATE_DECL into top-level scope. For a nested template class,
589 e.g.:
590
591 template <class T> struct S1 {
592 template <class T> struct S2 {};
593 };
594
595 pushtag contains special code to call pushdecl_with_scope on the
596 TEMPLATE_DECL for S2. */
597 begin_scope (sk_template_parms);
598 ++processing_template_decl;
599 ++processing_template_parmlist;
600 note_template_header (0);
601 }
602
603 /* This routine is called when a specialization is declared. If it is
604 illegal to declare a specialization here, an error is reported. */
605
606 static void
607 check_specialization_scope ()
608 {
609 tree scope = current_scope ();
610
611 /* [temp.expl.spec]
612
613 An explicit specialization shall be declared in the namespace of
614 which the template is a member, or, for member templates, in the
615 namespace of which the enclosing class or enclosing class
616 template is a member. An explicit specialization of a member
617 function, member class or static data member of a class template
618 shall be declared in the namespace of which the class template
619 is a member. */
620 if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
621 cp_error ("explicit specialization in non-namespace scope `%D'",
622 scope);
623
624 /* [temp.expl.spec]
625
626 In an explicit specialization declaration for a member of a class
627 template or a member template that appears in namespace scope,
628 the member template and some of its enclosing class templates may
629 remain unspecialized, except that the declaration shall not
630 explicitly specialize a class member template if its enclosing
631 class templates are not explicitly specialized as well. */
632 if (current_template_parms)
633 cp_error ("enclosing class templates are not explicitly specialized");
634 }
635
636 /* We've just seen template <>. */
637
638 void
639 begin_specialization ()
640 {
641 begin_scope (sk_template_spec);
642 note_template_header (1);
643 check_specialization_scope ();
644 }
645
646 /* Called at then end of processing a declaration preceded by
647 template<>. */
648
649 void
650 end_specialization ()
651 {
652 finish_scope ();
653 reset_specialization ();
654 }
655
656 /* Any template <>'s that we have seen thus far are not referring to a
657 function specialization. */
658
659 void
660 reset_specialization ()
661 {
662 processing_specialization = 0;
663 template_header_count = 0;
664 }
665
666 /* We've just seen a template header. If SPECIALIZATION is non-zero,
667 it was of the form template <>. */
668
669 static void
670 note_template_header (specialization)
671 int specialization;
672 {
673 processing_specialization = specialization;
674 template_header_count++;
675 }
676
677 /* We're beginning an explicit instantiation. */
678
679 void
680 begin_explicit_instantiation ()
681 {
682 ++processing_explicit_instantiation;
683 }
684
685
686 void
687 end_explicit_instantiation ()
688 {
689 my_friendly_assert(processing_explicit_instantiation > 0, 0);
690 --processing_explicit_instantiation;
691 }
692
693 /* The TYPE is being declared. If it is a template type, that means it
694 is a partial specialization. Do appropriate error-checking. */
695
696 void
697 maybe_process_partial_specialization (type)
698 tree type;
699 {
700 if (IS_AGGR_TYPE (type) && CLASSTYPE_USE_TEMPLATE (type))
701 {
702 if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
703 && !COMPLETE_TYPE_P (type))
704 {
705 if (current_namespace
706 != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
707 {
708 cp_pedwarn ("specializing `%#T' in different namespace", type);
709 cp_pedwarn_at (" from definition of `%#D'",
710 CLASSTYPE_TI_TEMPLATE (type));
711 }
712 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
713 if (processing_template_decl)
714 push_template_decl (TYPE_MAIN_DECL (type));
715 }
716 else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
717 cp_error ("specialization of `%T' after instantiation", type);
718 }
719 else if (processing_specialization)
720 cp_error ("explicit specialization of non-template `%T'", type);
721 }
722
723 /* Retrieve the specialization (in the sense of [temp.spec] - a
724 specialization is either an instantiation or an explicit
725 specialization) of TMPL for the given template ARGS. If there is
726 no such specialization, return NULL_TREE. The ARGS are a vector of
727 arguments, or a vector of vectors of arguments, in the case of
728 templates with more than one level of parameters. */
729
730 static tree
731 retrieve_specialization (tmpl, args)
732 tree tmpl;
733 tree args;
734 {
735 tree s;
736
737 my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 0);
738
739 /* There should be as many levels of arguments as there are
740 levels of parameters. */
741 my_friendly_assert (TMPL_ARGS_DEPTH (args)
742 == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)),
743 0);
744
745 for (s = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
746 s != NULL_TREE;
747 s = TREE_CHAIN (s))
748 if (comp_template_args (TREE_PURPOSE (s), args))
749 return TREE_VALUE (s);
750
751 return NULL_TREE;
752 }
753
754 /* Like retrieve_specialization, but for local declarations. */
755
756 static tree
757 retrieve_local_specialization (tmpl)
758 tree tmpl;
759 {
760 return (tree) htab_find (local_specializations, tmpl);
761 }
762
763 /* Returns non-zero iff DECL is a specialization of TMPL. */
764
765 int
766 is_specialization_of (decl, tmpl)
767 tree decl;
768 tree tmpl;
769 {
770 tree t;
771
772 if (TREE_CODE (decl) == FUNCTION_DECL)
773 {
774 for (t = decl;
775 t != NULL_TREE;
776 t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
777 if (t == tmpl)
778 return 1;
779 }
780 else
781 {
782 my_friendly_assert (TREE_CODE (decl) == TYPE_DECL, 0);
783
784 for (t = TREE_TYPE (decl);
785 t != NULL_TREE;
786 t = CLASSTYPE_USE_TEMPLATE (t)
787 ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
788 if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
789 return 1;
790 }
791
792 return 0;
793 }
794
795 /* Register the specialization SPEC as a specialization of TMPL with
796 the indicated ARGS. Returns SPEC, or an equivalent prior
797 declaration, if available. */
798
799 static tree
800 register_specialization (spec, tmpl, args)
801 tree spec;
802 tree tmpl;
803 tree args;
804 {
805 tree s;
806
807 my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 0);
808
809 if (TREE_CODE (spec) == FUNCTION_DECL
810 && uses_template_parms (DECL_TI_ARGS (spec)))
811 /* This is the FUNCTION_DECL for a partial instantiation. Don't
812 register it; we want the corresponding TEMPLATE_DECL instead.
813 We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
814 the more obvious `uses_template_parms (spec)' to avoid problems
815 with default function arguments. In particular, given
816 something like this:
817
818 template <class T> void f(T t1, T t = T())
819
820 the default argument expression is not substituted for in an
821 instantiation unless and until it is actually needed. */
822 return spec;
823
824 /* There should be as many levels of arguments as there are
825 levels of parameters. */
826 my_friendly_assert (TMPL_ARGS_DEPTH (args)
827 == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)),
828 0);
829
830 for (s = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
831 s != NULL_TREE;
832 s = TREE_CHAIN (s))
833 {
834 tree fn = TREE_VALUE (s);
835
836 /* We can sometimes try to re-register a specialization that we've
837 already got. In particular, regenerate_decl_from_template
838 calls duplicate_decls which will update the specialization
839 list. But, we'll still get called again here anyhow. It's
840 more convenient to simply allow this than to try to prevent it. */
841 if (fn == spec)
842 return spec;
843 else if (comp_template_args (TREE_PURPOSE (s), args))
844 {
845 if (DECL_TEMPLATE_SPECIALIZATION (spec))
846 {
847 if (DECL_TEMPLATE_INSTANTIATION (fn))
848 {
849 if (TREE_USED (fn)
850 || DECL_EXPLICIT_INSTANTIATION (fn))
851 {
852 cp_error ("specialization of %D after instantiation",
853 fn);
854 return spec;
855 }
856 else
857 {
858 /* This situation should occur only if the first
859 specialization is an implicit instantiation,
860 the second is an explicit specialization, and
861 the implicit instantiation has not yet been
862 used. That situation can occur if we have
863 implicitly instantiated a member function and
864 then specialized it later.
865
866 We can also wind up here if a friend
867 declaration that looked like an instantiation
868 turns out to be a specialization:
869
870 template <class T> void foo(T);
871 class S { friend void foo<>(int) };
872 template <> void foo(int);
873
874 We transform the existing DECL in place so that
875 any pointers to it become pointers to the
876 updated declaration.
877
878 If there was a definition for the template, but
879 not for the specialization, we want this to
880 look as if there is no definition, and vice
881 versa. */
882 DECL_INITIAL (fn) = NULL_TREE;
883 duplicate_decls (spec, fn);
884
885 return fn;
886 }
887 }
888 else if (DECL_TEMPLATE_SPECIALIZATION (fn))
889 {
890 duplicate_decls (spec, fn);
891 return fn;
892 }
893 }
894 }
895 }
896
897 DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
898 = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
899
900 return spec;
901 }
902
903 /* Unregister the specialization SPEC as a specialization of TMPL.
904 Returns nonzero if the SPEC was listed as a specialization of
905 TMPL. */
906
907 static int
908 unregister_specialization (spec, tmpl)
909 tree spec;
910 tree tmpl;
911 {
912 tree* s;
913
914 for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
915 *s != NULL_TREE;
916 s = &TREE_CHAIN (*s))
917 if (TREE_VALUE (*s) == spec)
918 {
919 *s = TREE_CHAIN (*s);
920 return 1;
921 }
922
923 return 0;
924 }
925
926 /* Like register_specialization, but for local declarations. We are
927 registering SPEC, an instantiation of TMPL. */
928
929 static void
930 register_local_specialization (spec, tmpl)
931 tree spec;
932 tree tmpl;
933 {
934 void **slot;
935
936 slot = htab_find_slot (local_specializations, tmpl, INSERT);
937 *slot = spec;
938 }
939
940 /* Print the list of candidate FNS in an error message. */
941
942 void
943 print_candidates (fns)
944 tree fns;
945 {
946 tree fn;
947
948 const char *str = "candidates are:";
949
950 for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
951 {
952 tree f;
953
954 for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
955 cp_error_at ("%s %+#D", str, OVL_CURRENT (f));
956 str = " ";
957 }
958 }
959
960 /* Returns the template (one of the functions given by TEMPLATE_ID)
961 which can be specialized to match the indicated DECL with the
962 explicit template args given in TEMPLATE_ID. The DECL may be
963 NULL_TREE if none is available. In that case, the functions in
964 TEMPLATE_ID are non-members.
965
966 If NEED_MEMBER_TEMPLATE is non-zero the function is known to be a
967 specialization of a member template.
968
969 The template args (those explicitly specified and those deduced)
970 are output in a newly created vector *TARGS_OUT.
971
972 If it is impossible to determine the result, an error message is
973 issued. The error_mark_node is returned to indicate failure. */
974
975 static tree
976 determine_specialization (template_id, decl, targs_out,
977 need_member_template)
978 tree template_id;
979 tree decl;
980 tree* targs_out;
981 int need_member_template;
982 {
983 tree fns;
984 tree targs;
985 tree explicit_targs;
986 tree candidates = NULL_TREE;
987 tree templates = NULL_TREE;
988
989 *targs_out = NULL_TREE;
990
991 if (template_id == error_mark_node)
992 return error_mark_node;
993
994 fns = TREE_OPERAND (template_id, 0);
995 explicit_targs = TREE_OPERAND (template_id, 1);
996
997 if (fns == error_mark_node)
998 return error_mark_node;
999
1000 /* Check for baselinks. */
1001 if (BASELINK_P (fns))
1002 fns = TREE_VALUE (fns);
1003
1004 if (!is_overloaded_fn (fns))
1005 {
1006 cp_error ("`%D' is not a function template", fns);
1007 return error_mark_node;
1008 }
1009
1010 for (; fns; fns = OVL_NEXT (fns))
1011 {
1012 tree tmpl;
1013
1014 tree fn = OVL_CURRENT (fns);
1015
1016 if (TREE_CODE (fn) == TEMPLATE_DECL)
1017 /* DECL might be a specialization of FN. */
1018 tmpl = fn;
1019 else if (need_member_template)
1020 /* FN is an ordinary member function, and we need a
1021 specialization of a member template. */
1022 continue;
1023 else if (TREE_CODE (fn) != FUNCTION_DECL)
1024 /* We can get IDENTIFIER_NODEs here in certain erroneous
1025 cases. */
1026 continue;
1027 else if (!DECL_FUNCTION_MEMBER_P (fn))
1028 /* This is just an ordinary non-member function. Nothing can
1029 be a specialization of that. */
1030 continue;
1031 else
1032 {
1033 tree decl_arg_types;
1034
1035 /* This is an ordinary member function. However, since
1036 we're here, we can assume it's enclosing class is a
1037 template class. For example,
1038
1039 template <typename T> struct S { void f(); };
1040 template <> void S<int>::f() {}
1041
1042 Here, S<int>::f is a non-template, but S<int> is a
1043 template class. If FN has the same type as DECL, we
1044 might be in business. */
1045 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1046 TREE_TYPE (TREE_TYPE (fn))))
1047 /* The return types differ. */
1048 continue;
1049
1050 /* Adjust the type of DECL in case FN is a static member. */
1051 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1052 if (DECL_STATIC_FUNCTION_P (fn)
1053 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1054 decl_arg_types = TREE_CHAIN (decl_arg_types);
1055
1056 if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1057 decl_arg_types))
1058 /* They match! */
1059 candidates = tree_cons (NULL_TREE, fn, candidates);
1060
1061 continue;
1062 }
1063
1064 /* See whether this function might be a specialization of this
1065 template. */
1066 targs = get_bindings (tmpl, decl, explicit_targs);
1067
1068 if (!targs)
1069 /* We cannot deduce template arguments that when used to
1070 specialize TMPL will produce DECL. */
1071 continue;
1072
1073 /* Save this template, and the arguments deduced. */
1074 templates = tree_cons (targs, tmpl, templates);
1075 }
1076
1077 if (templates && TREE_CHAIN (templates))
1078 {
1079 /* We have:
1080
1081 [temp.expl.spec]
1082
1083 It is possible for a specialization with a given function
1084 signature to be instantiated from more than one function
1085 template. In such cases, explicit specification of the
1086 template arguments must be used to uniquely identify the
1087 function template specialization being specialized.
1088
1089 Note that here, there's no suggestion that we're supposed to
1090 determine which of the candidate templates is most
1091 specialized. However, we, also have:
1092
1093 [temp.func.order]
1094
1095 Partial ordering of overloaded function template
1096 declarations is used in the following contexts to select
1097 the function template to which a function template
1098 specialization refers:
1099
1100 -- when an explicit specialization refers to a function
1101 template.
1102
1103 So, we do use the partial ordering rules, at least for now.
1104 This extension can only serve to make illegal programs legal,
1105 so it's safe. And, there is strong anecdotal evidence that
1106 the committee intended the partial ordering rules to apply;
1107 the EDG front-end has that behavior, and John Spicer claims
1108 that the committee simply forgot to delete the wording in
1109 [temp.expl.spec]. */
1110 tree tmpl = most_specialized (templates, decl, explicit_targs);
1111 if (tmpl && tmpl != error_mark_node)
1112 {
1113 targs = get_bindings (tmpl, decl, explicit_targs);
1114 templates = tree_cons (targs, tmpl, NULL_TREE);
1115 }
1116 }
1117
1118 if (templates == NULL_TREE && candidates == NULL_TREE)
1119 {
1120 cp_error_at ("template-id `%D' for `%+D' does not match any template declaration",
1121 template_id, decl);
1122 return error_mark_node;
1123 }
1124 else if ((templates && TREE_CHAIN (templates))
1125 || (candidates && TREE_CHAIN (candidates))
1126 || (templates && candidates))
1127 {
1128 cp_error_at ("ambiguous template specialization `%D' for `%+D'",
1129 template_id, decl);
1130 chainon (candidates, templates);
1131 print_candidates (candidates);
1132 return error_mark_node;
1133 }
1134
1135 /* We have one, and exactly one, match. */
1136 if (candidates)
1137 {
1138 /* It was a specialization of an ordinary member function in a
1139 template class. */
1140 *targs_out = copy_node (DECL_TI_ARGS (TREE_VALUE (candidates)));
1141 return DECL_TI_TEMPLATE (TREE_VALUE (candidates));
1142 }
1143
1144 /* It was a specialization of a template. */
1145 targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
1146 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1147 {
1148 *targs_out = copy_node (targs);
1149 SET_TMPL_ARGS_LEVEL (*targs_out,
1150 TMPL_ARGS_DEPTH (*targs_out),
1151 TREE_PURPOSE (templates));
1152 }
1153 else
1154 *targs_out = TREE_PURPOSE (templates);
1155 return TREE_VALUE (templates);
1156 }
1157
1158 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1159 but with the default argument values filled in from those in the
1160 TMPL_TYPES. */
1161
1162 static tree
1163 copy_default_args_to_explicit_spec_1 (spec_types,
1164 tmpl_types)
1165 tree spec_types;
1166 tree tmpl_types;
1167 {
1168 tree new_spec_types;
1169
1170 if (!spec_types)
1171 return NULL_TREE;
1172
1173 if (spec_types == void_list_node)
1174 return void_list_node;
1175
1176 /* Substitute into the rest of the list. */
1177 new_spec_types =
1178 copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1179 TREE_CHAIN (tmpl_types));
1180
1181 /* Add the default argument for this parameter. */
1182 return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1183 TREE_VALUE (spec_types),
1184 new_spec_types);
1185 }
1186
1187 /* DECL is an explicit specialization. Replicate default arguments
1188 from the template it specializes. (That way, code like:
1189
1190 template <class T> void f(T = 3);
1191 template <> void f(double);
1192 void g () { f (); }
1193
1194 works, as required.) An alternative approach would be to look up
1195 the correct default arguments at the call-site, but this approach
1196 is consistent with how implicit instantiations are handled. */
1197
1198 static void
1199 copy_default_args_to_explicit_spec (decl)
1200 tree decl;
1201 {
1202 tree tmpl;
1203 tree spec_types;
1204 tree tmpl_types;
1205 tree new_spec_types;
1206 tree old_type;
1207 tree new_type;
1208 tree t;
1209 tree object_type = NULL_TREE;
1210 tree in_charge = NULL_TREE;
1211
1212 /* See if there's anything we need to do. */
1213 tmpl = DECL_TI_TEMPLATE (decl);
1214 tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1215 for (t = tmpl_types; t; t = TREE_CHAIN (t))
1216 if (TREE_PURPOSE (t))
1217 break;
1218 if (!t)
1219 return;
1220
1221 old_type = TREE_TYPE (decl);
1222 spec_types = TYPE_ARG_TYPES (old_type);
1223
1224 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1225 {
1226 /* Remove the this pointer, but remember the object's type for
1227 CV quals. */
1228 object_type = TREE_TYPE (TREE_VALUE (spec_types));
1229 spec_types = TREE_CHAIN (spec_types);
1230 tmpl_types = TREE_CHAIN (tmpl_types);
1231
1232 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
1233 {
1234 /* DECL may contain more parameters than TMPL due to the extra
1235 in-charge parameter in constructors and destructors. */
1236 in_charge = spec_types;
1237 spec_types = TREE_CHAIN (spec_types);
1238 }
1239 }
1240
1241 /* Compute the merged default arguments. */
1242 new_spec_types =
1243 copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1244
1245 /* Compute the new FUNCTION_TYPE. */
1246 if (object_type)
1247 {
1248 if (in_charge)
1249 /* Put the in-charge parameter back. */
1250 new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1251 TREE_VALUE (in_charge),
1252 new_spec_types);
1253
1254 new_type = build_cplus_method_type (object_type,
1255 TREE_TYPE (old_type),
1256 new_spec_types);
1257 }
1258 else
1259 new_type = build_function_type (TREE_TYPE (old_type),
1260 new_spec_types);
1261 new_type = build_type_attribute_variant (new_type,
1262 TYPE_ATTRIBUTES (old_type));
1263 new_type = build_exception_variant (new_type,
1264 TYPE_RAISES_EXCEPTIONS (old_type));
1265 TREE_TYPE (decl) = new_type;
1266 }
1267
1268 /* Check to see if the function just declared, as indicated in
1269 DECLARATOR, and in DECL, is a specialization of a function
1270 template. We may also discover that the declaration is an explicit
1271 instantiation at this point.
1272
1273 Returns DECL, or an equivalent declaration that should be used
1274 instead if all goes well. Issues an error message if something is
1275 amiss. Returns error_mark_node if the error is not easily
1276 recoverable.
1277
1278 FLAGS is a bitmask consisting of the following flags:
1279
1280 2: The function has a definition.
1281 4: The function is a friend.
1282
1283 The TEMPLATE_COUNT is the number of references to qualifying
1284 template classes that appeared in the name of the function. For
1285 example, in
1286
1287 template <class T> struct S { void f(); };
1288 void S<int>::f();
1289
1290 the TEMPLATE_COUNT would be 1. However, explicitly specialized
1291 classes are not counted in the TEMPLATE_COUNT, so that in
1292
1293 template <class T> struct S {};
1294 template <> struct S<int> { void f(); }
1295 template <> void S<int>::f();
1296
1297 the TEMPLATE_COUNT would be 0. (Note that this declaration is
1298 illegal; there should be no template <>.)
1299
1300 If the function is a specialization, it is marked as such via
1301 DECL_TEMPLATE_SPECIALIZATION. Furthermore, its DECL_TEMPLATE_INFO
1302 is set up correctly, and it is added to the list of specializations
1303 for that template. */
1304
1305 tree
1306 check_explicit_specialization (declarator, decl, template_count, flags)
1307 tree declarator;
1308 tree decl;
1309 int template_count;
1310 int flags;
1311 {
1312 int have_def = flags & 2;
1313 int is_friend = flags & 4;
1314 int specialization = 0;
1315 int explicit_instantiation = 0;
1316 int member_specialization = 0;
1317 tree ctype = DECL_CLASS_CONTEXT (decl);
1318 tree dname = DECL_NAME (decl);
1319 tmpl_spec_kind tsk;
1320
1321 tsk = current_tmpl_spec_kind (template_count);
1322
1323 switch (tsk)
1324 {
1325 case tsk_none:
1326 if (processing_specialization)
1327 {
1328 specialization = 1;
1329 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1330 }
1331 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1332 {
1333 if (is_friend)
1334 /* This could be something like:
1335
1336 template <class T> void f(T);
1337 class S { friend void f<>(int); } */
1338 specialization = 1;
1339 else
1340 {
1341 /* This case handles bogus declarations like template <>
1342 template <class T> void f<int>(); */
1343
1344 cp_error ("template-id `%D' in declaration of primary template",
1345 declarator);
1346 return decl;
1347 }
1348 }
1349 break;
1350
1351 case tsk_invalid_member_spec:
1352 /* The error has already been reported in
1353 check_specialization_scope. */
1354 return error_mark_node;
1355
1356 case tsk_invalid_expl_inst:
1357 cp_error ("template parameter list used in explicit instantiation");
1358
1359 /* Fall through. */
1360
1361 case tsk_expl_inst:
1362 if (have_def)
1363 cp_error ("definition provided for explicit instantiation");
1364
1365 explicit_instantiation = 1;
1366 break;
1367
1368 case tsk_excessive_parms:
1369 cp_error ("too many template parameter lists in declaration of `%D'",
1370 decl);
1371 return error_mark_node;
1372
1373 /* Fall through. */
1374 case tsk_expl_spec:
1375 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1376 if (ctype)
1377 member_specialization = 1;
1378 else
1379 specialization = 1;
1380 break;
1381
1382 case tsk_insufficient_parms:
1383 if (template_header_count)
1384 {
1385 cp_error("too few template parameter lists in declaration of `%D'",
1386 decl);
1387 return decl;
1388 }
1389 else if (ctype != NULL_TREE
1390 && !TYPE_BEING_DEFINED (ctype)
1391 && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype)
1392 && !is_friend)
1393 {
1394 /* For backwards compatibility, we accept:
1395
1396 template <class T> struct S { void f(); };
1397 void S<int>::f() {} // Missing template <>
1398
1399 That used to be legal C++. */
1400 if (pedantic)
1401 cp_pedwarn
1402 ("explicit specialization not preceded by `template <>'");
1403 specialization = 1;
1404 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1405 }
1406 break;
1407
1408 case tsk_template:
1409 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1410 {
1411 /* This case handles bogus declarations like template <>
1412 template <class T> void f<int>(); */
1413
1414 if (uses_template_parms (declarator))
1415 cp_error ("partial specialization `%D' of function template",
1416 declarator);
1417 else
1418 cp_error ("template-id `%D' in declaration of primary template",
1419 declarator);
1420 return decl;
1421 }
1422
1423 if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1424 /* This is a specialization of a member template, without
1425 specialization the containing class. Something like:
1426
1427 template <class T> struct S {
1428 template <class U> void f (U);
1429 };
1430 template <> template <class U> void S<int>::f(U) {}
1431
1432 That's a specialization -- but of the entire template. */
1433 specialization = 1;
1434 break;
1435
1436 default:
1437 my_friendly_abort (20000309);
1438 }
1439
1440 if (specialization || member_specialization)
1441 {
1442 tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
1443 for (; t; t = TREE_CHAIN (t))
1444 if (TREE_PURPOSE (t))
1445 {
1446 cp_pedwarn
1447 ("default argument specified in explicit specialization");
1448 break;
1449 }
1450 if (current_lang_name == lang_name_c)
1451 cp_error ("template specialization with C linkage");
1452 }
1453
1454 if (specialization || member_specialization || explicit_instantiation)
1455 {
1456 tree tmpl = NULL_TREE;
1457 tree targs = NULL_TREE;
1458
1459 /* Make sure that the declarator is a TEMPLATE_ID_EXPR. */
1460 if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
1461 {
1462 tree fns;
1463
1464 my_friendly_assert (TREE_CODE (declarator) == IDENTIFIER_NODE,
1465 0);
1466 if (!ctype)
1467 fns = IDENTIFIER_NAMESPACE_VALUE (dname);
1468 else
1469 fns = dname;
1470
1471 declarator =
1472 lookup_template_function (fns, NULL_TREE);
1473 }
1474
1475 if (declarator == error_mark_node)
1476 return error_mark_node;
1477
1478 if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
1479 {
1480 if (!explicit_instantiation)
1481 /* A specialization in class scope. This is illegal,
1482 but the error will already have been flagged by
1483 check_specialization_scope. */
1484 return error_mark_node;
1485 else
1486 {
1487 /* It's not legal to write an explicit instantiation in
1488 class scope, e.g.:
1489
1490 class C { template void f(); }
1491
1492 This case is caught by the parser. However, on
1493 something like:
1494
1495 template class C { void f(); };
1496
1497 (which is illegal) we can get here. The error will be
1498 issued later. */
1499 ;
1500 }
1501
1502 return decl;
1503 }
1504 else if (TREE_CODE (TREE_OPERAND (declarator, 0)) == LOOKUP_EXPR)
1505 {
1506 /* A friend declaration. We can't do much, because we don't
1507 know what this resolves to, yet. */
1508 my_friendly_assert (is_friend != 0, 0);
1509 my_friendly_assert (!explicit_instantiation, 0);
1510 SET_DECL_IMPLICIT_INSTANTIATION (decl);
1511 return decl;
1512 }
1513 else if (ctype != NULL_TREE
1514 && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
1515 IDENTIFIER_NODE))
1516 {
1517 /* Find the list of functions in ctype that have the same
1518 name as the declared function. */
1519 tree name = TREE_OPERAND (declarator, 0);
1520 tree fns = NULL_TREE;
1521 int idx;
1522
1523 if (name == constructor_name (ctype)
1524 || name == constructor_name_full (ctype))
1525 {
1526 int is_constructor = DECL_CONSTRUCTOR_P (decl);
1527
1528 if (is_constructor ? !TYPE_HAS_CONSTRUCTOR (ctype)
1529 : !TYPE_HAS_DESTRUCTOR (ctype))
1530 {
1531 /* From [temp.expl.spec]:
1532
1533 If such an explicit specialization for the member
1534 of a class template names an implicitly-declared
1535 special member function (clause _special_), the
1536 program is ill-formed.
1537
1538 Similar language is found in [temp.explicit]. */
1539 cp_error ("specialization of implicitly-declared special member function");
1540 return error_mark_node;
1541 }
1542
1543 name = is_constructor ? ctor_identifier : dtor_identifier;
1544 }
1545
1546 if (!DECL_CONV_FN_P (decl))
1547 {
1548 idx = lookup_fnfields_1 (ctype, name);
1549 if (idx >= 0)
1550 fns = TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (ctype), idx);
1551 }
1552 else
1553 {
1554 tree methods;
1555
1556 /* For a type-conversion operator, we cannot do a
1557 name-based lookup. We might be looking for `operator
1558 int' which will be a specialization of `operator T'.
1559 So, we find *all* the conversion operators, and then
1560 select from them. */
1561 fns = NULL_TREE;
1562
1563 methods = CLASSTYPE_METHOD_VEC (ctype);
1564 if (methods)
1565 for (idx = 2; idx < TREE_VEC_LENGTH (methods); ++idx)
1566 {
1567 tree ovl = TREE_VEC_ELT (methods, idx);
1568
1569 if (!ovl || !DECL_CONV_FN_P (OVL_CURRENT (ovl)))
1570 /* There are no more conversion functions. */
1571 break;
1572
1573 /* Glue all these conversion functions together
1574 with those we already have. */
1575 for (; ovl; ovl = OVL_NEXT (ovl))
1576 fns = ovl_cons (OVL_CURRENT (ovl), fns);
1577 }
1578 }
1579
1580 if (fns == NULL_TREE)
1581 {
1582 cp_error ("no member function `%D' declared in `%T'",
1583 name, ctype);
1584 return error_mark_node;
1585 }
1586 else
1587 TREE_OPERAND (declarator, 0) = fns;
1588 }
1589
1590 /* Figure out what exactly is being specialized at this point.
1591 Note that for an explicit instantiation, even one for a
1592 member function, we cannot tell apriori whether the
1593 instantiation is for a member template, or just a member
1594 function of a template class. Even if a member template is
1595 being instantiated, the member template arguments may be
1596 elided if they can be deduced from the rest of the
1597 declaration. */
1598 tmpl = determine_specialization (declarator, decl,
1599 &targs,
1600 member_specialization);
1601
1602 if (!tmpl || tmpl == error_mark_node)
1603 /* We couldn't figure out what this declaration was
1604 specializing. */
1605 return error_mark_node;
1606 else
1607 {
1608 tree gen_tmpl = most_general_template (tmpl);
1609
1610 if (explicit_instantiation)
1611 {
1612 /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
1613 is done by do_decl_instantiation later. */
1614
1615 int arg_depth = TMPL_ARGS_DEPTH (targs);
1616 int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
1617
1618 if (arg_depth > parm_depth)
1619 {
1620 /* If TMPL is not the most general template (for
1621 example, if TMPL is a friend template that is
1622 injected into namespace scope), then there will
1623 be too many levels of TARGS. Remove some of them
1624 here. */
1625 int i;
1626 tree new_targs;
1627
1628 new_targs = make_tree_vec (parm_depth);
1629 for (i = arg_depth - parm_depth; i < arg_depth; ++i)
1630 TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
1631 = TREE_VEC_ELT (targs, i);
1632 targs = new_targs;
1633 }
1634
1635 return instantiate_template (tmpl, targs);
1636 }
1637
1638 /* If this is a specialization of a member template of a
1639 template class. In we want to return the TEMPLATE_DECL,
1640 not the specialization of it. */
1641 if (tsk == tsk_template)
1642 {
1643 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
1644 DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
1645 return tmpl;
1646 }
1647
1648 /* If we thought that the DECL was a member function, but it
1649 turns out to be specializing a static member function,
1650 make DECL a static member function as well. */
1651 if (DECL_STATIC_FUNCTION_P (tmpl)
1652 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1653 {
1654 revert_static_member_fn (decl);
1655 last_function_parms = TREE_CHAIN (last_function_parms);
1656 }
1657
1658 /* Set up the DECL_TEMPLATE_INFO for DECL. */
1659 DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
1660
1661 /* Inherit default function arguments from the template
1662 DECL is specializing. */
1663 copy_default_args_to_explicit_spec (decl);
1664
1665 /* Mangle the function name appropriately. Note that we do
1666 not mangle specializations of non-template member
1667 functions of template classes, e.g. with
1668
1669 template <class T> struct S { void f(); }
1670
1671 and given the specialization
1672
1673 template <> void S<int>::f() {}
1674
1675 we do not mangle S<int>::f() here. That's because it's
1676 just an ordinary member function and doesn't need special
1677 treatment. We do this here so that the ordinary,
1678 non-template, name-mangling algorithm will not be used
1679 later. */
1680 if ((is_member_template (tmpl) || ctype == NULL_TREE)
1681 && name_mangling_version >= 1)
1682 set_mangled_name_for_template_decl (decl);
1683
1684 if (is_friend && !have_def)
1685 /* This is not really a declaration of a specialization.
1686 It's just the name of an instantiation. But, it's not
1687 a request for an instantiation, either. */
1688 SET_DECL_IMPLICIT_INSTANTIATION (decl);
1689 else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
1690 /* This is indeed a specialization. In case of constructors
1691 and destructors, we need in-charge and not-in-charge
1692 versions in V3 ABI. */
1693 clone_function_decl (decl, /*update_method_vec_p=*/0);
1694
1695 /* Register this specialization so that we can find it
1696 again. */
1697 decl = register_specialization (decl, gen_tmpl, targs);
1698 }
1699 }
1700
1701 return decl;
1702 }
1703
1704 /* TYPE is being declared. Verify that the use of template headers
1705 and such is reasonable. Issue error messages if not. */
1706
1707 void
1708 maybe_check_template_type (type)
1709 tree type;
1710 {
1711 if (template_header_count)
1712 {
1713 /* We are in the scope of some `template <...>' header. */
1714
1715 int context_depth
1716 = template_class_depth_real (TYPE_CONTEXT (type),
1717 /*count_specializations=*/1);
1718
1719 if (template_header_count <= context_depth)
1720 /* This is OK; the template headers are for the context. We
1721 are actually too lenient here; like
1722 check_explicit_specialization we should consider the number
1723 of template types included in the actual declaration. For
1724 example,
1725
1726 template <class T> struct S {
1727 template <class U> template <class V>
1728 struct I {};
1729 };
1730
1731 is illegal, but:
1732
1733 template <class T> struct S {
1734 template <class U> struct I;
1735 };
1736
1737 template <class T> template <class U.
1738 struct S<T>::I {};
1739
1740 is not. */
1741 ;
1742 else if (template_header_count > context_depth + 1)
1743 /* There are two many template parameter lists. */
1744 cp_error ("too many template parameter lists in declaration of `%T'", type);
1745 }
1746 }
1747
1748 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
1749 parameters. These are represented in the same format used for
1750 DECL_TEMPLATE_PARMS. */
1751
1752 int comp_template_parms (parms1, parms2)
1753 tree parms1;
1754 tree parms2;
1755 {
1756 tree p1;
1757 tree p2;
1758
1759 if (parms1 == parms2)
1760 return 1;
1761
1762 for (p1 = parms1, p2 = parms2;
1763 p1 != NULL_TREE && p2 != NULL_TREE;
1764 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
1765 {
1766 tree t1 = TREE_VALUE (p1);
1767 tree t2 = TREE_VALUE (p2);
1768 int i;
1769
1770 my_friendly_assert (TREE_CODE (t1) == TREE_VEC, 0);
1771 my_friendly_assert (TREE_CODE (t2) == TREE_VEC, 0);
1772
1773 if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
1774 return 0;
1775
1776 for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
1777 {
1778 tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
1779 tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
1780
1781 if (TREE_CODE (parm1) != TREE_CODE (parm2))
1782 return 0;
1783
1784 if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM)
1785 continue;
1786 else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
1787 return 0;
1788 }
1789 }
1790
1791 if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
1792 /* One set of parameters has more parameters lists than the
1793 other. */
1794 return 0;
1795
1796 return 1;
1797 }
1798
1799 /* Complain if DECL shadows a template parameter.
1800
1801 [temp.local]: A template-parameter shall not be redeclared within its
1802 scope (including nested scopes). */
1803
1804 void
1805 check_template_shadow (decl)
1806 tree decl;
1807 {
1808 tree olddecl;
1809
1810 /* If we're not in a template, we can't possibly shadow a template
1811 parameter. */
1812 if (!current_template_parms)
1813 return;
1814
1815 /* Figure out what we're shadowing. */
1816 if (TREE_CODE (decl) == OVERLOAD)
1817 decl = OVL_CURRENT (decl);
1818 olddecl = IDENTIFIER_VALUE (DECL_NAME (decl));
1819
1820 /* If there's no previous binding for this name, we're not shadowing
1821 anything, let alone a template parameter. */
1822 if (!olddecl)
1823 return;
1824
1825 /* If we're not shadowing a template parameter, we're done. Note
1826 that OLDDECL might be an OVERLOAD (or perhaps even an
1827 ERROR_MARK), so we can't just blithely assume it to be a _DECL
1828 node. */
1829 if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
1830 return;
1831
1832 /* We check for decl != olddecl to avoid bogus errors for using a
1833 name inside a class. We check TPFI to avoid duplicate errors for
1834 inline member templates. */
1835 if (decl == olddecl
1836 || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
1837 return;
1838
1839 cp_error_at ("declaration of `%#D'", decl);
1840 cp_error_at (" shadows template parm `%#D'", olddecl);
1841 }
1842
1843 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
1844 ORIG_LEVEL, DECL, and TYPE. */
1845
1846 static tree
1847 build_template_parm_index (index, level, orig_level, decl, type)
1848 int index;
1849 int level;
1850 int orig_level;
1851 tree decl;
1852 tree type;
1853 {
1854 tree t = make_node (TEMPLATE_PARM_INDEX);
1855 TEMPLATE_PARM_IDX (t) = index;
1856 TEMPLATE_PARM_LEVEL (t) = level;
1857 TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
1858 TEMPLATE_PARM_DECL (t) = decl;
1859 TREE_TYPE (t) = type;
1860
1861 return t;
1862 }
1863
1864 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
1865 TEMPLATE_PARM_LEVEL has been decreased by LEVELS. If such a
1866 TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
1867 new one is created. */
1868
1869 static tree
1870 reduce_template_parm_level (index, type, levels)
1871 tree index;
1872 tree type;
1873 int levels;
1874 {
1875 if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
1876 || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
1877 != TEMPLATE_PARM_LEVEL (index) - levels))
1878 {
1879 tree decl
1880 = build_decl (TREE_CODE (TEMPLATE_PARM_DECL (index)),
1881 DECL_NAME (TEMPLATE_PARM_DECL (index)),
1882 type);
1883 tree t
1884 = build_template_parm_index (TEMPLATE_PARM_IDX (index),
1885 TEMPLATE_PARM_LEVEL (index) - levels,
1886 TEMPLATE_PARM_ORIG_LEVEL (index),
1887 decl, type);
1888 TEMPLATE_PARM_DESCENDANTS (index) = t;
1889
1890 DECL_ARTIFICIAL (decl) = 1;
1891 SET_DECL_TEMPLATE_PARM_P (decl);
1892
1893 /* Template template parameters need this. */
1894 DECL_TEMPLATE_PARMS (decl)
1895 = DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index));
1896 }
1897
1898 return TEMPLATE_PARM_DESCENDANTS (index);
1899 }
1900
1901 /* Process information from new template parameter NEXT and append it to the
1902 LIST being built. */
1903
1904 tree
1905 process_template_parm (list, next)
1906 tree list, next;
1907 {
1908 tree parm;
1909 tree decl = 0;
1910 tree defval;
1911 int is_type, idx;
1912
1913 parm = next;
1914 my_friendly_assert (TREE_CODE (parm) == TREE_LIST, 259);
1915 defval = TREE_PURPOSE (parm);
1916 parm = TREE_VALUE (parm);
1917 is_type = TREE_PURPOSE (parm) == class_type_node;
1918
1919 if (list)
1920 {
1921 tree p = TREE_VALUE (tree_last (list));
1922
1923 if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
1924 idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
1925 else
1926 idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
1927 ++idx;
1928 }
1929 else
1930 idx = 0;
1931
1932 if (!is_type)
1933 {
1934 my_friendly_assert (TREE_CODE (TREE_PURPOSE (parm)) == TREE_LIST, 260);
1935 /* is a const-param */
1936 parm = grokdeclarator (TREE_VALUE (parm), TREE_PURPOSE (parm),
1937 PARM, 0, NULL_TREE);
1938
1939 /* [temp.param]
1940
1941 The top-level cv-qualifiers on the template-parameter are
1942 ignored when determining its type. */
1943 TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
1944
1945 /* A template parameter is not modifiable. */
1946 TREE_READONLY (parm) = 1;
1947 if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
1948 TREE_TYPE (parm) = void_type_node;
1949 decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
1950 DECL_INITIAL (parm) = DECL_INITIAL (decl)
1951 = build_template_parm_index (idx, processing_template_decl,
1952 processing_template_decl,
1953 decl, TREE_TYPE (parm));
1954 }
1955 else
1956 {
1957 tree t;
1958 parm = TREE_VALUE (parm);
1959
1960 if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
1961 {
1962 t = make_aggr_type (TEMPLATE_TEMPLATE_PARM);
1963 /* This is for distinguishing between real templates and template
1964 template parameters */
1965 TREE_TYPE (parm) = t;
1966 TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
1967 decl = parm;
1968 }
1969 else
1970 {
1971 t = make_aggr_type (TEMPLATE_TYPE_PARM);
1972 /* parm is either IDENTIFIER_NODE or NULL_TREE */
1973 decl = build_decl (TYPE_DECL, parm, t);
1974 }
1975
1976 TYPE_NAME (t) = decl;
1977 TYPE_STUB_DECL (t) = decl;
1978 parm = decl;
1979 TEMPLATE_TYPE_PARM_INDEX (t)
1980 = build_template_parm_index (idx, processing_template_decl,
1981 processing_template_decl,
1982 decl, TREE_TYPE (parm));
1983 }
1984 DECL_ARTIFICIAL (decl) = 1;
1985 SET_DECL_TEMPLATE_PARM_P (decl);
1986 pushdecl (decl);
1987 parm = build_tree_list (defval, parm);
1988 return chainon (list, parm);
1989 }
1990
1991 /* The end of a template parameter list has been reached. Process the
1992 tree list into a parameter vector, converting each parameter into a more
1993 useful form. Type parameters are saved as IDENTIFIER_NODEs, and others
1994 as PARM_DECLs. */
1995
1996 tree
1997 end_template_parm_list (parms)
1998 tree parms;
1999 {
2000 int nparms;
2001 tree parm;
2002 tree saved_parmlist = make_tree_vec (list_length (parms));
2003
2004 current_template_parms
2005 = tree_cons (size_int (processing_template_decl),
2006 saved_parmlist, current_template_parms);
2007
2008 for (parm = parms, nparms = 0;
2009 parm;
2010 parm = TREE_CHAIN (parm), nparms++)
2011 TREE_VEC_ELT (saved_parmlist, nparms) = parm;
2012
2013 --processing_template_parmlist;
2014
2015 return saved_parmlist;
2016 }
2017
2018 /* end_template_decl is called after a template declaration is seen. */
2019
2020 void
2021 end_template_decl ()
2022 {
2023 reset_specialization ();
2024
2025 if (! processing_template_decl)
2026 return;
2027
2028 /* This matches the pushlevel in begin_template_parm_list. */
2029 finish_scope ();
2030
2031 --processing_template_decl;
2032 current_template_parms = TREE_CHAIN (current_template_parms);
2033 }
2034
2035 /* Given a template argument vector containing the template PARMS.
2036 The innermost PARMS are given first. */
2037
2038 tree
2039 current_template_args ()
2040 {
2041 tree header;
2042 tree args = NULL_TREE;
2043 int length = TMPL_PARMS_DEPTH (current_template_parms);
2044 int l = length;
2045
2046 /* If there is only one level of template parameters, we do not
2047 create a TREE_VEC of TREE_VECs. Instead, we return a single
2048 TREE_VEC containing the arguments. */
2049 if (length > 1)
2050 args = make_tree_vec (length);
2051
2052 for (header = current_template_parms; header; header = TREE_CHAIN (header))
2053 {
2054 tree a = copy_node (TREE_VALUE (header));
2055 int i;
2056
2057 TREE_TYPE (a) = NULL_TREE;
2058 for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
2059 {
2060 tree t = TREE_VEC_ELT (a, i);
2061
2062 /* T will be a list if we are called from within a
2063 begin/end_template_parm_list pair, but a vector directly
2064 if within a begin/end_member_template_processing pair. */
2065 if (TREE_CODE (t) == TREE_LIST)
2066 {
2067 t = TREE_VALUE (t);
2068
2069 if (TREE_CODE (t) == TYPE_DECL
2070 || TREE_CODE (t) == TEMPLATE_DECL)
2071 t = TREE_TYPE (t);
2072 else
2073 t = DECL_INITIAL (t);
2074 TREE_VEC_ELT (a, i) = t;
2075 }
2076 }
2077
2078 if (length > 1)
2079 TREE_VEC_ELT (args, --l) = a;
2080 else
2081 args = a;
2082 }
2083
2084 return args;
2085 }
2086
2087 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
2088 template PARMS. Used by push_template_decl below. */
2089
2090 static tree
2091 build_template_decl (decl, parms)
2092 tree decl;
2093 tree parms;
2094 {
2095 tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
2096 DECL_TEMPLATE_PARMS (tmpl) = parms;
2097 DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
2098 if (DECL_LANG_SPECIFIC (decl))
2099 {
2100 if (CAN_HAVE_FULL_LANG_DECL_P (decl))
2101 DECL_VIRTUAL_CONTEXT (tmpl) = DECL_VIRTUAL_CONTEXT (decl);
2102 DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
2103 DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
2104 DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
2105 DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
2106 if (DECL_OVERLOADED_OPERATOR_P (decl))
2107 SET_OVERLOADED_OPERATOR_CODE (tmpl,
2108 DECL_OVERLOADED_OPERATOR_P (decl));
2109 }
2110
2111 return tmpl;
2112 }
2113
2114 struct template_parm_data
2115 {
2116 /* The level of the template parameters we are currently
2117 processing. */
2118 int level;
2119
2120 /* The index of the specialization argument we are currently
2121 processing. */
2122 int current_arg;
2123
2124 /* An array whose size is the number of template parameters. The
2125 elements are non-zero if the parameter has been used in any one
2126 of the arguments processed so far. */
2127 int* parms;
2128
2129 /* An array whose size is the number of template arguments. The
2130 elements are non-zero if the argument makes use of template
2131 parameters of this level. */
2132 int* arg_uses_template_parms;
2133 };
2134
2135 /* Subroutine of push_template_decl used to see if each template
2136 parameter in a partial specialization is used in the explicit
2137 argument list. If T is of the LEVEL given in DATA (which is
2138 treated as a template_parm_data*), then DATA->PARMS is marked
2139 appropriately. */
2140
2141 static int
2142 mark_template_parm (t, data)
2143 tree t;
2144 void* data;
2145 {
2146 int level;
2147 int idx;
2148 struct template_parm_data* tpd = (struct template_parm_data*) data;
2149
2150 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
2151 {
2152 level = TEMPLATE_PARM_LEVEL (t);
2153 idx = TEMPLATE_PARM_IDX (t);
2154 }
2155 else
2156 {
2157 level = TEMPLATE_TYPE_LEVEL (t);
2158 idx = TEMPLATE_TYPE_IDX (t);
2159 }
2160
2161 if (level == tpd->level)
2162 {
2163 tpd->parms[idx] = 1;
2164 tpd->arg_uses_template_parms[tpd->current_arg] = 1;
2165 }
2166
2167 /* Return zero so that for_each_template_parm will continue the
2168 traversal of the tree; we want to mark *every* template parm. */
2169 return 0;
2170 }
2171
2172 /* Process the partial specialization DECL. */
2173
2174 static tree
2175 process_partial_specialization (decl)
2176 tree decl;
2177 {
2178 tree type = TREE_TYPE (decl);
2179 tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
2180 tree specargs = CLASSTYPE_TI_ARGS (type);
2181 tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
2182 tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
2183 tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
2184 int nargs = TREE_VEC_LENGTH (inner_args);
2185 int ntparms = TREE_VEC_LENGTH (inner_parms);
2186 int i;
2187 int did_error_intro = 0;
2188 struct template_parm_data tpd;
2189 struct template_parm_data tpd2;
2190
2191 /* We check that each of the template parameters given in the
2192 partial specialization is used in the argument list to the
2193 specialization. For example:
2194
2195 template <class T> struct S;
2196 template <class T> struct S<T*>;
2197
2198 The second declaration is OK because `T*' uses the template
2199 parameter T, whereas
2200
2201 template <class T> struct S<int>;
2202
2203 is no good. Even trickier is:
2204
2205 template <class T>
2206 struct S1
2207 {
2208 template <class U>
2209 struct S2;
2210 template <class U>
2211 struct S2<T>;
2212 };
2213
2214 The S2<T> declaration is actually illegal; it is a
2215 full-specialization. Of course,
2216
2217 template <class U>
2218 struct S2<T (*)(U)>;
2219
2220 or some such would have been OK. */
2221 tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
2222 tpd.parms = alloca (sizeof (int) * ntparms);
2223 memset ((PTR) tpd.parms, 0, sizeof (int) * ntparms);
2224
2225 tpd.arg_uses_template_parms = alloca (sizeof (int) * nargs);
2226 memset ((PTR) tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
2227 for (i = 0; i < nargs; ++i)
2228 {
2229 tpd.current_arg = i;
2230 for_each_template_parm (TREE_VEC_ELT (inner_args, i),
2231 &mark_template_parm,
2232 &tpd);
2233 }
2234 for (i = 0; i < ntparms; ++i)
2235 if (tpd.parms[i] == 0)
2236 {
2237 /* One of the template parms was not used in the
2238 specialization. */
2239 if (!did_error_intro)
2240 {
2241 cp_error ("template parameters not used in partial specialization:");
2242 did_error_intro = 1;
2243 }
2244
2245 cp_error (" `%D'",
2246 TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
2247 }
2248
2249 /* [temp.class.spec]
2250
2251 The argument list of the specialization shall not be identical to
2252 the implicit argument list of the primary template. */
2253 if (comp_template_args
2254 (inner_args,
2255 INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
2256 (maintmpl)))))
2257 cp_error ("partial specialization `%T' does not specialize any template arguments", type);
2258
2259 /* [temp.class.spec]
2260
2261 A partially specialized non-type argument expression shall not
2262 involve template parameters of the partial specialization except
2263 when the argument expression is a simple identifier.
2264
2265 The type of a template parameter corresponding to a specialized
2266 non-type argument shall not be dependent on a parameter of the
2267 specialization. */
2268 my_friendly_assert (nargs == DECL_NTPARMS (maintmpl), 0);
2269 tpd2.parms = 0;
2270 for (i = 0; i < nargs; ++i)
2271 {
2272 tree arg = TREE_VEC_ELT (inner_args, i);
2273 if (/* These first two lines are the `non-type' bit. */
2274 !TYPE_P (arg)
2275 && TREE_CODE (arg) != TEMPLATE_DECL
2276 /* This next line is the `argument expression is not just a
2277 simple identifier' condition and also the `specialized
2278 non-type argument' bit. */
2279 && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
2280 {
2281 if (tpd.arg_uses_template_parms[i])
2282 cp_error ("template argument `%E' involves template parameter(s)", arg);
2283 else
2284 {
2285 /* Look at the corresponding template parameter,
2286 marking which template parameters its type depends
2287 upon. */
2288 tree type =
2289 TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (main_inner_parms,
2290 i)));
2291
2292 if (!tpd2.parms)
2293 {
2294 /* We haven't yet initialized TPD2. Do so now. */
2295 tpd2.arg_uses_template_parms
2296 = (int*) alloca (sizeof (int) * nargs);
2297 /* The number of parameters here is the number in the
2298 main template, which, as checked in the assertion
2299 above, is NARGS. */
2300 tpd2.parms = (int*) alloca (sizeof (int) * nargs);
2301 tpd2.level =
2302 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
2303 }
2304
2305 /* Mark the template parameters. But this time, we're
2306 looking for the template parameters of the main
2307 template, not in the specialization. */
2308 tpd2.current_arg = i;
2309 tpd2.arg_uses_template_parms[i] = 0;
2310 memset ((PTR) tpd2.parms, 0, sizeof (int) * nargs);
2311 for_each_template_parm (type,
2312 &mark_template_parm,
2313 &tpd2);
2314
2315 if (tpd2.arg_uses_template_parms [i])
2316 {
2317 /* The type depended on some template parameters.
2318 If they are fully specialized in the
2319 specialization, that's OK. */
2320 int j;
2321 for (j = 0; j < nargs; ++j)
2322 if (tpd2.parms[j] != 0
2323 && tpd.arg_uses_template_parms [j])
2324 {
2325 cp_error ("type `%T' of template argument `%E' depends on template parameter(s)",
2326 type,
2327 arg);
2328 break;
2329 }
2330 }
2331 }
2332 }
2333 }
2334
2335 if (retrieve_specialization (maintmpl, specargs))
2336 /* We've already got this specialization. */
2337 return decl;
2338
2339 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
2340 = tree_cons (inner_args, inner_parms,
2341 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
2342 TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
2343 return decl;
2344 }
2345
2346 /* Check that a template declaration's use of default arguments is not
2347 invalid. Here, PARMS are the template parameters. IS_PRIMARY is
2348 non-zero if DECL is the thing declared by a primary template.
2349 IS_PARTIAL is non-zero if DECL is a partial specialization. */
2350
2351 static void
2352 check_default_tmpl_args (decl, parms, is_primary, is_partial)
2353 tree decl;
2354 tree parms;
2355 int is_primary;
2356 int is_partial;
2357 {
2358 const char *msg;
2359 int last_level_to_check;
2360 tree parm_level;
2361
2362 /* [temp.param]
2363
2364 A default template-argument shall not be specified in a
2365 function template declaration or a function template definition, nor
2366 in the template-parameter-list of the definition of a member of a
2367 class template. */
2368
2369 if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
2370 /* You can't have a function template declaration in a local
2371 scope, nor you can you define a member of a class template in a
2372 local scope. */
2373 return;
2374
2375 if (current_class_type
2376 && !TYPE_BEING_DEFINED (current_class_type)
2377 && DECL_LANG_SPECIFIC (decl)
2378 /* If this is either a friend defined in the scope of the class
2379 or a member function. */
2380 && ((DECL_CONTEXT (decl)
2381 && same_type_p (DECL_CONTEXT (decl), current_class_type))
2382 || (DECL_FRIEND_CONTEXT (decl)
2383 && same_type_p (DECL_FRIEND_CONTEXT (decl),
2384 current_class_type)))
2385 /* And, if it was a member function, it really was defined in
2386 the scope of the class. */
2387 && (!DECL_FUNCTION_MEMBER_P (decl) || DECL_INITIALIZED_IN_CLASS_P (decl)))
2388 /* We already checked these parameters when the template was
2389 declared, so there's no need to do it again now. This function
2390 was defined in class scope, but we're processing it's body now
2391 that the class is complete. */
2392 return;
2393
2394 /* [temp.param]
2395
2396 If a template-parameter has a default template-argument, all
2397 subsequent template-parameters shall have a default
2398 template-argument supplied. */
2399 for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
2400 {
2401 tree inner_parms = TREE_VALUE (parm_level);
2402 int ntparms = TREE_VEC_LENGTH (inner_parms);
2403 int seen_def_arg_p = 0;
2404 int i;
2405
2406 for (i = 0; i < ntparms; ++i)
2407 {
2408 tree parm = TREE_VEC_ELT (inner_parms, i);
2409 if (TREE_PURPOSE (parm))
2410 seen_def_arg_p = 1;
2411 else if (seen_def_arg_p)
2412 {
2413 cp_error ("no default argument for `%D'", TREE_VALUE (parm));
2414 /* For better subsequent error-recovery, we indicate that
2415 there should have been a default argument. */
2416 TREE_PURPOSE (parm) = error_mark_node;
2417 }
2418 }
2419 }
2420
2421 if (TREE_CODE (decl) != TYPE_DECL || is_partial || !is_primary)
2422 /* For an ordinary class template, default template arguments are
2423 allowed at the innermost level, e.g.:
2424 template <class T = int>
2425 struct S {};
2426 but, in a partial specialization, they're not allowed even
2427 there, as we have in [temp.class.spec]:
2428
2429 The template parameter list of a specialization shall not
2430 contain default template argument values.
2431
2432 So, for a partial specialization, or for a function template,
2433 we look at all of them. */
2434 ;
2435 else
2436 /* But, for a primary class template that is not a partial
2437 specialization we look at all template parameters except the
2438 innermost ones. */
2439 parms = TREE_CHAIN (parms);
2440
2441 /* Figure out what error message to issue. */
2442 if (TREE_CODE (decl) == FUNCTION_DECL)
2443 msg = "default argument for template parameter in function template `%D'";
2444 else if (is_partial)
2445 msg = "default argument in partial specialization `%D'";
2446 else
2447 msg = "default argument for template parameter for class enclosing `%D'";
2448
2449 if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
2450 /* If we're inside a class definition, there's no need to
2451 examine the parameters to the class itself. On the one
2452 hand, they will be checked when the class is defined, and,
2453 on the other, default arguments are legal in things like:
2454 template <class T = double>
2455 struct S { template <class U> void f(U); };
2456 Here the default argument for `S' has no bearing on the
2457 declaration of `f'. */
2458 last_level_to_check = template_class_depth (current_class_type) + 1;
2459 else
2460 /* Check everything. */
2461 last_level_to_check = 0;
2462
2463 for (parm_level = parms;
2464 parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
2465 parm_level = TREE_CHAIN (parm_level))
2466 {
2467 tree inner_parms = TREE_VALUE (parm_level);
2468 int i;
2469 int ntparms;
2470
2471 ntparms = TREE_VEC_LENGTH (inner_parms);
2472 for (i = 0; i < ntparms; ++i)
2473 if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
2474 {
2475 if (msg)
2476 {
2477 cp_error (msg, decl);
2478 msg = 0;
2479 }
2480
2481 /* Clear out the default argument so that we are not
2482 confused later. */
2483 TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
2484 }
2485
2486 /* At this point, if we're still interested in issuing messages,
2487 they must apply to classes surrounding the object declared. */
2488 if (msg)
2489 msg = "default argument for template parameter for class enclosing `%D'";
2490 }
2491 }
2492
2493 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
2494 parameters given by current_template_args, or reuses a
2495 previously existing one, if appropriate. Returns the DECL, or an
2496 equivalent one, if it is replaced via a call to duplicate_decls.
2497
2498 If IS_FRIEND is non-zero, DECL is a friend declaration. */
2499
2500 tree
2501 push_template_decl_real (decl, is_friend)
2502 tree decl;
2503 int is_friend;
2504 {
2505 tree tmpl;
2506 tree args;
2507 tree info;
2508 tree ctx;
2509 int primary;
2510 int is_partial;
2511 int new_template_p = 0;
2512
2513 /* See if this is a partial specialization. */
2514 is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
2515 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
2516 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
2517
2518 is_friend |= (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl));
2519
2520 if (is_friend)
2521 /* For a friend, we want the context of the friend function, not
2522 the type of which it is a friend. */
2523 ctx = DECL_CONTEXT (decl);
2524 else if (CP_DECL_CONTEXT (decl)
2525 && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
2526 /* In the case of a virtual function, we want the class in which
2527 it is defined. */
2528 ctx = CP_DECL_CONTEXT (decl);
2529 else
2530 /* Otherwise, if we're currently defining some class, the DECL
2531 is assumed to be a member of the class. */
2532 ctx = current_scope ();
2533
2534 if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
2535 ctx = NULL_TREE;
2536
2537 if (!DECL_CONTEXT (decl))
2538 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2539
2540 /* See if this is a primary template. */
2541 primary = template_parm_scope_p ();
2542
2543 if (primary)
2544 {
2545 if (current_lang_name == lang_name_c)
2546 cp_error ("template with C linkage");
2547 else if (TREE_CODE (decl) == TYPE_DECL
2548 && ANON_AGGRNAME_P (DECL_NAME (decl)))
2549 cp_error ("template class without a name");
2550 else if ((DECL_IMPLICIT_TYPEDEF_P (decl)
2551 && CLASS_TYPE_P (TREE_TYPE (decl)))
2552 || (TREE_CODE (decl) == VAR_DECL && ctx && CLASS_TYPE_P (ctx))
2553 || TREE_CODE (decl) == FUNCTION_DECL)
2554 /* OK */;
2555 else
2556 cp_error ("template declaration of `%#D'", decl);
2557 }
2558
2559 /* Check to see that the rules regarding the use of default
2560 arguments are not being violated. */
2561 check_default_tmpl_args (decl, current_template_parms,
2562 primary, is_partial);
2563
2564 if (is_partial)
2565 return process_partial_specialization (decl);
2566
2567 args = current_template_args ();
2568
2569 if (!ctx
2570 || TREE_CODE (ctx) == FUNCTION_DECL
2571 || TYPE_BEING_DEFINED (ctx)
2572 || (is_friend && !DECL_TEMPLATE_INFO (decl)))
2573 {
2574 if (DECL_LANG_SPECIFIC (decl)
2575 && DECL_TEMPLATE_INFO (decl)
2576 && DECL_TI_TEMPLATE (decl))
2577 tmpl = DECL_TI_TEMPLATE (decl);
2578 /* If DECL is a TYPE_DECL for a class-template, then there won't
2579 be DECL_LANG_SPECIFIC. The information equivalent to
2580 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead. */
2581 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
2582 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
2583 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
2584 {
2585 /* Since a template declaration already existed for this
2586 class-type, we must be redeclaring it here. Make sure
2587 that the redeclaration is legal. */
2588 redeclare_class_template (TREE_TYPE (decl),
2589 current_template_parms);
2590 /* We don't need to create a new TEMPLATE_DECL; just use the
2591 one we already had. */
2592 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
2593 }
2594 else
2595 {
2596 tmpl = build_template_decl (decl, current_template_parms);
2597 new_template_p = 1;
2598
2599 if (DECL_LANG_SPECIFIC (decl)
2600 && DECL_TEMPLATE_SPECIALIZATION (decl))
2601 {
2602 /* A specialization of a member template of a template
2603 class. */
2604 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2605 DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
2606 DECL_TEMPLATE_INFO (decl) = NULL_TREE;
2607 }
2608 }
2609 }
2610 else
2611 {
2612 tree a, t, current, parms;
2613 int i;
2614
2615 if (TREE_CODE (decl) == TYPE_DECL)
2616 {
2617 if ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (decl)))
2618 || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
2619 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
2620 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
2621 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
2622 else
2623 {
2624 cp_error ("`%D' does not declare a template type", decl);
2625 return decl;
2626 }
2627 }
2628 else if (! DECL_TEMPLATE_INFO (decl))
2629 {
2630 cp_error ("template definition of non-template `%#D'", decl);
2631 return decl;
2632 }
2633 else
2634 tmpl = DECL_TI_TEMPLATE (decl);
2635
2636 if (is_member_template (tmpl)
2637 && DECL_FUNCTION_TEMPLATE_P (tmpl)
2638 && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
2639 && DECL_TEMPLATE_SPECIALIZATION (decl))
2640 {
2641 tree new_tmpl;
2642
2643 /* The declaration is a specialization of a member
2644 template, declared outside the class. Therefore, the
2645 innermost template arguments will be NULL, so we
2646 replace them with the arguments determined by the
2647 earlier call to check_explicit_specialization. */
2648 args = DECL_TI_ARGS (decl);
2649
2650 new_tmpl
2651 = build_template_decl (decl, current_template_parms);
2652 DECL_TEMPLATE_RESULT (new_tmpl) = decl;
2653 TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
2654 DECL_TI_TEMPLATE (decl) = new_tmpl;
2655 SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
2656 DECL_TEMPLATE_INFO (new_tmpl)
2657 = tree_cons (tmpl, args, NULL_TREE);
2658
2659 register_specialization (new_tmpl,
2660 most_general_template (tmpl),
2661 args);
2662 return decl;
2663 }
2664
2665 /* Make sure the template headers we got make sense. */
2666
2667 parms = DECL_TEMPLATE_PARMS (tmpl);
2668 i = TMPL_PARMS_DEPTH (parms);
2669 if (TMPL_ARGS_DEPTH (args) != i)
2670 {
2671 cp_error ("expected %d levels of template parms for `%#D', got %d",
2672 i, decl, TMPL_ARGS_DEPTH (args));
2673 }
2674 else
2675 for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
2676 {
2677 a = TMPL_ARGS_LEVEL (args, i);
2678 t = INNERMOST_TEMPLATE_PARMS (parms);
2679
2680 if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
2681 {
2682 if (current == decl)
2683 cp_error ("got %d template parameters for `%#D'",
2684 TREE_VEC_LENGTH (a), decl);
2685 else
2686 cp_error ("got %d template parameters for `%#T'",
2687 TREE_VEC_LENGTH (a), current);
2688 cp_error (" but %d required", TREE_VEC_LENGTH (t));
2689 }
2690
2691 /* Perhaps we should also check that the parms are used in the
2692 appropriate qualifying scopes in the declarator? */
2693
2694 if (current == decl)
2695 current = ctx;
2696 else
2697 current = TYPE_CONTEXT (current);
2698 }
2699 }
2700
2701 DECL_TEMPLATE_RESULT (tmpl) = decl;
2702 TREE_TYPE (tmpl) = TREE_TYPE (decl);
2703
2704 /* Push template declarations for global functions and types. Note
2705 that we do not try to push a global template friend declared in a
2706 template class; such a thing may well depend on the template
2707 parameters of the class. */
2708 if (new_template_p && !ctx
2709 && !(is_friend && template_class_depth (current_class_type) > 0))
2710 tmpl = pushdecl_namespace_level (tmpl);
2711
2712 if (primary)
2713 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
2714
2715 info = tree_cons (tmpl, args, NULL_TREE);
2716
2717 if (DECL_IMPLICIT_TYPEDEF_P (decl))
2718 {
2719 SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
2720 if ((!ctx || TREE_CODE (ctx) != FUNCTION_DECL)
2721 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE)
2722 DECL_NAME (decl) = classtype_mangled_name (TREE_TYPE (decl));
2723 }
2724 else if (DECL_LANG_SPECIFIC (decl))
2725 DECL_TEMPLATE_INFO (decl) = info;
2726
2727 return DECL_TEMPLATE_RESULT (tmpl);
2728 }
2729
2730 tree
2731 push_template_decl (decl)
2732 tree decl;
2733 {
2734 return push_template_decl_real (decl, 0);
2735 }
2736
2737 /* Called when a class template TYPE is redeclared with the indicated
2738 template PARMS, e.g.:
2739
2740 template <class T> struct S;
2741 template <class T> struct S {}; */
2742
2743 void
2744 redeclare_class_template (type, parms)
2745 tree type;
2746 tree parms;
2747 {
2748 tree tmpl;
2749 tree tmpl_parms;
2750 int i;
2751
2752 if (!TYPE_TEMPLATE_INFO (type))
2753 {
2754 cp_error ("`%T' is not a template type", type);
2755 return;
2756 }
2757
2758 tmpl = TYPE_TI_TEMPLATE (type);
2759 if (!PRIMARY_TEMPLATE_P (tmpl))
2760 /* The type is nested in some template class. Nothing to worry
2761 about here; there are no new template parameters for the nested
2762 type. */
2763 return;
2764
2765 parms = INNERMOST_TEMPLATE_PARMS (parms);
2766 tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
2767
2768 if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
2769 {
2770 cp_error_at ("previous declaration `%D'", tmpl);
2771 cp_error ("used %d template parameter%s instead of %d",
2772 TREE_VEC_LENGTH (tmpl_parms),
2773 TREE_VEC_LENGTH (tmpl_parms) == 1 ? "" : "s",
2774 TREE_VEC_LENGTH (parms));
2775 return;
2776 }
2777
2778 for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
2779 {
2780 tree tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
2781 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
2782 tree tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
2783 tree parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
2784
2785 if (TREE_CODE (tmpl_parm) != TREE_CODE (parm))
2786 {
2787 cp_error_at ("template parameter `%#D'", tmpl_parm);
2788 cp_error ("redeclared here as `%#D'", parm);
2789 return;
2790 }
2791
2792 if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
2793 {
2794 /* We have in [temp.param]:
2795
2796 A template-parameter may not be given default arguments
2797 by two different declarations in the same scope. */
2798 cp_error ("redefinition of default argument for `%#D'", parm);
2799 cp_error_at (" original definition appeared here", tmpl_parm);
2800 return;
2801 }
2802
2803 if (parm_default != NULL_TREE)
2804 /* Update the previous template parameters (which are the ones
2805 that will really count) with the new default value. */
2806 TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
2807 else if (tmpl_default != NULL_TREE)
2808 /* Update the new parameters, too; they'll be used as the
2809 parameters for any members. */
2810 TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
2811 }
2812 }
2813
2814 /* Attempt to convert the non-type template parameter EXPR to the
2815 indicated TYPE. If the conversion is successful, return the
2816 converted value. If the conversion is unsuccessful, return
2817 NULL_TREE if we issued an error message, or error_mark_node if we
2818 did not. We issue error messages for out-and-out bad template
2819 parameters, but not simply because the conversion failed, since we
2820 might be just trying to do argument deduction. By the time this
2821 function is called, neither TYPE nor EXPR may make use of template
2822 parameters. */
2823
2824 static tree
2825 convert_nontype_argument (type, expr)
2826 tree type;
2827 tree expr;
2828 {
2829 tree expr_type = TREE_TYPE (expr);
2830
2831 /* A template-argument for a non-type, non-template
2832 template-parameter shall be one of:
2833
2834 --an integral constant-expression of integral or enumeration
2835 type; or
2836
2837 --the name of a non-type template-parameter; or
2838
2839 --the name of an object or function with external linkage,
2840 including function templates and function template-ids but
2841 excluding non-static class members, expressed as id-expression;
2842 or
2843
2844 --the address of an object or function with external linkage,
2845 including function templates and function template-ids but
2846 excluding non-static class members, expressed as & id-expression
2847 where the & is optional if the name refers to a function or
2848 array; or
2849
2850 --a pointer to member expressed as described in _expr.unary.op_. */
2851
2852 /* An integral constant-expression can include const variables or
2853 enumerators. Simplify things by folding them to their values,
2854 unless we're about to bind the declaration to a reference
2855 parameter. */
2856 if (INTEGRAL_TYPE_P (expr_type)
2857 && TREE_CODE (type) != REFERENCE_TYPE)
2858 expr = decl_constant_value (expr);
2859
2860 if (is_overloaded_fn (expr))
2861 /* OK for now. We'll check that it has external linkage later.
2862 Check this first since if expr_type is the unknown_type_node
2863 we would otherwise complain below. */
2864 ;
2865 else if (TYPE_PTRMEM_P (expr_type)
2866 || TYPE_PTRMEMFUNC_P (expr_type))
2867 {
2868 if (TREE_CODE (expr) != PTRMEM_CST)
2869 goto bad_argument;
2870 }
2871 else if (TYPE_PTR_P (expr_type)
2872 || TYPE_PTRMEM_P (expr_type)
2873 || TREE_CODE (expr_type) == ARRAY_TYPE
2874 || TREE_CODE (type) == REFERENCE_TYPE
2875 /* If expr is the address of an overloaded function, we
2876 will get the unknown_type_node at this point. */
2877 || expr_type == unknown_type_node)
2878 {
2879 tree referent;
2880 tree e = expr;
2881 STRIP_NOPS (e);
2882
2883 if (TREE_CODE (expr_type) == ARRAY_TYPE
2884 || (TREE_CODE (type) == REFERENCE_TYPE
2885 && TREE_CODE (e) != ADDR_EXPR))
2886 referent = e;
2887 else
2888 {
2889 if (TREE_CODE (e) != ADDR_EXPR)
2890 {
2891 bad_argument:
2892 cp_error ("`%E' is not a valid template argument", expr);
2893 if (TYPE_PTR_P (expr_type))
2894 {
2895 if (TREE_CODE (TREE_TYPE (expr_type)) == FUNCTION_TYPE)
2896 cp_error ("it must be the address of a function with external linkage");
2897 else
2898 cp_error ("it must be the address of an object with external linkage");
2899 }
2900 else if (TYPE_PTRMEM_P (expr_type)
2901 || TYPE_PTRMEMFUNC_P (expr_type))
2902 cp_error ("it must be a pointer-to-member of the form `&X::Y'");
2903
2904 return NULL_TREE;
2905 }
2906
2907 referent = TREE_OPERAND (e, 0);
2908 STRIP_NOPS (referent);
2909 }
2910
2911 if (TREE_CODE (referent) == STRING_CST)
2912 {
2913 cp_error ("string literal %E is not a valid template argument because it is the address of an object with static linkage",
2914 referent);
2915 return NULL_TREE;
2916 }
2917
2918 if (is_overloaded_fn (referent))
2919 /* We'll check that it has external linkage later. */
2920 ;
2921 else if (TREE_CODE (referent) != VAR_DECL)
2922 goto bad_argument;
2923 else if (!DECL_EXTERNAL_LINKAGE_P (referent))
2924 {
2925 cp_error ("address of non-extern `%E' cannot be used as template argument", referent);
2926 return error_mark_node;
2927 }
2928 }
2929 else if (INTEGRAL_TYPE_P (expr_type)
2930 || TYPE_PTRMEM_P (expr_type)
2931 || TYPE_PTRMEMFUNC_P (expr_type)
2932 /* The next two are g++ extensions. */
2933 || TREE_CODE (expr_type) == REAL_TYPE
2934 || TREE_CODE (expr_type) == COMPLEX_TYPE)
2935 {
2936 if (! TREE_CONSTANT (expr))
2937 {
2938 non_constant:
2939 cp_error ("non-constant `%E' cannot be used as template argument",
2940 expr);
2941 return NULL_TREE;
2942 }
2943 }
2944 else
2945 {
2946 cp_error ("object `%E' cannot be used as template argument", expr);
2947 return NULL_TREE;
2948 }
2949
2950 switch (TREE_CODE (type))
2951 {
2952 case INTEGER_TYPE:
2953 case BOOLEAN_TYPE:
2954 case ENUMERAL_TYPE:
2955 /* For a non-type template-parameter of integral or enumeration
2956 type, integral promotions (_conv.prom_) and integral
2957 conversions (_conv.integral_) are applied. */
2958 if (!INTEGRAL_TYPE_P (expr_type))
2959 return error_mark_node;
2960
2961 /* It's safe to call digest_init in this case; we know we're
2962 just converting one integral constant expression to another. */
2963 expr = digest_init (type, expr, (tree*) 0);
2964
2965 if (TREE_CODE (expr) != INTEGER_CST)
2966 /* Curiously, some TREE_CONSTANT integral expressions do not
2967 simplify to integer constants. For example, `3 % 0',
2968 remains a TRUNC_MOD_EXPR. */
2969 goto non_constant;
2970
2971 return expr;
2972
2973 case REAL_TYPE:
2974 case COMPLEX_TYPE:
2975 /* These are g++ extensions. */
2976 if (TREE_CODE (expr_type) != TREE_CODE (type))
2977 return error_mark_node;
2978
2979 expr = digest_init (type, expr, (tree*) 0);
2980
2981 if (TREE_CODE (expr) != REAL_CST)
2982 goto non_constant;
2983
2984 return expr;
2985
2986 case POINTER_TYPE:
2987 {
2988 tree type_pointed_to = TREE_TYPE (type);
2989
2990 if (TYPE_PTRMEM_P (type))
2991 {
2992 tree e;
2993
2994 /* For a non-type template-parameter of type pointer to data
2995 member, qualification conversions (_conv.qual_) are
2996 applied. */
2997 e = perform_qualification_conversions (type, expr);
2998 if (TREE_CODE (e) == NOP_EXPR)
2999 /* The call to perform_qualification_conversions will
3000 insert a NOP_EXPR over EXPR to do express conversion,
3001 if necessary. But, that will confuse us if we use
3002 this (converted) template parameter to instantiate
3003 another template; then the thing will not look like a
3004 valid template argument. So, just make a new
3005 constant, of the appropriate type. */
3006 e = make_ptrmem_cst (type, PTRMEM_CST_MEMBER (expr));
3007 return e;
3008 }
3009 else if (TREE_CODE (type_pointed_to) == FUNCTION_TYPE)
3010 {
3011 /* For a non-type template-parameter of type pointer to
3012 function, only the function-to-pointer conversion
3013 (_conv.func_) is applied. If the template-argument
3014 represents a set of overloaded functions (or a pointer to
3015 such), the matching function is selected from the set
3016 (_over.over_). */
3017 tree fns;
3018 tree fn;
3019
3020 if (TREE_CODE (expr) == ADDR_EXPR)
3021 fns = TREE_OPERAND (expr, 0);
3022 else
3023 fns = expr;
3024
3025 fn = instantiate_type (type_pointed_to, fns, itf_none);
3026
3027 if (fn == error_mark_node)
3028 return error_mark_node;
3029
3030 if (!DECL_EXTERNAL_LINKAGE_P (fn))
3031 {
3032 if (really_overloaded_fn (fns))
3033 return error_mark_node;
3034 else
3035 goto bad_argument;
3036 }
3037
3038 expr = build_unary_op (ADDR_EXPR, fn, 0);
3039
3040 my_friendly_assert (same_type_p (type, TREE_TYPE (expr)),
3041 0);
3042 return expr;
3043 }
3044 else
3045 {
3046 /* For a non-type template-parameter of type pointer to
3047 object, qualification conversions (_conv.qual_) and the
3048 array-to-pointer conversion (_conv.array_) are applied.
3049 [Note: In particular, neither the null pointer conversion
3050 (_conv.ptr_) nor the derived-to-base conversion
3051 (_conv.ptr_) are applied. Although 0 is a valid
3052 template-argument for a non-type template-parameter of
3053 integral type, it is not a valid template-argument for a
3054 non-type template-parameter of pointer type.]
3055
3056 The call to decay_conversion performs the
3057 array-to-pointer conversion, if appropriate. */
3058 expr = decay_conversion (expr);
3059
3060 if (expr == error_mark_node)
3061 return error_mark_node;
3062 else
3063 return perform_qualification_conversions (type, expr);
3064 }
3065 }
3066 break;
3067
3068 case REFERENCE_TYPE:
3069 {
3070 tree type_referred_to = TREE_TYPE (type);
3071
3072 /* If this expression already has reference type, get the
3073 underling object. */
3074 if (TREE_CODE (expr_type) == REFERENCE_TYPE)
3075 {
3076 my_friendly_assert (TREE_CODE (expr) == ADDR_EXPR, 20000604);
3077 expr = TREE_OPERAND (expr, 0);
3078 expr_type = TREE_TYPE (expr);
3079 }
3080
3081 if (TREE_CODE (type_referred_to) == FUNCTION_TYPE)
3082 {
3083 /* For a non-type template-parameter of type reference to
3084 function, no conversions apply. If the
3085 template-argument represents a set of overloaded
3086 functions, the matching function is selected from the
3087 set (_over.over_). */
3088 tree fn;
3089
3090 fn = instantiate_type (type_referred_to, expr, itf_none);
3091
3092 if (fn == error_mark_node)
3093 return error_mark_node;
3094
3095 if (!DECL_EXTERNAL_LINKAGE_P (fn))
3096 {
3097 if (really_overloaded_fn (expr))
3098 /* Don't issue an error here; we might get a different
3099 function if the overloading had worked out
3100 differently. */
3101 return error_mark_node;
3102 else
3103 goto bad_argument;
3104 }
3105
3106 my_friendly_assert (same_type_p (type_referred_to,
3107 TREE_TYPE (fn)),
3108 0);
3109
3110 expr = fn;
3111 }
3112 else
3113 {
3114 /* For a non-type template-parameter of type reference to
3115 object, no conversions apply. The type referred to by the
3116 reference may be more cv-qualified than the (otherwise
3117 identical) type of the template-argument. The
3118 template-parameter is bound directly to the
3119 template-argument, which must be an lvalue. */
3120 if (!same_type_p (TYPE_MAIN_VARIANT (expr_type),
3121 TYPE_MAIN_VARIANT (type_referred_to))
3122 || !at_least_as_qualified_p (type_referred_to,
3123 expr_type)
3124 || !real_lvalue_p (expr))
3125 return error_mark_node;
3126 }
3127
3128 mark_addressable (expr);
3129 return build1 (ADDR_EXPR, type, expr);
3130 }
3131 break;
3132
3133 case RECORD_TYPE:
3134 {
3135 my_friendly_assert (TYPE_PTRMEMFUNC_P (type), 20010112);
3136
3137 /* For a non-type template-parameter of type pointer to member
3138 function, no conversions apply. If the template-argument
3139 represents a set of overloaded member functions, the
3140 matching member function is selected from the set
3141 (_over.over_). */
3142
3143 if (!TYPE_PTRMEMFUNC_P (expr_type) &&
3144 expr_type != unknown_type_node)
3145 return error_mark_node;
3146
3147 if (TREE_CODE (expr) == PTRMEM_CST)
3148 {
3149 /* A ptr-to-member constant. */
3150 if (!same_type_p (type, expr_type))
3151 return error_mark_node;
3152 else
3153 return expr;
3154 }
3155
3156 if (TREE_CODE (expr) != ADDR_EXPR)
3157 return error_mark_node;
3158
3159 expr = instantiate_type (type, expr, itf_none);
3160
3161 if (expr == error_mark_node)
3162 return error_mark_node;
3163
3164 my_friendly_assert (same_type_p (type, TREE_TYPE (expr)),
3165 0);
3166 return expr;
3167 }
3168 break;
3169
3170 default:
3171 /* All non-type parameters must have one of these types. */
3172 my_friendly_abort (0);
3173 break;
3174 }
3175
3176 return error_mark_node;
3177 }
3178
3179 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
3180 template template parameters. Both PARM_PARMS and ARG_PARMS are
3181 vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
3182 or PARM_DECL.
3183
3184 ARG_PARMS may contain more parameters than PARM_PARMS. If this is
3185 the case, then extra parameters must have default arguments.
3186
3187 Consider the example:
3188 template <class T, class Allocator = allocator> class vector;
3189 template<template <class U> class TT> class C;
3190
3191 C<vector> is a valid instantiation. PARM_PARMS for the above code
3192 contains a TYPE_DECL (for U), ARG_PARMS contains two TYPE_DECLs (for
3193 T and Allocator) and OUTER_ARGS contains the argument that is used to
3194 substitute the TT parameter. */
3195
3196 static int
3197 coerce_template_template_parms (parm_parms, arg_parms, complain,
3198 in_decl, outer_args)
3199 tree parm_parms, arg_parms;
3200 int complain;
3201 tree in_decl, outer_args;
3202 {
3203 int nparms, nargs, i;
3204 tree parm, arg;
3205
3206 my_friendly_assert (TREE_CODE (parm_parms) == TREE_VEC, 0);
3207 my_friendly_assert (TREE_CODE (arg_parms) == TREE_VEC, 0);
3208
3209 nparms = TREE_VEC_LENGTH (parm_parms);
3210 nargs = TREE_VEC_LENGTH (arg_parms);
3211
3212 /* The rule here is opposite of coerce_template_parms. */
3213 if (nargs < nparms
3214 || (nargs > nparms
3215 && TREE_PURPOSE (TREE_VEC_ELT (arg_parms, nparms)) == NULL_TREE))
3216 return 0;
3217
3218 for (i = 0; i < nparms; ++i)
3219 {
3220 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
3221 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
3222
3223 if (arg == NULL_TREE || arg == error_mark_node
3224 || parm == NULL_TREE || parm == error_mark_node)
3225 return 0;
3226
3227 if (TREE_CODE (arg) != TREE_CODE (parm))
3228 return 0;
3229
3230 switch (TREE_CODE (parm))
3231 {
3232 case TYPE_DECL:
3233 break;
3234
3235 case TEMPLATE_DECL:
3236 /* We encounter instantiations of templates like
3237 template <template <template <class> class> class TT>
3238 class C; */
3239 {
3240 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3241 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3242
3243 if (!coerce_template_template_parms (parmparm, argparm,
3244 complain, in_decl,
3245 outer_args))
3246 return 0;
3247 }
3248 break;
3249
3250 case PARM_DECL:
3251 /* The tsubst call is used to handle cases such as
3252 template <class T, template <T> class TT> class D;
3253 i.e. the parameter list of TT depends on earlier parameters. */
3254 if (!same_type_p (tsubst (TREE_TYPE (parm), outer_args,
3255 complain, in_decl),
3256 TREE_TYPE (arg)))
3257 return 0;
3258 break;
3259
3260 default:
3261 my_friendly_abort (0);
3262 }
3263 }
3264 return 1;
3265 }
3266
3267 /* Convert the indicated template ARG as necessary to match the
3268 indicated template PARM. Returns the converted ARG, or
3269 error_mark_node if the conversion was unsuccessful. Error messages
3270 are issued if COMPLAIN is non-zero. This conversion is for the Ith
3271 parameter in the parameter list. ARGS is the full set of template
3272 arguments deduced so far. */
3273
3274 static tree
3275 convert_template_argument (parm, arg, args, complain, i, in_decl)
3276 tree parm;
3277 tree arg;
3278 tree args;
3279 int complain;
3280 int i;
3281 tree in_decl;
3282 {
3283 tree val;
3284 tree inner_args;
3285 int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
3286
3287 inner_args = INNERMOST_TEMPLATE_ARGS (args);
3288
3289 if (TREE_CODE (arg) == TREE_LIST
3290 && TREE_TYPE (arg) != NULL_TREE
3291 && TREE_CODE (TREE_TYPE (arg)) == OFFSET_TYPE)
3292 {
3293 /* The template argument was the name of some
3294 member function. That's usually
3295 illegal, but static members are OK. In any
3296 case, grab the underlying fields/functions
3297 and issue an error later if required. */
3298 arg = TREE_VALUE (arg);
3299 TREE_TYPE (arg) = unknown_type_node;
3300 }
3301
3302 requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
3303 requires_type = (TREE_CODE (parm) == TYPE_DECL
3304 || requires_tmpl_type);
3305
3306 /* Check if it is a class template. If REQUIRES_TMPL_TYPE is true,
3307 we also accept implicitly created TYPE_DECL as a valid argument.
3308 This is necessary to handle the case where we pass a template name
3309 to a template template parameter in a scope where we've derived from
3310 in instantiation of that template, so the template name refers to that
3311 instantiation. We really ought to handle this better. */
3312 is_tmpl_type
3313 = ((TREE_CODE (arg) == TEMPLATE_DECL
3314 && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
3315 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3316 || (TREE_CODE (arg) == RECORD_TYPE
3317 && CLASSTYPE_TEMPLATE_INFO (arg)
3318 && TREE_CODE (TYPE_NAME (arg)) == TYPE_DECL
3319 && DECL_ARTIFICIAL (TYPE_NAME (arg))
3320 && requires_tmpl_type
3321 && is_base_of_enclosing_class (arg, current_class_type)));
3322 if (is_tmpl_type && TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
3323 arg = TYPE_STUB_DECL (arg);
3324 else if (is_tmpl_type && TREE_CODE (arg) == RECORD_TYPE)
3325 arg = CLASSTYPE_TI_TEMPLATE (arg);
3326
3327 is_type = TYPE_P (arg) || is_tmpl_type;
3328
3329 if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
3330 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
3331 {
3332 cp_pedwarn ("to refer to a type member of a template parameter, use `typename %E'", arg);
3333
3334 arg = make_typename_type (TREE_OPERAND (arg, 0),
3335 TREE_OPERAND (arg, 1),
3336 complain);
3337 is_type = 1;
3338 }
3339 if (is_type != requires_type)
3340 {
3341 if (in_decl)
3342 {
3343 if (complain)
3344 {
3345 cp_error ("type/value mismatch at argument %d in template parameter list for `%D'",
3346 i + 1, in_decl);
3347 if (is_type)
3348 cp_error (" expected a constant of type `%T', got `%T'",
3349 TREE_TYPE (parm),
3350 (is_tmpl_type ? DECL_NAME (arg) : arg));
3351 else
3352 cp_error (" expected a type, got `%E'", arg);
3353 }
3354 }
3355 return error_mark_node;
3356 }
3357 if (is_tmpl_type ^ requires_tmpl_type)
3358 {
3359 if (in_decl && complain)
3360 {
3361 cp_error ("type/value mismatch at argument %d in template parameter list for `%D'",
3362 i + 1, in_decl);
3363 if (is_tmpl_type)
3364 cp_error (" expected a type, got `%T'", DECL_NAME (arg));
3365 else
3366 cp_error (" expected a class template, got `%T'", arg);
3367 }
3368 return error_mark_node;
3369 }
3370
3371 if (is_type)
3372 {
3373 if (requires_tmpl_type)
3374 {
3375 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3376 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3377
3378 if (coerce_template_template_parms (parmparm, argparm, complain,
3379 in_decl, inner_args))
3380 {
3381 val = arg;
3382
3383 /* TEMPLATE_TEMPLATE_PARM node is preferred over
3384 TEMPLATE_DECL. */
3385 if (val != error_mark_node
3386 && DECL_TEMPLATE_TEMPLATE_PARM_P (val))
3387 val = TREE_TYPE (val);
3388 }
3389 else
3390 {
3391 if (in_decl && complain)
3392 {
3393 cp_error ("type/value mismatch at argument %d in template parameter list for `%D'",
3394 i + 1, in_decl);
3395 cp_error (" expected a template of type `%D', got `%D'", parm, arg);
3396 }
3397
3398 val = error_mark_node;
3399 }
3400 }
3401 else
3402 {
3403 val = groktypename (arg);
3404 if (! processing_template_decl)
3405 {
3406 /* [basic.link]: A name with no linkage (notably, the
3407 name of a class or enumeration declared in a local
3408 scope) shall not be used to declare an entity with
3409 linkage. This implies that names with no linkage
3410 cannot be used as template arguments. */
3411 tree t = no_linkage_check (val);
3412 if (t)
3413 {
3414 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
3415 cp_pedwarn
3416 ("template-argument `%T' uses anonymous type", val);
3417 else
3418 cp_error
3419 ("template-argument `%T' uses local type `%T'",
3420 val, t);
3421 return error_mark_node;
3422 }
3423 }
3424 }
3425 }
3426 else
3427 {
3428 tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
3429
3430 if (invalid_nontype_parm_type_p (t, complain))
3431 return error_mark_node;
3432
3433 if (processing_template_decl)
3434 arg = maybe_fold_nontype_arg (arg);
3435
3436 if (!uses_template_parms (arg) && !uses_template_parms (t))
3437 /* We used to call digest_init here. However, digest_init
3438 will report errors, which we don't want when complain
3439 is zero. More importantly, digest_init will try too
3440 hard to convert things: for example, `0' should not be
3441 converted to pointer type at this point according to
3442 the standard. Accepting this is not merely an
3443 extension, since deciding whether or not these
3444 conversions can occur is part of determining which
3445 function template to call, or whether a given explicit
3446 argument specification is legal. */
3447 val = convert_nontype_argument (t, arg);
3448 else
3449 val = arg;
3450
3451 if (val == NULL_TREE)
3452 val = error_mark_node;
3453 else if (val == error_mark_node && complain)
3454 cp_error ("could not convert template argument `%E' to `%T'",
3455 arg, t);
3456 }
3457
3458 return val;
3459 }
3460
3461 /* Convert all template arguments to their appropriate types, and
3462 return a vector containing the innermost resulting template
3463 arguments. If any error occurs, return error_mark_node, and, if
3464 COMPLAIN is non-zero, issue an error message. Some error messages
3465 are issued even if COMPLAIN is zero; for instance, if a template
3466 argument is composed from a local class.
3467
3468 If REQUIRE_ALL_ARGUMENTS is non-zero, all arguments must be
3469 provided in ARGLIST, or else trailing parameters must have default
3470 values. If REQUIRE_ALL_ARGUMENTS is zero, we will attempt argument
3471 deduction for any unspecified trailing arguments. */
3472
3473 static tree
3474 coerce_template_parms (parms, args, in_decl,
3475 complain,
3476 require_all_arguments)
3477 tree parms, args;
3478 tree in_decl;
3479 int complain;
3480 int require_all_arguments;
3481 {
3482 int nparms, nargs, i, lost = 0;
3483 tree inner_args;
3484 tree new_args;
3485 tree new_inner_args;
3486
3487 inner_args = INNERMOST_TEMPLATE_ARGS (args);
3488 nargs = NUM_TMPL_ARGS (inner_args);
3489 nparms = TREE_VEC_LENGTH (parms);
3490
3491 if (nargs > nparms
3492 || (nargs < nparms
3493 && require_all_arguments
3494 && TREE_PURPOSE (TREE_VEC_ELT (parms, nargs)) == NULL_TREE))
3495 {
3496 if (complain)
3497 {
3498 cp_error ("wrong number of template arguments (%d, should be %d)",
3499 nargs, nparms);
3500
3501 if (in_decl)
3502 cp_error_at ("provided for `%D'", in_decl);
3503 }
3504
3505 return error_mark_node;
3506 }
3507
3508 new_inner_args = make_tree_vec (nparms);
3509 new_args = add_outermost_template_args (args, new_inner_args);
3510 for (i = 0; i < nparms; i++)
3511 {
3512 tree arg;
3513 tree parm;
3514
3515 /* Get the Ith template parameter. */
3516 parm = TREE_VEC_ELT (parms, i);
3517
3518 /* Calculate the Ith argument. */
3519 if (inner_args && TREE_CODE (inner_args) == TREE_LIST)
3520 {
3521 arg = TREE_VALUE (inner_args);
3522 inner_args = TREE_CHAIN (inner_args);
3523 }
3524 else if (i < nargs)
3525 arg = TREE_VEC_ELT (inner_args, i);
3526 /* If no template argument was supplied, look for a default
3527 value. */
3528 else if (TREE_PURPOSE (parm) == NULL_TREE)
3529 {
3530 /* There was no default value. */
3531 my_friendly_assert (!require_all_arguments, 0);
3532 break;
3533 }
3534 else if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL)
3535 arg = tsubst (TREE_PURPOSE (parm), new_args, complain, in_decl);
3536 else
3537 arg = tsubst_expr (TREE_PURPOSE (parm), new_args, complain,
3538 in_decl);
3539
3540 /* Now, convert the Ith argument, as necessary. */
3541 if (arg == NULL_TREE)
3542 /* We're out of arguments. */
3543 {
3544 my_friendly_assert (!require_all_arguments, 0);
3545 break;
3546 }
3547 else if (arg == error_mark_node)
3548 {
3549 cp_error ("template argument %d is invalid", i + 1);
3550 arg = error_mark_node;
3551 }
3552 else
3553 arg = convert_template_argument (TREE_VALUE (parm),
3554 arg, new_args, complain, i,
3555 in_decl);
3556
3557 if (arg == error_mark_node)
3558 lost++;
3559 TREE_VEC_ELT (new_inner_args, i) = arg;
3560 }
3561
3562 if (lost)
3563 return error_mark_node;
3564
3565 return new_inner_args;
3566 }
3567
3568 /* Returns 1 if template args OT and NT are equivalent. */
3569
3570 static int
3571 template_args_equal (ot, nt)
3572 tree ot, nt;
3573 {
3574 if (nt == ot)
3575 return 1;
3576
3577 if (TREE_CODE (nt) == TREE_VEC)
3578 /* For member templates */
3579 return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
3580 else if (TYPE_P (nt))
3581 return TYPE_P (ot) && same_type_p (ot, nt);
3582 else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
3583 return 0;
3584 else
3585 return (cp_tree_equal (ot, nt) > 0);
3586 }
3587
3588 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
3589 of template arguments. Returns 0 otherwise. */
3590
3591 int
3592 comp_template_args (oldargs, newargs)
3593 tree oldargs, newargs;
3594 {
3595 int i;
3596
3597 if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
3598 return 0;
3599
3600 for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
3601 {
3602 tree nt = TREE_VEC_ELT (newargs, i);
3603 tree ot = TREE_VEC_ELT (oldargs, i);
3604
3605 if (! template_args_equal (ot, nt))
3606 return 0;
3607 }
3608 return 1;
3609 }
3610
3611 /* Given class template name and parameter list, produce a user-friendly name
3612 for the instantiation. */
3613
3614 static char *
3615 mangle_class_name_for_template (name, parms, arglist)
3616 const char *name;
3617 tree parms, arglist;
3618 {
3619 static struct obstack scratch_obstack;
3620 static char *scratch_firstobj;
3621 int i, nparms;
3622
3623 if (!scratch_firstobj)
3624 gcc_obstack_init (&scratch_obstack);
3625 else
3626 obstack_free (&scratch_obstack, scratch_firstobj);
3627 scratch_firstobj = obstack_alloc (&scratch_obstack, 1);
3628
3629 #define ccat(c) obstack_1grow (&scratch_obstack, (c));
3630 #define cat(s) obstack_grow (&scratch_obstack, (s), strlen (s))
3631
3632 cat (name);
3633 ccat ('<');
3634 nparms = TREE_VEC_LENGTH (parms);
3635 arglist = INNERMOST_TEMPLATE_ARGS (arglist);
3636 my_friendly_assert (nparms == TREE_VEC_LENGTH (arglist), 268);
3637 for (i = 0; i < nparms; i++)
3638 {
3639 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
3640 tree arg = TREE_VEC_ELT (arglist, i);
3641
3642 if (i)
3643 ccat (',');
3644
3645 if (TREE_CODE (parm) == TYPE_DECL)
3646 {
3647 cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
3648 continue;
3649 }
3650 else if (TREE_CODE (parm) == TEMPLATE_DECL)
3651 {
3652 if (TREE_CODE (arg) == TEMPLATE_DECL)
3653 {
3654 /* Already substituted with real template. Just output
3655 the template name here */
3656 tree context = DECL_CONTEXT (arg);
3657 if (context)
3658 {
3659 /* The template may be defined in a namespace, or
3660 may be a member template. */
3661 my_friendly_assert (TREE_CODE (context) == NAMESPACE_DECL
3662 || CLASS_TYPE_P (context),
3663 980422);
3664 cat(decl_as_string (DECL_CONTEXT (arg), TFF_PLAIN_IDENTIFIER));
3665 cat("::");
3666 }
3667 cat (IDENTIFIER_POINTER (DECL_NAME (arg)));
3668 }
3669 else
3670 /* Output the parameter declaration */
3671 cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
3672 continue;
3673 }
3674 else
3675 my_friendly_assert (TREE_CODE (parm) == PARM_DECL, 269);
3676
3677 if (TREE_CODE (arg) == TREE_LIST)
3678 {
3679 /* New list cell was built because old chain link was in
3680 use. */
3681 my_friendly_assert (TREE_PURPOSE (arg) == NULL_TREE, 270);
3682 arg = TREE_VALUE (arg);
3683 }
3684 /* No need to check arglist against parmlist here; we did that
3685 in coerce_template_parms, called from lookup_template_class. */
3686 cat (expr_as_string (arg, TFF_PLAIN_IDENTIFIER));
3687 }
3688 {
3689 char *bufp = obstack_next_free (&scratch_obstack);
3690 int offset = 0;
3691 while (bufp[offset - 1] == ' ')
3692 offset--;
3693 obstack_blank_fast (&scratch_obstack, offset);
3694
3695 /* B<C<char> >, not B<C<char>> */
3696 if (bufp[offset - 1] == '>')
3697 ccat (' ');
3698 }
3699 ccat ('>');
3700 ccat ('\0');
3701 return (char *) obstack_base (&scratch_obstack);
3702 }
3703
3704 static tree
3705 classtype_mangled_name (t)
3706 tree t;
3707 {
3708 if (CLASSTYPE_TEMPLATE_INFO (t)
3709 /* Specializations have already had their names set up in
3710 lookup_template_class. */
3711 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
3712 {
3713 tree tmpl = most_general_template (CLASSTYPE_TI_TEMPLATE (t));
3714
3715 /* For non-primary templates, the template parameters are
3716 implicit from their surrounding context. */
3717 if (PRIMARY_TEMPLATE_P (tmpl))
3718 {
3719 tree name = DECL_NAME (tmpl);
3720 char *mangled_name = mangle_class_name_for_template
3721 (IDENTIFIER_POINTER (name),
3722 DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
3723 CLASSTYPE_TI_ARGS (t));
3724 tree id = get_identifier (mangled_name);
3725 IDENTIFIER_TEMPLATE (id) = name;
3726 return id;
3727 }
3728 }
3729
3730 return TYPE_IDENTIFIER (t);
3731 }
3732
3733 static void
3734 add_pending_template (d)
3735 tree d;
3736 {
3737 tree ti = (TYPE_P (d)
3738 ? CLASSTYPE_TEMPLATE_INFO (d)
3739 : DECL_TEMPLATE_INFO (d));
3740 int level;
3741
3742 if (TI_PENDING_TEMPLATE_FLAG (ti))
3743 return;
3744
3745 /* We are called both from instantiate_decl, where we've already had a
3746 tinst_level pushed, and instantiate_template, where we haven't.
3747 Compensate. */
3748 level = !(current_tinst_level && TINST_DECL (current_tinst_level) == d);
3749
3750 if (level)
3751 push_tinst_level (d);
3752
3753 *template_tail = tree_cons (current_tinst_level, d, NULL_TREE);
3754 template_tail = &TREE_CHAIN (*template_tail);
3755 TI_PENDING_TEMPLATE_FLAG (ti) = 1;
3756
3757 if (level)
3758 pop_tinst_level ();
3759 }
3760
3761
3762 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS (which
3763 may be either a _DECL or an overloaded function or an
3764 IDENTIFIER_NODE), and ARGLIST. */
3765
3766 tree
3767 lookup_template_function (fns, arglist)
3768 tree fns, arglist;
3769 {
3770 tree type;
3771
3772 if (fns == NULL_TREE)
3773 {
3774 cp_error ("non-template used as template");
3775 return error_mark_node;
3776 }
3777
3778 type = TREE_TYPE (fns);
3779 if (TREE_CODE (fns) == OVERLOAD || !type)
3780 type = unknown_type_node;
3781
3782 if (processing_template_decl)
3783 return build_min (TEMPLATE_ID_EXPR, type, fns, arglist);
3784 else
3785 return build (TEMPLATE_ID_EXPR, type, fns, arglist);
3786 }
3787
3788 /* Within the scope of a template class S<T>, the name S gets bound
3789 (in build_self_reference) to a TYPE_DECL for the class, not a
3790 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
3791 or one of its enclosing classes, and that type is a template,
3792 return the associated TEMPLATE_DECL. Otherwise, the original
3793 DECL is returned. */
3794
3795 static tree
3796 maybe_get_template_decl_from_type_decl (decl)
3797 tree decl;
3798 {
3799 return (decl != NULL_TREE
3800 && TREE_CODE (decl) == TYPE_DECL
3801 && DECL_ARTIFICIAL (decl)
3802 && CLASS_TYPE_P (TREE_TYPE (decl))
3803 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
3804 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
3805 }
3806
3807 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
3808 parameters, find the desired type.
3809
3810 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
3811 (Actually ARGLIST may be either a TREE_LIST or a TREE_VEC. It will
3812 be a TREE_LIST if called directly from the parser, and a TREE_VEC
3813 otherwise.)
3814
3815 IN_DECL, if non-NULL, is the template declaration we are trying to
3816 instantiate.
3817
3818 If ENTERING_SCOPE is non-zero, we are about to enter the scope of
3819 the class we are looking up.
3820
3821 If COMPLAIN is non-zero, issue error messages.
3822
3823 If the template class is really a local class in a template
3824 function, then the FUNCTION_CONTEXT is the function in which it is
3825 being instantiated. */
3826
3827 tree
3828 lookup_template_class (d1, arglist, in_decl, context, entering_scope, complain)
3829 tree d1, arglist;
3830 tree in_decl;
3831 tree context;
3832 int entering_scope;
3833 int complain;
3834 {
3835 tree template = NULL_TREE, parmlist;
3836 tree t;
3837
3838 if (TREE_CODE (d1) == IDENTIFIER_NODE)
3839 {
3840 if (IDENTIFIER_VALUE (d1)
3841 && DECL_TEMPLATE_TEMPLATE_PARM_P (IDENTIFIER_VALUE (d1)))
3842 template = IDENTIFIER_VALUE (d1);
3843 else
3844 {
3845 if (context)
3846 push_decl_namespace (context);
3847 template = lookup_name (d1, /*prefer_type=*/0);
3848 template = maybe_get_template_decl_from_type_decl (template);
3849 if (context)
3850 pop_decl_namespace ();
3851 }
3852 if (template)
3853 context = DECL_CONTEXT (template);
3854 }
3855 else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
3856 {
3857 tree type = TREE_TYPE (d1);
3858
3859 /* If we are declaring a constructor, say A<T>::A<T>, we will get
3860 an implicit typename for the second A. Deal with it. */
3861 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
3862 type = TREE_TYPE (type);
3863
3864 if (CLASSTYPE_TEMPLATE_INFO (type))
3865 {
3866 template = CLASSTYPE_TI_TEMPLATE (type);
3867 d1 = DECL_NAME (template);
3868 }
3869 }
3870 else if (TREE_CODE (d1) == ENUMERAL_TYPE
3871 || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
3872 {
3873 template = TYPE_TI_TEMPLATE (d1);
3874 d1 = DECL_NAME (template);
3875 }
3876 else if (TREE_CODE (d1) == TEMPLATE_DECL
3877 && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
3878 {
3879 template = d1;
3880 d1 = DECL_NAME (template);
3881 context = DECL_CONTEXT (template);
3882 }
3883
3884 /* With something like `template <class T> class X class X { ... };'
3885 we could end up with D1 having nothing but an IDENTIFIER_VALUE.
3886 We don't want to do that, but we have to deal with the situation,
3887 so let's give them some syntax errors to chew on instead of a
3888 crash. Alternatively D1 might not be a template type at all. */
3889 if (! template)
3890 {
3891 if (complain)
3892 cp_error ("`%T' is not a template", d1);
3893 return error_mark_node;
3894 }
3895
3896 if (TREE_CODE (template) != TEMPLATE_DECL
3897 /* If we're called from the parser, make sure it's a user visible
3898 template. */
3899 || ((!arglist || TREE_CODE (arglist) == TREE_LIST)
3900 && !DECL_TEMPLATE_PARM_P (template)
3901 && !PRIMARY_TEMPLATE_P (template)))
3902 {
3903 if (complain)
3904 {
3905 cp_error ("non-template type `%T' used as a template", d1);
3906 if (in_decl)
3907 cp_error_at ("for template declaration `%D'", in_decl);
3908 }
3909 return error_mark_node;
3910 }
3911
3912 if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
3913 {
3914 /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
3915 template arguments */
3916
3917 tree parm;
3918 tree arglist2;
3919
3920 parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
3921
3922 arglist2 = coerce_template_parms (parmlist, arglist, template,
3923 complain, /*require_all_args=*/1);
3924 if (arglist2 == error_mark_node)
3925 return error_mark_node;
3926
3927 parm = copy_template_template_parm (TREE_TYPE (template), arglist2);
3928 TYPE_SIZE (parm) = 0;
3929 return parm;
3930 }
3931 else
3932 {
3933 tree template_type = TREE_TYPE (template);
3934 tree gen_tmpl;
3935 tree type_decl;
3936 tree found = NULL_TREE;
3937 tree *tp;
3938 int arg_depth;
3939 int parm_depth;
3940 int is_partial_instantiation;
3941
3942 gen_tmpl = most_general_template (template);
3943 parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
3944 parm_depth = TMPL_PARMS_DEPTH (parmlist);
3945 arg_depth = TMPL_ARGS_DEPTH (arglist);
3946
3947 if (arg_depth == 1 && parm_depth > 1)
3948 {
3949 /* We've been given an incomplete set of template arguments.
3950 For example, given:
3951
3952 template <class T> struct S1 {
3953 template <class U> struct S2 {};
3954 template <class U> struct S2<U*> {};
3955 };
3956
3957 we will be called with an ARGLIST of `U*', but the
3958 TEMPLATE will be `template <class T> template
3959 <class U> struct S1<T>::S2'. We must fill in the missing
3960 arguments. */
3961 arglist
3962 = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
3963 arglist);
3964 arg_depth = TMPL_ARGS_DEPTH (arglist);
3965 }
3966
3967 /* Now we should enough arguments. */
3968 my_friendly_assert (parm_depth == arg_depth, 0);
3969
3970 /* From here on, we're only interested in the most general
3971 template. */
3972 template = gen_tmpl;
3973
3974 /* Calculate the BOUND_ARGS. These will be the args that are
3975 actually tsubst'd into the definition to create the
3976 instantiation. */
3977 if (parm_depth > 1)
3978 {
3979 /* We have multiple levels of arguments to coerce, at once. */
3980 int i;
3981 int saved_depth = TMPL_ARGS_DEPTH (arglist);
3982
3983 tree bound_args = make_tree_vec (parm_depth);
3984
3985 for (i = saved_depth,
3986 t = DECL_TEMPLATE_PARMS (template);
3987 i > 0 && t != NULL_TREE;
3988 --i, t = TREE_CHAIN (t))
3989 {
3990 tree a = coerce_template_parms (TREE_VALUE (t),
3991 arglist, template,
3992 complain, /*require_all_args=*/1);
3993 SET_TMPL_ARGS_LEVEL (bound_args, i, a);
3994
3995 /* We temporarily reduce the length of the ARGLIST so
3996 that coerce_template_parms will see only the arguments
3997 corresponding to the template parameters it is
3998 examining. */
3999 TREE_VEC_LENGTH (arglist)--;
4000 }
4001
4002 /* Restore the ARGLIST to its full size. */
4003 TREE_VEC_LENGTH (arglist) = saved_depth;
4004
4005 arglist = bound_args;
4006 }
4007 else
4008 arglist
4009 = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
4010 INNERMOST_TEMPLATE_ARGS (arglist),
4011 template,
4012 complain, /*require_all_args=*/1);
4013
4014 if (arglist == error_mark_node)
4015 /* We were unable to bind the arguments. */
4016 return error_mark_node;
4017
4018 /* In the scope of a template class, explicit references to the
4019 template class refer to the type of the template, not any
4020 instantiation of it. For example, in:
4021
4022 template <class T> class C { void f(C<T>); }
4023
4024 the `C<T>' is just the same as `C'. Outside of the
4025 class, however, such a reference is an instantiation. */
4026 if (comp_template_args (TYPE_TI_ARGS (template_type),
4027 arglist))
4028 {
4029 found = template_type;
4030
4031 if (!entering_scope && PRIMARY_TEMPLATE_P (template))
4032 {
4033 tree ctx;
4034
4035 /* Note that we use DECL_CONTEXT, rather than
4036 CP_DECL_CONTEXT, so that the termination test is
4037 always just `ctx'. We're not interested in namespace
4038 scopes. */
4039 for (ctx = current_class_type;
4040 ctx;
4041 ctx = (TYPE_P (ctx)) ? TYPE_CONTEXT (ctx) : DECL_CONTEXT (ctx))
4042 if (same_type_p (ctx, template_type))
4043 break;
4044
4045 if (!ctx)
4046 /* We're not in the scope of the class, so the
4047 TEMPLATE_TYPE is not the type we want after
4048 all. */
4049 found = NULL_TREE;
4050 }
4051 }
4052 if (found)
4053 return found;
4054
4055 for (tp = &DECL_TEMPLATE_INSTANTIATIONS (template);
4056 *tp;
4057 tp = &TREE_CHAIN (*tp))
4058 if (comp_template_args (TREE_PURPOSE (*tp), arglist))
4059 {
4060 found = *tp;
4061
4062 /* Use the move-to-front heuristic to speed up future
4063 searches. */
4064 *tp = TREE_CHAIN (*tp);
4065 TREE_CHAIN (found)
4066 = DECL_TEMPLATE_INSTANTIATIONS (template);
4067 DECL_TEMPLATE_INSTANTIATIONS (template) = found;
4068
4069 return TREE_VALUE (found);
4070 }
4071
4072 /* This type is a "partial instantiation" if any of the template
4073 arguments still involve template parameters. Note that we set
4074 IS_PARTIAL_INSTANTIATION for partial specializations as
4075 well. */
4076 is_partial_instantiation = uses_template_parms (arglist);
4077
4078 if (!is_partial_instantiation
4079 && !PRIMARY_TEMPLATE_P (template)
4080 && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
4081 {
4082 found = xref_tag_from_type (TREE_TYPE (template),
4083 DECL_NAME (template),
4084 /*globalize=*/1);
4085 return found;
4086 }
4087
4088 context = tsubst (DECL_CONTEXT (template), arglist,
4089 /*complain=*/0, in_decl);
4090 if (!context)
4091 context = global_namespace;
4092
4093 /* Create the type. */
4094 if (TREE_CODE (template_type) == ENUMERAL_TYPE)
4095 {
4096 if (!is_partial_instantiation)
4097 {
4098 set_current_access_from_decl (TYPE_NAME (template_type));
4099 t = start_enum (TYPE_IDENTIFIER (template_type));
4100 }
4101 else
4102 /* We don't want to call start_enum for this type, since
4103 the values for the enumeration constants may involve
4104 template parameters. And, no one should be interested
4105 in the enumeration constants for such a type. */
4106 t = make_node (ENUMERAL_TYPE);
4107 }
4108 else
4109 {
4110 t = make_aggr_type (TREE_CODE (template_type));
4111 CLASSTYPE_DECLARED_CLASS (t)
4112 = CLASSTYPE_DECLARED_CLASS (template_type);
4113 CLASSTYPE_GOT_SEMICOLON (t) = 1;
4114 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
4115 TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
4116
4117 /* A local class. Make sure the decl gets registered properly. */
4118 if (context == current_function_decl)
4119 pushtag (DECL_NAME (template), t, 0);
4120 }
4121
4122 /* If we called start_enum or pushtag above, this information
4123 will already be set up. */
4124 if (!TYPE_NAME (t))
4125 {
4126 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
4127
4128 type_decl = create_implicit_typedef (DECL_NAME (template), t);
4129 DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
4130 TYPE_STUB_DECL (t) = type_decl;
4131 DECL_SOURCE_FILE (type_decl)
4132 = DECL_SOURCE_FILE (TYPE_STUB_DECL (template_type));
4133 DECL_SOURCE_LINE (type_decl)
4134 = DECL_SOURCE_LINE (TYPE_STUB_DECL (template_type));
4135 }
4136 else
4137 type_decl = TYPE_NAME (t);
4138
4139 /* Set up the template information. We have to figure out which
4140 template is the immediate parent if this is a full
4141 instantiation. */
4142 if (parm_depth == 1 || is_partial_instantiation
4143 || !PRIMARY_TEMPLATE_P (template))
4144 /* This case is easy; there are no member templates involved. */
4145 found = template;
4146 else
4147 {
4148 /* This is a full instantiation of a member template. Look
4149 for a partial instantiation of which this is an instance. */
4150
4151 for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
4152 found; found = TREE_CHAIN (found))
4153 {
4154 int success;
4155 tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
4156
4157 /* We only want partial instantiations, here, not
4158 specializations or full instantiations. */
4159 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
4160 || !uses_template_parms (TREE_VALUE (found)))
4161 continue;
4162
4163 /* Temporarily reduce by one the number of levels in the
4164 ARGLIST and in FOUND so as to avoid comparing the
4165 last set of arguments. */
4166 TREE_VEC_LENGTH (arglist)--;
4167 TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
4168
4169 /* See if the arguments match. If they do, then TMPL is
4170 the partial instantiation we want. */
4171 success = comp_template_args (TREE_PURPOSE (found), arglist);
4172
4173 /* Restore the argument vectors to their full size. */
4174 TREE_VEC_LENGTH (arglist)++;
4175 TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
4176
4177 if (success)
4178 {
4179 found = tmpl;
4180 break;
4181 }
4182 }
4183
4184 if (!found)
4185 {
4186 /* There was no partial instantiation. This happens
4187 where C<T> is a member template of A<T> and it's used
4188 in something like
4189
4190 template <typename T> struct B { A<T>::C<int> m; };
4191 B<float>;
4192
4193 Create the partial instantiation.
4194 */
4195 TREE_VEC_LENGTH (arglist)--;
4196 template = tsubst (template, arglist, /*complain=*/0, NULL_TREE);
4197 TREE_VEC_LENGTH (arglist)++;
4198 found = template;
4199 }
4200 }
4201
4202 SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
4203 DECL_TEMPLATE_INSTANTIATIONS (template)
4204 = tree_cons (arglist, t,
4205 DECL_TEMPLATE_INSTANTIATIONS (template));
4206
4207 if (TREE_CODE (t) == ENUMERAL_TYPE
4208 && !is_partial_instantiation)
4209 /* Now that the type has been registered on the instantiations
4210 list, we set up the enumerators. Because the enumeration
4211 constants may involve the enumeration type itself, we make
4212 sure to register the type first, and then create the
4213 constants. That way, doing tsubst_expr for the enumeration
4214 constants won't result in recursive calls here; we'll find
4215 the instantiation and exit above. */
4216 tsubst_enum (template_type, t, arglist);
4217
4218 /* Reset the name of the type, now that CLASSTYPE_TEMPLATE_INFO
4219 is set up. */
4220 if (TREE_CODE (t) != ENUMERAL_TYPE)
4221 DECL_NAME (type_decl) = classtype_mangled_name (t);
4222 DECL_ASSEMBLER_NAME (type_decl) = DECL_NAME (type_decl);
4223 if (!is_partial_instantiation)
4224 {
4225 if (flag_new_abi)
4226 DECL_ASSEMBLER_NAME (type_decl) = mangle_decl (type_decl);
4227 else
4228 DECL_ASSEMBLER_NAME (type_decl)
4229 = get_identifier (build_overload_name (t, 1, 1));
4230
4231 /* For backwards compatibility; code that uses
4232 -fexternal-templates expects looking up a template to
4233 instantiate it. I think DDD still relies on this.
4234 (jason 8/20/1998) */
4235 if (TREE_CODE (t) != ENUMERAL_TYPE
4236 && flag_external_templates
4237 && CLASSTYPE_INTERFACE_KNOWN (TREE_TYPE (template))
4238 && ! CLASSTYPE_INTERFACE_ONLY (TREE_TYPE (template)))
4239 add_pending_template (t);
4240 }
4241 else
4242 /* If the type makes use of template parameters, the
4243 code that generates debugging information will crash. */
4244 DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
4245
4246 return t;
4247 }
4248 }
4249 \f
4250 struct pair_fn_data
4251 {
4252 tree_fn_t fn;
4253 void *data;
4254 };
4255
4256 /* Called from for_each_template_parm via walk_tree. */
4257
4258 static tree
4259 for_each_template_parm_r (tp, walk_subtrees, d)
4260 tree *tp;
4261 int *walk_subtrees;
4262 void *d;
4263 {
4264 tree t = *tp;
4265 struct pair_fn_data *pfd = (struct pair_fn_data *) d;
4266 tree_fn_t fn = pfd->fn;
4267 void *data = pfd->data;
4268
4269 if (TYPE_P (t)
4270 && for_each_template_parm (TYPE_CONTEXT (t), fn, data))
4271 return error_mark_node;
4272
4273 switch (TREE_CODE (t))
4274 {
4275 case RECORD_TYPE:
4276 if (TYPE_PTRMEMFUNC_P (t))
4277 break;
4278 /* Fall through. */
4279
4280 case UNION_TYPE:
4281 case ENUMERAL_TYPE:
4282 if (!TYPE_TEMPLATE_INFO (t))
4283 *walk_subtrees = 0;
4284 else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
4285 fn, data))
4286 return error_mark_node;
4287 break;
4288
4289 case METHOD_TYPE:
4290 /* Since we're not going to walk subtrees, we have to do this
4291 explicitly here. */
4292 if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data))
4293 return error_mark_node;
4294 /* Fall through. */
4295
4296 case FUNCTION_TYPE:
4297 /* Check the return type. */
4298 if (for_each_template_parm (TREE_TYPE (t), fn, data))
4299 return error_mark_node;
4300
4301 /* Check the parameter types. Since default arguments are not
4302 instantiated until they are needed, the TYPE_ARG_TYPES may
4303 contain expressions that involve template parameters. But,
4304 no-one should be looking at them yet. And, once they're
4305 instantiated, they don't contain template parameters, so
4306 there's no point in looking at them then, either. */
4307 {
4308 tree parm;
4309
4310 for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
4311 if (for_each_template_parm (TREE_VALUE (parm), fn, data))
4312 return error_mark_node;
4313
4314 /* Since we've already handled the TYPE_ARG_TYPES, we don't
4315 want walk_tree walking into them itself. */
4316 *walk_subtrees = 0;
4317 }
4318 break;
4319
4320 case FUNCTION_DECL:
4321 case VAR_DECL:
4322 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
4323 && for_each_template_parm (DECL_TI_ARGS (t), fn, data))
4324 return error_mark_node;
4325 /* Fall through. */
4326
4327 case CONST_DECL:
4328 case PARM_DECL:
4329 if (DECL_CONTEXT (t)
4330 && for_each_template_parm (DECL_CONTEXT (t), fn, data))
4331 return error_mark_node;
4332 break;
4333
4334 case BOUND_TEMPLATE_TEMPLATE_PARM:
4335 /* Record template parameters such as `T' inside `TT<T>'. */
4336 if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data))
4337 return error_mark_node;
4338 /* Fall through. */
4339
4340 case TEMPLATE_TEMPLATE_PARM:
4341 case TEMPLATE_TYPE_PARM:
4342 case TEMPLATE_PARM_INDEX:
4343 if (fn && (*fn)(t, data))
4344 return error_mark_node;
4345 else if (!fn)
4346 return error_mark_node;
4347 break;
4348
4349 case TEMPLATE_DECL:
4350 /* A template template parameter is encountered */
4351 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
4352 && for_each_template_parm (TREE_TYPE (t), fn, data))
4353 return error_mark_node;
4354
4355 /* Already substituted template template parameter */
4356 *walk_subtrees = 0;
4357 break;
4358
4359 case TYPENAME_TYPE:
4360 if (!fn || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn, data))
4361 return error_mark_node;
4362 break;
4363
4364 case CONSTRUCTOR:
4365 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
4366 && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
4367 (TREE_TYPE (t)), fn, data))
4368 return error_mark_node;
4369 break;
4370
4371 case INDIRECT_REF:
4372 case COMPONENT_REF:
4373 /* If there's no type, then this thing must be some expression
4374 involving template parameters. */
4375 if (!fn && !TREE_TYPE (t))
4376 return error_mark_node;
4377 break;
4378
4379 case MODOP_EXPR:
4380 case CAST_EXPR:
4381 case REINTERPRET_CAST_EXPR:
4382 case CONST_CAST_EXPR:
4383 case STATIC_CAST_EXPR:
4384 case DYNAMIC_CAST_EXPR:
4385 case ARROW_EXPR:
4386 case DOTSTAR_EXPR:
4387 case TYPEID_EXPR:
4388 case LOOKUP_EXPR:
4389 case PSEUDO_DTOR_EXPR:
4390 if (!fn)
4391 return error_mark_node;
4392 break;
4393
4394 default:
4395 break;
4396 }
4397
4398 /* We didn't find any template parameters we liked. */
4399 return NULL_TREE;
4400 }
4401
4402 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
4403 BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
4404 call FN with the parameter and the DATA.
4405 If FN returns non-zero, the iteration is terminated, and
4406 for_each_template_parm returns 1. Otherwise, the iteration
4407 continues. If FN never returns a non-zero value, the value
4408 returned by for_each_template_parm is 0. If FN is NULL, it is
4409 considered to be the function which always returns 1. */
4410
4411 static int
4412 for_each_template_parm (t, fn, data)
4413 tree t;
4414 tree_fn_t fn;
4415 void* data;
4416 {
4417 struct pair_fn_data pfd;
4418
4419 /* Set up. */
4420 pfd.fn = fn;
4421 pfd.data = data;
4422
4423 /* Walk the tree. (Conceptually, we would like to walk without
4424 duplicates, but for_each_template_parm_r recursively calls
4425 for_each_template_parm, so we would need to reorganize a fair
4426 bit to use walk_tree_without_duplicates.) */
4427 return walk_tree (&t,
4428 for_each_template_parm_r,
4429 &pfd,
4430 NULL) != NULL_TREE;
4431 }
4432
4433 int
4434 uses_template_parms (t)
4435 tree t;
4436 {
4437 return for_each_template_parm (t, 0, 0);
4438 }
4439
4440 static int tinst_depth;
4441 extern int max_tinst_depth;
4442 #ifdef GATHER_STATISTICS
4443 int depth_reached;
4444 #endif
4445 static int tinst_level_tick;
4446 static int last_template_error_tick;
4447
4448 /* We're starting to instantiate D; record the template instantiation context
4449 for diagnostics and to restore it later. */
4450
4451 static int
4452 push_tinst_level (d)
4453 tree d;
4454 {
4455 tree new;
4456
4457 if (tinst_depth >= max_tinst_depth)
4458 {
4459 /* If the instantiation in question still has unbound template parms,
4460 we don't really care if we can't instantiate it, so just return.
4461 This happens with base instantiation for implicit `typename'. */
4462 if (uses_template_parms (d))
4463 return 0;
4464
4465 last_template_error_tick = tinst_level_tick;
4466 cp_error ("template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN to increase the maximum) instantiating `%D'",
4467 max_tinst_depth, d);
4468
4469 print_instantiation_context ();
4470
4471 return 0;
4472 }
4473
4474 new = build_expr_wfl (d, input_filename, lineno, 0);
4475 TREE_CHAIN (new) = current_tinst_level;
4476 current_tinst_level = new;
4477
4478 ++tinst_depth;
4479 #ifdef GATHER_STATISTICS
4480 if (tinst_depth > depth_reached)
4481 depth_reached = tinst_depth;
4482 #endif
4483
4484 ++tinst_level_tick;
4485 return 1;
4486 }
4487
4488 /* We're done instantiating this template; return to the instantiation
4489 context. */
4490
4491 void
4492 pop_tinst_level ()
4493 {
4494 tree old = current_tinst_level;
4495
4496 /* Restore the filename and line number stashed away when we started
4497 this instantiation. */
4498 lineno = TINST_LINE (old);
4499 input_filename = TINST_FILE (old);
4500 extract_interface_info ();
4501
4502 current_tinst_level = TREE_CHAIN (old);
4503 --tinst_depth;
4504 ++tinst_level_tick;
4505 }
4506
4507 /* We're instantiating a deferred template; restore the template
4508 instantiation context in which the instantiation was requested, which
4509 is one step out from LEVEL. */
4510
4511 static void
4512 reopen_tinst_level (level)
4513 tree level;
4514 {
4515 tree t;
4516
4517 tinst_depth = 0;
4518 for (t = level; t; t = TREE_CHAIN (t))
4519 ++tinst_depth;
4520
4521 current_tinst_level = level;
4522 pop_tinst_level ();
4523 }
4524
4525 /* Return the outermost template instantiation context, for use with
4526 -falt-external-templates. */
4527
4528 tree
4529 tinst_for_decl ()
4530 {
4531 tree p = current_tinst_level;
4532
4533 if (p)
4534 for (; TREE_CHAIN (p) ; p = TREE_CHAIN (p))
4535 ;
4536 return p;
4537 }
4538
4539 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
4540 vector of template arguments, as for tsubst.
4541
4542 Returns an appropriate tsubst'd friend declaration. */
4543
4544 static tree
4545 tsubst_friend_function (decl, args)
4546 tree decl;
4547 tree args;
4548 {
4549 tree new_friend;
4550 int line = lineno;
4551 const char *file = input_filename;
4552
4553 lineno = DECL_SOURCE_LINE (decl);
4554 input_filename = DECL_SOURCE_FILE (decl);
4555
4556 if (TREE_CODE (decl) == FUNCTION_DECL
4557 && DECL_TEMPLATE_INSTANTIATION (decl)
4558 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
4559 /* This was a friend declared with an explicit template
4560 argument list, e.g.:
4561
4562 friend void f<>(T);
4563
4564 to indicate that f was a template instantiation, not a new
4565 function declaration. Now, we have to figure out what
4566 instantiation of what template. */
4567 {
4568 tree template_id, arglist, fns;
4569 tree new_args;
4570 tree tmpl;
4571 tree ns = CP_DECL_CONTEXT (TYPE_MAIN_DECL (current_class_type));
4572
4573 /* Friend functions are looked up in the containing namespace scope.
4574 We must enter that scope, to avoid finding member functions of the
4575 current cless with same name. */
4576 push_nested_namespace (ns);
4577 fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
4578 /*complain=*/1, NULL_TREE);
4579 pop_nested_namespace (ns);
4580 arglist = tsubst (DECL_TI_ARGS (decl), args,
4581 /*complain=*/1, NULL_TREE);
4582 template_id = lookup_template_function (fns, arglist);
4583
4584 new_friend = tsubst (decl, args, /*complain=*/1, NULL_TREE);
4585 tmpl = determine_specialization (template_id, new_friend,
4586 &new_args,
4587 /*need_member_template=*/0);
4588 new_friend = instantiate_template (tmpl, new_args);
4589 goto done;
4590 }
4591
4592 new_friend = tsubst (decl, args, /*complain=*/1, NULL_TREE);
4593
4594 /* The NEW_FRIEND will look like an instantiation, to the
4595 compiler, but is not an instantiation from the point of view of
4596 the language. For example, we might have had:
4597
4598 template <class T> struct S {
4599 template <class U> friend void f(T, U);
4600 };
4601
4602 Then, in S<int>, template <class U> void f(int, U) is not an
4603 instantiation of anything. */
4604 DECL_USE_TEMPLATE (new_friend) = 0;
4605 if (TREE_CODE (decl) == TEMPLATE_DECL)
4606 {
4607 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
4608 DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
4609 = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
4610 }
4611
4612 /* The mangled name for the NEW_FRIEND is incorrect. The call to
4613 tsubst will have resulted in a call to
4614 set_mangled_name_for_template_decl. But, the function is not a
4615 template instantiation and should not be mangled like one.
4616 Therefore, we remangle the function name. We don't have to do
4617 this if the NEW_FRIEND is a template since
4618 set_mangled_name_for_template_decl doesn't do anything if the
4619 function declaration still uses template arguments. */
4620 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
4621 {
4622 set_mangled_name_for_decl (new_friend);
4623 DECL_RTL (new_friend) = 0;
4624 make_decl_rtl (new_friend, NULL_PTR);
4625 }
4626
4627 if (DECL_NAMESPACE_SCOPE_P (new_friend))
4628 {
4629 tree old_decl;
4630 tree new_friend_template_info;
4631 tree new_friend_result_template_info;
4632 tree ns;
4633 int new_friend_is_defn;
4634
4635 /* We must save some information from NEW_FRIEND before calling
4636 duplicate decls since that function will free NEW_FRIEND if
4637 possible. */
4638 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
4639 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
4640 {
4641 /* This declaration is a `primary' template. */
4642 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
4643
4644 new_friend_is_defn
4645 = DECL_INITIAL (DECL_TEMPLATE_RESULT (new_friend)) != NULL_TREE;
4646 new_friend_result_template_info
4647 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
4648 }
4649 else
4650 {
4651 new_friend_is_defn = DECL_INITIAL (new_friend) != NULL_TREE;
4652 new_friend_result_template_info = NULL_TREE;
4653 }
4654
4655 /* Inside pushdecl_namespace_level, we will push into the
4656 current namespace. However, the friend function should go
4657 into the namespace of the template. */
4658 ns = decl_namespace_context (new_friend);
4659 push_nested_namespace (ns);
4660 old_decl = pushdecl_namespace_level (new_friend);
4661 pop_nested_namespace (ns);
4662
4663 if (old_decl != new_friend)
4664 {
4665 /* This new friend declaration matched an existing
4666 declaration. For example, given:
4667
4668 template <class T> void f(T);
4669 template <class U> class C {
4670 template <class T> friend void f(T) {}
4671 };
4672
4673 the friend declaration actually provides the definition
4674 of `f', once C has been instantiated for some type. So,
4675 old_decl will be the out-of-class template declaration,
4676 while new_friend is the in-class definition.
4677
4678 But, if `f' was called before this point, the
4679 instantiation of `f' will have DECL_TI_ARGS corresponding
4680 to `T' but not to `U', references to which might appear
4681 in the definition of `f'. Previously, the most general
4682 template for an instantiation of `f' was the out-of-class
4683 version; now it is the in-class version. Therefore, we
4684 run through all specialization of `f', adding to their
4685 DECL_TI_ARGS appropriately. In particular, they need a
4686 new set of outer arguments, corresponding to the
4687 arguments for this class instantiation.
4688
4689 The same situation can arise with something like this:
4690
4691 friend void f(int);
4692 template <class T> class C {
4693 friend void f(T) {}
4694 };
4695
4696 when `C<int>' is instantiated. Now, `f(int)' is defined
4697 in the class. */
4698
4699 if (!new_friend_is_defn)
4700 /* On the other hand, if the in-class declaration does
4701 *not* provide a definition, then we don't want to alter
4702 existing definitions. We can just leave everything
4703 alone. */
4704 ;
4705 else
4706 {
4707 /* Overwrite whatever template info was there before, if
4708 any, with the new template information pertaining to
4709 the declaration. */
4710 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
4711
4712 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
4713 /* duplicate_decls will take care of this case. */
4714 ;
4715 else
4716 {
4717 tree t;
4718 tree new_friend_args;
4719
4720 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
4721 = new_friend_result_template_info;
4722
4723 new_friend_args = TI_ARGS (new_friend_template_info);
4724 for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
4725 t != NULL_TREE;
4726 t = TREE_CHAIN (t))
4727 {
4728 tree spec = TREE_VALUE (t);
4729
4730 DECL_TI_ARGS (spec)
4731 = add_outermost_template_args (new_friend_args,
4732 DECL_TI_ARGS (spec));
4733 }
4734
4735 /* Now, since specializations are always supposed to
4736 hang off of the most general template, we must move
4737 them. */
4738 t = most_general_template (old_decl);
4739 if (t != old_decl)
4740 {
4741 DECL_TEMPLATE_SPECIALIZATIONS (t)
4742 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
4743 DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
4744 DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
4745 }
4746 }
4747 }
4748
4749 /* The information from NEW_FRIEND has been merged into OLD_DECL
4750 by duplicate_decls. */
4751 new_friend = old_decl;
4752 }
4753 }
4754 else if (COMPLETE_TYPE_P (DECL_CONTEXT (new_friend)))
4755 {
4756 /* Check to see that the declaration is really present, and,
4757 possibly obtain an improved declaration. */
4758 tree fn = check_classfn (DECL_CONTEXT (new_friend),
4759 new_friend);
4760
4761 if (fn)
4762 new_friend = fn;
4763 }
4764
4765 done:
4766 lineno = line;
4767 input_filename = file;
4768 return new_friend;
4769 }
4770
4771 /* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
4772 template arguments, as for tsubst.
4773
4774 Returns an appropriate tsubst'd friend type or error_mark_node on
4775 failure. */
4776
4777 static tree
4778 tsubst_friend_class (friend_tmpl, args)
4779 tree friend_tmpl;
4780 tree args;
4781 {
4782 tree friend_type;
4783 tree tmpl;
4784
4785 /* First, we look for a class template. */
4786 tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/0);
4787
4788 /* But, if we don't find one, it might be because we're in a
4789 situation like this:
4790
4791 template <class T>
4792 struct S {
4793 template <class U>
4794 friend struct S;
4795 };
4796
4797 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
4798 for `S<int>', not the TEMPLATE_DECL. */
4799 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
4800 {
4801 tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/1);
4802 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
4803 }
4804
4805 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
4806 {
4807 /* The friend template has already been declared. Just
4808 check to see that the declarations match, and install any new
4809 default parameters. We must tsubst the default parameters,
4810 of course. We only need the innermost template parameters
4811 because that is all that redeclare_class_template will look
4812 at. */
4813 tree parms
4814 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
4815 args, /*complain=*/1);
4816 if (!parms)
4817 return error_mark_node;
4818 redeclare_class_template (TREE_TYPE (tmpl), parms);
4819 friend_type = TREE_TYPE (tmpl);
4820 }
4821 else
4822 {
4823 /* The friend template has not already been declared. In this
4824 case, the instantiation of the template class will cause the
4825 injection of this template into the global scope. */
4826 tmpl = tsubst (friend_tmpl, args, /*complain=*/1, NULL_TREE);
4827
4828 /* The new TMPL is not an instantiation of anything, so we
4829 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
4830 the new type because that is supposed to be the corresponding
4831 template decl, i.e., TMPL. */
4832 DECL_USE_TEMPLATE (tmpl) = 0;
4833 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
4834 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
4835
4836 /* Inject this template into the global scope. */
4837 friend_type = TREE_TYPE (pushdecl_top_level (tmpl));
4838 }
4839
4840 return friend_type;
4841 }
4842
4843 tree
4844 instantiate_class_template (type)
4845 tree type;
4846 {
4847 tree template, args, pattern, t;
4848 tree typedecl;
4849
4850 if (type == error_mark_node)
4851 return error_mark_node;
4852
4853 if (TYPE_BEING_DEFINED (type) || COMPLETE_TYPE_P (type))
4854 return type;
4855
4856 /* Figure out which template is being instantiated. */
4857 template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
4858 my_friendly_assert (TREE_CODE (template) == TEMPLATE_DECL, 279);
4859
4860 /* Figure out which arguments are being used to do the
4861 instantiation. */
4862 args = CLASSTYPE_TI_ARGS (type);
4863 PARTIAL_INSTANTIATION_P (type) = uses_template_parms (args);
4864
4865 if (pedantic && PARTIAL_INSTANTIATION_P (type))
4866 /* If this is a partial instantiation, then we can't instantiate
4867 the type; there's no telling whether or not one of the
4868 template parameters might eventually be instantiated to some
4869 value that results in a specialization being used. For
4870 example, consider:
4871
4872 template <class T>
4873 struct S {};
4874
4875 template <class U>
4876 void f(S<U>);
4877
4878 template <>
4879 struct S<int> {};
4880
4881 Now, the `S<U>' in `f<int>' is the specialization, not an
4882 instantiation of the original template. */
4883 return type;
4884
4885 /* Determine what specialization of the original template to
4886 instantiate. */
4887 if (PARTIAL_INSTANTIATION_P (type))
4888 /* There's no telling which specialization is appropriate at this
4889 point. Since all peeking at the innards of this partial
4890 instantiation are extensions (like the "implicit typename"
4891 extension, which allows users to omit the keyword `typename' on
4892 names that are declared as types in template base classes), we
4893 are free to do what we please.
4894
4895 Trying to figure out which partial instantiation to use can
4896 cause a crash. (Some of the template arguments don't even have
4897 types.) So, we just use the most general version. */
4898 t = NULL_TREE;
4899 else
4900 {
4901 t = most_specialized_class (template, args);
4902
4903 if (t == error_mark_node)
4904 {
4905 const char *str = "candidates are:";
4906 cp_error ("ambiguous class template instantiation for `%#T'", type);
4907 for (t = DECL_TEMPLATE_SPECIALIZATIONS (template); t;
4908 t = TREE_CHAIN (t))
4909 {
4910 if (get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t),
4911 args))
4912 {
4913 cp_error_at ("%s %+#T", str, TREE_TYPE (t));
4914 str = " ";
4915 }
4916 }
4917 TYPE_BEING_DEFINED (type) = 1;
4918 return error_mark_node;
4919 }
4920 }
4921
4922 if (t)
4923 pattern = TREE_TYPE (t);
4924 else
4925 pattern = TREE_TYPE (template);
4926
4927 /* If the template we're instantiating is incomplete, then clearly
4928 there's nothing we can do. */
4929 if (!COMPLETE_TYPE_P (pattern))
4930 return type;
4931
4932 /* If this is a partial instantiation, don't tsubst anything. We will
4933 only use this type for implicit typename, so the actual contents don't
4934 matter. All that matters is whether a particular name is a type. */
4935 if (PARTIAL_INSTANTIATION_P (type))
4936 {
4937 /* The fields set here must be kept in sync with those cleared
4938 in begin_class_definition. */
4939 TYPE_BINFO_BASETYPES (type) = TYPE_BINFO_BASETYPES (pattern);
4940 TYPE_FIELDS (type) = TYPE_FIELDS (pattern);
4941 TYPE_METHODS (type) = TYPE_METHODS (pattern);
4942 CLASSTYPE_TAGS (type) = CLASSTYPE_TAGS (pattern);
4943 CLASSTYPE_VBASECLASSES (type) = CLASSTYPE_VBASECLASSES (pattern);
4944
4945 /* Pretend that the type is complete, so that we will look
4946 inside it during name lookup and such. */
4947 TYPE_SIZE (type) = bitsize_zero_node;
4948 return type;
4949 }
4950
4951 /* If we've recursively instantiated too many templates, stop. */
4952 if (! push_tinst_level (type))
4953 return type;
4954
4955 /* Now we're really doing the instantiation. Mark the type as in
4956 the process of being defined. */
4957 TYPE_BEING_DEFINED (type) = 1;
4958
4959 maybe_push_to_top_level (uses_template_parms (type));
4960
4961 if (t)
4962 {
4963 /* This TYPE is actually a instantiation of of a partial
4964 specialization. We replace the innermost set of ARGS with
4965 the arguments appropriate for substitution. For example,
4966 given:
4967
4968 template <class T> struct S {};
4969 template <class T> struct S<T*> {};
4970
4971 and supposing that we are instantiating S<int*>, ARGS will
4972 present be {int*} but we need {int}. */
4973 tree inner_args
4974 = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t),
4975 args);
4976
4977 /* If there were multiple levels in ARGS, replacing the
4978 innermost level would alter CLASSTYPE_TI_ARGS, which we don't
4979 want, so we make a copy first. */
4980 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
4981 {
4982 args = copy_node (args);
4983 SET_TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args), inner_args);
4984 }
4985 else
4986 args = inner_args;
4987 }
4988
4989 if (flag_external_templates)
4990 {
4991 if (flag_alt_external_templates)
4992 {
4993 CLASSTYPE_INTERFACE_ONLY (type) = interface_only;
4994 SET_CLASSTYPE_INTERFACE_UNKNOWN_X (type, interface_unknown);
4995 CLASSTYPE_VTABLE_NEEDS_WRITING (type)
4996 = (! CLASSTYPE_INTERFACE_ONLY (type)
4997 && CLASSTYPE_INTERFACE_KNOWN (type));
4998 }
4999 else
5000 {
5001 CLASSTYPE_INTERFACE_ONLY (type) = CLASSTYPE_INTERFACE_ONLY (pattern);
5002 SET_CLASSTYPE_INTERFACE_UNKNOWN_X
5003 (type, CLASSTYPE_INTERFACE_UNKNOWN (pattern));
5004 CLASSTYPE_VTABLE_NEEDS_WRITING (type)
5005 = (! CLASSTYPE_INTERFACE_ONLY (type)
5006 && CLASSTYPE_INTERFACE_KNOWN (type));
5007 }
5008 }
5009 else
5010 {
5011 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
5012 CLASSTYPE_VTABLE_NEEDS_WRITING (type) = 1;
5013 }
5014
5015 TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
5016 TYPE_HAS_DESTRUCTOR (type) = TYPE_HAS_DESTRUCTOR (pattern);
5017 TYPE_OVERLOADS_CALL_EXPR (type) = TYPE_OVERLOADS_CALL_EXPR (pattern);
5018 TYPE_OVERLOADS_ARRAY_REF (type) = TYPE_OVERLOADS_ARRAY_REF (pattern);
5019 TYPE_OVERLOADS_ARROW (type) = TYPE_OVERLOADS_ARROW (pattern);
5020 TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
5021 TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
5022 TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
5023 TYPE_VEC_DELETE_TAKES_SIZE (type) = TYPE_VEC_DELETE_TAKES_SIZE (pattern);
5024 TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
5025 TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
5026 TYPE_HAS_ABSTRACT_ASSIGN_REF (type) = TYPE_HAS_ABSTRACT_ASSIGN_REF (pattern);
5027 TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
5028 TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
5029 TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
5030 TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
5031 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (type)
5032 = TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (pattern);
5033 TYPE_USES_MULTIPLE_INHERITANCE (type)
5034 = TYPE_USES_MULTIPLE_INHERITANCE (pattern);
5035 TYPE_USES_VIRTUAL_BASECLASSES (type)
5036 = TYPE_USES_VIRTUAL_BASECLASSES (pattern);
5037 TYPE_PACKED (type) = TYPE_PACKED (pattern);
5038 TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
5039 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
5040 TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
5041 if (ANON_AGGR_TYPE_P (pattern))
5042 SET_ANON_AGGR_TYPE_P (type);
5043
5044 if (TYPE_BINFO_BASETYPES (pattern))
5045 {
5046 tree base_list = NULL_TREE;
5047 tree pbases = TYPE_BINFO_BASETYPES (pattern);
5048 int i;
5049
5050 /* Substitute into each of the bases to determine the actual
5051 basetypes. */
5052 for (i = 0; i < TREE_VEC_LENGTH (pbases); ++i)
5053 {
5054 tree base;
5055 tree access;
5056 tree pbase;
5057
5058 pbase = TREE_VEC_ELT (pbases, i);
5059
5060 /* Substitute to figure out the base class. */
5061 base = tsubst (BINFO_TYPE (pbase), args,
5062 /*complain=*/1, NULL_TREE);
5063 if (base == error_mark_node)
5064 continue;
5065
5066 /* Calculate the correct access node. */
5067 if (TREE_VIA_VIRTUAL (pbase))
5068 {
5069 if (TREE_VIA_PUBLIC (pbase))
5070 access = access_public_virtual_node;
5071 else if (TREE_VIA_PROTECTED (pbase))
5072 access = access_protected_virtual_node;
5073 else
5074 access = access_private_virtual_node;
5075 }
5076 else
5077 {
5078 if (TREE_VIA_PUBLIC (pbase))
5079 access = access_public_node;
5080 else if (TREE_VIA_PROTECTED (pbase))
5081 access = access_protected_node;
5082 else
5083 access = access_private_node;
5084 }
5085
5086 base_list = tree_cons (access, base, base_list);
5087 }
5088
5089 /* The list is now in reverse order; correct that. */
5090 base_list = nreverse (base_list);
5091
5092 /* Now call xref_basetypes to set up all the base-class
5093 information. */
5094 xref_basetypes (TREE_CODE (pattern) == RECORD_TYPE
5095 ? (CLASSTYPE_DECLARED_CLASS (pattern)
5096 ? class_type_node : record_type_node)
5097 : union_type_node,
5098 DECL_NAME (TYPE_NAME (pattern)),
5099 type,
5100 base_list);
5101 }
5102
5103 /* Now that our base classes are set up, enter the scope of the
5104 class, so that name lookups into base classes, etc. will work
5105 correctly. This is precisely analogous to what we do in
5106 begin_class_definition when defining an ordinary non-template
5107 class. */
5108 pushclass (type, 1);
5109
5110 for (t = CLASSTYPE_TAGS (pattern); t; t = TREE_CHAIN (t))
5111 {
5112 tree tag = TREE_VALUE (t);
5113 tree name = TYPE_IDENTIFIER (tag);
5114 tree newtag;
5115
5116 newtag = tsubst (tag, args, /*complain=*/1, NULL_TREE);
5117 my_friendly_assert (newtag != error_mark_node, 20010206);
5118 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
5119 {
5120 if (TYPE_LANG_SPECIFIC (tag) && CLASSTYPE_IS_TEMPLATE (tag))
5121 /* Unfortunately, lookup_template_class sets
5122 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
5123 instantiation (i.e., for the type of a member template
5124 class nested within a template class.) This behavior is
5125 required for maybe_process_partial_specialization to work
5126 correctly, but is not accurate in this case; the TAG is not
5127 an instantiation of anything. (The corresponding
5128 TEMPLATE_DECL is an instantiation, but the TYPE is not.) */
5129 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
5130
5131 /* Now, we call pushtag to put this NEWTAG into the scope of
5132 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
5133 pushtag calling push_template_decl. We don't have to do
5134 this for enums because it will already have been done in
5135 tsubst_enum. */
5136 if (name)
5137 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
5138 pushtag (name, newtag, /*globalize=*/0);
5139 }
5140 }
5141
5142 /* Don't replace enum constants here. */
5143 for (t = TYPE_FIELDS (pattern); t; t = TREE_CHAIN (t))
5144 if (TREE_CODE (t) != CONST_DECL)
5145 {
5146 tree r;
5147
5148 /* The the file and line for this declaration, to assist in
5149 error message reporting. Since we called push_tinst_level
5150 above, we don't need to restore these. */
5151 lineno = DECL_SOURCE_LINE (t);
5152 input_filename = DECL_SOURCE_FILE (t);
5153
5154 r = tsubst (t, args, /*complain=*/1, NULL_TREE);
5155 if (TREE_CODE (r) == VAR_DECL)
5156 {
5157 tree init;
5158
5159 if (DECL_INITIALIZED_IN_CLASS_P (r))
5160 init = tsubst_expr (DECL_INITIAL (t), args,
5161 /*complain=*/1, NULL_TREE);
5162 else
5163 init = NULL_TREE;
5164
5165 finish_static_data_member_decl (r, init,
5166 /*asmspec_tree=*/NULL_TREE,
5167 /*flags=*/0);
5168
5169 if (DECL_INITIALIZED_IN_CLASS_P (r))
5170 check_static_variable_definition (r, TREE_TYPE (r));
5171 }
5172
5173 /* R will have a TREE_CHAIN if and only if it has already been
5174 processed by finish_member_declaration. This can happen
5175 if, for example, it is a TYPE_DECL for a class-scoped
5176 ENUMERAL_TYPE; such a thing will already have been added to
5177 the field list by tsubst_enum above. */
5178 if (!TREE_CHAIN (r))
5179 {
5180 set_current_access_from_decl (r);
5181 finish_member_declaration (r);
5182 }
5183 }
5184
5185 /* Set up the list (TYPE_METHODS) and vector (CLASSTYPE_METHOD_VEC)
5186 for this instantiation. */
5187 for (t = TYPE_METHODS (pattern); t; t = TREE_CHAIN (t))
5188 {
5189 tree r = tsubst (t, args, /*complain=*/1, NULL_TREE);
5190 set_current_access_from_decl (r);
5191 finish_member_declaration (r);
5192 }
5193
5194 /* Construct the DECL_FRIENDLIST for the new class type. */
5195 typedecl = TYPE_MAIN_DECL (type);
5196 for (t = DECL_FRIENDLIST (TYPE_MAIN_DECL (pattern));
5197 t != NULL_TREE;
5198 t = TREE_CHAIN (t))
5199 {
5200 tree friends;
5201
5202 for (friends = TREE_VALUE (t);
5203 friends != NULL_TREE;
5204 friends = TREE_CHAIN (friends))
5205 if (TREE_PURPOSE (friends) == error_mark_node)
5206 add_friend (type,
5207 tsubst_friend_function (TREE_VALUE (friends),
5208 args));
5209 else
5210 my_friendly_abort (20000216);
5211 }
5212
5213 for (t = CLASSTYPE_FRIEND_CLASSES (pattern);
5214 t != NULL_TREE;
5215 t = TREE_CHAIN (t))
5216 {
5217 tree friend_type = TREE_VALUE (t);
5218 tree new_friend_type;
5219
5220 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5221 new_friend_type = tsubst_friend_class (friend_type, args);
5222 else if (uses_template_parms (friend_type))
5223 new_friend_type = tsubst (friend_type, args, /*complain=*/1,
5224 NULL_TREE);
5225 else
5226 {
5227 tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
5228
5229 /* The call to xref_tag_from_type does injection for friend
5230 classes. */
5231 push_nested_namespace (ns);
5232 new_friend_type =
5233 xref_tag_from_type (friend_type, NULL_TREE, 1);
5234 pop_nested_namespace (ns);
5235 }
5236
5237 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5238 /* Trick make_friend_class into realizing that the friend
5239 we're adding is a template, not an ordinary class. It's
5240 important that we use make_friend_class since it will
5241 perform some error-checking and output cross-reference
5242 information. */
5243 ++processing_template_decl;
5244
5245 if (new_friend_type != error_mark_node)
5246 make_friend_class (type, new_friend_type);
5247
5248 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5249 --processing_template_decl;
5250 }
5251
5252 for (t = TYPE_FIELDS (type); t; t = TREE_CHAIN (t))
5253 if (TREE_CODE (t) == FIELD_DECL)
5254 {
5255 TREE_TYPE (t) = complete_type (TREE_TYPE (t));
5256 require_complete_type (t);
5257 }
5258
5259 /* Set the file and line number information to whatever is given for
5260 the class itself. This puts error messages involving generated
5261 implicit functions at a predictable point, and the same point
5262 that would be used for non-template classes. */
5263 lineno = DECL_SOURCE_LINE (typedecl);
5264 input_filename = DECL_SOURCE_FILE (typedecl);
5265
5266 unreverse_member_declarations (type);
5267 finish_struct_1 (type);
5268 CLASSTYPE_GOT_SEMICOLON (type) = 1;
5269
5270 /* Clear this now so repo_template_used is happy. */
5271 TYPE_BEING_DEFINED (type) = 0;
5272 repo_template_used (type);
5273
5274 /* Now that the class is complete, instantiate default arguments for
5275 any member functions. We don't do this earlier because the
5276 default arguments may reference members of the class. */
5277 if (!PRIMARY_TEMPLATE_P (template))
5278 for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
5279 if (TREE_CODE (t) == FUNCTION_DECL
5280 /* Implicitly generated member functions will not have template
5281 information; they are not instantiations, but instead are
5282 created "fresh" for each instantiation. */
5283 && DECL_TEMPLATE_INFO (t))
5284 tsubst_default_arguments (t);
5285
5286 popclass ();
5287 pop_from_top_level ();
5288 pop_tinst_level ();
5289
5290 return type;
5291 }
5292
5293 static int
5294 list_eq (t1, t2)
5295 tree t1, t2;
5296 {
5297 if (t1 == NULL_TREE)
5298 return t2 == NULL_TREE;
5299 if (t2 == NULL_TREE)
5300 return 0;
5301 /* Don't care if one declares its arg const and the other doesn't -- the
5302 main variant of the arg type is all that matters. */
5303 if (TYPE_MAIN_VARIANT (TREE_VALUE (t1))
5304 != TYPE_MAIN_VARIANT (TREE_VALUE (t2)))
5305 return 0;
5306 return list_eq (TREE_CHAIN (t1), TREE_CHAIN (t2));
5307 }
5308
5309 /* If arg is a non-type template parameter that does not depend on template
5310 arguments, fold it like we weren't in the body of a template. */
5311
5312 static tree
5313 maybe_fold_nontype_arg (arg)
5314 tree arg;
5315 {
5316 /* If we're not in a template, ARG is already as simple as it's going to
5317 get, and trying to reprocess the trees will break. */
5318 if (! processing_template_decl)
5319 return arg;
5320
5321 if (!TYPE_P (arg) && !uses_template_parms (arg))
5322 {
5323 /* Sometimes, one of the args was an expression involving a
5324 template constant parameter, like N - 1. Now that we've
5325 tsubst'd, we might have something like 2 - 1. This will
5326 confuse lookup_template_class, so we do constant folding
5327 here. We have to unset processing_template_decl, to
5328 fool build_expr_from_tree() into building an actual
5329 tree. */
5330
5331 int saved_processing_template_decl = processing_template_decl;
5332 processing_template_decl = 0;
5333 arg = fold (build_expr_from_tree (arg));
5334 processing_template_decl = saved_processing_template_decl;
5335 }
5336 return arg;
5337 }
5338
5339 /* Substitute ARGS into the vector of template arguments T. */
5340
5341 static tree
5342 tsubst_template_arg_vector (t, args, complain)
5343 tree t;
5344 tree args;
5345 int complain;
5346 {
5347 int len = TREE_VEC_LENGTH (t), need_new = 0, i;
5348 tree *elts = (tree *) alloca (len * sizeof (tree));
5349
5350 memset ((char *) elts, 0, len * sizeof (tree));
5351
5352 for (i = 0; i < len; i++)
5353 {
5354 if (TREE_VEC_ELT (t, i) != NULL_TREE
5355 && TREE_CODE (TREE_VEC_ELT (t, i)) == TREE_VEC)
5356 elts[i] = tsubst_template_arg_vector (TREE_VEC_ELT (t, i),
5357 args, complain);
5358 else
5359 elts[i] = maybe_fold_nontype_arg
5360 (tsubst_expr (TREE_VEC_ELT (t, i), args, complain,
5361 NULL_TREE));
5362
5363 if (elts[i] == error_mark_node)
5364 return error_mark_node;
5365
5366 if (elts[i] != TREE_VEC_ELT (t, i))
5367 need_new = 1;
5368 }
5369
5370 if (!need_new)
5371 return t;
5372
5373 t = make_tree_vec (len);
5374 for (i = 0; i < len; i++)
5375 TREE_VEC_ELT (t, i) = elts[i];
5376
5377 return t;
5378 }
5379
5380 /* Return the result of substituting ARGS into the template parameters
5381 given by PARMS. If there are m levels of ARGS and m + n levels of
5382 PARMS, then the result will contain n levels of PARMS. For
5383 example, if PARMS is `template <class T> template <class U>
5384 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
5385 result will be `template <int*, double, class V>'. */
5386
5387 static tree
5388 tsubst_template_parms (parms, args, complain)
5389 tree parms;
5390 tree args;
5391 int complain;
5392 {
5393 tree r = NULL_TREE;
5394 tree* new_parms;
5395
5396 for (new_parms = &r;
5397 TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
5398 new_parms = &(TREE_CHAIN (*new_parms)),
5399 parms = TREE_CHAIN (parms))
5400 {
5401 tree new_vec =
5402 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
5403 int i;
5404
5405 for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
5406 {
5407 tree default_value =
5408 TREE_PURPOSE (TREE_VEC_ELT (TREE_VALUE (parms), i));
5409 tree parm_decl =
5410 TREE_VALUE (TREE_VEC_ELT (TREE_VALUE (parms), i));
5411
5412 TREE_VEC_ELT (new_vec, i)
5413 = build_tree_list (tsubst (default_value, args, complain,
5414 NULL_TREE),
5415 tsubst (parm_decl, args, complain,
5416 NULL_TREE));
5417 }
5418
5419 *new_parms =
5420 tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
5421 - TMPL_ARGS_DEPTH (args)),
5422 new_vec, NULL_TREE);
5423 }
5424
5425 return r;
5426 }
5427
5428 /* Substitute the ARGS into the indicated aggregate (or enumeration)
5429 type T. If T is not an aggregate or enumeration type, it is
5430 handled as if by tsubst. IN_DECL is as for tsubst. If
5431 ENTERING_SCOPE is non-zero, T is the context for a template which
5432 we are presently tsubst'ing. Return the substituted value. */
5433
5434 static tree
5435 tsubst_aggr_type (t, args, complain, in_decl, entering_scope)
5436 tree t;
5437 tree args;
5438 int complain;
5439 tree in_decl;
5440 int entering_scope;
5441 {
5442 if (t == NULL_TREE)
5443 return NULL_TREE;
5444
5445 switch (TREE_CODE (t))
5446 {
5447 case RECORD_TYPE:
5448 if (TYPE_PTRMEMFUNC_P (t))
5449 {
5450 tree r = build_ptrmemfunc_type
5451 (tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl));
5452 return cp_build_qualified_type_real (r, TYPE_QUALS (t),
5453 complain);
5454 }
5455
5456 /* else fall through */
5457 case ENUMERAL_TYPE:
5458 case UNION_TYPE:
5459 if (TYPE_TEMPLATE_INFO (t))
5460 {
5461 tree argvec;
5462 tree context;
5463 tree r;
5464
5465 /* First, determine the context for the type we are looking
5466 up. */
5467 if (TYPE_CONTEXT (t) != NULL_TREE)
5468 context = tsubst_aggr_type (TYPE_CONTEXT (t), args,
5469 complain,
5470 in_decl, /*entering_scope=*/1);
5471 else
5472 context = NULL_TREE;
5473
5474 /* Then, figure out what arguments are appropriate for the
5475 type we are trying to find. For example, given:
5476
5477 template <class T> struct S;
5478 template <class T, class U> void f(T, U) { S<U> su; }
5479
5480 and supposing that we are instantiating f<int, double>,
5481 then our ARGS will be {int, double}, but, when looking up
5482 S we only want {double}. */
5483 argvec = tsubst_template_arg_vector (TYPE_TI_ARGS (t), args,
5484 complain);
5485 if (argvec == error_mark_node)
5486 return error_mark_node;
5487
5488 r = lookup_template_class (t, argvec, in_decl, context,
5489 entering_scope, complain);
5490
5491 return cp_build_qualified_type_real (r, TYPE_QUALS (t),
5492 complain);
5493 }
5494 else
5495 /* This is not a template type, so there's nothing to do. */
5496 return t;
5497
5498 default:
5499 return tsubst (t, args, complain, in_decl);
5500 }
5501 }
5502
5503 /* Substitute into the default argument ARG (a default argument for
5504 FN), which has the indicated TYPE. */
5505
5506 tree
5507 tsubst_default_argument (fn, type, arg)
5508 tree fn;
5509 tree type;
5510 tree arg;
5511 {
5512 /* This default argument came from a template. Instantiate the
5513 default argument here, not in tsubst. In the case of
5514 something like:
5515
5516 template <class T>
5517 struct S {
5518 static T t();
5519 void f(T = t());
5520 };
5521
5522 we must be careful to do name lookup in the scope of S<T>,
5523 rather than in the current class. */
5524 if (DECL_CLASS_SCOPE_P (fn))
5525 pushclass (DECL_CONTEXT (fn), 2);
5526
5527 arg = tsubst_expr (arg, DECL_TI_ARGS (fn), /*complain=*/1, NULL_TREE);
5528
5529 if (DECL_CLASS_SCOPE_P (fn))
5530 popclass ();
5531
5532 /* Make sure the default argument is reasonable. */
5533 arg = check_default_argument (type, arg);
5534
5535 return arg;
5536 }
5537
5538 /* Substitute into all the default arguments for FN. */
5539
5540 static void
5541 tsubst_default_arguments (fn)
5542 tree fn;
5543 {
5544 tree arg;
5545 tree tmpl_args;
5546
5547 tmpl_args = DECL_TI_ARGS (fn);
5548
5549 /* If this function is not yet instantiated, we certainly don't need
5550 its default arguments. */
5551 if (uses_template_parms (tmpl_args))
5552 return;
5553
5554 for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
5555 arg;
5556 arg = TREE_CHAIN (arg))
5557 if (TREE_PURPOSE (arg))
5558 TREE_PURPOSE (arg) = tsubst_default_argument (fn,
5559 TREE_VALUE (arg),
5560 TREE_PURPOSE (arg));
5561 }
5562
5563 /* Substitute the ARGS into the T, which is a _DECL. TYPE is the
5564 (already computed) substitution of ARGS into TREE_TYPE (T), if
5565 appropriate. Return the result of the substitution. */
5566
5567 static tree
5568 tsubst_decl (t, args, type)
5569 tree t;
5570 tree args;
5571 tree type;
5572 {
5573 int saved_lineno;
5574 const char *saved_filename;
5575 tree r = NULL_TREE;
5576 tree in_decl = t;
5577
5578 /* Set the filename and linenumber to improve error-reporting. */
5579 saved_lineno = lineno;
5580 saved_filename = input_filename;
5581 lineno = DECL_SOURCE_LINE (t);
5582 input_filename = DECL_SOURCE_FILE (t);
5583
5584 switch (TREE_CODE (t))
5585 {
5586 case TEMPLATE_DECL:
5587 {
5588 /* We can get here when processing a member template function
5589 of a template class. */
5590 tree decl = DECL_TEMPLATE_RESULT (t);
5591 tree spec;
5592 int is_template_template_parm = DECL_TEMPLATE_TEMPLATE_PARM_P (t);
5593
5594 if (!is_template_template_parm)
5595 {
5596 /* We might already have an instance of this template.
5597 The ARGS are for the surrounding class type, so the
5598 full args contain the tsubst'd args for the context,
5599 plus the innermost args from the template decl. */
5600 tree tmpl_args = DECL_CLASS_TEMPLATE_P (t)
5601 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
5602 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
5603 tree full_args;
5604
5605 full_args = tsubst_template_arg_vector (tmpl_args, args,
5606 /*complain=*/1);
5607
5608 /* tsubst_template_arg_vector doesn't copy the vector if
5609 nothing changed. But, *something* should have
5610 changed. */
5611 my_friendly_assert (full_args != tmpl_args, 0);
5612
5613 spec = retrieve_specialization (t, full_args);
5614 if (spec != NULL_TREE)
5615 {
5616 r = spec;
5617 break;
5618 }
5619 }
5620
5621 /* Make a new template decl. It will be similar to the
5622 original, but will record the current template arguments.
5623 We also create a new function declaration, which is just
5624 like the old one, but points to this new template, rather
5625 than the old one. */
5626 r = copy_decl (t);
5627 my_friendly_assert (DECL_LANG_SPECIFIC (r) != 0, 0);
5628 TREE_CHAIN (r) = NULL_TREE;
5629
5630 if (is_template_template_parm)
5631 {
5632 tree new_decl = tsubst (decl, args, /*complain=*/1, in_decl);
5633 DECL_TEMPLATE_RESULT (r) = new_decl;
5634 TREE_TYPE (r) = TREE_TYPE (new_decl);
5635 break;
5636 }
5637
5638 DECL_CONTEXT (r)
5639 = tsubst_aggr_type (DECL_CONTEXT (t), args,
5640 /*complain=*/1, in_decl,
5641 /*entering_scope=*/1);
5642 DECL_VIRTUAL_CONTEXT (r)
5643 = tsubst_aggr_type (DECL_VIRTUAL_CONTEXT (t), args,
5644 /*complain=*/1, in_decl,
5645 /*entering_scope=*/1);
5646 DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
5647
5648 if (TREE_CODE (decl) == TYPE_DECL)
5649 {
5650 tree new_type = tsubst (TREE_TYPE (t), args,
5651 /*complain=*/1, in_decl);
5652 TREE_TYPE (r) = new_type;
5653 CLASSTYPE_TI_TEMPLATE (new_type) = r;
5654 DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
5655 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
5656 }
5657 else
5658 {
5659 tree new_decl = tsubst (decl, args, /*complain=*/1, in_decl);
5660
5661 DECL_TEMPLATE_RESULT (r) = new_decl;
5662 DECL_TI_TEMPLATE (new_decl) = r;
5663 TREE_TYPE (r) = TREE_TYPE (new_decl);
5664 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
5665 }
5666
5667 SET_DECL_IMPLICIT_INSTANTIATION (r);
5668 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
5669 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
5670
5671 /* The template parameters for this new template are all the
5672 template parameters for the old template, except the
5673 outermost level of parameters. */
5674 DECL_TEMPLATE_PARMS (r)
5675 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
5676 /*complain=*/1);
5677
5678 if (PRIMARY_TEMPLATE_P (t))
5679 DECL_PRIMARY_TEMPLATE (r) = r;
5680
5681 /* We don't partially instantiate partial specializations. */
5682 if (TREE_CODE (decl) == TYPE_DECL)
5683 break;
5684
5685 /* Record this partial instantiation. */
5686 register_specialization (r, t,
5687 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)));
5688
5689 }
5690 break;
5691
5692 case FUNCTION_DECL:
5693 {
5694 tree ctx;
5695 tree argvec = NULL_TREE;
5696 tree *friends;
5697 tree gen_tmpl;
5698 int member;
5699 int args_depth;
5700 int parms_depth;
5701
5702 /* Nobody should be tsubst'ing into non-template functions. */
5703 my_friendly_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE, 0);
5704
5705 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
5706 {
5707 tree spec;
5708
5709 /* Calculate the most general template of which R is a
5710 specialization, and the complete set of arguments used to
5711 specialize R. */
5712 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
5713 argvec
5714 = tsubst_template_arg_vector (DECL_TI_ARGS
5715 (DECL_TEMPLATE_RESULT (gen_tmpl)),
5716 args, /*complain=*/1);
5717
5718 /* Check to see if we already have this specialization. */
5719 spec = retrieve_specialization (gen_tmpl, argvec);
5720
5721 if (spec)
5722 {
5723 r = spec;
5724 break;
5725 }
5726
5727 /* We can see more levels of arguments than parameters if
5728 there was a specialization of a member template, like
5729 this:
5730
5731 template <class T> struct S { template <class U> void f(); }
5732 template <> template <class U> void S<int>::f(U);
5733
5734 Here, we'll be substituting into the specialization,
5735 because that's where we can find the code we actually
5736 want to generate, but we'll have enough arguments for
5737 the most general template.
5738
5739 We also deal with the peculiar case:
5740
5741 template <class T> struct S {
5742 template <class U> friend void f();
5743 };
5744 template <class U> void f() {}
5745 template S<int>;
5746 template void f<double>();
5747
5748 Here, the ARGS for the instantiation of will be {int,
5749 double}. But, we only need as many ARGS as there are
5750 levels of template parameters in CODE_PATTERN. We are
5751 careful not to get fooled into reducing the ARGS in
5752 situations like:
5753
5754 template <class T> struct S { template <class U> void f(U); }
5755 template <class T> template <> void S<T>::f(int) {}
5756
5757 which we can spot because the pattern will be a
5758 specialization in this case. */
5759 args_depth = TMPL_ARGS_DEPTH (args);
5760 parms_depth =
5761 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
5762 if (args_depth > parms_depth
5763 && !DECL_TEMPLATE_SPECIALIZATION (t))
5764 args = get_innermost_template_args (args, parms_depth);
5765 }
5766 else
5767 {
5768 /* This special case arises when we have something like this:
5769
5770 template <class T> struct S {
5771 friend void f<int>(int, double);
5772 };
5773
5774 Here, the DECL_TI_TEMPLATE for the friend declaration
5775 will be a LOOKUP_EXPR or an IDENTIFIER_NODE. We are
5776 being called from tsubst_friend_function, and we want
5777 only to create a new decl (R) with appropriate types so
5778 that we can call determine_specialization. */
5779 my_friendly_assert ((TREE_CODE (DECL_TI_TEMPLATE (t))
5780 == LOOKUP_EXPR)
5781 || (TREE_CODE (DECL_TI_TEMPLATE (t))
5782 == IDENTIFIER_NODE), 0);
5783 gen_tmpl = NULL_TREE;
5784 }
5785
5786 if (DECL_CLASS_SCOPE_P (t))
5787 {
5788 if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
5789 member = 2;
5790 else
5791 member = 1;
5792 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
5793 /*complain=*/1, t,
5794 /*entering_scope=*/1);
5795 }
5796 else
5797 {
5798 member = 0;
5799 ctx = DECL_CONTEXT (t);
5800 }
5801 type = tsubst (type, args, /*complain=*/1, in_decl);
5802 if (type == error_mark_node)
5803 return error_mark_node;
5804
5805 /* We do NOT check for matching decls pushed separately at this
5806 point, as they may not represent instantiations of this
5807 template, and in any case are considered separate under the
5808 discrete model. */
5809 r = copy_decl (t);
5810 DECL_USE_TEMPLATE (r) = 0;
5811 TREE_TYPE (r) = type;
5812
5813 DECL_CONTEXT (r) = ctx;
5814 DECL_VIRTUAL_CONTEXT (r)
5815 = tsubst_aggr_type (DECL_VIRTUAL_CONTEXT (t), args,
5816 /*complain=*/1, t,
5817 /*entering_scope=*/1);
5818
5819 if (member && DECL_CONV_FN_P (r))
5820 {
5821 /* Type-conversion operator. Reconstruct the name, in
5822 case it's the name of one of the template's parameters. */
5823 if (flag_new_abi)
5824 DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
5825 else
5826 DECL_NAME (r) = build_typename_overload (TREE_TYPE (type));
5827 }
5828
5829 DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
5830 /*complain=*/1, t);
5831 DECL_RESULT (r) = NULL_TREE;
5832
5833 TREE_STATIC (r) = 0;
5834 TREE_PUBLIC (r) = TREE_PUBLIC (t);
5835 DECL_EXTERNAL (r) = 1;
5836 DECL_INTERFACE_KNOWN (r) = 0;
5837 DECL_DEFER_OUTPUT (r) = 0;
5838 TREE_CHAIN (r) = NULL_TREE;
5839 DECL_PENDING_INLINE_INFO (r) = 0;
5840 DECL_PENDING_INLINE_P (r) = 0;
5841 DECL_SAVED_TREE (r) = NULL_TREE;
5842 TREE_USED (r) = 0;
5843 if (DECL_CLONED_FUNCTION (r))
5844 {
5845 DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
5846 args, /*complain=*/1, t);
5847 TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
5848 TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
5849 }
5850
5851 /* Set up the DECL_TEMPLATE_INFO for R and compute its mangled
5852 name. There's no need to do this in the special friend
5853 case mentioned above where GEN_TMPL is NULL. */
5854 if (gen_tmpl)
5855 {
5856 DECL_TEMPLATE_INFO (r)
5857 = tree_cons (gen_tmpl, argvec, NULL_TREE);
5858 SET_DECL_IMPLICIT_INSTANTIATION (r);
5859 register_specialization (r, gen_tmpl, argvec);
5860
5861 /* Set the mangled name for R. */
5862 if (DECL_DESTRUCTOR_P (t))
5863 {
5864 if (flag_new_abi)
5865 set_mangled_name_for_decl (r);
5866 else
5867 DECL_ASSEMBLER_NAME (r) = build_destructor_name (ctx);
5868 }
5869 else
5870 {
5871 /* Instantiations of template functions must be mangled
5872 specially, in order to conform to 14.5.5.1
5873 [temp.over.link]. */
5874 tree tmpl = DECL_TI_TEMPLATE (t);
5875
5876 /* TMPL will be NULL if this is a specialization of a
5877 member function of a template class. */
5878 if (name_mangling_version < 1
5879 || tmpl == NULL_TREE
5880 || (member && !is_member_template (tmpl)
5881 && !DECL_TEMPLATE_INFO (tmpl)))
5882 set_mangled_name_for_decl (r);
5883 else
5884 set_mangled_name_for_template_decl (r);
5885 }
5886
5887 DECL_RTL (r) = 0;
5888 make_decl_rtl (r, NULL_PTR);
5889
5890 /* Like grokfndecl. If we don't do this, pushdecl will
5891 mess up our TREE_CHAIN because it doesn't find a
5892 previous decl. Sigh. */
5893 if (member
5894 && ! uses_template_parms (r)
5895 && (IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (r))
5896 == NULL_TREE))
5897 SET_IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (r), r);
5898
5899 /* We're not supposed to instantiate default arguments
5900 until they are called, for a template. But, for a
5901 declaration like:
5902
5903 template <class T> void f ()
5904 { extern void g(int i = T()); }
5905
5906 we should do the substitution when the template is
5907 instantiated. We handle the member function case in
5908 instantiate_class_template since the default arguments
5909 might refer to other members of the class. */
5910 if (!member
5911 && !PRIMARY_TEMPLATE_P (gen_tmpl)
5912 && !uses_template_parms (argvec))
5913 tsubst_default_arguments (r);
5914 }
5915
5916 /* Copy the list of befriending classes. */
5917 for (friends = &DECL_BEFRIENDING_CLASSES (r);
5918 *friends;
5919 friends = &TREE_CHAIN (*friends))
5920 {
5921 *friends = copy_node (*friends);
5922 TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
5923 args, /*complain=*/1,
5924 in_decl);
5925 }
5926
5927 if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
5928 {
5929 maybe_retrofit_in_chrg (r);
5930 if (DECL_CONSTRUCTOR_P (r))
5931 grok_ctor_properties (ctx, r);
5932 /* If this is an instantiation of a member template, clone it.
5933 If it isn't, that'll be handled by
5934 clone_constructors_and_destructors. */
5935 if (PRIMARY_TEMPLATE_P (gen_tmpl))
5936 clone_function_decl(r, /*update_method_vec_p=*/0);
5937 }
5938 else if (IDENTIFIER_OPNAME_P (DECL_NAME (r)))
5939 grok_op_properties (r, DECL_VIRTUAL_P (r), DECL_FRIEND_P (r));
5940 }
5941 break;
5942
5943 case PARM_DECL:
5944 {
5945 r = copy_node (t);
5946 TREE_TYPE (r) = type;
5947 c_apply_type_quals_to_decl (CP_TYPE_QUALS (type), r);
5948
5949 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
5950 DECL_INITIAL (r) = TREE_TYPE (r);
5951 else
5952 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
5953 /*complain=*/1, in_decl);
5954
5955 DECL_CONTEXT (r) = NULL_TREE;
5956 if (PROMOTE_PROTOTYPES
5957 && (TREE_CODE (type) == INTEGER_TYPE
5958 || TREE_CODE (type) == ENUMERAL_TYPE)
5959 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
5960 DECL_ARG_TYPE (r) = integer_type_node;
5961 if (TREE_CHAIN (t))
5962 TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
5963 /*complain=*/1, TREE_CHAIN (t));
5964 }
5965 break;
5966
5967 case FIELD_DECL:
5968 {
5969 r = copy_decl (t);
5970 TREE_TYPE (r) = type;
5971 c_apply_type_quals_to_decl (CP_TYPE_QUALS (type), r);
5972
5973 /* We don't have to set DECL_CONTEXT here; it is set by
5974 finish_member_declaration. */
5975 DECL_INITIAL (r) = tsubst_expr (DECL_INITIAL (t), args,
5976 /*complain=*/1, in_decl);
5977 TREE_CHAIN (r) = NULL_TREE;
5978 if (TREE_CODE (type) == VOID_TYPE)
5979 cp_error_at ("instantiation of `%D' as type void", r);
5980 }
5981 break;
5982
5983 case USING_DECL:
5984 {
5985 r = copy_node (t);
5986 DECL_INITIAL (r)
5987 = tsubst_copy (DECL_INITIAL (t), args, /*complain=*/1, in_decl);
5988 TREE_CHAIN (r) = NULL_TREE;
5989 }
5990 break;
5991
5992 case TYPE_DECL:
5993 if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5994 || t == TYPE_MAIN_DECL (TREE_TYPE (t)))
5995 {
5996 /* If this is the canonical decl, we don't have to mess with
5997 instantiations, and often we can't (for typename, template
5998 type parms and such). Note that TYPE_NAME is not correct for
5999 the above test if we've copied the type for a typedef. */
6000 r = TYPE_NAME (type);
6001 break;
6002 }
6003
6004 /* Fall through. */
6005
6006 case VAR_DECL:
6007 {
6008 tree argvec = NULL_TREE;
6009 tree gen_tmpl = NULL_TREE;
6010 tree spec;
6011 tree tmpl = NULL_TREE;
6012 tree ctx;
6013 int local_p;
6014
6015 /* Assume this is a non-local variable. */
6016 local_p = 0;
6017
6018 if (TYPE_P (CP_DECL_CONTEXT (t)))
6019 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
6020 /*complain=*/1,
6021 in_decl, /*entering_scope=*/1);
6022 else
6023 {
6024 /* Subsequent calls to pushdecl will fill this in. */
6025 ctx = NULL_TREE;
6026 if (!DECL_NAMESPACE_SCOPE_P (t))
6027 local_p = 1;
6028 }
6029
6030 /* Check to see if we already have this specialization. */
6031 if (!local_p)
6032 {
6033 tmpl = DECL_TI_TEMPLATE (t);
6034 gen_tmpl = most_general_template (tmpl);
6035 argvec = tsubst (DECL_TI_ARGS (t), args, /*complain=*/1, in_decl);
6036 spec = retrieve_specialization (gen_tmpl, argvec);
6037 }
6038 else
6039 spec = retrieve_local_specialization (t);
6040
6041 if (spec)
6042 {
6043 r = spec;
6044 break;
6045 }
6046
6047 r = copy_decl (t);
6048 TREE_TYPE (r) = type;
6049 c_apply_type_quals_to_decl (CP_TYPE_QUALS (type), r);
6050 DECL_CONTEXT (r) = ctx;
6051
6052 /* Don't try to expand the initializer until someone tries to use
6053 this variable; otherwise we run into circular dependencies. */
6054 DECL_INITIAL (r) = NULL_TREE;
6055 DECL_RTL (r) = 0;
6056 DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
6057
6058 /* For __PRETTY_FUNCTION__ we have to adjust the initializer. */
6059 if (DECL_PRETTY_FUNCTION_P (r))
6060 {
6061 DECL_INITIAL (r) = tsubst (DECL_INITIAL (t),
6062 args,
6063 /*complain=*/1,
6064 NULL_TREE);
6065 TREE_TYPE (r) = TREE_TYPE (DECL_INITIAL (r));
6066 }
6067
6068 /* Even if the original location is out of scope, the newly
6069 substituted one is not. */
6070 if (TREE_CODE (r) == VAR_DECL)
6071 DECL_DEAD_FOR_LOCAL (r) = 0;
6072
6073 if (!local_p)
6074 {
6075 /* A static data member declaration is always marked
6076 external when it is declared in-class, even if an
6077 initializer is present. We mimic the non-template
6078 processing here. */
6079 DECL_EXTERNAL (r) = 1;
6080
6081 register_specialization (r, gen_tmpl, argvec);
6082 DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
6083 SET_DECL_IMPLICIT_INSTANTIATION (r);
6084 }
6085 else
6086 register_local_specialization (r, t);
6087
6088 TREE_CHAIN (r) = NULL_TREE;
6089 if (TREE_CODE (r) == VAR_DECL && TREE_CODE (type) == VOID_TYPE)
6090 cp_error_at ("instantiation of `%D' as type void", r);
6091 }
6092 break;
6093
6094 default:
6095 my_friendly_abort (0);
6096 }
6097
6098 /* Restore the file and line information. */
6099 lineno = saved_lineno;
6100 input_filename = saved_filename;
6101
6102 return r;
6103 }
6104
6105 /* Substitue into the ARG_TYPES of a function type. */
6106
6107 static tree
6108 tsubst_arg_types (arg_types, args, complain, in_decl)
6109 tree arg_types;
6110 tree args;
6111 int complain;
6112 tree in_decl;
6113 {
6114 tree remaining_arg_types;
6115 tree type;
6116
6117 if (!arg_types || arg_types == void_list_node)
6118 return arg_types;
6119
6120 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
6121 args, complain, in_decl);
6122 if (remaining_arg_types == error_mark_node)
6123 return error_mark_node;
6124
6125 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
6126 if (type == error_mark_node)
6127 return error_mark_node;
6128 if (VOID_TYPE_P (type))
6129 {
6130 if (complain)
6131 {
6132 cp_error ("invalid parameter type `%T'", type);
6133 if (in_decl)
6134 cp_error_at ("in declaration `%D'", in_decl);
6135 }
6136 return error_mark_node;
6137 }
6138
6139 /* Do array-to-pointer, function-to-pointer conversion, and ignore
6140 top-level qualifiers as required. */
6141 type = TYPE_MAIN_VARIANT (type_decays_to (type));
6142
6143 /* Note that we do not substitute into default arguments here. The
6144 standard mandates that they be instantiated only when needed,
6145 which is done in build_over_call. */
6146 return hash_tree_cons (TREE_PURPOSE (arg_types), type,
6147 remaining_arg_types);
6148
6149 }
6150
6151 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
6152 *not* handle the exception-specification for FNTYPE, because the
6153 initial substitution of explicitly provided template parameters
6154 during argument deduction forbids substitution into the
6155 exception-specification:
6156
6157 [temp.deduct]
6158
6159 All references in the function type of the function template to the
6160 corresponding template parameters are replaced by the specified tem-
6161 plate argument values. If a substitution in a template parameter or
6162 in the function type of the function template results in an invalid
6163 type, type deduction fails. [Note: The equivalent substitution in
6164 exception specifications is done only when the function is instanti-
6165 ated, at which point a program is ill-formed if the substitution
6166 results in an invalid type.] */
6167
6168 static tree
6169 tsubst_function_type (t, args, complain, in_decl)
6170 tree t;
6171 tree args;
6172 int complain;
6173 tree in_decl;
6174 {
6175 tree return_type;
6176 tree arg_types;
6177 tree fntype;
6178
6179 /* The TYPE_CONTEXT is not used for function/method types. */
6180 my_friendly_assert (TYPE_CONTEXT (t) == NULL_TREE, 0);
6181
6182 /* Substitue the return type. */
6183 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6184 if (return_type == error_mark_node)
6185 return error_mark_node;
6186
6187 /* Substitue the argument types. */
6188 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
6189 complain, in_decl);
6190 if (arg_types == error_mark_node)
6191 return error_mark_node;
6192
6193 /* Construct a new type node and return it. */
6194 if (TREE_CODE (t) == FUNCTION_TYPE)
6195 fntype = build_function_type (return_type, arg_types);
6196 else
6197 {
6198 tree r = TREE_TYPE (TREE_VALUE (arg_types));
6199 if (! IS_AGGR_TYPE (r))
6200 {
6201 /* [temp.deduct]
6202
6203 Type deduction may fail for any of the following
6204 reasons:
6205
6206 -- Attempting to create "pointer to member of T" when T
6207 is not a class type. */
6208 if (complain)
6209 cp_error ("creating pointer to member function of non-class type `%T'",
6210 r);
6211 return error_mark_node;
6212 }
6213
6214 fntype = build_cplus_method_type (r, return_type, TREE_CHAIN
6215 (arg_types));
6216 }
6217 fntype = build_qualified_type (fntype, TYPE_QUALS (t));
6218 fntype = build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
6219
6220 return fntype;
6221 }
6222
6223 /* Substitute into the PARMS of a call-declarator. */
6224
6225 static tree
6226 tsubst_call_declarator_parms (parms, args, complain, in_decl)
6227 tree parms;
6228 tree args;
6229 int complain;
6230 tree in_decl;
6231 {
6232 tree new_parms;
6233 tree type;
6234 tree defarg;
6235
6236 if (!parms || parms == void_list_node)
6237 return parms;
6238
6239 new_parms = tsubst_call_declarator_parms (TREE_CHAIN (parms),
6240 args, complain, in_decl);
6241
6242 /* Figure out the type of this parameter. */
6243 type = tsubst (TREE_VALUE (parms), args, complain, in_decl);
6244
6245 /* Figure out the default argument as well. Note that we use
6246 tsubst_expr since the default argument is really an expression. */
6247 defarg = tsubst_expr (TREE_PURPOSE (parms), args, complain, in_decl);
6248
6249 /* Chain this parameter on to the front of those we have already
6250 processed. We don't use hash_tree_cons because that function
6251 doesn't check TREE_PARMLIST. */
6252 new_parms = tree_cons (defarg, type, new_parms);
6253
6254 /* And note that these are parameters. */
6255 TREE_PARMLIST (new_parms) = 1;
6256
6257 return new_parms;
6258 }
6259
6260 /* Take the tree structure T and replace template parameters used
6261 therein with the argument vector ARGS. IN_DECL is an associated
6262 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
6263 An appropriate error message is issued only if COMPLAIN is
6264 non-zero. Note that we must be relatively non-tolerant of
6265 extensions here, in order to preserve conformance; if we allow
6266 substitutions that should not be allowed, we may allow argument
6267 deductions that should not succeed, and therefore report ambiguous
6268 overload situations where there are none. In theory, we could
6269 allow the substitution, but indicate that it should have failed,
6270 and allow our caller to make sure that the right thing happens, but
6271 we don't try to do this yet.
6272
6273 This function is used for dealing with types, decls and the like;
6274 for expressions, use tsubst_expr or tsubst_copy. */
6275
6276 tree
6277 tsubst (t, args, complain, in_decl)
6278 tree t, args;
6279 int complain;
6280 tree in_decl;
6281 {
6282 tree type, r;
6283
6284 if (t == NULL_TREE || t == error_mark_node
6285 || t == integer_type_node
6286 || t == void_type_node
6287 || t == char_type_node
6288 || TREE_CODE (t) == NAMESPACE_DECL)
6289 return t;
6290
6291 if (TREE_CODE (t) == IDENTIFIER_NODE)
6292 type = IDENTIFIER_TYPE_VALUE (t);
6293 else
6294 type = TREE_TYPE (t);
6295 if (type == unknown_type_node)
6296 my_friendly_abort (42);
6297
6298 if (type && TREE_CODE (t) != FUNCTION_DECL
6299 && TREE_CODE (t) != TYPENAME_TYPE
6300 && TREE_CODE (t) != TEMPLATE_DECL
6301 && TREE_CODE (t) != IDENTIFIER_NODE
6302 && TREE_CODE (t) != FUNCTION_TYPE
6303 && TREE_CODE (t) != METHOD_TYPE)
6304 type = tsubst (type, args, complain, in_decl);
6305 if (type == error_mark_node)
6306 return error_mark_node;
6307
6308 if (DECL_P (t))
6309 return tsubst_decl (t, args, type);
6310
6311 switch (TREE_CODE (t))
6312 {
6313 case RECORD_TYPE:
6314 case UNION_TYPE:
6315 case ENUMERAL_TYPE:
6316 return tsubst_aggr_type (t, args, complain, in_decl,
6317 /*entering_scope=*/0);
6318
6319 case ERROR_MARK:
6320 case IDENTIFIER_NODE:
6321 case OP_IDENTIFIER:
6322 case VOID_TYPE:
6323 case REAL_TYPE:
6324 case COMPLEX_TYPE:
6325 case VECTOR_TYPE:
6326 case BOOLEAN_TYPE:
6327 case INTEGER_CST:
6328 case REAL_CST:
6329 case STRING_CST:
6330 return t;
6331
6332 case INTEGER_TYPE:
6333 if (t == integer_type_node)
6334 return t;
6335
6336 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
6337 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
6338 return t;
6339
6340 {
6341 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
6342
6343 max = tsubst_expr (omax, args, complain, in_decl);
6344 if (max == error_mark_node)
6345 return error_mark_node;
6346
6347 /* See if we can reduce this expression to something simpler. */
6348 max = maybe_fold_nontype_arg (max);
6349 if (!processing_template_decl)
6350 max = decl_constant_value (max);
6351
6352 if (processing_template_decl
6353 /* When providing explicit arguments to a template
6354 function, but leaving some arguments for subsequent
6355 deduction, MAX may be template-dependent even if we're
6356 not PROCESSING_TEMPLATE_DECL. We still need to check for
6357 template parms, though; MAX won't be an INTEGER_CST for
6358 dynamic arrays, either. */
6359 || (TREE_CODE (max) != INTEGER_CST
6360 && uses_template_parms (max)))
6361 {
6362 tree itype = make_node (INTEGER_TYPE);
6363 TYPE_MIN_VALUE (itype) = size_zero_node;
6364 TYPE_MAX_VALUE (itype) = build_min (MINUS_EXPR, sizetype, max,
6365 integer_one_node);
6366 return itype;
6367 }
6368
6369 if (integer_zerop (omax))
6370 {
6371 /* Still allow an explicit array of size zero. */
6372 if (pedantic)
6373 pedwarn ("creating array with size zero");
6374 }
6375 else if (integer_zerop (max)
6376 || (TREE_CODE (max) == INTEGER_CST
6377 && INT_CST_LT (max, integer_zero_node)))
6378 {
6379 /* [temp.deduct]
6380
6381 Type deduction may fail for any of the following
6382 reasons:
6383
6384 Attempting to create an array with a size that is
6385 zero or negative. */
6386 if (complain)
6387 cp_error ("creating array with size zero (`%E')", max);
6388
6389 return error_mark_node;
6390 }
6391
6392 return compute_array_index_type (NULL_TREE, max);
6393 }
6394
6395 case TEMPLATE_TYPE_PARM:
6396 case TEMPLATE_TEMPLATE_PARM:
6397 case BOUND_TEMPLATE_TEMPLATE_PARM:
6398 case TEMPLATE_PARM_INDEX:
6399 {
6400 int idx;
6401 int level;
6402 int levels;
6403
6404 r = NULL_TREE;
6405
6406 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
6407 || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
6408 || TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
6409 {
6410 idx = TEMPLATE_TYPE_IDX (t);
6411 level = TEMPLATE_TYPE_LEVEL (t);
6412 }
6413 else
6414 {
6415 idx = TEMPLATE_PARM_IDX (t);
6416 level = TEMPLATE_PARM_LEVEL (t);
6417 }
6418
6419 if (TREE_VEC_LENGTH (args) > 0)
6420 {
6421 tree arg = NULL_TREE;
6422
6423 levels = TMPL_ARGS_DEPTH (args);
6424 if (level <= levels)
6425 arg = TMPL_ARG (args, level, idx);
6426
6427 if (arg == error_mark_node)
6428 return error_mark_node;
6429 else if (arg != NULL_TREE)
6430 {
6431 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
6432 {
6433 my_friendly_assert (TYPE_P (arg), 0);
6434 return cp_build_qualified_type_real
6435 (arg, CP_TYPE_QUALS (arg) | CP_TYPE_QUALS (t),
6436 complain);
6437 }
6438 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
6439 {
6440 /* We are processing a type constructed from
6441 a template template parameter */
6442 tree argvec = tsubst (TYPE_TI_ARGS (t),
6443 args, complain, in_decl);
6444 if (argvec == error_mark_node)
6445 return error_mark_node;
6446
6447 /* We can get a TEMPLATE_TEMPLATE_PARM here when
6448 we are resolving nested-types in the signature of
6449 a member function templates.
6450 Otherwise ARG is a TEMPLATE_DECL and is the real
6451 template to be instantiated. */
6452 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
6453 arg = TYPE_NAME (arg);
6454
6455 r = lookup_template_class (arg,
6456 argvec, in_decl,
6457 DECL_CONTEXT (arg),
6458 /*entering_scope=*/0,
6459 complain);
6460 return cp_build_qualified_type_real (r,
6461 TYPE_QUALS (t),
6462 complain);
6463 }
6464 else
6465 /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX. */
6466 return arg;
6467 }
6468 }
6469 else
6470 my_friendly_abort (981018);
6471
6472 if (level == 1)
6473 /* This can happen during the attempted tsubst'ing in
6474 unify. This means that we don't yet have any information
6475 about the template parameter in question. */
6476 return t;
6477
6478 /* If we get here, we must have been looking at a parm for a
6479 more deeply nested template. Make a new version of this
6480 template parameter, but with a lower level. */
6481 switch (TREE_CODE (t))
6482 {
6483 case TEMPLATE_TYPE_PARM:
6484 case TEMPLATE_TEMPLATE_PARM:
6485 case BOUND_TEMPLATE_TEMPLATE_PARM:
6486 if (CP_TYPE_QUALS (t))
6487 {
6488 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
6489 r = cp_build_qualified_type_real (r, CP_TYPE_QUALS (t),
6490 complain);
6491 }
6492 else
6493 {
6494 r = copy_node (t);
6495 TEMPLATE_TYPE_PARM_INDEX (r)
6496 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
6497 r, levels);
6498 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
6499 TYPE_MAIN_VARIANT (r) = r;
6500 TYPE_POINTER_TO (r) = NULL_TREE;
6501 TYPE_REFERENCE_TO (r) = NULL_TREE;
6502
6503 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
6504 {
6505 tree argvec = tsubst (TYPE_TI_ARGS (t), args,
6506 complain, in_decl);
6507 if (argvec == error_mark_node)
6508 return error_mark_node;
6509
6510 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
6511 = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
6512 }
6513 }
6514 break;
6515
6516 case TEMPLATE_PARM_INDEX:
6517 r = reduce_template_parm_level (t, type, levels);
6518 break;
6519
6520 default:
6521 my_friendly_abort (0);
6522 }
6523
6524 return r;
6525 }
6526
6527 case TREE_LIST:
6528 {
6529 tree purpose, value, chain, result;
6530
6531 if (t == void_list_node)
6532 return t;
6533
6534 purpose = TREE_PURPOSE (t);
6535 if (purpose)
6536 {
6537 purpose = tsubst (purpose, args, complain, in_decl);
6538 if (purpose == error_mark_node)
6539 return error_mark_node;
6540 }
6541 value = TREE_VALUE (t);
6542 if (value)
6543 {
6544 value = tsubst (value, args, complain, in_decl);
6545 if (value == error_mark_node)
6546 return error_mark_node;
6547 }
6548 chain = TREE_CHAIN (t);
6549 if (chain && chain != void_type_node)
6550 {
6551 chain = tsubst (chain, args, complain, in_decl);
6552 if (chain == error_mark_node)
6553 return error_mark_node;
6554 }
6555 if (purpose == TREE_PURPOSE (t)
6556 && value == TREE_VALUE (t)
6557 && chain == TREE_CHAIN (t))
6558 return t;
6559 if (TREE_PARMLIST (t))
6560 {
6561 result = tree_cons (purpose, value, chain);
6562 TREE_PARMLIST (result) = 1;
6563 }
6564 else
6565 result = hash_tree_cons (purpose, value, chain);
6566 return result;
6567 }
6568 case TREE_VEC:
6569 if (type != NULL_TREE)
6570 {
6571 /* A binfo node. We always need to make a copy, of the node
6572 itself and of its BINFO_BASETYPES. */
6573
6574 t = copy_node (t);
6575
6576 /* Make sure type isn't a typedef copy. */
6577 type = BINFO_TYPE (TYPE_BINFO (type));
6578
6579 TREE_TYPE (t) = complete_type (type);
6580 if (IS_AGGR_TYPE (type))
6581 {
6582 BINFO_VTABLE (t) = TYPE_BINFO_VTABLE (type);
6583 BINFO_VIRTUALS (t) = TYPE_BINFO_VIRTUALS (type);
6584 if (TYPE_BINFO_BASETYPES (type) != NULL_TREE)
6585 BINFO_BASETYPES (t) = copy_node (TYPE_BINFO_BASETYPES (type));
6586 }
6587 return t;
6588 }
6589
6590 /* Otherwise, a vector of template arguments. */
6591 return tsubst_template_arg_vector (t, args, complain);
6592
6593 case POINTER_TYPE:
6594 case REFERENCE_TYPE:
6595 {
6596 enum tree_code code;
6597
6598 if (type == TREE_TYPE (t))
6599 return t;
6600
6601 code = TREE_CODE (t);
6602
6603
6604 /* [temp.deduct]
6605
6606 Type deduction may fail for any of the following
6607 reasons:
6608
6609 -- Attempting to create a pointer to reference type.
6610 -- Attempting to create a reference to a reference type or
6611 a reference to void. */
6612 if (TREE_CODE (type) == REFERENCE_TYPE
6613 || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
6614 {
6615 static int last_line = 0;
6616 static const char* last_file = 0;
6617
6618 /* We keep track of the last time we issued this error
6619 message to avoid spewing a ton of messages during a
6620 single bad template instantiation. */
6621 if (complain && (last_line != lineno ||
6622 last_file != input_filename))
6623 {
6624 if (TREE_CODE (type) == VOID_TYPE)
6625 cp_error ("forming reference to void");
6626 else
6627 cp_error ("forming %s to reference type `%T'",
6628 (code == POINTER_TYPE) ? "pointer" : "reference",
6629 type);
6630 last_line = lineno;
6631 last_file = input_filename;
6632 }
6633
6634 return error_mark_node;
6635 }
6636 else if (code == POINTER_TYPE)
6637 r = build_pointer_type (type);
6638 else
6639 r = build_reference_type (type);
6640 r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
6641
6642 if (r != error_mark_node)
6643 /* Will this ever be needed for TYPE_..._TO values? */
6644 layout_type (r);
6645
6646 return r;
6647 }
6648 case OFFSET_TYPE:
6649 {
6650 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
6651 if (r == error_mark_node || !IS_AGGR_TYPE (r))
6652 {
6653 /* [temp.deduct]
6654
6655 Type deduction may fail for any of the following
6656 reasons:
6657
6658 -- Attempting to create "pointer to member of T" when T
6659 is not a class type. */
6660 if (complain)
6661 cp_error ("creating pointer to member of non-class type `%T'",
6662 r);
6663 return error_mark_node;
6664 }
6665 return build_offset_type (r, type);
6666 }
6667 case FUNCTION_TYPE:
6668 case METHOD_TYPE:
6669 {
6670 tree fntype;
6671 tree raises;
6672
6673 fntype = tsubst_function_type (t, args, complain, in_decl);
6674 if (fntype == error_mark_node)
6675 return error_mark_node;
6676
6677 /* Substitue the exception specification. */
6678 raises = TYPE_RAISES_EXCEPTIONS (t);
6679 if (raises)
6680 {
6681 tree list = NULL_TREE;
6682
6683 if (! TREE_VALUE (raises))
6684 list = raises;
6685 else
6686 for (; raises != NULL_TREE; raises = TREE_CHAIN (raises))
6687 {
6688 tree spec = TREE_VALUE (raises);
6689
6690 spec = tsubst (spec, args, complain, in_decl);
6691 if (spec == error_mark_node)
6692 return spec;
6693 list = add_exception_specifier (list, spec, complain);
6694 }
6695 fntype = build_exception_variant (fntype, list);
6696 }
6697 return fntype;
6698 }
6699 case ARRAY_TYPE:
6700 {
6701 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
6702 if (domain == error_mark_node)
6703 return error_mark_node;
6704
6705 /* As an optimization, we avoid regenerating the array type if
6706 it will obviously be the same as T. */
6707 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
6708 return t;
6709
6710 /* These checks should match the ones in grokdeclarator.
6711
6712 [temp.deduct]
6713
6714 The deduction may fail for any of the following reasons:
6715
6716 -- Attempting to create an array with an element type that
6717 is void, a function type, or a reference type. */
6718 if (TREE_CODE (type) == VOID_TYPE
6719 || TREE_CODE (type) == FUNCTION_TYPE
6720 || TREE_CODE (type) == REFERENCE_TYPE)
6721 {
6722 if (complain)
6723 cp_error ("creating array of `%T'", type);
6724 return error_mark_node;
6725 }
6726
6727 r = build_cplus_array_type (type, domain);
6728 return r;
6729 }
6730
6731 case PLUS_EXPR:
6732 case MINUS_EXPR:
6733 {
6734 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain,
6735 in_decl);
6736 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain,
6737 in_decl);
6738
6739 if (e1 == error_mark_node || e2 == error_mark_node)
6740 return error_mark_node;
6741
6742 return fold (build (TREE_CODE (t), TREE_TYPE (t), e1, e2));
6743 }
6744
6745 case NEGATE_EXPR:
6746 case NOP_EXPR:
6747 {
6748 tree e = tsubst (TREE_OPERAND (t, 0), args, complain,
6749 in_decl);
6750 if (e == error_mark_node)
6751 return error_mark_node;
6752
6753 return fold (build (TREE_CODE (t), TREE_TYPE (t), e));
6754 }
6755
6756 case TYPENAME_TYPE:
6757 {
6758 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
6759 in_decl, /*entering_scope=*/1);
6760 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
6761 complain, in_decl);
6762
6763 if (ctx == error_mark_node || f == error_mark_node)
6764 return error_mark_node;
6765
6766 if (!IS_AGGR_TYPE (ctx))
6767 {
6768 if (complain)
6769 cp_error ("`%T' is not a class, struct, or union type",
6770 ctx);
6771 return error_mark_node;
6772 }
6773 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
6774 {
6775 /* Normally, make_typename_type does not require that the CTX
6776 have complete type in order to allow things like:
6777
6778 template <class T> struct S { typename S<T>::X Y; };
6779
6780 But, such constructs have already been resolved by this
6781 point, so here CTX really should have complete type, unless
6782 it's a partial instantiation. */
6783 ctx = complete_type (ctx);
6784 if (!COMPLETE_TYPE_P (ctx))
6785 {
6786 if (complain)
6787 incomplete_type_error (NULL_TREE, ctx);
6788 return error_mark_node;
6789 }
6790 }
6791
6792 f = make_typename_type (ctx, f, complain);
6793 if (f == error_mark_node)
6794 return f;
6795 return cp_build_qualified_type_real (f,
6796 CP_TYPE_QUALS (f)
6797 | CP_TYPE_QUALS (t),
6798 complain);
6799 }
6800
6801 case INDIRECT_REF:
6802 {
6803 tree e = tsubst (TREE_OPERAND (t, 0), args, complain,
6804 in_decl);
6805 if (e == error_mark_node)
6806 return error_mark_node;
6807 return make_pointer_declarator (type, e);
6808 }
6809
6810 case ADDR_EXPR:
6811 {
6812 tree e = tsubst (TREE_OPERAND (t, 0), args, complain,
6813 in_decl);
6814 if (e == error_mark_node)
6815 return error_mark_node;
6816 return make_reference_declarator (type, e);
6817 }
6818
6819 case ARRAY_REF:
6820 {
6821 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain,
6822 in_decl);
6823 tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain,
6824 in_decl);
6825 if (e1 == error_mark_node || e2 == error_mark_node)
6826 return error_mark_node;
6827
6828 return build_nt (ARRAY_REF, e1, e2, tsubst_expr);
6829 }
6830
6831 case CALL_EXPR:
6832 {
6833 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain,
6834 in_decl);
6835 tree e2 = (tsubst_call_declarator_parms
6836 (CALL_DECLARATOR_PARMS (t), args, complain, in_decl));
6837 tree e3 = tsubst (CALL_DECLARATOR_EXCEPTION_SPEC (t), args,
6838 complain, in_decl);
6839
6840 if (e1 == error_mark_node || e2 == error_mark_node
6841 || e3 == error_mark_node)
6842 return error_mark_node;
6843
6844 return make_call_declarator (e1, e2, CALL_DECLARATOR_QUALS (t), e3);
6845 }
6846
6847 case SCOPE_REF:
6848 {
6849 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain,
6850 in_decl);
6851 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
6852 if (e1 == error_mark_node || e2 == error_mark_node)
6853 return error_mark_node;
6854
6855 return build_nt (TREE_CODE (t), e1, e2);
6856 }
6857
6858 case TYPEOF_TYPE:
6859 {
6860 tree e1 = tsubst_expr (TYPE_FIELDS (t), args, complain,
6861 in_decl);
6862 if (e1 == error_mark_node)
6863 return error_mark_node;
6864
6865 return TREE_TYPE (e1);
6866 }
6867
6868 case FUNCTION_NAME:
6869 {
6870 const char *name;
6871 int len;
6872 tree type;
6873 tree str;
6874
6875 /* This code should match declare_hidden_char_array in
6876 c-common.c. */
6877 name = (*decl_printable_name) (current_function_decl, 2);
6878 len = strlen (name) + 1;
6879 type = build_array_type (char_type_node,
6880 build_index_type (size_int (len)));
6881 str = build_string (len, name);
6882 TREE_TYPE (str) = type;
6883 return str;
6884 }
6885
6886 default:
6887 sorry ("use of `%s' in template",
6888 tree_code_name [(int) TREE_CODE (t)]);
6889 return error_mark_node;
6890 }
6891 }
6892
6893 /* Like tsubst, but deals with expressions. This function just replaces
6894 template parms; to finish processing the resultant expression, use
6895 tsubst_expr. */
6896
6897 tree
6898 tsubst_copy (t, args, complain, in_decl)
6899 tree t, args;
6900 int complain;
6901 tree in_decl;
6902 {
6903 enum tree_code code;
6904 tree r;
6905
6906 if (t == NULL_TREE || t == error_mark_node)
6907 return t;
6908
6909 code = TREE_CODE (t);
6910
6911 switch (code)
6912 {
6913 case PARM_DECL:
6914 return do_identifier (DECL_NAME (t), 0, NULL_TREE);
6915
6916 case CONST_DECL:
6917 {
6918 tree enum_type;
6919 tree v;
6920
6921 if (!DECL_CONTEXT (t))
6922 /* This is a global enumeration constant. */
6923 return t;
6924
6925 /* Unfortunately, we cannot just call lookup_name here.
6926 Consider:
6927
6928 template <int I> int f() {
6929 enum E { a = I };
6930 struct S { void g() { E e = a; } };
6931 };
6932
6933 When we instantiate f<7>::S::g(), say, lookup_name is not
6934 clever enough to find f<7>::a. */
6935 enum_type
6936 = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
6937 /*entering_scope=*/0);
6938
6939 for (v = TYPE_VALUES (enum_type);
6940 v != NULL_TREE;
6941 v = TREE_CHAIN (v))
6942 if (TREE_PURPOSE (v) == DECL_NAME (t))
6943 return TREE_VALUE (v);
6944
6945 /* We didn't find the name. That should never happen; if
6946 name-lookup found it during preliminary parsing, we
6947 should find it again here during instantiation. */
6948 my_friendly_abort (0);
6949 }
6950 return t;
6951
6952 case FIELD_DECL:
6953 if (DECL_CONTEXT (t))
6954 {
6955 tree ctx;
6956
6957 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
6958 /*entering_scope=*/1);
6959 if (ctx != DECL_CONTEXT (t))
6960 return lookup_field (ctx, DECL_NAME (t), 0, 0);
6961 }
6962 return t;
6963
6964 case VAR_DECL:
6965 case FUNCTION_DECL:
6966 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
6967 t = tsubst (t, args, complain, in_decl);
6968 mark_used (t);
6969 return t;
6970
6971 case TEMPLATE_DECL:
6972 if (is_member_template (t))
6973 return tsubst (t, args, complain, in_decl);
6974 else
6975 return t;
6976
6977 case LOOKUP_EXPR:
6978 {
6979 /* We must tsbust into a LOOKUP_EXPR in case the names to
6980 which it refers is a conversion operator; in that case the
6981 name will change. We avoid making unnecessary copies,
6982 however. */
6983
6984 tree id = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
6985
6986 if (id != TREE_OPERAND (t, 0))
6987 {
6988 r = build_nt (LOOKUP_EXPR, id);
6989 LOOKUP_EXPR_GLOBAL (r) = LOOKUP_EXPR_GLOBAL (t);
6990 t = r;
6991 }
6992
6993 return t;
6994 }
6995
6996 case CAST_EXPR:
6997 case REINTERPRET_CAST_EXPR:
6998 case CONST_CAST_EXPR:
6999 case STATIC_CAST_EXPR:
7000 case DYNAMIC_CAST_EXPR:
7001 case NOP_EXPR:
7002 return build1
7003 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7004 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
7005
7006 case INDIRECT_REF:
7007 case NEGATE_EXPR:
7008 case TRUTH_NOT_EXPR:
7009 case BIT_NOT_EXPR:
7010 case ADDR_EXPR:
7011 case CONVERT_EXPR: /* Unary + */
7012 case SIZEOF_EXPR:
7013 case ALIGNOF_EXPR:
7014 case ARROW_EXPR:
7015 case THROW_EXPR:
7016 case TYPEID_EXPR:
7017 case REALPART_EXPR:
7018 case IMAGPART_EXPR:
7019 return build1
7020 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7021 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
7022
7023 case PLUS_EXPR:
7024 case MINUS_EXPR:
7025 case MULT_EXPR:
7026 case TRUNC_DIV_EXPR:
7027 case CEIL_DIV_EXPR:
7028 case FLOOR_DIV_EXPR:
7029 case ROUND_DIV_EXPR:
7030 case EXACT_DIV_EXPR:
7031 case BIT_AND_EXPR:
7032 case BIT_ANDTC_EXPR:
7033 case BIT_IOR_EXPR:
7034 case BIT_XOR_EXPR:
7035 case TRUNC_MOD_EXPR:
7036 case FLOOR_MOD_EXPR:
7037 case TRUTH_ANDIF_EXPR:
7038 case TRUTH_ORIF_EXPR:
7039 case TRUTH_AND_EXPR:
7040 case TRUTH_OR_EXPR:
7041 case RSHIFT_EXPR:
7042 case LSHIFT_EXPR:
7043 case RROTATE_EXPR:
7044 case LROTATE_EXPR:
7045 case EQ_EXPR:
7046 case NE_EXPR:
7047 case MAX_EXPR:
7048 case MIN_EXPR:
7049 case LE_EXPR:
7050 case GE_EXPR:
7051 case LT_EXPR:
7052 case GT_EXPR:
7053 case COMPONENT_REF:
7054 case ARRAY_REF:
7055 case COMPOUND_EXPR:
7056 case SCOPE_REF:
7057 case DOTSTAR_EXPR:
7058 case MEMBER_REF:
7059 case PREDECREMENT_EXPR:
7060 case PREINCREMENT_EXPR:
7061 case POSTDECREMENT_EXPR:
7062 case POSTINCREMENT_EXPR:
7063 return build_nt
7064 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7065 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
7066
7067 case CALL_EXPR:
7068 {
7069 tree fn = TREE_OPERAND (t, 0);
7070 if (is_overloaded_fn (fn))
7071 fn = tsubst_copy (get_first_fn (fn), args, complain, in_decl);
7072 else
7073 /* Sometimes FN is a LOOKUP_EXPR. */
7074 fn = tsubst_copy (fn, args, complain, in_decl);
7075 return build_nt
7076 (code, fn, tsubst_copy (TREE_OPERAND (t, 1), args, complain,
7077 in_decl),
7078 NULL_TREE);
7079 }
7080
7081 case METHOD_CALL_EXPR:
7082 {
7083 tree name = TREE_OPERAND (t, 0);
7084 if (TREE_CODE (name) == BIT_NOT_EXPR)
7085 {
7086 name = tsubst_copy (TREE_OPERAND (name, 0), args,
7087 complain, in_decl);
7088 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7089 }
7090 else if (TREE_CODE (name) == SCOPE_REF
7091 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
7092 {
7093 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
7094 complain, in_decl);
7095 name = TREE_OPERAND (name, 1);
7096 name = tsubst_copy (TREE_OPERAND (name, 0), args,
7097 complain, in_decl);
7098 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7099 name = build_nt (SCOPE_REF, base, name);
7100 }
7101 else
7102 name = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
7103 return build_nt
7104 (code, name, tsubst_copy (TREE_OPERAND (t, 1), args,
7105 complain, in_decl),
7106 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl),
7107 NULL_TREE);
7108 }
7109
7110 case STMT_EXPR:
7111 /* This processing should really occur in tsubst_expr, However,
7112 tsubst_expr does not recurse into expressions, since it
7113 assumes that there aren't any statements inside them.
7114 Instead, it simply calls build_expr_from_tree. So, we need
7115 to expand the STMT_EXPR here. */
7116 if (!processing_template_decl)
7117 {
7118 tree stmt_expr = begin_stmt_expr ();
7119 tsubst_expr (STMT_EXPR_STMT (t), args,
7120 complain, in_decl);
7121 return finish_stmt_expr (stmt_expr);
7122 }
7123
7124 return t;
7125
7126 case COND_EXPR:
7127 case MODOP_EXPR:
7128 case PSEUDO_DTOR_EXPR:
7129 {
7130 r = build_nt
7131 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7132 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7133 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
7134 return r;
7135 }
7136
7137 case NEW_EXPR:
7138 {
7139 r = build_nt
7140 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7141 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7142 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
7143 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
7144 return r;
7145 }
7146
7147 case DELETE_EXPR:
7148 {
7149 r = build_nt
7150 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7151 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
7152 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
7153 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
7154 return r;
7155 }
7156
7157 case TEMPLATE_ID_EXPR:
7158 {
7159 /* Substituted template arguments */
7160 tree targs = tsubst_copy (TREE_OPERAND (t, 1), args, complain,
7161 in_decl);
7162
7163 if (targs && TREE_CODE (targs) == TREE_LIST)
7164 {
7165 tree chain;
7166 for (chain = targs; chain; chain = TREE_CHAIN (chain))
7167 TREE_VALUE (chain) = maybe_fold_nontype_arg (TREE_VALUE (chain));
7168 }
7169 else if (targs)
7170 {
7171 int i;
7172 for (i = 0; i < TREE_VEC_LENGTH (targs); ++i)
7173 TREE_VEC_ELT (targs, i)
7174 = maybe_fold_nontype_arg (TREE_VEC_ELT (targs, i));
7175 }
7176
7177 return lookup_template_function
7178 (tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl), targs);
7179 }
7180
7181 case TREE_LIST:
7182 {
7183 tree purpose, value, chain;
7184
7185 if (t == void_list_node)
7186 return t;
7187
7188 purpose = TREE_PURPOSE (t);
7189 if (purpose)
7190 purpose = tsubst_copy (purpose, args, complain, in_decl);
7191 value = TREE_VALUE (t);
7192 if (value)
7193 value = tsubst_copy (value, args, complain, in_decl);
7194 chain = TREE_CHAIN (t);
7195 if (chain && chain != void_type_node)
7196 chain = tsubst_copy (chain, args, complain, in_decl);
7197 if (purpose == TREE_PURPOSE (t)
7198 && value == TREE_VALUE (t)
7199 && chain == TREE_CHAIN (t))
7200 return t;
7201 return tree_cons (purpose, value, chain);
7202 }
7203
7204 case RECORD_TYPE:
7205 case UNION_TYPE:
7206 case ENUMERAL_TYPE:
7207 case INTEGER_TYPE:
7208 case TEMPLATE_TYPE_PARM:
7209 case TEMPLATE_TEMPLATE_PARM:
7210 case BOUND_TEMPLATE_TEMPLATE_PARM:
7211 case TEMPLATE_PARM_INDEX:
7212 case POINTER_TYPE:
7213 case REFERENCE_TYPE:
7214 case OFFSET_TYPE:
7215 case FUNCTION_TYPE:
7216 case METHOD_TYPE:
7217 case ARRAY_TYPE:
7218 case TYPENAME_TYPE:
7219 case TYPE_DECL:
7220 return tsubst (t, args, complain, in_decl);
7221
7222 case IDENTIFIER_NODE:
7223 if (IDENTIFIER_TYPENAME_P (t))
7224 {
7225 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7226 if (flag_new_abi)
7227 return mangle_conv_op_name_for_type (new_type);
7228 else
7229 return (build_typename_overload (new_type));
7230 }
7231 else
7232 return t;
7233
7234 case CONSTRUCTOR:
7235 {
7236 r = build
7237 (CONSTRUCTOR, tsubst (TREE_TYPE (t), args, complain, in_decl),
7238 NULL_TREE, tsubst_copy (CONSTRUCTOR_ELTS (t), args,
7239 complain, in_decl));
7240 TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
7241 return r;
7242 }
7243
7244 case VA_ARG_EXPR:
7245 return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
7246 in_decl),
7247 tsubst (TREE_TYPE (t), args, complain, in_decl));
7248
7249 case FUNCTION_NAME:
7250 return tsubst (t, args, complain, in_decl);
7251
7252 default:
7253 return t;
7254 }
7255 }
7256
7257 /* Like tsubst_copy, but also does semantic processing. */
7258
7259 tree
7260 tsubst_expr (t, args, complain, in_decl)
7261 tree t, args;
7262 int complain;
7263 tree in_decl;
7264 {
7265 tree stmt;
7266
7267 if (t == NULL_TREE || t == error_mark_node)
7268 return t;
7269
7270 if (processing_template_decl)
7271 return tsubst_copy (t, args, complain, in_decl);
7272
7273 switch (TREE_CODE (t))
7274 {
7275 case RETURN_INIT:
7276 prep_stmt (t);
7277 finish_named_return_value
7278 (TREE_OPERAND (t, 0),
7279 tsubst_expr (TREE_OPERAND (t, 1), args, /*complain=*/1, in_decl));
7280 tsubst_expr (TREE_CHAIN (t), args, complain, in_decl);
7281 break;
7282
7283 case CTOR_INITIALIZER:
7284 {
7285 tree member_init_list;
7286 tree base_init_list;
7287
7288 prep_stmt (t);
7289 member_init_list
7290 = tsubst_initializer_list (TREE_OPERAND (t, 0), args);
7291 base_init_list
7292 = tsubst_initializer_list (TREE_OPERAND (t, 1), args);
7293 setup_vtbl_ptr (member_init_list, base_init_list);
7294 tsubst_expr (TREE_CHAIN (t), args, complain, in_decl);
7295 break;
7296 }
7297
7298 case RETURN_STMT:
7299 prep_stmt (t);
7300 finish_return_stmt (tsubst_expr (RETURN_EXPR (t),
7301 args, complain, in_decl));
7302 break;
7303
7304 case EXPR_STMT:
7305 prep_stmt (t);
7306 finish_expr_stmt (tsubst_expr (EXPR_STMT_EXPR (t),
7307 args, complain, in_decl));
7308 break;
7309
7310 case DECL_STMT:
7311 {
7312 tree decl;
7313 tree init;
7314
7315 prep_stmt (t);
7316 decl = DECL_STMT_DECL (t);
7317 if (TREE_CODE (decl) == LABEL_DECL)
7318 finish_label_decl (DECL_NAME (decl));
7319 else
7320 {
7321 init = DECL_INITIAL (decl);
7322 decl = tsubst (decl, args, complain, in_decl);
7323 init = tsubst_expr (init, args, complain, in_decl);
7324 if (decl != error_mark_node)
7325 {
7326 if (TREE_CODE (decl) != TYPE_DECL)
7327 /* Make sure the type is instantiated now. */
7328 complete_type (TREE_TYPE (decl));
7329 if (init)
7330 DECL_INITIAL (decl) = error_mark_node;
7331 /* By marking the declaration as instantiated, we avoid
7332 trying to instantiate it. Since instantiate_decl can't
7333 handle local variables, and since we've already done
7334 all that needs to be done, that's the right thing to
7335 do. */
7336 if (TREE_CODE (decl) == VAR_DECL)
7337 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
7338 maybe_push_decl (decl);
7339 cp_finish_decl (decl, init, NULL_TREE, 0);
7340 }
7341 }
7342 return decl;
7343 }
7344
7345 case FOR_STMT:
7346 {
7347 tree tmp;
7348 prep_stmt (t);
7349
7350 stmt = begin_for_stmt ();
7351 for (tmp = FOR_INIT_STMT (t); tmp; tmp = TREE_CHAIN (tmp))
7352 tsubst_expr (tmp, args, complain, in_decl);
7353 finish_for_init_stmt (stmt);
7354 finish_for_cond (tsubst_expr (FOR_COND (t), args,
7355 complain, in_decl),
7356 stmt);
7357 tmp = tsubst_expr (FOR_EXPR (t), args, complain, in_decl);
7358 finish_for_expr (tmp, stmt);
7359 tsubst_expr (FOR_BODY (t), args, complain, in_decl);
7360 finish_for_stmt (stmt);
7361 }
7362 break;
7363
7364 case WHILE_STMT:
7365 {
7366 prep_stmt (t);
7367 stmt = begin_while_stmt ();
7368 finish_while_stmt_cond (tsubst_expr (WHILE_COND (t),
7369 args, complain, in_decl),
7370 stmt);
7371 tsubst_expr (WHILE_BODY (t), args, complain, in_decl);
7372 finish_while_stmt (stmt);
7373 }
7374 break;
7375
7376 case DO_STMT:
7377 {
7378 prep_stmt (t);
7379 stmt = begin_do_stmt ();
7380 tsubst_expr (DO_BODY (t), args, complain, in_decl);
7381 finish_do_body (stmt);
7382 finish_do_stmt (tsubst_expr (DO_COND (t), args,
7383 complain, in_decl),
7384 stmt);
7385 }
7386 break;
7387
7388 case IF_STMT:
7389 {
7390 tree tmp;
7391
7392 prep_stmt (t);
7393 stmt = begin_if_stmt ();
7394 finish_if_stmt_cond (tsubst_expr (IF_COND (t),
7395 args, complain, in_decl),
7396 stmt);
7397
7398 if (tmp = THEN_CLAUSE (t), tmp)
7399 {
7400 tsubst_expr (tmp, args, complain, in_decl);
7401 finish_then_clause (stmt);
7402 }
7403
7404 if (tmp = ELSE_CLAUSE (t), tmp)
7405 {
7406 begin_else_clause ();
7407 tsubst_expr (tmp, args, complain, in_decl);
7408 finish_else_clause (stmt);
7409 }
7410
7411 finish_if_stmt ();
7412 }
7413 break;
7414
7415 case COMPOUND_STMT:
7416 {
7417 tree substmt;
7418
7419 prep_stmt (t);
7420 stmt = begin_compound_stmt (COMPOUND_STMT_NO_SCOPE (t));
7421 for (substmt = COMPOUND_BODY (t);
7422 substmt != NULL_TREE;
7423 substmt = TREE_CHAIN (substmt))
7424 tsubst_expr (substmt, args, complain, in_decl);
7425 return finish_compound_stmt (COMPOUND_STMT_NO_SCOPE (t), stmt);
7426 }
7427 break;
7428
7429 case BREAK_STMT:
7430 prep_stmt (t);
7431 finish_break_stmt ();
7432 break;
7433
7434 case CONTINUE_STMT:
7435 prep_stmt (t);
7436 finish_continue_stmt ();
7437 break;
7438
7439 case SWITCH_STMT:
7440 {
7441 tree val;
7442
7443 prep_stmt (t);
7444 stmt = begin_switch_stmt ();
7445 val = tsubst_expr (SWITCH_COND (t), args, complain, in_decl);
7446 finish_switch_cond (val, stmt);
7447 tsubst_expr (SWITCH_BODY (t), args, complain, in_decl);
7448 finish_switch_stmt (stmt);
7449 }
7450 break;
7451
7452 case CASE_LABEL:
7453 prep_stmt (t);
7454 finish_case_label (tsubst_expr (CASE_LOW (t), args, complain, in_decl),
7455 tsubst_expr (CASE_HIGH (t), args, complain,
7456 in_decl));
7457 break;
7458
7459 case LABEL_STMT:
7460 lineno = STMT_LINENO (t);
7461 finish_label_stmt (DECL_NAME (LABEL_STMT_LABEL (t)));
7462 break;
7463
7464 case GOTO_STMT:
7465 prep_stmt (t);
7466 t = GOTO_DESTINATION (t);
7467 if (TREE_CODE (t) != LABEL_DECL)
7468 /* Computed goto's must be tsubst'd into. On the other hand,
7469 non-computed gotos must not be; the identifier in question
7470 will have no binding. */
7471 t = tsubst_expr (t, args, complain, in_decl);
7472 else
7473 t = DECL_NAME (t);
7474 finish_goto_stmt (t);
7475 break;
7476
7477 case ASM_STMT:
7478 prep_stmt (t);
7479 finish_asm_stmt (ASM_CV_QUAL (t),
7480 tsubst_expr (ASM_STRING (t), args, complain, in_decl),
7481 tsubst_expr (ASM_OUTPUTS (t), args, complain, in_decl),
7482 tsubst_expr (ASM_INPUTS (t), args, complain, in_decl),
7483 tsubst_expr (ASM_CLOBBERS (t), args, complain,
7484 in_decl));
7485 break;
7486
7487 case TRY_BLOCK:
7488 prep_stmt (t);
7489 if (CLEANUP_P (t))
7490 {
7491 stmt = begin_try_block ();
7492 tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
7493 finish_cleanup_try_block (stmt);
7494 finish_cleanup (tsubst_expr (TRY_HANDLERS (t), args,
7495 complain, in_decl),
7496 stmt);
7497 }
7498 else
7499 {
7500 tree handler;
7501
7502 if (FN_TRY_BLOCK_P (t))
7503 stmt = begin_function_try_block ();
7504 else
7505 stmt = begin_try_block ();
7506
7507 tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
7508
7509 if (FN_TRY_BLOCK_P (t))
7510 finish_function_try_block (stmt);
7511 else
7512 finish_try_block (stmt);
7513
7514 handler = TRY_HANDLERS (t);
7515 for (; handler; handler = TREE_CHAIN (handler))
7516 tsubst_expr (handler, args, complain, in_decl);
7517 if (FN_TRY_BLOCK_P (t))
7518 finish_function_handler_sequence (stmt);
7519 else
7520 finish_handler_sequence (stmt);
7521 }
7522 break;
7523
7524 case HANDLER:
7525 {
7526 tree decl;
7527 tree blocks;
7528
7529 prep_stmt (t);
7530 stmt = begin_handler ();
7531 if (HANDLER_PARMS (t))
7532 {
7533 decl = DECL_STMT_DECL (HANDLER_PARMS (t));
7534 decl = tsubst (decl, args, complain, in_decl);
7535 /* Prevent instantiate_decl from trying to instantiate
7536 this variable. We've already done all that needs to be
7537 done. */
7538 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
7539 }
7540 else
7541 decl = NULL_TREE;
7542 blocks = finish_handler_parms (decl, stmt);
7543 tsubst_expr (HANDLER_BODY (t), args, complain, in_decl);
7544 finish_handler (blocks, stmt);
7545 }
7546 break;
7547
7548 case TAG_DEFN:
7549 prep_stmt (t);
7550 t = TREE_TYPE (t);
7551 tsubst (t, args, complain, NULL_TREE);
7552 break;
7553
7554 default:
7555 return build_expr_from_tree (tsubst_copy (t, args, complain, in_decl));
7556 }
7557 return NULL_TREE;
7558 }
7559
7560 /* TMPL is a TEMPLATE_DECL for a cloned constructor or destructor.
7561 Instantiate it with the ARGS. */
7562
7563 static tree
7564 instantiate_clone (tmpl, args)
7565 tree tmpl;
7566 tree args;
7567 {
7568 tree spec;
7569 tree clone;
7570
7571 /* Instantiated the cloned function, rather than the clone. */
7572 spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), args);
7573
7574 /* Then, see if we've already cloned the instantiation. */
7575 for (clone = TREE_CHAIN (spec);
7576 clone && DECL_CLONED_FUNCTION_P (clone);
7577 clone = TREE_CHAIN (clone))
7578 if (DECL_NAME (clone) == DECL_NAME (tmpl))
7579 return clone;
7580
7581 /* If we haven't, do so know. */
7582 if (!clone)
7583 clone_function_decl (spec, /*update_method_vec_p=*/0);
7584
7585 /* Look again. */
7586 for (clone = TREE_CHAIN (spec);
7587 clone && DECL_CLONED_FUNCTION_P (clone);
7588 clone = TREE_CHAIN (clone))
7589 if (DECL_NAME (clone) == DECL_NAME (tmpl))
7590 return clone;
7591
7592 /* We should always have found the clone by now. */
7593 my_friendly_abort (20000411);
7594 return NULL_TREE;
7595 }
7596
7597 /* Instantiate the indicated variable or function template TMPL with
7598 the template arguments in TARG_PTR. */
7599
7600 tree
7601 instantiate_template (tmpl, targ_ptr)
7602 tree tmpl, targ_ptr;
7603 {
7604 tree clone;
7605 tree fndecl;
7606 tree gen_tmpl;
7607 tree spec;
7608 int i, len;
7609 tree inner_args;
7610
7611 if (tmpl == error_mark_node)
7612 return error_mark_node;
7613
7614 my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 283);
7615
7616 /* If this function is a clone, handle it specially. */
7617 if (DECL_CLONED_FUNCTION_P (tmpl))
7618 return instantiate_clone (tmpl, targ_ptr);
7619
7620 /* Check to see if we already have this specialization. */
7621 spec = retrieve_specialization (tmpl, targ_ptr);
7622 if (spec != NULL_TREE)
7623 return spec;
7624
7625 gen_tmpl = most_general_template (tmpl);
7626 if (tmpl != gen_tmpl)
7627 {
7628 /* The TMPL is a partial instantiation. To get a full set of
7629 arguments we must add the arguments used to perform the
7630 partial instantiation. */
7631 targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
7632 targ_ptr);
7633
7634 /* Check to see if we already have this specialization. */
7635 spec = retrieve_specialization (gen_tmpl, targ_ptr);
7636 if (spec != NULL_TREE)
7637 return spec;
7638 }
7639
7640 len = DECL_NTPARMS (gen_tmpl);
7641 inner_args = INNERMOST_TEMPLATE_ARGS (targ_ptr);
7642 i = len;
7643 while (i--)
7644 {
7645 tree t = TREE_VEC_ELT (inner_args, i);
7646 if (TYPE_P (t))
7647 {
7648 tree nt = target_type (t);
7649 if (IS_AGGR_TYPE (nt) && decl_function_context (TYPE_MAIN_DECL (nt)))
7650 {
7651 cp_error ("type `%T' composed from a local class is not a valid template-argument", t);
7652 cp_error (" trying to instantiate `%D'", gen_tmpl);
7653 return error_mark_node;
7654 }
7655 }
7656 }
7657
7658 /* substitute template parameters */
7659 fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
7660 targ_ptr, /*complain=*/1, gen_tmpl);
7661 /* The DECL_TI_TEMPLATE should always be the immediate parent
7662 template, not the most general template. */
7663 DECL_TI_TEMPLATE (fndecl) = tmpl;
7664
7665 if (flag_external_templates)
7666 add_pending_template (fndecl);
7667
7668 /* If we've just instantiated the main entry point for a function,
7669 instantiate all the alternate entry points as well. */
7670 for (clone = TREE_CHAIN (gen_tmpl);
7671 clone && DECL_CLONED_FUNCTION_P (clone);
7672 clone = TREE_CHAIN (clone))
7673 instantiate_template (clone, targ_ptr);
7674
7675 return fndecl;
7676 }
7677
7678 /* The FN is a TEMPLATE_DECL for a function. The ARGS are the
7679 arguments that are being used when calling it. TARGS is a vector
7680 into which the deduced template arguments are placed.
7681
7682 Return zero for success, 2 for an incomplete match that doesn't resolve
7683 all the types, and 1 for complete failure. An error message will be
7684 printed only for an incomplete match.
7685
7686 If FN is a conversion operator, or we are trying to produce a specific
7687 specialization, RETURN_TYPE is the return type desired.
7688
7689 The EXPLICIT_TARGS are explicit template arguments provided via a
7690 template-id.
7691
7692 The parameter STRICT is one of:
7693
7694 DEDUCE_CALL:
7695 We are deducing arguments for a function call, as in
7696 [temp.deduct.call].
7697
7698 DEDUCE_CONV:
7699 We are deducing arguments for a conversion function, as in
7700 [temp.deduct.conv].
7701
7702 DEDUCE_EXACT:
7703 We are deducing arguments when doing an explicit instantiation
7704 as in [temp.explicit], when determining an explicit specialization
7705 as in [temp.expl.spec], or when taking the address of a function
7706 template, as in [temp.deduct.funcaddr].
7707
7708 DEDUCE_ORDER:
7709 We are deducing arguments when calculating the partial
7710 ordering between specializations of function or class
7711 templates, as in [temp.func.order] and [temp.class.order].
7712
7713 LEN is the number of parms to consider before returning success, or -1
7714 for all. This is used in partial ordering to avoid comparing parms for
7715 which no actual argument was passed, since they are not considered in
7716 overload resolution (and are explicitly excluded from consideration in
7717 partial ordering in [temp.func.order]/6). */
7718
7719 int
7720 fn_type_unification (fn, explicit_targs, targs, args, return_type,
7721 strict, len)
7722 tree fn, explicit_targs, targs, args, return_type;
7723 unification_kind_t strict;
7724 int len;
7725 {
7726 tree parms;
7727 tree fntype;
7728 int result;
7729
7730 my_friendly_assert (TREE_CODE (fn) == TEMPLATE_DECL, 0);
7731
7732 fntype = TREE_TYPE (fn);
7733 if (explicit_targs)
7734 {
7735 /* [temp.deduct]
7736
7737 The specified template arguments must match the template
7738 parameters in kind (i.e., type, nontype, template), and there
7739 must not be more arguments than there are parameters;
7740 otherwise type deduction fails.
7741
7742 Nontype arguments must match the types of the corresponding
7743 nontype template parameters, or must be convertible to the
7744 types of the corresponding nontype parameters as specified in
7745 _temp.arg.nontype_, otherwise type deduction fails.
7746
7747 All references in the function type of the function template
7748 to the corresponding template parameters are replaced by the
7749 specified template argument values. If a substitution in a
7750 template parameter or in the function type of the function
7751 template results in an invalid type, type deduction fails. */
7752 int i;
7753 tree converted_args;
7754
7755 converted_args
7756 = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
7757 explicit_targs, NULL_TREE, /*complain=*/0,
7758 /*require_all_arguments=*/0));
7759 if (converted_args == error_mark_node)
7760 return 1;
7761
7762 fntype = tsubst (fntype, converted_args, /*complain=*/0, NULL_TREE);
7763 if (fntype == error_mark_node)
7764 return 1;
7765
7766 /* Place the explicitly specified arguments in TARGS. */
7767 for (i = 0; i < TREE_VEC_LENGTH (targs); i++)
7768 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
7769 }
7770
7771 parms = TYPE_ARG_TYPES (fntype);
7772 /* Never do unification on the 'this' parameter. */
7773 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
7774 parms = TREE_CHAIN (parms);
7775
7776 if (return_type)
7777 {
7778 /* We've been given a return type to match, prepend it. */
7779 parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
7780 args = tree_cons (NULL_TREE, return_type, args);
7781 if (len >= 0)
7782 ++len;
7783 }
7784
7785 /* We allow incomplete unification without an error message here
7786 because the standard doesn't seem to explicitly prohibit it. Our
7787 callers must be ready to deal with unification failures in any
7788 event. */
7789 result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
7790 targs, parms, args, /*subr=*/0,
7791 strict, /*allow_incomplete*/1, len);
7792
7793 if (result == 0)
7794 /* All is well so far. Now, check:
7795
7796 [temp.deduct]
7797
7798 When all template arguments have been deduced, all uses of
7799 template parameters in nondeduced contexts are replaced with
7800 the corresponding deduced argument values. If the
7801 substitution results in an invalid type, as described above,
7802 type deduction fails. */
7803 if (tsubst (TREE_TYPE (fn), targs, /*complain=*/0, NULL_TREE)
7804 == error_mark_node)
7805 return 1;
7806
7807 return result;
7808 }
7809
7810 /* Adjust types before performing type deduction, as described in
7811 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
7812 sections are symmetric. PARM is the type of a function parameter
7813 or the return type of the conversion function. ARG is the type of
7814 the argument passed to the call, or the type of the value
7815 initialized with the result of the conversion function. */
7816
7817 static int
7818 maybe_adjust_types_for_deduction (strict, parm, arg)
7819 unification_kind_t strict;
7820 tree* parm;
7821 tree* arg;
7822 {
7823 int result = 0;
7824
7825 switch (strict)
7826 {
7827 case DEDUCE_CALL:
7828 break;
7829
7830 case DEDUCE_CONV:
7831 {
7832 /* Swap PARM and ARG throughout the remainder of this
7833 function; the handling is precisely symmetric since PARM
7834 will initialize ARG rather than vice versa. */
7835 tree* temp = parm;
7836 parm = arg;
7837 arg = temp;
7838 break;
7839 }
7840
7841 case DEDUCE_EXACT:
7842 /* There is nothing to do in this case. */
7843 return 0;
7844
7845 case DEDUCE_ORDER:
7846 /* DR 214. [temp.func.order] is underspecified, and leads to no
7847 ordering between things like `T *' and `T const &' for `U *'.
7848 The former has T=U and the latter T=U*. The former looks more
7849 specialized and John Spicer considers it well-formed (the EDG
7850 compiler accepts it).
7851
7852 John also confirms that deduction should proceed as in a function
7853 call. Which implies the usual ARG and PARM bashing as DEDUCE_CALL.
7854 However, in ordering, ARG can have REFERENCE_TYPE, but no argument
7855 to an actual call can have such a type.
7856
7857 When deducing against a REFERENCE_TYPE, we can either not change
7858 PARM's type, or we can change ARG's type too. The latter, though
7859 seemingly more safe, turns out to give the following quirk. Consider
7860 deducing a call to a `const int *' with the following template
7861 function parameters
7862 #1; T const *const & ; T = int
7863 #2; T *const & ; T = const int
7864 #3; T * ; T = const int
7865 It looks like #1 is the more specialized. Taken pairwise, #1 is
7866 more specialized than #2 and #2 is more specialized than #3, yet
7867 there is no ordering between #1 and #3.
7868
7869 So, if ARG is a reference, we look though it when PARM is
7870 not a refence. When both are references we don't change either. */
7871 if (TREE_CODE (*arg) == REFERENCE_TYPE)
7872 {
7873 if (TREE_CODE (*parm) == REFERENCE_TYPE)
7874 return 0;
7875 *arg = TREE_TYPE (*arg);
7876 result |= UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
7877 goto skip_arg;
7878 }
7879 break;
7880 default:
7881 my_friendly_abort (0);
7882 }
7883
7884 if (TREE_CODE (*parm) != REFERENCE_TYPE)
7885 {
7886 /* [temp.deduct.call]
7887
7888 If P is not a reference type:
7889
7890 --If A is an array type, the pointer type produced by the
7891 array-to-pointer standard conversion (_conv.array_) is
7892 used in place of A for type deduction; otherwise,
7893
7894 --If A is a function type, the pointer type produced by
7895 the function-to-pointer standard conversion
7896 (_conv.func_) is used in place of A for type deduction;
7897 otherwise,
7898
7899 --If A is a cv-qualified type, the top level
7900 cv-qualifiers of A's type are ignored for type
7901 deduction. */
7902 if (TREE_CODE (*arg) == ARRAY_TYPE)
7903 *arg = build_pointer_type (TREE_TYPE (*arg));
7904 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
7905 *arg = build_pointer_type (*arg);
7906 else
7907 *arg = TYPE_MAIN_VARIANT (*arg);
7908 }
7909
7910 skip_arg:;
7911 /* [temp.deduct.call]
7912
7913 If P is a cv-qualified type, the top level cv-qualifiers
7914 of P's type are ignored for type deduction. If P is a
7915 reference type, the type referred to by P is used for
7916 type deduction. */
7917 *parm = TYPE_MAIN_VARIANT (*parm);
7918 if (TREE_CODE (*parm) == REFERENCE_TYPE)
7919 {
7920 *parm = TREE_TYPE (*parm);
7921 result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
7922 }
7923 return result;
7924 }
7925
7926 /* Most parms like fn_type_unification.
7927
7928 If SUBR is 1, we're being called recursively (to unify the
7929 arguments of a function or method parameter of a function
7930 template). */
7931
7932 static int
7933 type_unification_real (tparms, targs, parms, args, subr,
7934 strict, allow_incomplete, len)
7935 tree tparms, targs, parms, args;
7936 int subr;
7937 unification_kind_t strict;
7938 int allow_incomplete, len;
7939 {
7940 tree parm, arg;
7941 int i;
7942 int ntparms = TREE_VEC_LENGTH (tparms);
7943 int sub_strict;
7944
7945 my_friendly_assert (TREE_CODE (tparms) == TREE_VEC, 289);
7946 my_friendly_assert (parms == NULL_TREE
7947 || TREE_CODE (parms) == TREE_LIST, 290);
7948 /* ARGS could be NULL (via a call from parse.y to
7949 build_x_function_call). */
7950 if (args)
7951 my_friendly_assert (TREE_CODE (args) == TREE_LIST, 291);
7952 my_friendly_assert (ntparms > 0, 292);
7953
7954 switch (strict)
7955 {
7956 case DEDUCE_CALL:
7957 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
7958 | UNIFY_ALLOW_DERIVED);
7959 break;
7960
7961 case DEDUCE_CONV:
7962 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
7963 break;
7964
7965 case DEDUCE_EXACT:
7966 sub_strict = UNIFY_ALLOW_NONE;
7967 break;
7968
7969 case DEDUCE_ORDER:
7970 sub_strict = UNIFY_ALLOW_NONE;
7971 break;
7972
7973 default:
7974 my_friendly_abort (0);
7975 }
7976
7977 if (len == 0)
7978 return 0;
7979
7980 while (parms
7981 && parms != void_list_node
7982 && args
7983 && args != void_list_node)
7984 {
7985 parm = TREE_VALUE (parms);
7986 parms = TREE_CHAIN (parms);
7987 arg = TREE_VALUE (args);
7988 args = TREE_CHAIN (args);
7989
7990 if (arg == error_mark_node)
7991 return 1;
7992 if (arg == unknown_type_node)
7993 /* We can't deduce anything from this, but we might get all the
7994 template args from other function args. */
7995 continue;
7996
7997 /* Conversions will be performed on a function argument that
7998 corresponds with a function parameter that contains only
7999 non-deducible template parameters and explicitly specified
8000 template parameters. */
8001 if (! uses_template_parms (parm))
8002 {
8003 tree type;
8004
8005 if (!TYPE_P (arg))
8006 type = TREE_TYPE (arg);
8007 else
8008 {
8009 type = arg;
8010 arg = NULL_TREE;
8011 }
8012
8013 if (strict == DEDUCE_EXACT || strict == DEDUCE_ORDER)
8014 {
8015 if (same_type_p (parm, type))
8016 continue;
8017 }
8018 else
8019 /* It might work; we shouldn't check now, because we might
8020 get into infinite recursion. Overload resolution will
8021 handle it. */
8022 continue;
8023
8024 return 1;
8025 }
8026
8027 if (!TYPE_P (arg))
8028 {
8029 my_friendly_assert (TREE_TYPE (arg) != NULL_TREE, 293);
8030 if (type_unknown_p (arg))
8031 {
8032 /* [temp.deduct.type] A template-argument can be deduced from
8033 a pointer to function or pointer to member function
8034 argument if the set of overloaded functions does not
8035 contain function templates and at most one of a set of
8036 overloaded functions provides a unique match. */
8037
8038 if (resolve_overloaded_unification
8039 (tparms, targs, parm, arg, strict, sub_strict)
8040 != 0)
8041 return 1;
8042 continue;
8043 }
8044 arg = TREE_TYPE (arg);
8045 }
8046
8047 {
8048 int arg_strict = sub_strict;
8049
8050 if (!subr)
8051 arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
8052
8053 if (unify (tparms, targs, parm, arg, arg_strict))
8054 return 1;
8055 }
8056
8057 /* Are we done with the interesting parms? */
8058 if (--len == 0)
8059 return 0;
8060 }
8061 /* Fail if we've reached the end of the parm list, and more args
8062 are present, and the parm list isn't variadic. */
8063 if (args && args != void_list_node && parms == void_list_node)
8064 return 1;
8065 /* Fail if parms are left and they don't have default values. */
8066 if (parms
8067 && parms != void_list_node
8068 && TREE_PURPOSE (parms) == NULL_TREE)
8069 return 1;
8070 if (!subr)
8071 for (i = 0; i < ntparms; i++)
8072 if (TREE_VEC_ELT (targs, i) == NULL_TREE)
8073 {
8074 if (!allow_incomplete)
8075 error ("incomplete type unification");
8076 return 2;
8077 }
8078 return 0;
8079 }
8080
8081 /* Subroutine of type_unification_real. Args are like the variables at the
8082 call site. ARG is an overloaded function (or template-id); we try
8083 deducing template args from each of the overloads, and if only one
8084 succeeds, we go with that. Modifies TARGS and returns 0 on success. */
8085
8086 static int
8087 resolve_overloaded_unification (tparms, targs, parm, arg, strict,
8088 sub_strict)
8089 tree tparms, targs, parm, arg;
8090 unification_kind_t strict;
8091 int sub_strict;
8092 {
8093 tree tempargs = copy_node (targs);
8094 int good = 0;
8095
8096 if (TREE_CODE (arg) == ADDR_EXPR)
8097 arg = TREE_OPERAND (arg, 0);
8098
8099 if (TREE_CODE (arg) == COMPONENT_REF)
8100 /* Handle `&x' where `x' is some static or non-static member
8101 function name. */
8102 arg = TREE_OPERAND (arg, 1);
8103
8104 if (TREE_CODE (arg) == OFFSET_REF)
8105 arg = TREE_OPERAND (arg, 1);
8106
8107 /* Strip baselink information. */
8108 while (TREE_CODE (arg) == TREE_LIST)
8109 arg = TREE_VALUE (arg);
8110
8111 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
8112 {
8113 /* If we got some explicit template args, we need to plug them into
8114 the affected templates before we try to unify, in case the
8115 explicit args will completely resolve the templates in question. */
8116
8117 tree expl_subargs = TREE_OPERAND (arg, 1);
8118 arg = TREE_OPERAND (arg, 0);
8119
8120 for (; arg; arg = OVL_NEXT (arg))
8121 {
8122 tree fn = OVL_CURRENT (arg);
8123 tree subargs, elem;
8124
8125 if (TREE_CODE (fn) != TEMPLATE_DECL)
8126 continue;
8127
8128 subargs = get_bindings_overload (fn, DECL_TEMPLATE_RESULT (fn),
8129 expl_subargs);
8130 if (subargs)
8131 {
8132 elem = tsubst (TREE_TYPE (fn), subargs, /*complain=*/0,
8133 NULL_TREE);
8134 if (TREE_CODE (elem) == METHOD_TYPE)
8135 elem = build_ptrmemfunc_type (build_pointer_type (elem));
8136 good += try_one_overload (tparms, targs, tempargs, parm, elem,
8137 strict, sub_strict);
8138 }
8139 }
8140 }
8141 else if (TREE_CODE (arg) == OVERLOAD)
8142 {
8143 for (; arg; arg = OVL_NEXT (arg))
8144 {
8145 tree type = TREE_TYPE (OVL_CURRENT (arg));
8146 if (TREE_CODE (type) == METHOD_TYPE)
8147 type = build_ptrmemfunc_type (build_pointer_type (type));
8148 good += try_one_overload (tparms, targs, tempargs, parm,
8149 type,
8150 strict, sub_strict);
8151 }
8152 }
8153 else
8154 my_friendly_abort (981006);
8155
8156 /* [temp.deduct.type] A template-argument can be deduced from a pointer
8157 to function or pointer to member function argument if the set of
8158 overloaded functions does not contain function templates and at most
8159 one of a set of overloaded functions provides a unique match.
8160
8161 So if we found multiple possibilities, we return success but don't
8162 deduce anything. */
8163
8164 if (good == 1)
8165 {
8166 int i = TREE_VEC_LENGTH (targs);
8167 for (; i--; )
8168 if (TREE_VEC_ELT (tempargs, i))
8169 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
8170 }
8171 if (good)
8172 return 0;
8173
8174 return 1;
8175 }
8176
8177 /* Subroutine of resolve_overloaded_unification; does deduction for a single
8178 overload. Fills TARGS with any deduced arguments, or error_mark_node if
8179 different overloads deduce different arguments for a given parm.
8180 Returns 1 on success. */
8181
8182 static int
8183 try_one_overload (tparms, orig_targs, targs, parm, arg, strict,
8184 sub_strict)
8185 tree tparms, orig_targs, targs, parm, arg;
8186 unification_kind_t strict;
8187 int sub_strict;
8188 {
8189 int nargs;
8190 tree tempargs;
8191 int i;
8192
8193 /* [temp.deduct.type] A template-argument can be deduced from a pointer
8194 to function or pointer to member function argument if the set of
8195 overloaded functions does not contain function templates and at most
8196 one of a set of overloaded functions provides a unique match.
8197
8198 So if this is a template, just return success. */
8199
8200 if (uses_template_parms (arg))
8201 return 1;
8202
8203 sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
8204
8205 /* We don't copy orig_targs for this because if we have already deduced
8206 some template args from previous args, unify would complain when we
8207 try to deduce a template parameter for the same argument, even though
8208 there isn't really a conflict. */
8209 nargs = TREE_VEC_LENGTH (targs);
8210 tempargs = make_tree_vec (nargs);
8211
8212 if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
8213 return 0;
8214
8215 /* First make sure we didn't deduce anything that conflicts with
8216 explicitly specified args. */
8217 for (i = nargs; i--; )
8218 {
8219 tree elt = TREE_VEC_ELT (tempargs, i);
8220 tree oldelt = TREE_VEC_ELT (orig_targs, i);
8221
8222 if (elt == NULL_TREE)
8223 continue;
8224 else if (uses_template_parms (elt))
8225 {
8226 /* Since we're unifying against ourselves, we will fill in template
8227 args used in the function parm list with our own template parms.
8228 Discard them. */
8229 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
8230 continue;
8231 }
8232 else if (oldelt && ! template_args_equal (oldelt, elt))
8233 return 0;
8234 }
8235
8236 for (i = nargs; i--; )
8237 {
8238 tree elt = TREE_VEC_ELT (tempargs, i);
8239
8240 if (elt)
8241 TREE_VEC_ELT (targs, i) = elt;
8242 }
8243
8244 return 1;
8245 }
8246
8247 /* Verify that nondeduce template argument agrees with the type
8248 obtained from argument deduction. Return nonzero if the
8249 verification fails.
8250
8251 For example:
8252
8253 struct A { typedef int X; };
8254 template <class T, class U> struct C {};
8255 template <class T> struct C<T, typename T::X> {};
8256
8257 Then with the instantiation `C<A, int>', we can deduce that
8258 `T' is `A' but unify () does not check whether `typename T::X'
8259 is `int'. This function ensure that they agree.
8260
8261 TARGS, PARMS are the same as the arguments of unify.
8262 ARGS contains template arguments from all levels. */
8263
8264 static int
8265 verify_class_unification (targs, parms, args)
8266 tree targs, parms, args;
8267 {
8268 int i;
8269 int nparms = TREE_VEC_LENGTH (parms);
8270 tree new_parms = tsubst (parms, add_outermost_template_args (args, targs),
8271 /*complain=*/0, NULL_TREE);
8272 if (new_parms == error_mark_node)
8273 return 1;
8274
8275 args = INNERMOST_TEMPLATE_ARGS (args);
8276
8277 for (i = 0; i < nparms; i++)
8278 {
8279 tree parm = TREE_VEC_ELT (new_parms, i);
8280 tree arg = TREE_VEC_ELT (args, i);
8281
8282 /* In case we are deducing from a function argument of a function
8283 templates, some parameters may not be deduced yet. So we
8284 make sure that only fully substituted elements of PARM are
8285 compared below. */
8286
8287 if (!uses_template_parms (parm) && !template_args_equal (parm, arg))
8288 return 1;
8289 }
8290 return 0;
8291 }
8292
8293 /* PARM is a template class (perhaps with unbound template
8294 parameters). ARG is a fully instantiated type. If ARG can be
8295 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
8296 TARGS are as for unify. */
8297
8298 static tree
8299 try_class_unification (tparms, targs, parm, arg)
8300 tree tparms;
8301 tree targs;
8302 tree parm;
8303 tree arg;
8304 {
8305 tree copy_of_targs;
8306
8307 if (!CLASSTYPE_TEMPLATE_INFO (arg)
8308 || CLASSTYPE_TI_TEMPLATE (arg) != CLASSTYPE_TI_TEMPLATE (parm))
8309 return NULL_TREE;
8310
8311 /* We need to make a new template argument vector for the call to
8312 unify. If we used TARGS, we'd clutter it up with the result of
8313 the attempted unification, even if this class didn't work out.
8314 We also don't want to commit ourselves to all the unifications
8315 we've already done, since unification is supposed to be done on
8316 an argument-by-argument basis. In other words, consider the
8317 following pathological case:
8318
8319 template <int I, int J, int K>
8320 struct S {};
8321
8322 template <int I, int J>
8323 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
8324
8325 template <int I, int J, int K>
8326 void f(S<I, J, K>, S<I, I, I>);
8327
8328 void g() {
8329 S<0, 0, 0> s0;
8330 S<0, 1, 2> s2;
8331
8332 f(s0, s2);
8333 }
8334
8335 Now, by the time we consider the unification involving `s2', we
8336 already know that we must have `f<0, 0, 0>'. But, even though
8337 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is not legal
8338 because there are two ways to unify base classes of S<0, 1, 2>
8339 with S<I, I, I>. If we kept the already deduced knowledge, we
8340 would reject the possibility I=1. */
8341 copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
8342
8343 /* If unification failed, we're done. */
8344 if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
8345 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
8346 return NULL_TREE;
8347
8348 return arg;
8349 }
8350
8351 /* Subroutine of get_template_base. RVAL, if non-NULL, is a base we
8352 have already discovered to be satisfactory. ARG_BINFO is the binfo
8353 for the base class of ARG that we are currently examining. */
8354
8355 static tree
8356 get_template_base_recursive (tparms, targs, parm,
8357 arg_binfo, rval, flags)
8358 tree tparms;
8359 tree targs;
8360 tree arg_binfo;
8361 tree rval;
8362 tree parm;
8363 int flags;
8364 {
8365 tree binfos;
8366 int i, n_baselinks;
8367 tree arg = BINFO_TYPE (arg_binfo);
8368
8369 if (!(flags & GTB_IGNORE_TYPE))
8370 {
8371 tree r = try_class_unification (tparms, targs,
8372 parm, arg);
8373
8374 /* If there is more than one satisfactory baseclass, then:
8375
8376 [temp.deduct.call]
8377
8378 If they yield more than one possible deduced A, the type
8379 deduction fails.
8380
8381 applies. */
8382 if (r && rval && !same_type_p (r, rval))
8383 return error_mark_node;
8384 else if (r)
8385 rval = r;
8386 }
8387
8388 binfos = BINFO_BASETYPES (arg_binfo);
8389 n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
8390
8391 /* Process base types. */
8392 for (i = 0; i < n_baselinks; i++)
8393 {
8394 tree base_binfo = TREE_VEC_ELT (binfos, i);
8395 int this_virtual;
8396
8397 /* Skip this base, if we've already seen it. */
8398 if (BINFO_MARKED (base_binfo))
8399 continue;
8400
8401 this_virtual =
8402 (flags & GTB_VIA_VIRTUAL) || TREE_VIA_VIRTUAL (base_binfo);
8403
8404 /* When searching for a non-virtual, we cannot mark virtually
8405 found binfos. */
8406 if (! this_virtual)
8407 SET_BINFO_MARKED (base_binfo);
8408
8409 rval = get_template_base_recursive (tparms, targs,
8410 parm,
8411 base_binfo,
8412 rval,
8413 GTB_VIA_VIRTUAL * this_virtual);
8414
8415 /* If we discovered more than one matching base class, we can
8416 stop now. */
8417 if (rval == error_mark_node)
8418 return error_mark_node;
8419 }
8420
8421 return rval;
8422 }
8423
8424 /* Given a template type PARM and a class type ARG, find the unique
8425 base type in ARG that is an instance of PARM. We do not examine
8426 ARG itself; only its base-classes. If there is no appropriate base
8427 class, return NULL_TREE. If there is more than one, return
8428 error_mark_node. PARM may be the type of a partial specialization,
8429 as well as a plain template type. Used by unify. */
8430
8431 static tree
8432 get_template_base (tparms, targs, parm, arg)
8433 tree tparms;
8434 tree targs;
8435 tree parm;
8436 tree arg;
8437 {
8438 tree rval;
8439 tree arg_binfo;
8440
8441 my_friendly_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)), 92);
8442
8443 arg_binfo = TYPE_BINFO (complete_type (arg));
8444 rval = get_template_base_recursive (tparms, targs,
8445 parm, arg_binfo,
8446 NULL_TREE,
8447 GTB_IGNORE_TYPE);
8448
8449 /* Since get_template_base_recursive marks the bases classes, we
8450 must unmark them here. */
8451 dfs_walk (arg_binfo, dfs_unmark, markedp, 0);
8452
8453 return rval;
8454 }
8455
8456 /* Returns the level of DECL, which declares a template parameter. */
8457
8458 static int
8459 template_decl_level (decl)
8460 tree decl;
8461 {
8462 switch (TREE_CODE (decl))
8463 {
8464 case TYPE_DECL:
8465 case TEMPLATE_DECL:
8466 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
8467
8468 case PARM_DECL:
8469 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
8470
8471 default:
8472 my_friendly_abort (0);
8473 return 0;
8474 }
8475 }
8476
8477 /* Decide whether ARG can be unified with PARM, considering only the
8478 cv-qualifiers of each type, given STRICT as documented for unify.
8479 Returns non-zero iff the unification is OK on that basis.*/
8480
8481 static int
8482 check_cv_quals_for_unify (strict, arg, parm)
8483 int strict;
8484 tree arg;
8485 tree parm;
8486 {
8487 if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
8488 && !at_least_as_qualified_p (arg, parm))
8489 return 0;
8490
8491 if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
8492 && !at_least_as_qualified_p (parm, arg))
8493 return 0;
8494
8495 return 1;
8496 }
8497
8498 /* Takes parameters as for type_unification. Returns 0 if the
8499 type deduction succeeds, 1 otherwise. The parameter STRICT is a
8500 bitwise or of the following flags:
8501
8502 UNIFY_ALLOW_NONE:
8503 Require an exact match between PARM and ARG.
8504 UNIFY_ALLOW_MORE_CV_QUAL:
8505 Allow the deduced ARG to be more cv-qualified (by qualification
8506 conversion) than ARG.
8507 UNIFY_ALLOW_LESS_CV_QUAL:
8508 Allow the deduced ARG to be less cv-qualified than ARG.
8509 UNIFY_ALLOW_DERIVED:
8510 Allow the deduced ARG to be a template base class of ARG,
8511 or a pointer to a template base class of the type pointed to by
8512 ARG.
8513 UNIFY_ALLOW_INTEGER:
8514 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
8515 case for more information.
8516 UNIFY_ALLOW_OUTER_LEVEL:
8517 This is the outermost level of a deduction. Used to determine validity
8518 of qualification conversions. A valid qualification conversion must
8519 have const qualified pointers leading up to the inner type which
8520 requires additional CV quals, except at the outer level, where const
8521 is not required [conv.qual]. It would be normal to set this flag in
8522 addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
8523 UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
8524 This is the outermost level of a deduction, and PARM can be more CV
8525 qualified at this point.
8526 UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
8527 This is the outermost level of a deduction, and PARM can be less CV
8528 qualified at this point. */
8529
8530 static int
8531 unify (tparms, targs, parm, arg, strict)
8532 tree tparms, targs, parm, arg;
8533 int strict;
8534 {
8535 int idx;
8536 tree targ;
8537 tree tparm;
8538 int strict_in = strict;
8539
8540 /* I don't think this will do the right thing with respect to types.
8541 But the only case I've seen it in so far has been array bounds, where
8542 signedness is the only information lost, and I think that will be
8543 okay. */
8544 while (TREE_CODE (parm) == NOP_EXPR)
8545 parm = TREE_OPERAND (parm, 0);
8546
8547 if (arg == error_mark_node)
8548 return 1;
8549 if (arg == unknown_type_node)
8550 /* We can't deduce anything from this, but we might get all the
8551 template args from other function args. */
8552 return 0;
8553
8554 /* If PARM uses template parameters, then we can't bail out here,
8555 even if ARG == PARM, since we won't record unifications for the
8556 template parameters. We might need them if we're trying to
8557 figure out which of two things is more specialized. */
8558 if (arg == parm && !uses_template_parms (parm))
8559 return 0;
8560
8561 /* Immediately reject some pairs that won't unify because of
8562 cv-qualification mismatches. */
8563 if (TREE_CODE (arg) == TREE_CODE (parm)
8564 && TYPE_P (arg)
8565 /* We check the cv-qualifiers when unifying with template type
8566 parameters below. We want to allow ARG `const T' to unify with
8567 PARM `T' for example, when computing which of two templates
8568 is more specialized, for example. */
8569 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
8570 && !check_cv_quals_for_unify (strict_in, arg, parm))
8571 return 1;
8572
8573 if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
8574 && TYPE_P (arg) && !CP_TYPE_CONST_P (arg))
8575 strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
8576 strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
8577 strict &= ~UNIFY_ALLOW_DERIVED;
8578 strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
8579 strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
8580
8581 switch (TREE_CODE (parm))
8582 {
8583 case TYPENAME_TYPE:
8584 /* In a type which contains a nested-name-specifier, template
8585 argument values cannot be deduced for template parameters used
8586 within the nested-name-specifier. */
8587 return 0;
8588
8589 case TEMPLATE_TYPE_PARM:
8590 case TEMPLATE_TEMPLATE_PARM:
8591 case BOUND_TEMPLATE_TEMPLATE_PARM:
8592 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
8593
8594 if (TEMPLATE_TYPE_LEVEL (parm)
8595 != template_decl_level (tparm))
8596 /* The PARM is not one we're trying to unify. Just check
8597 to see if it matches ARG. */
8598 return (TREE_CODE (arg) == TREE_CODE (parm)
8599 && same_type_p (parm, arg)) ? 0 : 1;
8600 idx = TEMPLATE_TYPE_IDX (parm);
8601 targ = TREE_VEC_ELT (targs, idx);
8602 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
8603
8604 /* Check for mixed types and values. */
8605 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
8606 && TREE_CODE (tparm) != TYPE_DECL)
8607 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
8608 && TREE_CODE (tparm) != TEMPLATE_DECL))
8609 return 1;
8610
8611 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
8612 {
8613 /* ARG must be constructed from a template class or a template
8614 template parameter. */
8615 if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
8616 && (TREE_CODE (arg) != RECORD_TYPE || !CLASSTYPE_TEMPLATE_INFO (arg)))
8617 return 1;
8618
8619 {
8620 tree parmtmpl = TYPE_TI_TEMPLATE (parm);
8621 tree parmvec = TYPE_TI_ARGS (parm);
8622 tree argvec = TYPE_TI_ARGS (arg);
8623 tree argtmplvec
8624 = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
8625 int i;
8626
8627 /* The parameter and argument roles have to be switched here
8628 in order to handle default arguments properly. For example,
8629 template<template <class> class TT> void f(TT<int>)
8630 should be able to accept vector<int> which comes from
8631 template <class T, class Allocator = allocator>
8632 class vector. */
8633
8634 if (coerce_template_parms (argtmplvec, parmvec, parmtmpl, 0, 1)
8635 == error_mark_node)
8636 return 1;
8637
8638 /* Deduce arguments T, i from TT<T> or TT<i>.
8639 We check each element of PARMVEC and ARGVEC individually
8640 rather than the whole TREE_VEC since they can have
8641 different number of elements. */
8642
8643 for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
8644 {
8645 tree t = TREE_VEC_ELT (parmvec, i);
8646
8647 if (unify (tparms, targs, t,
8648 TREE_VEC_ELT (argvec, i),
8649 UNIFY_ALLOW_NONE))
8650 return 1;
8651 }
8652 }
8653 arg = TYPE_TI_TEMPLATE (arg);
8654
8655 /* Fall through to deduce template name. */
8656 }
8657
8658 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
8659 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
8660 {
8661 /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>. */
8662
8663 /* Simple cases: Value already set, does match or doesn't. */
8664 if (targ != NULL_TREE && template_args_equal (targ, arg))
8665 return 0;
8666 else if (targ)
8667 return 1;
8668 }
8669 else
8670 {
8671 /* If PARM is `const T' and ARG is only `int', we don't have
8672 a match unless we are allowing additional qualification.
8673 If ARG is `const int' and PARM is just `T' that's OK;
8674 that binds `const int' to `T'. */
8675 if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
8676 arg, parm))
8677 return 1;
8678
8679 /* Consider the case where ARG is `const volatile int' and
8680 PARM is `const T'. Then, T should be `volatile int'. */
8681 arg =
8682 cp_build_qualified_type_real (arg,
8683 CP_TYPE_QUALS (arg)
8684 & ~CP_TYPE_QUALS (parm),
8685 /*complain=*/0);
8686 if (arg == error_mark_node)
8687 return 1;
8688
8689 /* Simple cases: Value already set, does match or doesn't. */
8690 if (targ != NULL_TREE && same_type_p (targ, arg))
8691 return 0;
8692 else if (targ)
8693 return 1;
8694 }
8695
8696 /* Make sure that ARG is not a variable-sized array. (Note that
8697 were talking about variable-sized arrays (like `int[n]'),
8698 rather than arrays of unknown size (like `int[]').) We'll
8699 get very confused by such a type since the bound of the array
8700 will not be computable in an instantiation. Besides, such
8701 types are not allowed in ISO C++, so we can do as we please
8702 here. */
8703 if (TREE_CODE (arg) == ARRAY_TYPE
8704 && !uses_template_parms (arg)
8705 && TYPE_DOMAIN (arg)
8706 && (TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (arg)))
8707 != INTEGER_CST))
8708 return 1;
8709
8710 TREE_VEC_ELT (targs, idx) = arg;
8711 return 0;
8712
8713 case TEMPLATE_PARM_INDEX:
8714 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
8715
8716 if (TEMPLATE_PARM_LEVEL (parm)
8717 != template_decl_level (tparm))
8718 /* The PARM is not one we're trying to unify. Just check
8719 to see if it matches ARG. */
8720 return (TREE_CODE (arg) == TREE_CODE (parm)
8721 && cp_tree_equal (parm, arg) > 0) ? 0 : 1;
8722
8723 idx = TEMPLATE_PARM_IDX (parm);
8724 targ = TREE_VEC_ELT (targs, idx);
8725
8726 if (targ)
8727 {
8728 int i = (cp_tree_equal (targ, arg) > 0);
8729 if (i == 1)
8730 return 0;
8731 else if (i == 0)
8732 return 1;
8733 else
8734 my_friendly_abort (42);
8735 }
8736
8737 /* [temp.deduct.type] If, in the declaration of a function template
8738 with a non-type template-parameter, the non-type
8739 template-parameter is used in an expression in the function
8740 parameter-list and, if the corresponding template-argument is
8741 deduced, the template-argument type shall match the type of the
8742 template-parameter exactly, except that a template-argument
8743 deduced from an array bound may be of any integral type.
8744 The non-type parameter might use already deduced type parameters. */
8745 if (same_type_p (TREE_TYPE (arg),
8746 tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE)))
8747 /* OK */;
8748 else if ((strict & UNIFY_ALLOW_INTEGER)
8749 && (TREE_CODE (TREE_TYPE (parm)) == INTEGER_TYPE
8750 || TREE_CODE (TREE_TYPE (parm)) == BOOLEAN_TYPE))
8751 /* OK */;
8752 else
8753 return 1;
8754
8755 TREE_VEC_ELT (targs, idx) = arg;
8756 return 0;
8757
8758 case POINTER_TYPE:
8759 {
8760 if (TREE_CODE (arg) != POINTER_TYPE)
8761 return 1;
8762
8763 /* [temp.deduct.call]
8764
8765 A can be another pointer or pointer to member type that can
8766 be converted to the deduced A via a qualification
8767 conversion (_conv.qual_).
8768
8769 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
8770 This will allow for additional cv-qualification of the
8771 pointed-to types if appropriate. */
8772
8773 if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
8774 /* The derived-to-base conversion only persists through one
8775 level of pointers. */
8776 strict |= (strict_in & UNIFY_ALLOW_DERIVED);
8777
8778 return unify (tparms, targs, TREE_TYPE (parm),
8779 TREE_TYPE (arg), strict);
8780 }
8781
8782 case REFERENCE_TYPE:
8783 if (TREE_CODE (arg) != REFERENCE_TYPE)
8784 return 1;
8785 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
8786 strict & UNIFY_ALLOW_MORE_CV_QUAL);
8787
8788 case ARRAY_TYPE:
8789 if (TREE_CODE (arg) != ARRAY_TYPE)
8790 return 1;
8791 if ((TYPE_DOMAIN (parm) == NULL_TREE)
8792 != (TYPE_DOMAIN (arg) == NULL_TREE))
8793 return 1;
8794 if (TYPE_DOMAIN (parm) != NULL_TREE
8795 && unify (tparms, targs, TYPE_DOMAIN (parm),
8796 TYPE_DOMAIN (arg), UNIFY_ALLOW_NONE) != 0)
8797 return 1;
8798 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
8799 UNIFY_ALLOW_NONE);
8800
8801 case REAL_TYPE:
8802 case COMPLEX_TYPE:
8803 case VECTOR_TYPE:
8804 case INTEGER_TYPE:
8805 case BOOLEAN_TYPE:
8806 case VOID_TYPE:
8807 if (TREE_CODE (arg) != TREE_CODE (parm))
8808 return 1;
8809
8810 if (TREE_CODE (parm) == INTEGER_TYPE
8811 && TREE_CODE (TYPE_MAX_VALUE (parm)) != INTEGER_CST)
8812 {
8813 if (TYPE_MIN_VALUE (parm) && TYPE_MIN_VALUE (arg)
8814 && unify (tparms, targs, TYPE_MIN_VALUE (parm),
8815 TYPE_MIN_VALUE (arg), UNIFY_ALLOW_INTEGER))
8816 return 1;
8817 if (TYPE_MAX_VALUE (parm) && TYPE_MAX_VALUE (arg)
8818 && unify (tparms, targs, TYPE_MAX_VALUE (parm),
8819 TYPE_MAX_VALUE (arg), UNIFY_ALLOW_INTEGER))
8820 return 1;
8821 }
8822 /* We have already checked cv-qualification at the top of the
8823 function. */
8824 else if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
8825 return 1;
8826
8827 /* As far as unification is concerned, this wins. Later checks
8828 will invalidate it if necessary. */
8829 return 0;
8830
8831 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
8832 /* Type INTEGER_CST can come from ordinary constant template args. */
8833 case INTEGER_CST:
8834 while (TREE_CODE (arg) == NOP_EXPR)
8835 arg = TREE_OPERAND (arg, 0);
8836
8837 if (TREE_CODE (arg) != INTEGER_CST)
8838 return 1;
8839 return !tree_int_cst_equal (parm, arg);
8840
8841 case TREE_VEC:
8842 {
8843 int i;
8844 if (TREE_CODE (arg) != TREE_VEC)
8845 return 1;
8846 if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
8847 return 1;
8848 for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
8849 if (unify (tparms, targs,
8850 TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
8851 UNIFY_ALLOW_NONE))
8852 return 1;
8853 return 0;
8854 }
8855
8856 case RECORD_TYPE:
8857 case UNION_TYPE:
8858 if (TREE_CODE (arg) != TREE_CODE (parm))
8859 return 1;
8860
8861 if (TYPE_PTRMEMFUNC_P (parm))
8862 {
8863 if (!TYPE_PTRMEMFUNC_P (arg))
8864 return 1;
8865
8866 return unify (tparms, targs,
8867 TYPE_PTRMEMFUNC_FN_TYPE (parm),
8868 TYPE_PTRMEMFUNC_FN_TYPE (arg),
8869 strict);
8870 }
8871
8872 if (CLASSTYPE_TEMPLATE_INFO (parm))
8873 {
8874 tree t = NULL_TREE;
8875
8876 if (strict_in & UNIFY_ALLOW_DERIVED)
8877 {
8878 /* First, we try to unify the PARM and ARG directly. */
8879 t = try_class_unification (tparms, targs,
8880 parm, arg);
8881
8882 if (!t)
8883 {
8884 /* Fallback to the special case allowed in
8885 [temp.deduct.call]:
8886
8887 If P is a class, and P has the form
8888 template-id, then A can be a derived class of
8889 the deduced A. Likewise, if P is a pointer to
8890 a class of the form template-id, A can be a
8891 pointer to a derived class pointed to by the
8892 deduced A. */
8893 t = get_template_base (tparms, targs,
8894 parm, arg);
8895
8896 if (! t || t == error_mark_node)
8897 return 1;
8898 }
8899 }
8900 else if (CLASSTYPE_TEMPLATE_INFO (arg)
8901 && (CLASSTYPE_TI_TEMPLATE (parm)
8902 == CLASSTYPE_TI_TEMPLATE (arg)))
8903 /* Perhaps PARM is something like S<U> and ARG is S<int>.
8904 Then, we should unify `int' and `U'. */
8905 t = arg;
8906 else
8907 /* There's no chance of unification succeeding. */
8908 return 1;
8909
8910 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
8911 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
8912 }
8913 else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
8914 return 1;
8915 return 0;
8916
8917 case METHOD_TYPE:
8918 case FUNCTION_TYPE:
8919 if (TREE_CODE (arg) != TREE_CODE (parm))
8920 return 1;
8921
8922 if (unify (tparms, targs, TREE_TYPE (parm),
8923 TREE_TYPE (arg), UNIFY_ALLOW_NONE))
8924 return 1;
8925 return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
8926 TYPE_ARG_TYPES (arg), 1,
8927 DEDUCE_EXACT, 0, -1);
8928
8929 case OFFSET_TYPE:
8930 if (TREE_CODE (arg) != OFFSET_TYPE)
8931 return 1;
8932 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
8933 TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
8934 return 1;
8935 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
8936 strict);
8937
8938 case CONST_DECL:
8939 if (arg != decl_constant_value (parm))
8940 return 1;
8941 return 0;
8942
8943 case TEMPLATE_DECL:
8944 /* Matched cases are handled by the ARG == PARM test above. */
8945 return 1;
8946
8947 case MINUS_EXPR:
8948 if (TREE_CODE (TREE_OPERAND (parm, 1)) == INTEGER_CST)
8949 {
8950 /* We handle this case specially, since it comes up with
8951 arrays. In particular, something like:
8952
8953 template <int N> void f(int (&x)[N]);
8954
8955 Here, we are trying to unify the range type, which
8956 looks like [0 ... (N - 1)]. */
8957 tree t, t1, t2;
8958 t1 = TREE_OPERAND (parm, 0);
8959 t2 = TREE_OPERAND (parm, 1);
8960
8961 t = fold (build (PLUS_EXPR, integer_type_node, arg, t2));
8962
8963 return unify (tparms, targs, t1, t, strict);
8964 }
8965 /* else fall through */
8966
8967 default:
8968 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (parm))))
8969 {
8970
8971 /* We're looking at an expression. This can happen with
8972 something like:
8973
8974 template <int I>
8975 void foo(S<I>, S<I + 2>);
8976
8977 This is a "nondeduced context":
8978
8979 [deduct.type]
8980
8981 The nondeduced contexts are:
8982
8983 --A type that is a template-id in which one or more of
8984 the template-arguments is an expression that references
8985 a template-parameter.
8986
8987 In these cases, we assume deduction succeeded, but don't
8988 actually infer any unifications. */
8989
8990 if (!uses_template_parms (parm)
8991 && !template_args_equal (parm, arg))
8992 return 1;
8993 else
8994 return 0;
8995 }
8996 else
8997 sorry ("use of `%s' in template type unification",
8998 tree_code_name [(int) TREE_CODE (parm)]);
8999
9000 return 1;
9001 }
9002 }
9003 \f
9004 /* Called if RESULT is explicitly instantiated, or is a member of an
9005 explicitly instantiated class, or if using -frepo and the
9006 instantiation of RESULT has been assigned to this file. */
9007
9008 void
9009 mark_decl_instantiated (result, extern_p)
9010 tree result;
9011 int extern_p;
9012 {
9013 if (TREE_CODE (result) != FUNCTION_DECL)
9014 /* The TREE_PUBLIC flag for function declarations will have been
9015 set correctly by tsubst. */
9016 TREE_PUBLIC (result) = 1;
9017
9018 /* We used to set this unconditionally; we moved that to
9019 do_decl_instantiation so it wouldn't get set on members of
9020 explicit class template instantiations. But we still need to set
9021 it here for the 'extern template' case in order to suppress
9022 implicit instantiations. */
9023 if (extern_p)
9024 SET_DECL_EXPLICIT_INSTANTIATION (result);
9025
9026 if (! extern_p)
9027 {
9028 DECL_INTERFACE_KNOWN (result) = 1;
9029 DECL_NOT_REALLY_EXTERN (result) = 1;
9030
9031 /* Always make artificials weak. */
9032 if (DECL_ARTIFICIAL (result) && flag_weak)
9033 comdat_linkage (result);
9034 /* For WIN32 we also want to put explicit instantiations in
9035 linkonce sections. */
9036 else if (TREE_PUBLIC (result))
9037 maybe_make_one_only (result);
9038 }
9039 else if (TREE_CODE (result) == FUNCTION_DECL)
9040 defer_fn (result);
9041 }
9042
9043 /* Given two function templates PAT1 and PAT2, return:
9044
9045 DEDUCE should be DEDUCE_EXACT or DEDUCE_ORDER.
9046
9047 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
9048 -1 if PAT2 is more specialized than PAT1.
9049 0 if neither is more specialized.
9050
9051 LEN is passed through to fn_type_unification. */
9052
9053 int
9054 more_specialized (pat1, pat2, deduce, len)
9055 tree pat1, pat2;
9056 int deduce;
9057 int len;
9058 {
9059 tree targs;
9060 int winner = 0;
9061
9062 targs = get_bindings_real (pat1, DECL_TEMPLATE_RESULT (pat2),
9063 NULL_TREE, 0, deduce, len);
9064 if (targs)
9065 --winner;
9066
9067 targs = get_bindings_real (pat2, DECL_TEMPLATE_RESULT (pat1),
9068 NULL_TREE, 0, deduce, len);
9069 if (targs)
9070 ++winner;
9071
9072 return winner;
9073 }
9074
9075 /* Given two class template specialization list nodes PAT1 and PAT2, return:
9076
9077 1 if PAT1 is more specialized than PAT2 as described in [temp.class.order].
9078 -1 if PAT2 is more specialized than PAT1.
9079 0 if neither is more specialized. */
9080
9081 int
9082 more_specialized_class (pat1, pat2)
9083 tree pat1, pat2;
9084 {
9085 tree targs;
9086 int winner = 0;
9087
9088 targs = get_class_bindings (TREE_VALUE (pat1), TREE_PURPOSE (pat1),
9089 TREE_PURPOSE (pat2));
9090 if (targs)
9091 --winner;
9092
9093 targs = get_class_bindings (TREE_VALUE (pat2), TREE_PURPOSE (pat2),
9094 TREE_PURPOSE (pat1));
9095 if (targs)
9096 ++winner;
9097
9098 return winner;
9099 }
9100
9101 /* Return the template arguments that will produce the function signature
9102 DECL from the function template FN, with the explicit template
9103 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is 1, the return type must
9104 also match. Return NULL_TREE if no satisfactory arguments could be
9105 found. DEDUCE and LEN are passed through to fn_type_unification. */
9106
9107 static tree
9108 get_bindings_real (fn, decl, explicit_args, check_rettype, deduce, len)
9109 tree fn, decl, explicit_args;
9110 int check_rettype, deduce, len;
9111 {
9112 int ntparms = DECL_NTPARMS (fn);
9113 tree targs = make_tree_vec (ntparms);
9114 tree decl_type;
9115 tree decl_arg_types;
9116 int i;
9117
9118 /* Substitute the explicit template arguments into the type of DECL.
9119 The call to fn_type_unification will handle substitution into the
9120 FN. */
9121 decl_type = TREE_TYPE (decl);
9122 if (explicit_args && uses_template_parms (decl_type))
9123 {
9124 tree tmpl;
9125 tree converted_args;
9126
9127 if (DECL_TEMPLATE_INFO (decl))
9128 tmpl = DECL_TI_TEMPLATE (decl);
9129 else
9130 /* We can get here for some illegal specializations. */
9131 return NULL_TREE;
9132
9133 converted_args
9134 = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
9135 explicit_args, NULL_TREE,
9136 /*complain=*/0,
9137 /*require_all_arguments=*/0));
9138 if (converted_args == error_mark_node)
9139 return NULL_TREE;
9140
9141 decl_type = tsubst (decl_type, converted_args, /*complain=*/0,
9142 NULL_TREE);
9143 if (decl_type == error_mark_node)
9144 return NULL_TREE;
9145 }
9146
9147 decl_arg_types = TYPE_ARG_TYPES (decl_type);
9148 /* Never do unification on the 'this' parameter. */
9149 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
9150 decl_arg_types = TREE_CHAIN (decl_arg_types);
9151
9152 i = fn_type_unification (fn, explicit_args, targs,
9153 decl_arg_types,
9154 (check_rettype || DECL_CONV_FN_P (fn)
9155 ? TREE_TYPE (decl_type) : NULL_TREE),
9156 deduce, len);
9157
9158 if (i != 0)
9159 return NULL_TREE;
9160
9161 return targs;
9162 }
9163
9164 /* For most uses, we want to check the return type. */
9165
9166 tree
9167 get_bindings (fn, decl, explicit_args)
9168 tree fn, decl, explicit_args;
9169 {
9170 return get_bindings_real (fn, decl, explicit_args, 1, DEDUCE_EXACT, -1);
9171 }
9172
9173 /* But for resolve_overloaded_unification, we only care about the parameter
9174 types. */
9175
9176 static tree
9177 get_bindings_overload (fn, decl, explicit_args)
9178 tree fn, decl, explicit_args;
9179 {
9180 return get_bindings_real (fn, decl, explicit_args, 0, DEDUCE_EXACT, -1);
9181 }
9182
9183 /* Return the innermost template arguments that, when applied to a
9184 template specialization whose innermost template parameters are
9185 TPARMS, and whose specialization arguments are ARGS, yield the
9186 ARGS.
9187
9188 For example, suppose we have:
9189
9190 template <class T, class U> struct S {};
9191 template <class T> struct S<T*, int> {};
9192
9193 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
9194 {T}, the PARMS will be {T*, int} and the ARGS will be {double*,
9195 int}. The resulting vector will be {double}, indicating that `T'
9196 is bound to `double'. */
9197
9198 static tree
9199 get_class_bindings (tparms, parms, args)
9200 tree tparms, parms, args;
9201 {
9202 int i, ntparms = TREE_VEC_LENGTH (tparms);
9203 tree vec = make_tree_vec (ntparms);
9204
9205 if (unify (tparms, vec, parms, INNERMOST_TEMPLATE_ARGS (args),
9206 UNIFY_ALLOW_NONE))
9207 return NULL_TREE;
9208
9209 for (i = 0; i < ntparms; ++i)
9210 if (! TREE_VEC_ELT (vec, i))
9211 return NULL_TREE;
9212
9213 if (verify_class_unification (vec, parms, args))
9214 return NULL_TREE;
9215
9216 return vec;
9217 }
9218
9219 /* In INSTANTIATIONS is a list of <INSTANTIATION, TEMPLATE> pairs.
9220 Pick the most specialized template, and return the corresponding
9221 instantiation, or if there is no corresponding instantiation, the
9222 template itself. If there is no most specialized template,
9223 error_mark_node is returned. If there are no templates at all,
9224 NULL_TREE is returned. */
9225
9226 tree
9227 most_specialized_instantiation (instantiations)
9228 tree instantiations;
9229 {
9230 tree fn, champ;
9231 int fate;
9232
9233 if (!instantiations)
9234 return NULL_TREE;
9235
9236 champ = instantiations;
9237 for (fn = TREE_CHAIN (instantiations); fn; fn = TREE_CHAIN (fn))
9238 {
9239 fate = more_specialized (TREE_VALUE (champ), TREE_VALUE (fn),
9240 DEDUCE_EXACT, -1);
9241 if (fate == 1)
9242 ;
9243 else
9244 {
9245 if (fate == 0)
9246 {
9247 fn = TREE_CHAIN (fn);
9248 if (! fn)
9249 return error_mark_node;
9250 }
9251 champ = fn;
9252 }
9253 }
9254
9255 for (fn = instantiations; fn && fn != champ; fn = TREE_CHAIN (fn))
9256 {
9257 fate = more_specialized (TREE_VALUE (champ), TREE_VALUE (fn),
9258 DEDUCE_EXACT, -1);
9259 if (fate != 1)
9260 return error_mark_node;
9261 }
9262
9263 return TREE_PURPOSE (champ) ? TREE_PURPOSE (champ) : TREE_VALUE (champ);
9264 }
9265
9266 /* Return the most specialized of the list of templates in FNS that can
9267 produce an instantiation matching DECL, given the explicit template
9268 arguments EXPLICIT_ARGS. */
9269
9270 static tree
9271 most_specialized (fns, decl, explicit_args)
9272 tree fns, decl, explicit_args;
9273 {
9274 tree candidates = NULL_TREE;
9275 tree fn, args;
9276
9277 for (fn = fns; fn; fn = TREE_CHAIN (fn))
9278 {
9279 tree candidate = TREE_VALUE (fn);
9280
9281 args = get_bindings (candidate, decl, explicit_args);
9282 if (args)
9283 candidates = tree_cons (NULL_TREE, candidate, candidates);
9284 }
9285
9286 return most_specialized_instantiation (candidates);
9287 }
9288
9289 /* If DECL is a specialization of some template, return the most
9290 general such template. Otherwise, returns NULL_TREE.
9291
9292 For example, given:
9293
9294 template <class T> struct S { template <class U> void f(U); };
9295
9296 if TMPL is `template <class U> void S<int>::f(U)' this will return
9297 the full template. This function will not trace past partial
9298 specializations, however. For example, given in addition:
9299
9300 template <class T> struct S<T*> { template <class U> void f(U); };
9301
9302 if TMPL is `template <class U> void S<int*>::f(U)' this will return
9303 `template <class T> template <class U> S<T*>::f(U)'. */
9304
9305 tree
9306 most_general_template (decl)
9307 tree decl;
9308 {
9309 /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
9310 an immediate specialization. */
9311 if (TREE_CODE (decl) == FUNCTION_DECL)
9312 {
9313 if (DECL_TEMPLATE_INFO (decl)) {
9314 decl = DECL_TI_TEMPLATE (decl);
9315
9316 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
9317 template friend. */
9318 if (TREE_CODE (decl) != TEMPLATE_DECL)
9319 return NULL_TREE;
9320 } else
9321 return NULL_TREE;
9322 }
9323
9324 /* Look for more and more general templates. */
9325 while (DECL_TEMPLATE_INFO (decl))
9326 {
9327 /* The DECL_TI_TEMPLATE can be a LOOKUP_EXPR or IDENTIFIER_NODE
9328 in some cases. (See cp-tree.h for details.) */
9329 if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
9330 break;
9331
9332 /* Stop if we run into an explicitly specialized class template. */
9333 if (!DECL_NAMESPACE_SCOPE_P (decl)
9334 && DECL_CONTEXT (decl)
9335 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
9336 break;
9337
9338 decl = DECL_TI_TEMPLATE (decl);
9339 }
9340
9341 return decl;
9342 }
9343
9344 /* Return the most specialized of the class template specializations
9345 of TMPL which can produce an instantiation matching ARGS, or
9346 error_mark_node if the choice is ambiguous. */
9347
9348 static tree
9349 most_specialized_class (tmpl, args)
9350 tree tmpl;
9351 tree args;
9352 {
9353 tree list = NULL_TREE;
9354 tree t;
9355 tree champ;
9356 int fate;
9357
9358 tmpl = most_general_template (tmpl);
9359 for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
9360 {
9361 tree spec_args
9362 = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args);
9363 if (spec_args)
9364 {
9365 list = tree_cons (TREE_PURPOSE (t), TREE_VALUE (t), list);
9366 TREE_TYPE (list) = TREE_TYPE (t);
9367 }
9368 }
9369
9370 if (! list)
9371 return NULL_TREE;
9372
9373 t = list;
9374 champ = t;
9375 t = TREE_CHAIN (t);
9376 for (; t; t = TREE_CHAIN (t))
9377 {
9378 fate = more_specialized_class (champ, t);
9379 if (fate == 1)
9380 ;
9381 else
9382 {
9383 if (fate == 0)
9384 {
9385 t = TREE_CHAIN (t);
9386 if (! t)
9387 return error_mark_node;
9388 }
9389 champ = t;
9390 }
9391 }
9392
9393 for (t = list; t && t != champ; t = TREE_CHAIN (t))
9394 {
9395 fate = more_specialized_class (champ, t);
9396 if (fate != 1)
9397 return error_mark_node;
9398 }
9399
9400 return champ;
9401 }
9402
9403 /* called from the parser. */
9404
9405 void
9406 do_decl_instantiation (declspecs, declarator, storage)
9407 tree declspecs, declarator, storage;
9408 {
9409 tree decl = grokdeclarator (declarator, declspecs, NORMAL, 0, NULL_TREE);
9410 tree result = NULL_TREE;
9411 int extern_p = 0;
9412
9413 if (!decl)
9414 /* An error occurred, for which grokdeclarator has already issued
9415 an appropriate message. */
9416 return;
9417 else if (! DECL_LANG_SPECIFIC (decl))
9418 {
9419 cp_error ("explicit instantiation of non-template `%#D'", decl);
9420 return;
9421 }
9422 else if (TREE_CODE (decl) == VAR_DECL)
9423 {
9424 /* There is an asymmetry here in the way VAR_DECLs and
9425 FUNCTION_DECLs are handled by grokdeclarator. In the case of
9426 the latter, the DECL we get back will be marked as a
9427 template instantiation, and the appropriate
9428 DECL_TEMPLATE_INFO will be set up. This does not happen for
9429 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
9430 should handle VAR_DECLs as it currently handles
9431 FUNCTION_DECLs. */
9432 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, 0);
9433 if (result && TREE_CODE (result) != VAR_DECL)
9434 {
9435 cp_error ("no matching template for `%D' found", result);
9436 return;
9437 }
9438 }
9439 else if (TREE_CODE (decl) != FUNCTION_DECL)
9440 {
9441 cp_error ("explicit instantiation of `%#D'", decl);
9442 return;
9443 }
9444 else
9445 result = decl;
9446
9447 /* Check for various error cases. Note that if the explicit
9448 instantiation is legal the RESULT will currently be marked as an
9449 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
9450 until we get here. */
9451
9452 if (DECL_TEMPLATE_SPECIALIZATION (result))
9453 {
9454 /* [temp.spec]
9455
9456 No program shall both explicitly instantiate and explicitly
9457 specialize a template. */
9458 cp_pedwarn ("explicit instantiation of `%#D' after", result);
9459 cp_pedwarn_at ("explicit specialization here", result);
9460 return;
9461 }
9462 else if (DECL_EXPLICIT_INSTANTIATION (result))
9463 {
9464 /* [temp.spec]
9465
9466 No program shall explicitly instantiate any template more
9467 than once.
9468
9469 We check DECL_INTERFACE_KNOWN so as not to complain when the first
9470 instantiation was `extern' and the second is not, and EXTERN_P for
9471 the opposite case. If -frepo, chances are we already got marked
9472 as an explicit instantiation because of the repo file. */
9473 if (DECL_INTERFACE_KNOWN (result) && !extern_p && !flag_use_repository)
9474 cp_pedwarn ("duplicate explicit instantiation of `%#D'", result);
9475
9476 /* If we've already instantiated the template, just return now. */
9477 if (DECL_INTERFACE_KNOWN (result))
9478 return;
9479 }
9480 else if (!DECL_IMPLICIT_INSTANTIATION (result))
9481 {
9482 cp_error ("no matching template for `%D' found", result);
9483 return;
9484 }
9485 else if (!DECL_TEMPLATE_INFO (result))
9486 {
9487 cp_pedwarn ("explicit instantiation of non-template `%#D'", result);
9488 return;
9489 }
9490
9491 if (flag_external_templates)
9492 return;
9493
9494 if (storage == NULL_TREE)
9495 ;
9496 else if (storage == ridpointers[(int) RID_EXTERN])
9497 {
9498 if (pedantic)
9499 cp_pedwarn ("ISO C++ forbids the use of `extern' on explicit instantiations");
9500 extern_p = 1;
9501 }
9502 else
9503 cp_error ("storage class `%D' applied to template instantiation",
9504 storage);
9505
9506 SET_DECL_EXPLICIT_INSTANTIATION (result);
9507 mark_decl_instantiated (result, extern_p);
9508 repo_template_instantiated (result, extern_p);
9509 if (! extern_p)
9510 instantiate_decl (result, /*defer_ok=*/1);
9511 }
9512
9513 void
9514 mark_class_instantiated (t, extern_p)
9515 tree t;
9516 int extern_p;
9517 {
9518 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
9519 SET_CLASSTYPE_INTERFACE_KNOWN (t);
9520 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
9521 CLASSTYPE_VTABLE_NEEDS_WRITING (t) = ! extern_p;
9522 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
9523 if (! extern_p)
9524 {
9525 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
9526 rest_of_type_compilation (t, 1);
9527 }
9528 }
9529
9530 /* Perform an explicit instantiation of template class T. STORAGE, if
9531 non-null, is the RID for extern, inline or static. COMPLAIN is
9532 non-zero if this is called from the parser, zero if called recursively,
9533 since the standard is unclear (as detailed below). */
9534
9535 void
9536 do_type_instantiation (t, storage, complain)
9537 tree t, storage;
9538 int complain;
9539 {
9540 int extern_p = 0;
9541 int nomem_p = 0;
9542 int static_p = 0;
9543
9544 if (TREE_CODE (t) == TYPE_DECL)
9545 t = TREE_TYPE (t);
9546
9547 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
9548 {
9549 cp_error ("explicit instantiation of non-template type `%T'", t);
9550 return;
9551 }
9552
9553 complete_type (t);
9554
9555 /* With -fexternal-templates, explicit instantiations are treated the same
9556 as implicit ones. */
9557 if (flag_external_templates)
9558 return;
9559
9560 if (!COMPLETE_TYPE_P (t))
9561 {
9562 if (complain)
9563 cp_error ("explicit instantiation of `%#T' before definition of template",
9564 t);
9565 return;
9566 }
9567
9568 if (storage != NULL_TREE)
9569 {
9570 if (pedantic)
9571 cp_pedwarn("ISO C++ forbids the use of `%s' on explicit instantiations",
9572 IDENTIFIER_POINTER (storage));
9573
9574 if (storage == ridpointers[(int) RID_INLINE])
9575 nomem_p = 1;
9576 else if (storage == ridpointers[(int) RID_EXTERN])
9577 extern_p = 1;
9578 else if (storage == ridpointers[(int) RID_STATIC])
9579 static_p = 1;
9580 else
9581 {
9582 cp_error ("storage class `%D' applied to template instantiation",
9583 storage);
9584 extern_p = 0;
9585 }
9586 }
9587
9588 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
9589 {
9590 /* [temp.spec]
9591
9592 No program shall both explicitly instantiate and explicitly
9593 specialize a template. */
9594 if (complain)
9595 {
9596 cp_error ("explicit instantiation of `%#T' after", t);
9597 cp_error_at ("explicit specialization here", t);
9598 }
9599 return;
9600 }
9601 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
9602 {
9603 /* [temp.spec]
9604
9605 No program shall explicitly instantiate any template more
9606 than once.
9607
9608 If CLASSTYPE_INTERFACE_ONLY, then the first explicit instantiation
9609 was `extern'. If EXTERN_P then the second is. If -frepo, chances
9610 are we already got marked as an explicit instantion because of the
9611 repo file. All these cases are OK. */
9612 if (!CLASSTYPE_INTERFACE_ONLY (t) && !extern_p && !flag_use_repository
9613 && complain)
9614 cp_pedwarn ("duplicate explicit instantiation of `%#T'", t);
9615
9616 /* If we've already instantiated the template, just return now. */
9617 if (!CLASSTYPE_INTERFACE_ONLY (t))
9618 return;
9619 }
9620
9621 mark_class_instantiated (t, extern_p);
9622 repo_template_instantiated (t, extern_p);
9623
9624 if (nomem_p)
9625 return;
9626
9627 {
9628 tree tmp;
9629
9630 /* In contrast to implicit instantiation, where only the
9631 declarations, and not the definitions, of members are
9632 instantiated, we have here:
9633
9634 [temp.explicit]
9635
9636 The explicit instantiation of a class template specialization
9637 implies the instantiation of all of its members not
9638 previously explicitly specialized in the translation unit
9639 containing the explicit instantiation.
9640
9641 Of course, we can't instantiate member template classes, since
9642 we don't have any arguments for them. Note that the standard
9643 is unclear on whether the instantiation of the members are
9644 *explicit* instantiations or not. We choose to be generous,
9645 and not set DECL_EXPLICIT_INSTANTIATION. Therefore, we allow
9646 the explicit instantiation of a class where some of the members
9647 have no definition in the current translation unit. */
9648
9649 if (! static_p)
9650 for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
9651 if (TREE_CODE (tmp) == FUNCTION_DECL
9652 && DECL_TEMPLATE_INSTANTIATION (tmp))
9653 {
9654 mark_decl_instantiated (tmp, extern_p);
9655 repo_template_instantiated (tmp, extern_p);
9656 if (! extern_p)
9657 instantiate_decl (tmp, /*defer_ok=*/1);
9658 }
9659
9660 for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
9661 if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
9662 {
9663 mark_decl_instantiated (tmp, extern_p);
9664 repo_template_instantiated (tmp, extern_p);
9665 if (! extern_p)
9666 instantiate_decl (tmp, /*defer_ok=*/1);
9667 }
9668
9669 for (tmp = CLASSTYPE_TAGS (t); tmp; tmp = TREE_CHAIN (tmp))
9670 if (IS_AGGR_TYPE (TREE_VALUE (tmp))
9671 && !uses_template_parms (CLASSTYPE_TI_ARGS (TREE_VALUE (tmp))))
9672 do_type_instantiation (TYPE_MAIN_DECL (TREE_VALUE (tmp)), storage, 0);
9673 }
9674 }
9675
9676 /* Given a function DECL, which is a specialization of TMPL, modify
9677 DECL to be a re-instantiation of TMPL with the same template
9678 arguments. TMPL should be the template into which tsubst'ing
9679 should occur for DECL, not the most general template.
9680
9681 One reason for doing this is a scenario like this:
9682
9683 template <class T>
9684 void f(const T&, int i);
9685
9686 void g() { f(3, 7); }
9687
9688 template <class T>
9689 void f(const T& t, const int i) { }
9690
9691 Note that when the template is first instantiated, with
9692 instantiate_template, the resulting DECL will have no name for the
9693 first parameter, and the wrong type for the second. So, when we go
9694 to instantiate the DECL, we regenerate it. */
9695
9696 static void
9697 regenerate_decl_from_template (decl, tmpl)
9698 tree decl;
9699 tree tmpl;
9700 {
9701 /* The most general version of TMPL. */
9702 tree gen_tmpl;
9703 /* The arguments used to instantiate DECL, from the most general
9704 template. */
9705 tree args;
9706 tree code_pattern;
9707 tree new_decl;
9708 int unregistered;
9709
9710 args = DECL_TI_ARGS (decl);
9711 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
9712
9713 /* Unregister the specialization so that when we tsubst we will not
9714 just return DECL. We don't have to unregister DECL from TMPL
9715 because if would only be registered there if it were a partial
9716 instantiation of a specialization, which it isn't: it's a full
9717 instantiation. */
9718 gen_tmpl = most_general_template (tmpl);
9719 unregistered = unregister_specialization (decl, gen_tmpl);
9720
9721 /* If the DECL was not unregistered then something peculiar is
9722 happening: we created a specialization but did not call
9723 register_specialization for it. */
9724 my_friendly_assert (unregistered, 0);
9725
9726 if (TREE_CODE (decl) == VAR_DECL)
9727 /* Make sure that we can see identifiers, and compute access
9728 correctly, for the class members used in the declaration of
9729 this static variable. */
9730 pushclass (DECL_CONTEXT (decl), 2);
9731
9732 /* Do the substitution to get the new declaration. */
9733 new_decl = tsubst (code_pattern, args, /*complain=*/1, NULL_TREE);
9734
9735 if (TREE_CODE (decl) == VAR_DECL)
9736 {
9737 /* Set up DECL_INITIAL, since tsubst doesn't. */
9738 DECL_INITIAL (new_decl) =
9739 tsubst_expr (DECL_INITIAL (code_pattern), args,
9740 /*complain=*/1, DECL_TI_TEMPLATE (decl));
9741 /* Pop the class context we pushed above. */
9742 popclass ();
9743 }
9744 else if (TREE_CODE (decl) == FUNCTION_DECL)
9745 {
9746 /* Convince duplicate_decls to use the DECL_ARGUMENTS from the
9747 new decl. */
9748 DECL_INITIAL (new_decl) = error_mark_node;
9749 /* And don't complain about a duplicate definition. */
9750 DECL_INITIAL (decl) = NULL_TREE;
9751 }
9752
9753 /* The immediate parent of the new template is still whatever it was
9754 before, even though tsubst sets DECL_TI_TEMPLATE up as the most
9755 general template. We also reset the DECL_ASSEMBLER_NAME since
9756 tsubst always calculates the name as if the function in question
9757 were really a template instance, and sometimes, with friend
9758 functions, this is not so. See tsubst_friend_function for
9759 details. */
9760 DECL_TI_TEMPLATE (new_decl) = DECL_TI_TEMPLATE (decl);
9761 DECL_ASSEMBLER_NAME (new_decl) = DECL_ASSEMBLER_NAME (decl);
9762 DECL_RTL (new_decl) = DECL_RTL (decl);
9763 DECL_USE_TEMPLATE (new_decl) = DECL_USE_TEMPLATE (decl);
9764
9765 /* Call duplicate decls to merge the old and new declarations. */
9766 duplicate_decls (new_decl, decl);
9767
9768 /* Now, re-register the specialization. */
9769 register_specialization (decl, gen_tmpl, args);
9770 }
9771
9772 /* Produce the definition of D, a _DECL generated from a template. If
9773 DEFER_OK is non-zero, then we don't have to actually do the
9774 instantiation now; we just have to do it sometime. */
9775
9776 tree
9777 instantiate_decl (d, defer_ok)
9778 tree d;
9779 int defer_ok;
9780 {
9781 tree tmpl = DECL_TI_TEMPLATE (d);
9782 tree args = DECL_TI_ARGS (d);
9783 tree td;
9784 tree code_pattern;
9785 tree spec;
9786 tree gen_tmpl;
9787 int pattern_defined;
9788 int line = lineno;
9789 int need_push;
9790 const char *file = input_filename;
9791
9792 /* This function should only be used to instantiate templates for
9793 functions and static member variables. */
9794 my_friendly_assert (TREE_CODE (d) == FUNCTION_DECL
9795 || TREE_CODE (d) == VAR_DECL, 0);
9796
9797 /* Don't instantiate cloned functions. Instead, instantiate the
9798 functions they cloned. */
9799 if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
9800 d = DECL_CLONED_FUNCTION (d);
9801
9802 if (DECL_TEMPLATE_INSTANTIATED (d))
9803 /* D has already been instantiated. It might seem reasonable to
9804 check whether or not D is an explicit instantiation, and, if so,
9805 stop here. But when an explicit instantiation is deferred
9806 until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
9807 is set, even though we still need to do the instantiation. */
9808 return d;
9809
9810 /* If we already have a specialization of this declaration, then
9811 there's no reason to instantiate it. Note that
9812 retrieve_specialization gives us both instantiations and
9813 specializations, so we must explicitly check
9814 DECL_TEMPLATE_SPECIALIZATION. */
9815 gen_tmpl = most_general_template (tmpl);
9816 spec = retrieve_specialization (gen_tmpl, args);
9817 if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
9818 return spec;
9819
9820 /* This needs to happen before any tsubsting. */
9821 if (! push_tinst_level (d))
9822 return d;
9823
9824 timevar_push (TV_PARSE);
9825
9826 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
9827 for the instantiation. This is not always the most general
9828 template. Consider, for example:
9829
9830 template <class T>
9831 struct S { template <class U> void f();
9832 template <> void f<int>(); };
9833
9834 and an instantiation of S<double>::f<int>. We want TD to be the
9835 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
9836 td = tmpl;
9837 while (/* An instantiation cannot have a definition, so we need a
9838 more general template. */
9839 DECL_TEMPLATE_INSTANTIATION (td)
9840 /* We must also deal with friend templates. Given:
9841
9842 template <class T> struct S {
9843 template <class U> friend void f() {};
9844 };
9845
9846 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
9847 so far as the language is concerned, but that's still
9848 where we get the pattern for the instantiation from. On
9849 other hand, if the definition comes outside the class, say:
9850
9851 template <class T> struct S {
9852 template <class U> friend void f();
9853 };
9854 template <class U> friend void f() {}
9855
9856 we don't need to look any further. That's what the check for
9857 DECL_INITIAL is for. */
9858 || (TREE_CODE (d) == FUNCTION_DECL
9859 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (td)
9860 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (td))))
9861 {
9862 /* The present template, TD, should not be a definition. If it
9863 were a definition, we should be using it! Note that we
9864 cannot restructure the loop to just keep going until we find
9865 a template with a definition, since that might go too far if
9866 a specialization was declared, but not defined. */
9867 my_friendly_assert (!(TREE_CODE (d) == VAR_DECL
9868 && !DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (td))),
9869 0);
9870
9871 /* Fetch the more general template. */
9872 td = DECL_TI_TEMPLATE (td);
9873 }
9874
9875 code_pattern = DECL_TEMPLATE_RESULT (td);
9876
9877 if (TREE_CODE (d) == FUNCTION_DECL)
9878 pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
9879 else
9880 pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
9881
9882 lineno = DECL_SOURCE_LINE (d);
9883 input_filename = DECL_SOURCE_FILE (d);
9884
9885 if (pattern_defined)
9886 {
9887 repo_template_used (d);
9888
9889 if (flag_external_templates && ! DECL_INTERFACE_KNOWN (d))
9890 {
9891 if (flag_alt_external_templates)
9892 {
9893 if (interface_unknown)
9894 warn_if_unknown_interface (d);
9895 }
9896 else if (DECL_INTERFACE_KNOWN (code_pattern))
9897 {
9898 DECL_INTERFACE_KNOWN (d) = 1;
9899 DECL_NOT_REALLY_EXTERN (d) = ! DECL_EXTERNAL (code_pattern);
9900 }
9901 else
9902 warn_if_unknown_interface (code_pattern);
9903 }
9904
9905 if (at_eof)
9906 import_export_decl (d);
9907 }
9908
9909 /* We need to set up DECL_INITIAL regardless, if
9910 the variable is initialized in the class body. */
9911 if (TREE_CODE (d) == VAR_DECL && DECL_INITIALIZED_IN_CLASS_P (d))
9912 ;
9913 /* Reject all external templates except inline functions. */
9914 else if (DECL_INTERFACE_KNOWN (d)
9915 && ! DECL_NOT_REALLY_EXTERN (d)
9916 && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d)))
9917 goto out;
9918 /* Defer all other templates, unless we have been explicitly
9919 forbidden from doing so. We restore the source position here
9920 because it's used by add_pending_template. */
9921 else if (! pattern_defined || defer_ok)
9922 {
9923 lineno = line;
9924 input_filename = file;
9925
9926 if (at_eof && !pattern_defined
9927 && DECL_EXPLICIT_INSTANTIATION (d))
9928 /* [temp.explicit]
9929
9930 The definition of a non-exported function template, a
9931 non-exported member function template, or a non-exported
9932 member function or static data member of a class template
9933 shall be present in every translation unit in which it is
9934 explicitly instantiated. */
9935 cp_error ("explicit instantiation of `%D' but no definition available",
9936 d);
9937
9938 add_pending_template (d);
9939 goto out;
9940 }
9941
9942 need_push = !global_bindings_p ();
9943 if (need_push)
9944 push_to_top_level ();
9945
9946 /* We're now committed to instantiating this template. Mark it as
9947 instantiated so that recursive calls to instantiate_decl do not
9948 try to instantiate it again. */
9949 DECL_TEMPLATE_INSTANTIATED (d) = 1;
9950
9951 /* Regenerate the declaration in case the template has been modified
9952 by a subsequent redeclaration. */
9953 regenerate_decl_from_template (d, td);
9954
9955 /* We already set the file and line above. Reset them now in case
9956 they changed as a result of calling regenerate_decl_from_template. */
9957 lineno = DECL_SOURCE_LINE (d);
9958 input_filename = DECL_SOURCE_FILE (d);
9959
9960 if (TREE_CODE (d) == VAR_DECL)
9961 {
9962 DECL_IN_AGGR_P (d) = 0;
9963 if (DECL_INTERFACE_KNOWN (d))
9964 DECL_EXTERNAL (d) = ! DECL_NOT_REALLY_EXTERN (d);
9965 else
9966 {
9967 DECL_EXTERNAL (d) = 1;
9968 DECL_NOT_REALLY_EXTERN (d) = 1;
9969 }
9970 cp_finish_decl (d, DECL_INITIAL (d), NULL_TREE, 0);
9971 }
9972 else if (TREE_CODE (d) == FUNCTION_DECL)
9973 {
9974 htab_t saved_local_specializations;
9975
9976 /* Save away the current list, in case we are instantiating one
9977 template from within the body of another. */
9978 saved_local_specializations = local_specializations;
9979
9980 /* Set up the list of local specializations. */
9981 local_specializations = htab_create (37,
9982 htab_hash_pointer,
9983 htab_eq_pointer,
9984 NULL);
9985
9986 /* Set up context. */
9987 start_function (NULL_TREE, d, NULL_TREE, SF_PRE_PARSED);
9988
9989 /* We already set up __FUNCTION__, etc., so we don't want to do
9990 it again now. */
9991 function_name_declared_p = 1;
9992
9993 /* Substitute into the body of the function. */
9994 tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
9995 /*complain=*/1, tmpl);
9996
9997 /* We don't need the local specializations any more. */
9998 htab_delete (local_specializations);
9999 local_specializations = saved_local_specializations;
10000
10001 /* Finish the function. */
10002 expand_body (finish_function (0));
10003 }
10004
10005 /* We're not deferring instantiation any more. */
10006 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
10007
10008 if (need_push)
10009 pop_from_top_level ();
10010
10011 out:
10012 lineno = line;
10013 input_filename = file;
10014
10015 pop_tinst_level ();
10016
10017 timevar_pop (TV_PARSE);
10018
10019 return d;
10020 }
10021
10022 /* Run through the list of templates that we wish we could
10023 instantiate, and instantiate any we can. */
10024
10025 int
10026 instantiate_pending_templates ()
10027 {
10028 tree *t;
10029 int instantiated_something = 0;
10030 int reconsider;
10031
10032 do
10033 {
10034 reconsider = 0;
10035
10036 t = &pending_templates;
10037 while (*t)
10038 {
10039 tree instantiation = TREE_VALUE (*t);
10040
10041 reopen_tinst_level (TREE_PURPOSE (*t));
10042
10043 if (TYPE_P (instantiation))
10044 {
10045 tree fn;
10046
10047 if (!COMPLETE_TYPE_P (instantiation))
10048 {
10049 instantiate_class_template (instantiation);
10050 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
10051 for (fn = TYPE_METHODS (instantiation);
10052 fn;
10053 fn = TREE_CHAIN (fn))
10054 if (! DECL_ARTIFICIAL (fn))
10055 instantiate_decl (fn, /*defer_ok=*/0);
10056 if (COMPLETE_TYPE_P (instantiation))
10057 {
10058 instantiated_something = 1;
10059 reconsider = 1;
10060 }
10061 }
10062
10063 if (COMPLETE_TYPE_P (instantiation))
10064 /* If INSTANTIATION has been instantiated, then we don't
10065 need to consider it again in the future. */
10066 *t = TREE_CHAIN (*t);
10067 else
10068 t = &TREE_CHAIN (*t);
10069 }
10070 else
10071 {
10072 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
10073 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
10074 {
10075 instantiation = instantiate_decl (instantiation,
10076 /*defer_ok=*/0);
10077 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
10078 {
10079 instantiated_something = 1;
10080 reconsider = 1;
10081 }
10082 }
10083
10084 if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
10085 || DECL_TEMPLATE_INSTANTIATED (instantiation))
10086 /* If INSTANTIATION has been instantiated, then we don't
10087 need to consider it again in the future. */
10088 *t = TREE_CHAIN (*t);
10089 else
10090 t = &TREE_CHAIN (*t);
10091 }
10092 tinst_depth = 0;
10093 current_tinst_level = NULL_TREE;
10094 }
10095 template_tail = t;
10096
10097 /* Go through the things that are template instantiations if we are
10098 using guiding declarations. */
10099 t = &maybe_templates;
10100 while (*t)
10101 {
10102 tree template;
10103 tree fn;
10104 tree args;
10105
10106 fn = TREE_VALUE (*t);
10107
10108 if (DECL_INITIAL (fn))
10109 /* If the FN is already defined, then it was either already
10110 instantiated or, even though guiding declarations were
10111 allowed, a non-template definition was provided. */
10112 ;
10113 else
10114 {
10115 template = TREE_PURPOSE (*t);
10116 args = get_bindings (template, fn, NULL_TREE);
10117 fn = instantiate_template (template, args);
10118 instantiate_decl (fn, /*defer_ok=*/0);
10119 reconsider = 1;
10120 }
10121
10122 /* Remove this entry from the chain. */
10123 *t = TREE_CHAIN (*t);
10124 }
10125 maybe_template_tail = t;
10126 }
10127 while (reconsider);
10128
10129 return instantiated_something;
10130 }
10131
10132 /* Substitute ARGVEC into T, which is a list of initializers for
10133 either base class or a non-static data member. The TREE_PURPOSEs
10134 are DECLs, and the TREE_VALUEs are the initializer values. Used by
10135 instantiate_decl. */
10136
10137 static tree
10138 tsubst_initializer_list (t, argvec)
10139 tree t, argvec;
10140 {
10141 tree first = NULL_TREE;
10142 tree *p = &first;
10143
10144 for (; t; t = TREE_CHAIN (t))
10145 {
10146 tree decl;
10147 tree init;
10148 tree val;
10149
10150 decl = tsubst_copy (TREE_PURPOSE (t), argvec, /*complain=*/1,
10151 NULL_TREE);
10152 init = tsubst_expr (TREE_VALUE (t), argvec, /*complain=*/1,
10153 NULL_TREE);
10154
10155 if (!init)
10156 ;
10157 else if (TREE_CODE (init) == TREE_LIST)
10158 for (val = init; val; val = TREE_CHAIN (val))
10159 TREE_VALUE (val) = convert_from_reference (TREE_VALUE (val));
10160 else
10161 init = convert_from_reference (init);
10162
10163 *p = build_tree_list (decl, init);
10164 p = &TREE_CHAIN (*p);
10165 }
10166 return first;
10167 }
10168
10169 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
10170
10171 static void
10172 set_current_access_from_decl (decl)
10173 tree decl;
10174 {
10175 if (TREE_PRIVATE (decl))
10176 current_access_specifier = access_private_node;
10177 else if (TREE_PROTECTED (decl))
10178 current_access_specifier = access_protected_node;
10179 else
10180 current_access_specifier = access_public_node;
10181 }
10182
10183 /* Instantiate an enumerated type. TAG is the template type, NEWTAG
10184 is the instantiation (which should have been created with
10185 start_enum) and ARGS are the template arguments to use. */
10186
10187 static void
10188 tsubst_enum (tag, newtag, args)
10189 tree tag;
10190 tree newtag;
10191 tree args;
10192 {
10193 tree e;
10194
10195 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
10196 {
10197 tree value;
10198
10199 /* Note that in a template enum, the TREE_VALUE is the
10200 CONST_DECL, not the corresponding INTEGER_CST. */
10201 value = tsubst_expr (DECL_INITIAL (TREE_VALUE (e)),
10202 args, /*complain=*/1,
10203 NULL_TREE);
10204
10205 /* Give this enumeration constant the correct access. */
10206 set_current_access_from_decl (TREE_VALUE (e));
10207
10208 /* Actually build the enumerator itself. */
10209 build_enumerator (TREE_PURPOSE (e), value, newtag);
10210 }
10211
10212 finish_enum (newtag);
10213 DECL_SOURCE_LINE (TYPE_NAME (newtag)) = DECL_SOURCE_LINE (TYPE_NAME (tag));
10214 DECL_SOURCE_FILE (TYPE_NAME (newtag)) = DECL_SOURCE_FILE (TYPE_NAME (tag));
10215 }
10216
10217 /* DECL is a FUNCTION_DECL that is a template specialization. Return
10218 its type -- but without substituting the innermost set of template
10219 arguments. So, innermost set of template parameters will appear in
10220 the type. If CONTEXTP is non-NULL, then the partially substituted
10221 DECL_CONTEXT (if any) will also be filled in. Similarly, TPARMSP
10222 will be filled in with the substituted template parameters, if it
10223 is non-NULL. */
10224
10225 tree
10226 get_mostly_instantiated_function_type (decl, contextp, tparmsp)
10227 tree decl;
10228 tree *contextp;
10229 tree *tparmsp;
10230 {
10231 tree context = NULL_TREE;
10232 tree fn_type;
10233 tree tmpl;
10234 tree targs;
10235 tree tparms;
10236 int parm_depth;
10237
10238 tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
10239 targs = DECL_TI_ARGS (decl);
10240 tparms = DECL_TEMPLATE_PARMS (tmpl);
10241 parm_depth = TMPL_PARMS_DEPTH (tparms);
10242
10243 /* There should be as many levels of arguments as there are levels
10244 of parameters. */
10245 my_friendly_assert (parm_depth == TMPL_ARGS_DEPTH (targs), 0);
10246
10247 fn_type = TREE_TYPE (tmpl);
10248 if (DECL_STATIC_FUNCTION_P (decl))
10249 context = DECL_CONTEXT (decl);
10250
10251 if (parm_depth == 1)
10252 /* No substitution is necessary. */
10253 ;
10254 else
10255 {
10256 int i;
10257 tree partial_args;
10258
10259 /* Replace the innermost level of the TARGS with NULL_TREEs to
10260 let tsubst know not to substitute for those parameters. */
10261 partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
10262 for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
10263 SET_TMPL_ARGS_LEVEL (partial_args, i,
10264 TMPL_ARGS_LEVEL (targs, i));
10265 SET_TMPL_ARGS_LEVEL (partial_args,
10266 TMPL_ARGS_DEPTH (targs),
10267 make_tree_vec (DECL_NTPARMS (tmpl)));
10268
10269 /* Now, do the (partial) substitution to figure out the
10270 appropriate function type. */
10271 fn_type = tsubst (fn_type, partial_args, /*complain=*/1, NULL_TREE);
10272 if (DECL_STATIC_FUNCTION_P (decl))
10273 context = tsubst (context, partial_args, /*complain=*/1, NULL_TREE);
10274
10275 /* Substitute into the template parameters to obtain the real
10276 innermost set of parameters. This step is important if the
10277 innermost set of template parameters contains value
10278 parameters whose types depend on outer template parameters. */
10279 TREE_VEC_LENGTH (partial_args)--;
10280 tparms = tsubst_template_parms (tparms, partial_args, /*complain=*/1);
10281 }
10282
10283 if (contextp)
10284 *contextp = context;
10285 if (tparmsp)
10286 *tparmsp = tparms;
10287
10288 return fn_type;
10289 }
10290
10291 /* Set the DECL_ASSEMBLER_NAME for DECL, which is a FUNCTION_DECL that
10292 is either an instantiation or specialization of a template
10293 function. */
10294
10295 static void
10296 set_mangled_name_for_template_decl (decl)
10297 tree decl;
10298 {
10299 tree context = NULL_TREE;
10300 tree fn_type;
10301 tree ret_type;
10302 tree parm_types;
10303 tree tparms;
10304 tree targs;
10305
10306 my_friendly_assert (TREE_CODE (decl) == FUNCTION_DECL, 0);
10307 my_friendly_assert (DECL_TEMPLATE_INFO (decl) != NULL_TREE, 0);
10308
10309 /* Under the new ABI, we don't need special machinery. */
10310 if (flag_new_abi)
10311 {
10312 set_mangled_name_for_decl (decl);
10313 return;
10314 }
10315
10316 /* The names of template functions must be mangled so as to indicate
10317 what template is being specialized with what template arguments.
10318 For example, each of the following three functions must get
10319 different mangled names:
10320
10321 void f(int);
10322 template <> void f<7>(int);
10323 template <> void f<8>(int); */
10324
10325 targs = DECL_TI_ARGS (decl);
10326 if (uses_template_parms (targs))
10327 /* This DECL is for a partial instantiation. There's no need to
10328 mangle the name of such an entity. */
10329 return;
10330
10331 /* We now compute the PARMS and RET_TYPE to give to
10332 build_decl_overload_real. The PARMS and RET_TYPE are the
10333 parameter and return types of the template, after all but the
10334 innermost template arguments have been substituted, not the
10335 parameter and return types of the function DECL. For example,
10336 given:
10337
10338 template <class T> T f(T);
10339
10340 both PARMS and RET_TYPE should be `T' even if DECL is `int f(int)'.
10341 A more subtle example is:
10342
10343 template <class T> struct S { template <class U> void f(T, U); }
10344
10345 Here, if DECL is `void S<int>::f(int, double)', PARMS should be
10346 {int, U}. Thus, the args that we want to subsitute into the
10347 return and parameter type for the function are those in TARGS,
10348 with the innermost level omitted. */
10349 fn_type = get_mostly_instantiated_function_type (decl, &context, &tparms);
10350
10351 /* Now, get the innermost parameters and arguments, and figure out
10352 the parameter and return types. */
10353 tparms = INNERMOST_TEMPLATE_PARMS (tparms);
10354 targs = INNERMOST_TEMPLATE_ARGS (targs);
10355 ret_type = TREE_TYPE (fn_type);
10356 parm_types = TYPE_ARG_TYPES (fn_type);
10357
10358 /* For a static member function, we generate a fake `this' pointer,
10359 for the purposes of mangling. This indicates of which class the
10360 function is a member. Because of:
10361
10362 [class.static]
10363
10364 There shall not be a static and a nonstatic member function
10365 with the same name and the same parameter types
10366
10367 we don't have to worry that this will result in a clash with a
10368 non-static member function. */
10369 if (DECL_STATIC_FUNCTION_P (decl))
10370 parm_types = hash_tree_chain (build_pointer_type (context), parm_types);
10371
10372 /* There should be the same number of template parameters as
10373 template arguments. */
10374 my_friendly_assert (TREE_VEC_LENGTH (tparms) == TREE_VEC_LENGTH (targs),
10375 0);
10376
10377 /* Actually set the DECL_ASSEMBLER_NAME. */
10378 DECL_ASSEMBLER_NAME (decl)
10379 = build_decl_overload_real (decl, parm_types, ret_type,
10380 tparms, targs,
10381 DECL_FUNCTION_MEMBER_P (decl)
10382 + DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl));
10383 }
10384
10385 /* Return truthvalue if we're processing a template different from
10386 the last one involved in diagnostics. */
10387 int
10388 problematic_instantiation_changed ()
10389 {
10390 return last_template_error_tick != tinst_level_tick;
10391 }
10392
10393 /* Remember current template involved in diagnostics. */
10394 void
10395 record_last_problematic_instantiation ()
10396 {
10397 last_template_error_tick = tinst_level_tick;
10398 }
10399
10400 tree
10401 current_instantiation ()
10402 {
10403 return current_tinst_level;
10404 }
10405
10406 /* [temp.param] Check that template non-type parm TYPE is of an allowable
10407 type. Return zero for ok, non-zero for disallowed. If COMPLAIN is
10408 non-zero, then complain. */
10409
10410 static int
10411 invalid_nontype_parm_type_p (type, complain)
10412 tree type;
10413 int complain;
10414 {
10415 if (INTEGRAL_TYPE_P (type))
10416 return 0;
10417 else if (POINTER_TYPE_P (type))
10418 return 0;
10419 else if (TYPE_PTRMEM_P (type))
10420 return 0;
10421 else if (TYPE_PTRMEMFUNC_P (type))
10422 return 0;
10423 else if (!pedantic && TREE_CODE (type) == REAL_TYPE)
10424 return 0; /* GNU extension */
10425 else if (!pedantic && TREE_CODE (type) == COMPLEX_TYPE)
10426 return 0; /* GNU extension */
10427 else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10428 return 0;
10429 else if (TREE_CODE (type) == TYPENAME_TYPE)
10430 return 0;
10431
10432 if (complain)
10433 cp_error ("`%#T' is not a valid type for a template constant parameter",
10434 type);
10435 return 1;
10436 }