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