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