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