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