]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/pt.c
tree.def (RTL_EXPR): Update documentation.
[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 {
8251199e 2745 cp_error ("string literal %E is not a valid template argument",
75650646 2746 referent);
8251199e 2747 error ("because it is the address of an object with static linkage");
75650646
MM
2748 return NULL_TREE;
2749 }
2750
2751 if (is_overloaded_fn (referent))
2752 /* We'll check that it has external linkage later. */
2753 ;
2754 else if (TREE_CODE (referent) != VAR_DECL)
2755 goto bad_argument;
2756 else if (!TREE_PUBLIC (referent))
2757 {
8251199e 2758 cp_error ("address of non-extern `%E' cannot be used as template argument", referent);
75650646
MM
2759 return error_mark_node;
2760 }
2761 }
f3400fe2
JM
2762 else if (INTEGRAL_TYPE_P (expr_type)
2763 || TYPE_PTRMEM_P (expr_type)
2764 || TYPE_PTRMEMFUNC_P (expr_type)
2765 /* The next two are g++ extensions. */
2766 || TREE_CODE (expr_type) == REAL_TYPE
2767 || TREE_CODE (expr_type) == COMPLEX_TYPE)
75650646 2768 {
f3400fe2
JM
2769 if (! TREE_CONSTANT (expr))
2770 {
2771 non_constant:
2772 cp_error ("non-constant `%E' cannot be used as template argument",
2773 expr);
2774 return NULL_TREE;
2775 }
75650646 2776 }
75650646
MM
2777 else
2778 {
8251199e 2779 cp_error ("object `%E' cannot be used as template argument", expr);
75650646
MM
2780 return NULL_TREE;
2781 }
2782
2783 switch (TREE_CODE (type))
2784 {
2785 case INTEGER_TYPE:
2786 case BOOLEAN_TYPE:
2787 case ENUMERAL_TYPE:
2788 /* For a non-type template-parameter of integral or enumeration
2789 type, integral promotions (_conv.prom_) and integral
2790 conversions (_conv.integral_) are applied. */
2791 if (!INTEGRAL_TYPE_P (expr_type))
2792 return error_mark_node;
2793
2794 /* It's safe to call digest_init in this case; we know we're
2795 just converting one integral constant expression to another. */
db02b6b9 2796 expr = digest_init (type, expr, (tree*) 0);
75650646 2797
db02b6b9 2798 if (TREE_CODE (expr) != INTEGER_CST)
f3400fe2 2799 /* Curiously, some TREE_CONSTANT integral expressions do not
db02b6b9
MM
2800 simplify to integer constants. For example, `3 % 0',
2801 remains a TRUNC_MOD_EXPR. */
2802 goto non_constant;
2803
2804 return expr;
2805
abff8e06
JM
2806 case REAL_TYPE:
2807 case COMPLEX_TYPE:
2808 /* These are g++ extensions. */
2809 if (TREE_CODE (expr_type) != TREE_CODE (type))
2810 return error_mark_node;
2811
db02b6b9
MM
2812 expr = digest_init (type, expr, (tree*) 0);
2813
2814 if (TREE_CODE (expr) != REAL_CST)
2815 goto non_constant;
2816
2817 return expr;
abff8e06 2818
75650646
MM
2819 case POINTER_TYPE:
2820 {
2821 tree type_pointed_to = TREE_TYPE (type);
2822
2823 if (TYPE_PTRMEM_P (type))
93aa462d
MM
2824 {
2825 tree e;
2826
2827 /* For a non-type template-parameter of type pointer to data
2828 member, qualification conversions (_conv.qual_) are
2829 applied. */
2830 e = perform_qualification_conversions (type, expr);
2831 if (TREE_CODE (e) == NOP_EXPR)
87533b37
MM
2832 /* The call to perform_qualification_conversions will
2833 insert a NOP_EXPR over EXPR to do express conversion,
2834 if necessary. But, that will confuse us if we use
2835 this (converted) template parameter to instantiate
2836 another template; then the thing will not look like a
2837 valid template argument. So, just make a new
2838 constant, of the appropriate type. */
2839 e = make_ptrmem_cst (type, PTRMEM_CST_MEMBER (expr));
93aa462d
MM
2840 return e;
2841 }
75650646
MM
2842 else if (TREE_CODE (type_pointed_to) == FUNCTION_TYPE)
2843 {
2844 /* For a non-type template-parameter of type pointer to
2845 function, only the function-to-pointer conversion
2846 (_conv.func_) is applied. If the template-argument
2847 represents a set of overloaded functions (or a pointer to
2848 such), the matching function is selected from the set
2849 (_over.over_). */
2850 tree fns;
2851 tree fn;
2852
7bf2682f 2853 if (TREE_CODE (expr) == ADDR_EXPR)
75650646
MM
2854 fns = TREE_OPERAND (expr, 0);
2855 else
2856 fns = expr;
2857
a05273d4 2858 fn = instantiate_type (type_pointed_to, fns, 0);
75650646
MM
2859
2860 if (fn == error_mark_node)
2861 return error_mark_node;
2862
2863 if (!TREE_PUBLIC (fn))
2864 {
2865 if (really_overloaded_fn (fns))
2866 return error_mark_node;
2867 else
2868 goto bad_argument;
2869 }
2870
2871 expr = build_unary_op (ADDR_EXPR, fn, 0);
2872
3bfdc719 2873 my_friendly_assert (same_type_p (type, TREE_TYPE (expr)),
75650646
MM
2874 0);
2875 return expr;
2876 }
2877 else
2878 {
2879 /* For a non-type template-parameter of type pointer to
2880 object, qualification conversions (_conv.qual_) and the
2881 array-to-pointer conversion (_conv.array_) are applied.
2882 [Note: In particular, neither the null pointer conversion
2883 (_conv.ptr_) nor the derived-to-base conversion
2884 (_conv.ptr_) are applied. Although 0 is a valid
2885 template-argument for a non-type template-parameter of
2886 integral type, it is not a valid template-argument for a
e1467ff2
MM
2887 non-type template-parameter of pointer type.]
2888
2889 The call to decay_conversion performs the
2890 array-to-pointer conversion, if appropriate. */
2891 expr = decay_conversion (expr);
75650646
MM
2892
2893 if (expr == error_mark_node)
2894 return error_mark_node;
2895 else
2896 return perform_qualification_conversions (type, expr);
2897 }
2898 }
2899 break;
2900
2901 case REFERENCE_TYPE:
2902 {
2903 tree type_referred_to = TREE_TYPE (type);
2904
2905 if (TREE_CODE (type_referred_to) == FUNCTION_TYPE)
2906 {
2907 /* For a non-type template-parameter of type reference to
39c01e4c
MM
2908 function, no conversions apply. If the
2909 template-argument represents a set of overloaded
2910 functions, the matching function is selected from the
2911 set (_over.over_). */
75650646
MM
2912 tree fns = expr;
2913 tree fn;
2914
a05273d4 2915 fn = instantiate_type (type_referred_to, fns, 0);
e6e174e5
JM
2916
2917 if (fn == error_mark_node)
2918 return error_mark_node;
75650646
MM
2919
2920 if (!TREE_PUBLIC (fn))
2921 {
2922 if (really_overloaded_fn (fns))
2923 /* Don't issue an error here; we might get a different
2924 function if the overloading had worked out
2925 differently. */
2926 return error_mark_node;
2927 else
2928 goto bad_argument;
2929 }
2930
3bfdc719
MM
2931 my_friendly_assert (same_type_p (type_referred_to,
2932 TREE_TYPE (fn)),
75650646
MM
2933 0);
2934
2935 return fn;
2936 }
2937 else
2938 {
2939 /* For a non-type template-parameter of type reference to
2940 object, no conversions apply. The type referred to by the
2941 reference may be more cv-qualified than the (otherwise
2942 identical) type of the template-argument. The
2943 template-parameter is bound directly to the
2944 template-argument, which must be an lvalue. */
ff350acd
JM
2945 if ((TYPE_MAIN_VARIANT (expr_type)
2946 != TYPE_MAIN_VARIANT (type_referred_to))
91063b51
MM
2947 || !at_least_as_qualified_p (type_referred_to,
2948 expr_type)
75650646
MM
2949 || !real_lvalue_p (expr))
2950 return error_mark_node;
2951 else
2952 return expr;
2953 }
2954 }
2955 break;
2956
2957 case RECORD_TYPE:
2958 {
410c2fba
KL
2959 if (!TYPE_PTRMEMFUNC_P (type))
2960 /* This handles templates like
2961 template<class T, T t> void f();
2962 when T is substituted with any class. The second template
2963 parameter becomes invalid and the template candidate is
2964 rejected. */
2965 return error_mark_node;
75650646
MM
2966
2967 /* For a non-type template-parameter of type pointer to member
2968 function, no conversions apply. If the template-argument
2969 represents a set of overloaded member functions, the
2970 matching member function is selected from the set
2971 (_over.over_). */
2972
2973 if (!TYPE_PTRMEMFUNC_P (expr_type) &&
2974 expr_type != unknown_type_node)
2975 return error_mark_node;
2976
e08a8f45 2977 if (TREE_CODE (expr) == PTRMEM_CST)
75650646
MM
2978 {
2979 /* A ptr-to-member constant. */
3bfdc719 2980 if (!same_type_p (type, expr_type))
75650646
MM
2981 return error_mark_node;
2982 else
2983 return expr;
2984 }
2985
2986 if (TREE_CODE (expr) != ADDR_EXPR)
2987 return error_mark_node;
2988
d8f8dca1 2989 expr = instantiate_type (type, expr, 0);
75650646 2990
d8f8dca1 2991 if (expr == error_mark_node)
75650646
MM
2992 return error_mark_node;
2993
3bfdc719 2994 my_friendly_assert (same_type_p (type, TREE_TYPE (expr)),
75650646
MM
2995 0);
2996 return expr;
2997 }
2998 break;
2999
3000 default:
3001 /* All non-type parameters must have one of these types. */
3002 my_friendly_abort (0);
3003 break;
3004 }
3005
3006 return error_mark_node;
3007}
3008
744fac59
KL
3009/* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
3010 template template parameters. Both PARM_PARMS and ARG_PARMS are
3011 vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
3012 or PARM_DECL.
3013
3014 ARG_PARMS may contain more parameters than PARM_PARMS. If this is
3015 the case, then extra parameters must have default arguments.
3016
3017 Consider the example:
3018 template <class T, class Allocator = allocator> class vector;
3019 template<template <class U> class TT> class C;
3020
3021 C<vector> is a valid instantiation. PARM_PARMS for the above code
3022 contains a TYPE_DECL (for U), ARG_PARMS contains two TYPE_DECLs (for
3023 T and Allocator) and OUTER_ARGS contains the argument that is used to
3024 substitute the TT parameter. */
3025
3026static int
4393e105
MM
3027coerce_template_template_parms (parm_parms, arg_parms, complain,
3028 in_decl, outer_args)
3029 tree parm_parms, arg_parms;
3030 int complain;
3031 tree in_decl, outer_args;
744fac59
KL
3032{
3033 int nparms, nargs, i;
3034 tree parm, arg;
3035
3036 my_friendly_assert (TREE_CODE (parm_parms) == TREE_VEC, 0);
3037 my_friendly_assert (TREE_CODE (arg_parms) == TREE_VEC, 0);
3038
3039 nparms = TREE_VEC_LENGTH (parm_parms);
3040 nargs = TREE_VEC_LENGTH (arg_parms);
3041
3042 /* The rule here is opposite of coerce_template_parms. */
3043 if (nargs < nparms
3044 || (nargs > nparms
3045 && TREE_PURPOSE (TREE_VEC_ELT (arg_parms, nparms)) == NULL_TREE))
3046 return 0;
3047
3048 for (i = 0; i < nparms; ++i)
3049 {
3050 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
3051 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
3052
3053 if (arg == NULL_TREE || arg == error_mark_node
3054 || parm == NULL_TREE || parm == error_mark_node)
3055 return 0;
3056
3057 if (TREE_CODE (arg) != TREE_CODE (parm))
3058 return 0;
3059
3060 switch (TREE_CODE (parm))
3061 {
3062 case TYPE_DECL:
3063 break;
3064
3065 case TEMPLATE_DECL:
3066 /* We encounter instantiations of templates like
3067 template <template <template <class> class> class TT>
3068 class C; */
700466c2
JM
3069 {
3070 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3071 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3072
3073 if (!coerce_template_template_parms (parmparm, argparm,
4393e105
MM
3074 complain, in_decl,
3075 outer_args))
700466c2
JM
3076 return 0;
3077 }
3078 break;
744fac59
KL
3079
3080 case PARM_DECL:
3081 /* The tsubst call is used to handle cases such as
3082 template <class T, template <T> class TT> class D;
3083 i.e. the parameter list of TT depends on earlier parameters. */
4393e105
MM
3084 if (!same_type_p (tsubst (TREE_TYPE (parm), outer_args,
3085 complain, in_decl),
3bfdc719 3086 TREE_TYPE (arg)))
744fac59
KL
3087 return 0;
3088 break;
3089
3090 default:
3091 my_friendly_abort (0);
3092 }
3093 }
3094 return 1;
3095}
3096
8b5b8b7c
MM
3097/* Convert the indicated template ARG as necessary to match the
3098 indicated template PARM. Returns the converted ARG, or
3099 error_mark_node if the conversion was unsuccessful. Error messages
3100 are issued if COMPLAIN is non-zero. This conversion is for the Ith
3101 parameter in the parameter list. ARGS is the full set of template
3102 arguments deduced so far. */
3103
3104static tree
3105convert_template_argument (parm, arg, args, complain, i, in_decl)
3106 tree parm;
3107 tree arg;
3108 tree args;
3109 int complain;
3110 int i;
3111 tree in_decl;
3112{
3113 tree val;
3114 tree inner_args;
3115 int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
3116
3117 inner_args = innermost_args (args);
3118
3119 if (TREE_CODE (arg) == TREE_LIST
3120 && TREE_TYPE (arg) != NULL_TREE
3121 && TREE_CODE (TREE_TYPE (arg)) == OFFSET_TYPE)
3122 {
3123 /* The template argument was the name of some
3124 member function. That's usually
3125 illegal, but static members are OK. In any
3126 case, grab the underlying fields/functions
3127 and issue an error later if required. */
3128 arg = TREE_VALUE (arg);
3129 TREE_TYPE (arg) = unknown_type_node;
3130 }
3131
3132 requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
3133 requires_type = (TREE_CODE (parm) == TYPE_DECL
3134 || requires_tmpl_type);
3135
3136 /* Check if it is a class template. If REQUIRES_TMPL_TYPE is true,
3137 we also accept implicitly created TYPE_DECL as a valid argument.
3138 This is necessary to handle the case where we pass a template name
3139 to a template template parameter in a scope where we've derived from
3140 in instantiation of that template, so the template name refers to that
3141 instantiation. We really ought to handle this better. */
3142 is_tmpl_type
3143 = ((TREE_CODE (arg) == TEMPLATE_DECL
3144 && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
3145 || (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
7ddedda4 3146 && !TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (arg))
8b5b8b7c
MM
3147 || (TREE_CODE (arg) == RECORD_TYPE
3148 && CLASSTYPE_TEMPLATE_INFO (arg)
3149 && TREE_CODE (TYPE_NAME (arg)) == TYPE_DECL
3150 && DECL_ARTIFICIAL (TYPE_NAME (arg))
3151 && requires_tmpl_type
b54ccf71 3152 && is_base_of_enclosing_class (arg, current_class_type)));
8b5b8b7c
MM
3153 if (is_tmpl_type && TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
3154 arg = TYPE_STUB_DECL (arg);
3155 else if (is_tmpl_type && TREE_CODE (arg) == RECORD_TYPE)
3156 arg = CLASSTYPE_TI_TEMPLATE (arg);
3157
3158 is_type = TREE_CODE_CLASS (TREE_CODE (arg)) == 't' || is_tmpl_type;
3159
3160 if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
3161 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
3162 {
8251199e
JM
3163 cp_pedwarn ("to refer to a type member of a template parameter,");
3164 cp_pedwarn (" use `typename %E'", arg);
8b5b8b7c
MM
3165
3166 arg = make_typename_type (TREE_OPERAND (arg, 0),
3baa501d
MM
3167 TREE_OPERAND (arg, 1),
3168 complain);
8b5b8b7c
MM
3169 is_type = 1;
3170 }
3171 if (is_type != requires_type)
3172 {
3173 if (in_decl)
3174 {
3175 if (complain)
3176 {
8251199e 3177 cp_error ("type/value mismatch at argument %d in template parameter list for `%D'",
8b5b8b7c
MM
3178 i + 1, in_decl);
3179 if (is_type)
8251199e 3180 cp_error (" expected a constant of type `%T', got `%T'",
8b5b8b7c
MM
3181 TREE_TYPE (parm),
3182 (is_tmpl_type ? DECL_NAME (arg) : arg));
3183 else
8251199e 3184 cp_error (" expected a type, got `%E'", arg);
8b5b8b7c
MM
3185 }
3186 }
3187 return error_mark_node;
3188 }
3189 if (is_tmpl_type ^ requires_tmpl_type)
3190 {
3191 if (in_decl && complain)
3192 {
8251199e 3193 cp_error ("type/value mismatch at argument %d in template parameter list for `%D'",
8b5b8b7c
MM
3194 i + 1, in_decl);
3195 if (is_tmpl_type)
8251199e 3196 cp_error (" expected a type, got `%T'", DECL_NAME (arg));
8b5b8b7c 3197 else
8251199e 3198 cp_error (" expected a class template, got `%T'", arg);
8b5b8b7c
MM
3199 }
3200 return error_mark_node;
3201 }
3202
3203 if (is_type)
3204 {
3205 if (requires_tmpl_type)
3206 {
3207 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3208 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3209
4393e105 3210 if (coerce_template_template_parms (parmparm, argparm, complain,
8b5b8b7c
MM
3211 in_decl, inner_args))
3212 {
3213 val = arg;
3214
3215 /* TEMPLATE_TEMPLATE_PARM node is preferred over
3216 TEMPLATE_DECL. */
3217 if (val != error_mark_node
3218 && DECL_TEMPLATE_TEMPLATE_PARM_P (val))
3219 val = TREE_TYPE (val);
3220 }
3221 else
3222 {
3223 if (in_decl && complain)
3224 {
8251199e 3225 cp_error ("type/value mismatch at argument %d in template parameter list for `%D'",
8b5b8b7c 3226 i + 1, in_decl);
8251199e 3227 cp_error (" expected a template of type `%D', got `%D'", parm, arg);
8b5b8b7c
MM
3228 }
3229
3230 val = error_mark_node;
3231 }
3232 }
3233 else
3234 {
3235 val = groktypename (arg);
3236 if (! processing_template_decl)
3237 {
3238 /* [basic.link]: A name with no linkage (notably, the
3239 name of a class or enumeration declared in a local
3240 scope) shall not be used to declare an entity with
3241 linkage. This implies that names with no linkage
3242 cannot be used as template arguments. */
3243 tree t = no_linkage_check (val);
3244 if (t)
3245 {
3246 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8251199e
JM
3247 cp_pedwarn
3248 ("template-argument `%T' uses anonymous type", val);
8b5b8b7c 3249 else
8251199e
JM
3250 cp_error
3251 ("template-argument `%T' uses local type `%T'",
8b5b8b7c
MM
3252 val, t);
3253 return error_mark_node;
3254 }
3255 }
3256 }
3257 }
3258 else
3259 {
4393e105 3260 tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
8b5b8b7c
MM
3261
3262 if (processing_template_decl)
3263 arg = maybe_fold_nontype_arg (arg);
3264
3265 if (!uses_template_parms (arg) && !uses_template_parms (t))
3266 /* We used to call digest_init here. However, digest_init
3267 will report errors, which we don't want when complain
3268 is zero. More importantly, digest_init will try too
3269 hard to convert things: for example, `0' should not be
3270 converted to pointer type at this point according to
3271 the standard. Accepting this is not merely an
3272 extension, since deciding whether or not these
3273 conversions can occur is part of determining which
3274 function template to call, or whether a given epxlicit
3275 argument specification is legal. */
3276 val = convert_nontype_argument (t, arg);
3277 else
3278 val = arg;
3279
3280 if (val == NULL_TREE)
3281 val = error_mark_node;
3282 else if (val == error_mark_node && complain)
8251199e 3283 cp_error ("could not convert template argument `%E' to `%T'",
8b5b8b7c
MM
3284 arg, t);
3285 }
3286
3287 return val;
3288}
3289
3290/* Convert all template arguments to their appropriate types, and
3291 return a vector containing the innermost resulting template
3292 arguments. If any error occurs, return error_mark_node, and, if
3293 COMPLAIN is non-zero, issue an error message. Some error messages
3294 are issued even if COMPLAIN is zero; for instance, if a template
3295 argument is composed from a local class.
75650646
MM
3296
3297 If REQUIRE_ALL_ARGUMENTS is non-zero, all arguments must be
3298 provided in ARGLIST, or else trailing parameters must have default
3299 values. If REQUIRE_ALL_ARGUMENTS is zero, we will attempt argument
cabc336a
MM
3300 deduction for any unspecified trailing arguments.
3301
3302 The resulting TREE_VEC is allocated on a temporary obstack, and
3303 must be explicitly copied if it will be permanent. */
de575009 3304
8d08fdba 3305static tree
8b5b8b7c 3306coerce_template_parms (parms, args, in_decl,
75650646 3307 complain,
744fac59 3308 require_all_arguments)
8b5b8b7c 3309 tree parms, args;
8d08fdba 3310 tree in_decl;
75650646
MM
3311 int complain;
3312 int require_all_arguments;
8d08fdba 3313{
a292b002 3314 int nparms, nargs, i, lost = 0;
e4a84209 3315 tree inner_args;
8b5b8b7c
MM
3316 tree new_args;
3317 tree new_inner_args;
a292b002 3318
8b5b8b7c 3319 inner_args = innermost_args (args);
e4a84209 3320 nargs = NUM_TMPL_ARGS (inner_args);
a292b002
MS
3321 nparms = TREE_VEC_LENGTH (parms);
3322
3323 if (nargs > nparms
3324 || (nargs < nparms
75650646 3325 && require_all_arguments
a292b002 3326 && TREE_PURPOSE (TREE_VEC_ELT (parms, nargs)) == NULL_TREE))
8d08fdba 3327 {
75650646
MM
3328 if (complain)
3329 {
8251199e 3330 cp_error ("wrong number of template arguments (%d, should be %d)",
e4a84209 3331 nargs, nparms);
75650646
MM
3332
3333 if (in_decl)
8251199e 3334 cp_error_at ("provided for `%D'", in_decl);
75650646
MM
3335 }
3336
8d08fdba
MS
3337 return error_mark_node;
3338 }
3339
f31c0a32 3340 new_inner_args = make_tree_vec (nparms);
8b5b8b7c
MM
3341 new_args = add_outermost_template_args (args, new_inner_args);
3342 for (i = 0; i < nparms; i++)
8d08fdba 3343 {
8b5b8b7c
MM
3344 tree arg;
3345 tree parm;
e4a84209 3346
8b5b8b7c
MM
3347 /* Get the Ith template parameter. */
3348 parm = TREE_VEC_ELT (parms, i);
75650646 3349
8b5b8b7c
MM
3350 /* Calculate the Ith argument. */
3351 if (inner_args && TREE_CODE (inner_args) == TREE_LIST)
8d08fdba 3352 {
8b5b8b7c
MM
3353 arg = TREE_VALUE (inner_args);
3354 inner_args = TREE_CHAIN (inner_args);
8d08fdba 3355 }
8b5b8b7c
MM
3356 else if (i < nargs)
3357 arg = TREE_VEC_ELT (inner_args, i);
3358 /* If no template argument was supplied, look for a default
3359 value. */
3360 else if (TREE_PURPOSE (parm) == NULL_TREE)
3361 {
3362 /* There was no default value. */
3363 my_friendly_assert (!require_all_arguments, 0);
3364 break;
3365 }
3366 else if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL)
4393e105 3367 arg = tsubst (TREE_PURPOSE (parm), new_args, complain, in_decl);
8b5b8b7c 3368 else
4393e105
MM
3369 arg = tsubst_expr (TREE_PURPOSE (parm), new_args, complain,
3370 in_decl);
e4a84209 3371
8b5b8b7c 3372 /* Now, convert the Ith argument, as necessary. */
75650646
MM
3373 if (arg == NULL_TREE)
3374 /* We're out of arguments. */
3375 {
3376 my_friendly_assert (!require_all_arguments, 0);
3377 break;
3378 }
8b5b8b7c 3379 else if (arg == error_mark_node)
75650646 3380 {
8251199e 3381 cp_error ("template argument %d is invalid", i + 1);
8b5b8b7c 3382 arg = error_mark_node;
8d08fdba 3383 }
8b5b8b7c
MM
3384 else
3385 arg = convert_template_argument (TREE_VALUE (parm),
3386 arg, new_args, complain, i,
3387 in_decl);
3388
3389 if (arg == error_mark_node)
8d08fdba 3390 lost++;
8b5b8b7c 3391 TREE_VEC_ELT (new_inner_args, i) = arg;
8d08fdba 3392 }
8b5b8b7c 3393
8d08fdba
MS
3394 if (lost)
3395 return error_mark_node;
8b5b8b7c
MM
3396
3397 return new_inner_args;
8d08fdba
MS
3398}
3399
34016c81
JM
3400/* Returns 1 if template args OT and NT are equivalent. */
3401
d8e178a0 3402static int
34016c81
JM
3403template_args_equal (ot, nt)
3404 tree ot, nt;
3405{
3406 if (nt == ot)
3407 return 1;
3408 if (TREE_CODE (nt) != TREE_CODE (ot))
3409 return 0;
3410 if (TREE_CODE (nt) == TREE_VEC)
3411 /* For member templates */
3412 return comp_template_args (ot, nt);
3413 else if (TREE_CODE_CLASS (TREE_CODE (ot)) == 't')
3bfdc719 3414 return same_type_p (ot, nt);
34016c81
JM
3415 else
3416 return (cp_tree_equal (ot, nt) > 0);
3417}
3418
3419/* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
f84b4be9
JM
3420 of template arguments. Returns 0 otherwise. */
3421
6757edfe 3422int
5566b478
MS
3423comp_template_args (oldargs, newargs)
3424 tree oldargs, newargs;
3425{
3426 int i;
3427
386b8a85
JM
3428 if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
3429 return 0;
3430
5566b478
MS
3431 for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
3432 {
3433 tree nt = TREE_VEC_ELT (newargs, i);
3434 tree ot = TREE_VEC_ELT (oldargs, i);
3435
34016c81 3436 if (! template_args_equal (ot, nt))
61a127b3 3437 return 0;
5566b478
MS
3438 }
3439 return 1;
3440}
3441
8d08fdba
MS
3442/* Given class template name and parameter list, produce a user-friendly name
3443 for the instantiation. */
e92cc029 3444
8d08fdba 3445static char *
36a117a5 3446mangle_class_name_for_template (name, parms, arglist)
8d08fdba
MS
3447 char *name;
3448 tree parms, arglist;
3449{
3450 static struct obstack scratch_obstack;
3451 static char *scratch_firstobj;
3452 int i, nparms;
8d08fdba
MS
3453
3454 if (!scratch_firstobj)
fc378698 3455 gcc_obstack_init (&scratch_obstack);
8d08fdba
MS
3456 else
3457 obstack_free (&scratch_obstack, scratch_firstobj);
fc378698 3458 scratch_firstobj = obstack_alloc (&scratch_obstack, 1);
8d08fdba 3459
8d08fdba 3460#define ccat(c) obstack_1grow (&scratch_obstack, (c));
8d08fdba 3461#define cat(s) obstack_grow (&scratch_obstack, (s), strlen (s))
8d08fdba
MS
3462
3463 cat (name);
3464 ccat ('<');
3465 nparms = TREE_VEC_LENGTH (parms);
36a117a5 3466 arglist = innermost_args (arglist);
8d08fdba
MS
3467 my_friendly_assert (nparms == TREE_VEC_LENGTH (arglist), 268);
3468 for (i = 0; i < nparms; i++)
3469 {
a292b002
MS
3470 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
3471 tree arg = TREE_VEC_ELT (arglist, i);
8d08fdba
MS
3472
3473 if (i)
3474 ccat (',');
3475
a292b002 3476 if (TREE_CODE (parm) == TYPE_DECL)
8d08fdba 3477 {
9e93bc9d 3478 cat (type_as_string (arg, TS_CHASE_TYPEDEFS));
8d08fdba
MS
3479 continue;
3480 }
73b0fce8
KL
3481 else if (TREE_CODE (parm) == TEMPLATE_DECL)
3482 {
3483 if (TREE_CODE (arg) == TEMPLATE_DECL)
2c73f9f5
ML
3484 {
3485 /* Already substituted with real template. Just output
3486 the template name here */
cb0dbb9a 3487 tree context = DECL_CONTEXT (arg);
ec4f972f
AS
3488 if (context)
3489 {
3490 /* The template may be defined in a namespace, or
3491 may be a member template. */
3492 my_friendly_assert (TREE_CODE (context) == NAMESPACE_DECL
3493 || CLASS_TYPE_P (context),
3494 980422);
2c73f9f5
ML
3495 cat(decl_as_string (DECL_CONTEXT (arg), 0));
3496 cat("::");
3497 }
3498 cat (IDENTIFIER_POINTER (DECL_NAME (arg)));
3499 }
73b0fce8
KL
3500 else
3501 /* Output the parameter declaration */
9e93bc9d 3502 cat (type_as_string (arg, TS_CHASE_TYPEDEFS));
73b0fce8
KL
3503 continue;
3504 }
8d08fdba
MS
3505 else
3506 my_friendly_assert (TREE_CODE (parm) == PARM_DECL, 269);
3507
3508 if (TREE_CODE (arg) == TREE_LIST)
3509 {
3510 /* New list cell was built because old chain link was in
3511 use. */
3512 my_friendly_assert (TREE_PURPOSE (arg) == NULL_TREE, 270);
3513 arg = TREE_VALUE (arg);
3514 }
3515 /* No need to check arglist against parmlist here; we did that
3516 in coerce_template_parms, called from lookup_template_class. */
3517 cat (expr_as_string (arg, 0));
3518 }
3519 {
3520 char *bufp = obstack_next_free (&scratch_obstack);
3521 int offset = 0;
3522 while (bufp[offset - 1] == ' ')
3523 offset--;
3524 obstack_blank_fast (&scratch_obstack, offset);
3525
3526 /* B<C<char> >, not B<C<char>> */
3527 if (bufp[offset - 1] == '>')
3528 ccat (' ');
3529 }
3530 ccat ('>');
3531 ccat ('\0');
3532 return (char *) obstack_base (&scratch_obstack);
8d08fdba
MS
3533}
3534
bd6dd845 3535static tree
5566b478
MS
3536classtype_mangled_name (t)
3537 tree t;
3538{
3539 if (CLASSTYPE_TEMPLATE_INFO (t)
36a117a5
MM
3540 /* Specializations have already had their names set up in
3541 lookup_template_class. */
9fbf56f7
MM
3542 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
3543 {
3544 tree tmpl = most_general_template (CLASSTYPE_TI_TEMPLATE (t));
3545
36a117a5
MM
3546 /* For non-primary templates, the template parameters are
3547 implicit from their surrounding context. */
9fbf56f7
MM
3548 if (PRIMARY_TEMPLATE_P (tmpl))
3549 {
3550 tree name = DECL_NAME (tmpl);
3551 char *mangled_name = mangle_class_name_for_template
3552 (IDENTIFIER_POINTER (name),
3553 DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
3554 CLASSTYPE_TI_ARGS (t));
3555 tree id = get_identifier (mangled_name);
3556 IDENTIFIER_TEMPLATE (id) = name;
3557 return id;
3558 }
5566b478 3559 }
9fbf56f7
MM
3560
3561 return TYPE_IDENTIFIER (t);
5566b478
MS
3562}
3563
3564static void
3565add_pending_template (d)
3566 tree d;
3567{
e92cc029
MS
3568 tree ti;
3569
3570 if (TREE_CODE_CLASS (TREE_CODE (d)) == 't')
3571 ti = CLASSTYPE_TEMPLATE_INFO (d);
3572 else
3573 ti = DECL_TEMPLATE_INFO (d);
3574
824b9a4c 3575 if (TI_PENDING_TEMPLATE_FLAG (ti))
5566b478
MS
3576 return;
3577
e1b3e07d 3578 *template_tail = tree_cons (build_srcloc_here (), d, NULL_TREE);
5566b478 3579 template_tail = &TREE_CHAIN (*template_tail);
824b9a4c 3580 TI_PENDING_TEMPLATE_FLAG (ti) = 1;
5566b478
MS
3581}
3582
386b8a85
JM
3583
3584/* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS (which
3585 may be either a _DECL or an overloaded function or an
3586 IDENTIFIER_NODE), and ARGLIST. */
3587
3588tree
3589lookup_template_function (fns, arglist)
3590 tree fns, arglist;
3591{
2c73f9f5 3592 tree type;
050367a3 3593
386b8a85
JM
3594 if (fns == NULL_TREE)
3595 {
8251199e 3596 cp_error ("non-template used as template");
386b8a85
JM
3597 return error_mark_node;
3598 }
3599
2c73f9f5
ML
3600 type = TREE_TYPE (fns);
3601 if (TREE_CODE (fns) == OVERLOAD || !type)
3602 type = unknown_type_node;
3603
672476cb
MM
3604 if (processing_template_decl)
3605 return build_min (TEMPLATE_ID_EXPR, type, fns, arglist);
3606 else
3607 return build (TEMPLATE_ID_EXPR, type, fns, arglist);
386b8a85
JM
3608}
3609
a2b60a0e
MM
3610/* Within the scope of a template class S<T>, the name S gets bound
3611 (in build_self_reference) to a TYPE_DECL for the class, not a
3612 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
3613 or one of its enclosing classes, and that type is a template,
3614 return the associated TEMPLATE_DECL. Otherwise, the original
3615 DECL is returned. */
3616
e9659ab0 3617static tree
a2b60a0e
MM
3618maybe_get_template_decl_from_type_decl (decl)
3619 tree decl;
3620{
3621 return (decl != NULL_TREE
3622 && TREE_CODE (decl) == TYPE_DECL
3623 && DECL_ARTIFICIAL (decl)
511b60ff 3624 && CLASS_TYPE_P (TREE_TYPE (decl))
a2b60a0e
MM
3625 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
3626 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
3627}
386b8a85 3628
8d08fdba
MS
3629/* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
3630 parameters, find the desired type.
3631
3632 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
36a117a5
MM
3633 (Actually ARGLIST may be either a TREE_LIST or a TREE_VEC. It will
3634 be a TREE_LIST if called directly from the parser, and a TREE_VEC
0a2c2fd1 3635 otherwise.) Since ARGLIST is build on the temp_decl_obstack, we must
36a117a5
MM
3636 copy it here to keep it from being reclaimed when the decl storage
3637 is reclaimed.
8d08fdba
MS
3638
3639 IN_DECL, if non-NULL, is the template declaration we are trying to
75650646
MM
3640 instantiate.
3641
36a117a5
MM
3642 If ENTERING_SCOPE is non-zero, we are about to enter the scope of
3643 the class we are looking up.
3644
75650646
MM
3645 If the template class is really a local class in a template
3646 function, then the FUNCTION_CONTEXT is the function in which it is
3647 being instantiated. */
e92cc029 3648
8d08fdba 3649tree
36a117a5 3650lookup_template_class (d1, arglist, in_decl, context, entering_scope)
8d08fdba
MS
3651 tree d1, arglist;
3652 tree in_decl;
e1467ff2 3653 tree context;
36a117a5 3654 int entering_scope;
8d08fdba 3655{
a703fb38 3656 tree template = NULL_TREE, parmlist;
dbfe2124 3657 tree t;
5566b478
MS
3658
3659 if (TREE_CODE (d1) == IDENTIFIER_NODE)
3660 {
f181d4ae
MM
3661 if (IDENTIFIER_VALUE (d1)
3662 && DECL_TEMPLATE_TEMPLATE_PARM_P (IDENTIFIER_VALUE (d1)))
3663 template = IDENTIFIER_VALUE (d1);
73b0fce8
KL
3664 else
3665 {
2c73f9f5
ML
3666 if (context)
3667 push_decl_namespace (context);
3ebc5c52
MM
3668 template = lookup_name (d1, /*prefer_type=*/0);
3669 template = maybe_get_template_decl_from_type_decl (template);
2c73f9f5
ML
3670 if (context)
3671 pop_decl_namespace ();
73b0fce8 3672 }
8d019cef
JM
3673 if (template)
3674 context = DECL_CONTEXT (template);
5566b478 3675 }
c91a56d2
MS
3676 else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
3677 {
802dbc34
JM
3678 tree type = TREE_TYPE (d1);
3679
3680 /* If we are declaring a constructor, say A<T>::A<T>, we will get
3681 an implicit typename for the second A. Deal with it. */
3682 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
3683 type = TREE_TYPE (type);
3684
3685 if (CLASSTYPE_TEMPLATE_INFO (type))
f3400fe2 3686 {
802dbc34 3687 template = CLASSTYPE_TI_TEMPLATE (type);
f3400fe2
JM
3688 d1 = DECL_NAME (template);
3689 }
c91a56d2 3690 }
ed44da02
MM
3691 else if (TREE_CODE (d1) == ENUMERAL_TYPE
3692 || (TREE_CODE_CLASS (TREE_CODE (d1)) == 't'
3693 && IS_AGGR_TYPE (d1)))
5566b478 3694 {
ed44da02 3695 template = TYPE_TI_TEMPLATE (d1);
5566b478
MS
3696 d1 = DECL_NAME (template);
3697 }
93cdc044
JM
3698 else if (TREE_CODE (d1) == TEMPLATE_DECL
3699 && TREE_CODE (DECL_RESULT (d1)) == TYPE_DECL)
3700 {
3701 template = d1;
3702 d1 = DECL_NAME (template);
3703 context = DECL_CONTEXT (template);
3704 }
5566b478
MS
3705 else
3706 my_friendly_abort (272);
8d08fdba 3707
8d08fdba 3708 /* With something like `template <class T> class X class X { ... };'
f181d4ae
MM
3709 we could end up with D1 having nothing but an IDENTIFIER_VALUE.
3710 We don't want to do that, but we have to deal with the situation,
3711 so let's give them some syntax errors to chew on instead of a
3712 crash. */
8d08fdba 3713 if (! template)
f3400fe2
JM
3714 {
3715 cp_error ("`%T' is not a template", d1);
3716 return error_mark_node;
3717 }
2c73f9f5 3718
c3baf4b5
JM
3719 if (context == NULL_TREE)
3720 context = global_namespace;
2c73f9f5 3721
8d08fdba
MS
3722 if (TREE_CODE (template) != TEMPLATE_DECL)
3723 {
8251199e 3724 cp_error ("non-template type `%T' used as a template", d1);
8d08fdba 3725 if (in_decl)
8251199e 3726 cp_error_at ("for template declaration `%D'", in_decl);
8d08fdba
MS
3727 return error_mark_node;
3728 }
8d08fdba 3729
73b0fce8
KL
3730 if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
3731 {
3732 /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
3733 template arguments */
3734
3735 tree parm = copy_template_template_parm (TREE_TYPE (template));
3736 tree template2 = TYPE_STUB_DECL (parm);
3737 tree arglist2;
3738
73b0fce8
KL
3739 parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
3740
744fac59 3741 arglist2 = coerce_template_parms (parmlist, arglist, template, 1, 1);
73b0fce8
KL
3742 if (arglist2 == error_mark_node)
3743 return error_mark_node;
3744
7ddedda4 3745 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (parm)
e1b3e07d 3746 = tree_cons (template2, arglist2, NULL_TREE);
73b0fce8
KL
3747 TYPE_SIZE (parm) = 0;
3748 return parm;
3749 }
36a117a5 3750 else
8d08fdba 3751 {
36a117a5 3752 tree template_type = TREE_TYPE (template);
7ac7b28f 3753 tree gen_tmpl;
36a117a5
MM
3754 tree type_decl;
3755 tree found = NULL_TREE;
3756 int arg_depth;
3757 int parm_depth;
dbfe2124 3758 int is_partial_instantiation;
830bfa74 3759
7ac7b28f
MM
3760 gen_tmpl = most_general_template (template);
3761 parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
36a117a5
MM
3762 parm_depth = TMPL_PARMS_DEPTH (parmlist);
3763 arg_depth = TMPL_ARGS_DEPTH (arglist);
3764
3765 if (arg_depth == 1 && parm_depth > 1)
3766 {
39c01e4c 3767 /* We've been given an incomplete set of template arguments.
36a117a5
MM
3768 For example, given:
3769
3770 template <class T> struct S1 {
3771 template <class U> struct S2 {};
3772 template <class U> struct S2<U*> {};
3773 };
3774
3775 we will be called with an ARGLIST of `U*', but the
3776 TEMPLATE will be `template <class T> template
3777 <class U> struct S1<T>::S2'. We must fill in the missing
3778 arguments. */
7ac7b28f
MM
3779 arglist
3780 = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
3781 arglist);
36a117a5
MM
3782 arg_depth = TMPL_ARGS_DEPTH (arglist);
3783 }
5566b478 3784
7ac7b28f 3785 /* Now we should enough arguments. */
36a117a5
MM
3786 my_friendly_assert (parm_depth == arg_depth, 0);
3787
7ac7b28f
MM
3788 /* From here on, we're only interested in the most general
3789 template. */
3790 template = gen_tmpl;
3791
36a117a5
MM
3792 /* Calculate the BOUND_ARGS. These will be the args that are
3793 actually tsubst'd into the definition to create the
3794 instantiation. */
3795 if (parm_depth > 1)
830bfa74
MM
3796 {
3797 /* We have multiple levels of arguments to coerce, at once. */
830bfa74 3798 int i;
e4a84209 3799 int saved_depth = TMPL_ARGS_DEPTH (arglist);
36a117a5 3800
f31c0a32 3801 tree bound_args = make_tree_vec (parm_depth);
830bfa74 3802
e4a84209 3803 for (i = saved_depth,
830bfa74 3804 t = DECL_TEMPLATE_PARMS (template);
e4a84209 3805 i > 0 && t != NULL_TREE;
830bfa74 3806 --i, t = TREE_CHAIN (t))
e4a84209
MM
3807 {
3808 tree a = coerce_template_parms (TREE_VALUE (t),
3809 arglist, template, 1, 1);
3810 SET_TMPL_ARGS_LEVEL (bound_args, i, a);
3811
3812 /* We temporarily reduce the length of the ARGLIST so
3813 that coerce_template_parms will see only the arguments
3814 corresponding to the template parameters it is
3815 examining. */
3816 TREE_VEC_LENGTH (arglist)--;
3817 }
3818
3819 /* Restore the ARGLIST to its full size. */
3820 TREE_VEC_LENGTH (arglist) = saved_depth;
3821
36a117a5 3822 arglist = bound_args;
830bfa74
MM
3823 }
3824 else
36a117a5
MM
3825 arglist
3826 = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
3827 innermost_args (arglist),
3828 template, 1, 1);
3829
3830 if (arglist == error_mark_node)
3831 /* We were unable to bind the arguments. */
5566b478 3832 return error_mark_node;
5566b478 3833
36a117a5
MM
3834 /* In the scope of a template class, explicit references to the
3835 template class refer to the type of the template, not any
3836 instantiation of it. For example, in:
3837
3838 template <class T> class C { void f(C<T>); }
3839
3840 the `C<T>' is just the same as `C'. Outside of the
3841 class, however, such a reference is an instantiation. */
ed44da02 3842 if (comp_template_args (TYPE_TI_ARGS (template_type),
36a117a5
MM
3843 arglist))
3844 {
3845 found = template_type;
3846
3847 if (!entering_scope && PRIMARY_TEMPLATE_P (template))
5566b478 3848 {
36a117a5
MM
3849 tree ctx;
3850
3851 /* Note that we use DECL_CONTEXT, rather than
3852 CP_DECL_CONTEXT, so that the termination test is
3853 always just `ctx'. We're not interested in namepace
3854 scopes. */
3855 for (ctx = current_class_type;
3856 ctx;
3857 ctx = (TREE_CODE_CLASS (TREE_CODE (ctx)) == 't')
3858 ? TYPE_CONTEXT (ctx) : DECL_CONTEXT (ctx))
3bfdc719 3859 if (same_type_p (ctx, template_type))
36a117a5
MM
3860 break;
3861
3862 if (!ctx)
3863 /* We're not in the scope of the class, so the
3864 TEMPLATE_TYPE is not the type we want after
3865 all. */
3866 found = NULL_TREE;
5566b478
MS
3867 }
3868 }
36a117a5
MM
3869
3870 if (!found)
75650646 3871 {
36a117a5
MM
3872 for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
3873 found; found = TREE_CHAIN (found))
3874 if (comp_template_args (TREE_PURPOSE (found), arglist))
3875 break;
75650646 3876
36a117a5
MM
3877 if (found)
3878 found = TREE_VALUE (found);
8d08fdba 3879 }
3ebc5c52 3880
36a117a5 3881 if (found)
f31c0a32 3882 return found;
5566b478 3883
dbfe2124 3884 /* This type is a "partial instantiation" if any of the template
486e4077
MM
3885 arguments still inolve template parameters. Note that we set
3886 IS_PARTIAL_INSTANTIATION for partial specializations as
3887 well. */
dbfe2124
MM
3888 is_partial_instantiation = uses_template_parms (arglist);
3889
3ebc5c52
MM
3890 if (!is_partial_instantiation
3891 && !PRIMARY_TEMPLATE_P (template)
3892 && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
3893 {
3ebc5c52
MM
3894 found = xref_tag_from_type (TREE_TYPE (template),
3895 DECL_NAME (template),
3896 /*globalize=*/1);
3897 return found;
3898 }
3ebc5c52 3899
36a117a5 3900 /* Create the type. */
ed44da02
MM
3901 if (TREE_CODE (template_type) == ENUMERAL_TYPE)
3902 {
dbfe2124 3903 if (!is_partial_instantiation)
61a127b3 3904 t = start_enum (TYPE_IDENTIFIER (template_type));
ed44da02 3905 else
dbfe2124 3906 /* We don't want to call start_enum for this type, since
ed44da02
MM
3907 the values for the enumeration constants may involve
3908 template parameters. And, no one should be interested
3909 in the enumeration constants for such a type. */
3910 t = make_node (ENUMERAL_TYPE);
3911 }
3912 else
3913 {
33848bb0 3914 t = make_aggr_type (TREE_CODE (template_type));
ed44da02
MM
3915 CLASSTYPE_DECLARED_CLASS (t)
3916 = CLASSTYPE_DECLARED_CLASS (template_type);
3917 CLASSTYPE_GOT_SEMICOLON (t) = 1;
3918 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
f668f160 3919 TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
ae673f14
JM
3920
3921 /* A local class. Make sure the decl gets registered properly. */
3922 if (context == current_function_decl)
3923 pushtag (DECL_NAME (template), t, 0);
ed44da02
MM
3924 }
3925
ae673f14
JM
3926 /* If we called start_enum or pushtag above, this information
3927 will already be set up. */
ed44da02
MM
3928 if (!TYPE_NAME (t))
3929 {
3930 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
36a117a5 3931
9188c363 3932 type_decl = create_implicit_typedef (DECL_NAME (template), t);
ed44da02 3933 DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
9188c363 3934 TYPE_STUB_DECL (t) = type_decl;
ed44da02
MM
3935 DECL_SOURCE_FILE (type_decl)
3936 = DECL_SOURCE_FILE (TYPE_STUB_DECL (template_type));
3937 DECL_SOURCE_LINE (type_decl)
3938 = DECL_SOURCE_LINE (TYPE_STUB_DECL (template_type));
ed44da02
MM
3939 }
3940 else
3941 type_decl = TYPE_NAME (t);
36a117a5 3942
9fbf56f7
MM
3943 /* Set up the template information. We have to figure out which
3944 template is the immediate parent if this is a full
3945 instantiation. */
3946 if (parm_depth == 1 || is_partial_instantiation
3947 || !PRIMARY_TEMPLATE_P (template))
3948 /* This case is easy; there are no member templates involved. */
3949 found = template;
3950 else
3951 {
3952 /* This is a full instantiation of a member template. There
3953 should be some partial instantiation of which this is an
3954 instance. */
3955
3956 for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
3957 found; found = TREE_CHAIN (found))
3958 {
3959 int success;
3960 tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
3961
3962 /* We only want partial instantiations, here, not
3963 specializations or full instantiations. */
3964 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
3965 || !uses_template_parms (TREE_VALUE (found)))
3966 continue;
3967
3968 /* Temporarily reduce by one the number of levels in the
3969 ARGLIST and in FOUND so as to avoid comparing the
3970 last set of arguments. */
3971 TREE_VEC_LENGTH (arglist)--;
3972 TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
3973
3974 /* See if the arguments match. If they do, then TMPL is
3975 the partial instantiation we want. */
3976 success = comp_template_args (TREE_PURPOSE (found), arglist);
3977
3978 /* Restore the argument vectors to their full size. */
3979 TREE_VEC_LENGTH (arglist)++;
3980 TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
3981
3982 if (success)
3983 {
3984 found = tmpl;
3985 break;
3986 }
3987 }
3988
3989 if (!found)
3990 my_friendly_abort (0);
3991 }
3992
ed44da02 3993 SET_TYPE_TEMPLATE_INFO (t,
9fbf56f7 3994 tree_cons (found, arglist, NULL_TREE));
dbfe2124
MM
3995 DECL_TEMPLATE_INSTANTIATIONS (template)
3996 = tree_cons (arglist, t,
3997 DECL_TEMPLATE_INSTANTIATIONS (template));
3998
3999 if (TREE_CODE (t) == ENUMERAL_TYPE
4000 && !is_partial_instantiation)
61a127b3
MM
4001 /* Now that the type has been registered on the instantiations
4002 list, we set up the enumerators. Because the enumeration
4003 constants may involve the enumeration type itself, we make
4004 sure to register the type first, and then create the
4005 constants. That way, doing tsubst_expr for the enumeration
4006 constants won't result in recursive calls here; we'll find
4007 the instantiation and exit above. */
4008 tsubst_enum (template_type, t, arglist);
dbfe2124 4009
36a117a5
MM
4010 /* Reset the name of the type, now that CLASSTYPE_TEMPLATE_INFO
4011 is set up. */
ed44da02
MM
4012 if (TREE_CODE (t) != ENUMERAL_TYPE)
4013 DECL_NAME (type_decl) = classtype_mangled_name (t);
36a117a5 4014 DECL_ASSEMBLER_NAME (type_decl) = DECL_NAME (type_decl);
dbfe2124 4015 if (!is_partial_instantiation)
36a117a5
MM
4016 {
4017 DECL_ASSEMBLER_NAME (type_decl)
4018 = get_identifier (build_overload_name (t, 1, 1));
50a6dbd7
JM
4019
4020 /* For backwards compatibility; code that uses
4021 -fexternal-templates expects looking up a template to
4022 instantiate it. I think DDD still relies on this.
4023 (jason 8/20/1998) */
ed44da02
MM
4024 if (TREE_CODE (t) != ENUMERAL_TYPE
4025 && flag_external_templates
36a117a5
MM
4026 && CLASSTYPE_INTERFACE_KNOWN (TREE_TYPE (template))
4027 && ! CLASSTYPE_INTERFACE_ONLY (TREE_TYPE (template)))
4028 add_pending_template (t);
4029 }
4030 else
077e7015
MM
4031 /* If the type makes use of template parameters, the
4032 code that generates debugging information will crash. */
4033 DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
8d08fdba 4034
36a117a5
MM
4035 return t;
4036 }
8d08fdba
MS
4037}
4038\f
8dfaeb63 4039struct pair_fn_data
8d08fdba 4040{
8dfaeb63
MM
4041 tree_fn_t fn;
4042 void *data;
4043};
4044
4045/* Called from for_each_template_parm via walk_tree. */
581d38d0 4046
8dfaeb63
MM
4047static tree
4048for_each_template_parm_r (tp, walk_subtrees, d)
4049 tree *tp;
4050 int *walk_subtrees;
4051 void *d;
4052{
4053 tree t = *tp;
4054 struct pair_fn_data *pfd = (struct pair_fn_data *) d;
4055 tree_fn_t fn = pfd->fn;
4056 void *data = pfd->data;
4057
581d38d0
MM
4058 if (TREE_CODE_CLASS (TREE_CODE (t)) == 't'
4059 && for_each_template_parm (TYPE_CONTEXT (t), fn, data))
8dfaeb63 4060 return error_mark_node;
581d38d0 4061
8d08fdba
MS
4062 switch (TREE_CODE (t))
4063 {
8d08fdba 4064 case RECORD_TYPE:
b7484fbe 4065 if (TYPE_PTRMEMFUNC_FLAG (t))
8dfaeb63 4066 break;
ed44da02
MM
4067 /* Fall through. */
4068
8d08fdba 4069 case UNION_TYPE:
ed44da02 4070 case ENUMERAL_TYPE:
8dfaeb63
MM
4071 if (!TYPE_TEMPLATE_INFO (t))
4072 *walk_subtrees = 0;
4073 else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
4074 fn, data))
4075 return error_mark_node;
4076 break;
4077
588c2d1c 4078 case METHOD_TYPE:
8dfaeb63
MM
4079 /* Since we're not going to walk subtrees, we have to do this
4080 explicitly here. */
588c2d1c 4081 if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data))
8dfaeb63 4082 return error_mark_node;
588c2d1c
MM
4083
4084 case FUNCTION_TYPE:
8dfaeb63
MM
4085 /* Check the return type. */
4086 if (for_each_template_parm (TREE_TYPE (t), fn, data))
4087 return error_mark_node;
4088
588c2d1c
MM
4089 /* Check the parameter types. Since default arguments are not
4090 instantiated until they are needed, the TYPE_ARG_TYPES may
4091 contain expressions that involve template parameters. But,
4092 no-one should be looking at them yet. And, once they're
4093 instantiated, they don't contain template parameters, so
4094 there's no point in looking at them then, either. */
4095 {
4096 tree parm;
4097
4098 for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
4099 if (for_each_template_parm (TREE_VALUE (parm), fn, data))
8dfaeb63 4100 return error_mark_node;
5566b478 4101
8dfaeb63
MM
4102 /* Since we've already handled the TYPE_ARG_TYPES, we don't
4103 want walk_tree walking into them itself. */
4104 *walk_subtrees = 0;
4105 }
4106 break;
3ac3d9ea 4107
8d08fdba 4108 case FUNCTION_DECL:
5566b478 4109 case VAR_DECL:
5566b478 4110 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
050367a3 4111 && for_each_template_parm (DECL_TI_ARGS (t), fn, data))
8dfaeb63
MM
4112 return error_mark_node;
4113 /* Fall through. */
4114
4115 case CONST_DECL:
8d08fdba 4116 case PARM_DECL:
050367a3
MM
4117 if (DECL_CONTEXT (t)
4118 && for_each_template_parm (DECL_CONTEXT (t), fn, data))
8dfaeb63
MM
4119 return error_mark_node;
4120 break;
8d08fdba 4121
73b0fce8 4122 case TEMPLATE_TEMPLATE_PARM:
744fac59 4123 /* Record template parameters such as `T' inside `TT<T>'. */
7ddedda4
MM
4124 if (TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t)
4125 && for_each_template_parm (TYPE_TI_ARGS (t), fn, data))
8dfaeb63
MM
4126 return error_mark_node;
4127 /* Fall through. */
4128
744fac59 4129 case TEMPLATE_TYPE_PARM:
f84b4be9 4130 case TEMPLATE_PARM_INDEX:
8dfaeb63
MM
4131 if (fn && (*fn)(t, data))
4132 return error_mark_node;
4133 else if (!fn)
4134 return error_mark_node;
4135 break;
5156628f 4136
8dfaeb63
MM
4137 case TEMPLATE_DECL:
4138 /* A template template parameter is encountered */
4139 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
4140 && for_each_template_parm (TREE_TYPE (t), fn, data))
4141 return error_mark_node;
db5ae43f 4142
8dfaeb63
MM
4143 /* Already substituted template template parameter */
4144 *walk_subtrees = 0;
4145 break;
b8865407 4146
4699c561 4147 case TYPENAME_TYPE:
8dfaeb63
MM
4148 if (!fn || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn, data))
4149 return error_mark_node;
4150 break;
4699c561 4151
8dfaeb63
MM
4152 case CONSTRUCTOR:
4153 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
4154 && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
4155 (TREE_TYPE (t)), fn, data))
4156 return error_mark_node;
4157 break;
4158
b8865407
MM
4159 case INDIRECT_REF:
4160 case COMPONENT_REF:
4699c561 4161 /* If there's no type, then this thing must be some expression
b8865407 4162 involving template parameters. */
4699c561 4163 if (!fn && !TREE_TYPE (t))
8dfaeb63
MM
4164 return error_mark_node;
4165 break;
b8865407 4166
42976354
BK
4167 case MODOP_EXPR:
4168 case CAST_EXPR:
4169 case REINTERPRET_CAST_EXPR:
4170 case CONST_CAST_EXPR:
4171 case STATIC_CAST_EXPR:
4172 case DYNAMIC_CAST_EXPR:
42976354
BK
4173 case ARROW_EXPR:
4174 case DOTSTAR_EXPR:
4175 case TYPEID_EXPR:
b8865407 4176 case LOOKUP_EXPR:
40242ccf 4177 case PSEUDO_DTOR_EXPR:
b8865407 4178 if (!fn)
8dfaeb63
MM
4179 return error_mark_node;
4180 break;
abff8e06 4181
8d08fdba 4182 default:
8dfaeb63 4183 break;
8d08fdba 4184 }
8dfaeb63
MM
4185
4186 /* We didn't find any template parameters we liked. */
4187 return NULL_TREE;
4188}
4189
4190/* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM, or
4191 TEMPLATE_PARM_INDEX in T, call FN with the parameter and the DATA.
4192 If FN returns non-zero, the iteration is terminated, and
4193 for_each_template_parm returns 1. Otherwise, the iteration
4194 continues. If FN never returns a non-zero value, the value
4195 returned by for_each_template_parm is 0. If FN is NULL, it is
4196 considered to be the function which always returns 1. */
4197
4198static int
4199for_each_template_parm (t, fn, data)
4200 tree t;
4201 tree_fn_t fn;
4202 void* data;
4203{
4204 struct pair_fn_data pfd;
4205
4206 /* Set up. */
4207 pfd.fn = fn;
4208 pfd.data = data;
4209
4210 /* Walk the tree. */
4211 return walk_tree (&t, for_each_template_parm_r, &pfd) != NULL_TREE;
8d08fdba
MS
4212}
4213
050367a3
MM
4214int
4215uses_template_parms (t)
4216 tree t;
4217{
4218 return for_each_template_parm (t, 0, 0);
4219}
4220
27fafc8d
JM
4221static struct tinst_level *current_tinst_level;
4222static struct tinst_level *free_tinst_level;
4223static int tinst_depth;
e9f32eb5 4224extern int max_tinst_depth;
5566b478 4225#ifdef GATHER_STATISTICS
27fafc8d 4226int depth_reached;
5566b478 4227#endif
8dfaeb63
MM
4228static int tinst_level_tick;
4229static int last_template_error_tick;
8d08fdba 4230
7bae46f4 4231/* Print out all the template instantiations that we are currently
27fafc8d
JM
4232 working on. If ERR, we are being called from cp_thing, so do
4233 the right thing for an error message. */
7bae46f4 4234
27fafc8d
JM
4235static void
4236print_template_context (err)
4237 int err;
7bae46f4
JM
4238{
4239 struct tinst_level *p = current_tinst_level;
4240 int line = lineno;
4241 char *file = input_filename;
4242
49e04385 4243 if (err && p)
27fafc8d 4244 {
49e04385
MM
4245 if (current_function_decl != p->decl
4246 && current_function_decl != NULL_TREE)
4247 /* We can get here during the processing of some synthesized
4248 method. Then, p->decl will be the function that's causing
4249 the synthesis. */
4250 ;
27fafc8d 4251 else
27fafc8d 4252 {
49e04385
MM
4253 if (current_function_decl == p->decl)
4254 /* Avoid redundancy with the the "In function" line. */;
4255 else
4256 fprintf (stderr, "%s: In instantiation of `%s':\n",
9e93bc9d 4257 file, decl_as_string (p->decl, TS_DECL_TYPE | TS_FUNC_NORETURN));
49e04385 4258
038fb86f
JM
4259 line = p->line;
4260 file = p->file;
27fafc8d
JM
4261 p = p->next;
4262 }
4263 }
4264
7bae46f4
JM
4265 for (; p; p = p->next)
4266 {
038fb86f 4267 fprintf (stderr, "%s:%d: instantiated from `%s'\n", file, line,
9e93bc9d 4268 decl_as_string (p->decl, TS_DECL_TYPE | TS_FUNC_NORETURN));
038fb86f
JM
4269 line = p->line;
4270 file = p->file;
7bae46f4 4271 }
038fb86f 4272 fprintf (stderr, "%s:%d: instantiated from here\n", file, line);
7bae46f4
JM
4273}
4274
27fafc8d
JM
4275/* Called from cp_thing to print the template context for an error. */
4276
4277void
4278maybe_print_template_context ()
4279{
4280 if (last_template_error_tick == tinst_level_tick
4281 || current_tinst_level == 0)
4282 return;
4283
4284 last_template_error_tick = tinst_level_tick;
4285 print_template_context (1);
4286}
4287
bd6dd845 4288static int
5566b478
MS
4289push_tinst_level (d)
4290 tree d;
8d08fdba
MS
4291{
4292 struct tinst_level *new;
8d08fdba 4293
7215f9a0
MS
4294 if (tinst_depth >= max_tinst_depth)
4295 {
8adf5b5e
JM
4296 /* If the instantiation in question still has unbound template parms,
4297 we don't really care if we can't instantiate it, so just return.
4298 This happens with base instantiation for implicit `typename'. */
4299 if (uses_template_parms (d))
4300 return 0;
4301
1139b3d8 4302 last_template_error_tick = tinst_level_tick;
8251199e 4303 error ("template instantiation depth exceeds maximum of %d",
7215f9a0 4304 max_tinst_depth);
8251199e
JM
4305 error (" (use -ftemplate-depth-NN to increase the maximum)");
4306 cp_error (" instantiating `%D'", d);
5566b478 4307
27fafc8d 4308 print_template_context (0);
5566b478 4309
7215f9a0
MS
4310 return 0;
4311 }
4312
8d08fdba
MS
4313 if (free_tinst_level)
4314 {
4315 new = free_tinst_level;
4316 free_tinst_level = new->next;
4317 }
4318 else
4319 new = (struct tinst_level *) xmalloc (sizeof (struct tinst_level));
4320
5566b478
MS
4321 new->decl = d;
4322 new->line = lineno;
4323 new->file = input_filename;
8d08fdba
MS
4324 new->next = current_tinst_level;
4325 current_tinst_level = new;
5566b478 4326
7215f9a0 4327 ++tinst_depth;
5566b478
MS
4328#ifdef GATHER_STATISTICS
4329 if (tinst_depth > depth_reached)
4330 depth_reached = tinst_depth;
4331#endif
4332
27fafc8d 4333 ++tinst_level_tick;
7215f9a0 4334 return 1;
8d08fdba
MS
4335}
4336
4337void
4338pop_tinst_level ()
4339{
4340 struct tinst_level *old = current_tinst_level;
4341
ae58fa02
MM
4342 /* Restore the filename and line number stashed away when we started
4343 this instantiation. */
4344 lineno = old->line;
4345 input_filename = old->file;
5f2c99c4 4346 extract_interface_info ();
ae58fa02 4347
8d08fdba
MS
4348 current_tinst_level = old->next;
4349 old->next = free_tinst_level;
4350 free_tinst_level = old;
7215f9a0 4351 --tinst_depth;
27fafc8d 4352 ++tinst_level_tick;
8d08fdba
MS
4353}
4354
4355struct tinst_level *
4356tinst_for_decl ()
4357{
4358 struct tinst_level *p = current_tinst_level;
4359
4360 if (p)
4361 for (; p->next ; p = p->next )
4362 ;
4363 return p;
4364}
4365
f84b4be9
JM
4366/* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
4367 vector of template arguments, as for tsubst.
4368
4369 Returns an appropriate tsbust'd friend declaration. */
4370
4371static tree
4372tsubst_friend_function (decl, args)
4373 tree decl;
4374 tree args;
4375{
4376 tree new_friend;
27fafc8d
JM
4377 int line = lineno;
4378 char *file = input_filename;
4379
4380 lineno = DECL_SOURCE_LINE (decl);
4381 input_filename = DECL_SOURCE_FILE (decl);
4382
f84b4be9
JM
4383 if (TREE_CODE (decl) == FUNCTION_DECL
4384 && DECL_TEMPLATE_INSTANTIATION (decl)
4385 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
4386 /* This was a friend declared with an explicit template
4387 argument list, e.g.:
4388
4389 friend void f<>(T);
4390
4391 to indicate that f was a template instantiation, not a new
4392 function declaration. Now, we have to figure out what
4393 instantiation of what template. */
4394 {
4395 tree template_id;
4396 tree new_args;
4397 tree tmpl;
f84b4be9
JM
4398
4399 template_id
4400 = lookup_template_function (tsubst_expr (DECL_TI_TEMPLATE (decl),
4393e105
MM
4401 args, /*complain=*/1,
4402 NULL_TREE),
f84b4be9 4403 tsubst (DECL_TI_ARGS (decl),
4393e105
MM
4404 args, /*complain=*/1,
4405 NULL_TREE));
4393e105 4406 new_friend = tsubst (decl, args, /*complain=*/1, NULL_TREE);
36a117a5
MM
4407 tmpl = determine_specialization (template_id, new_friend,
4408 &new_args,
bf8f3f93 4409 /*need_member_template=*/0);
27fafc8d
JM
4410 new_friend = instantiate_template (tmpl, new_args);
4411 goto done;
f84b4be9 4412 }
36a117a5 4413
4393e105 4414 new_friend = tsubst (decl, args, /*complain=*/1, NULL_TREE);
f84b4be9 4415
36a117a5 4416 /* The NEW_FRIEND will look like an instantiation, to the
f84b4be9
JM
4417 compiler, but is not an instantiation from the point of view of
4418 the language. For example, we might have had:
4419
4420 template <class T> struct S {
4421 template <class U> friend void f(T, U);
4422 };
4423
4424 Then, in S<int>, template <class U> void f(int, U) is not an
4425 instantiation of anything. */
4426 DECL_USE_TEMPLATE (new_friend) = 0;
4427 if (TREE_CODE (decl) == TEMPLATE_DECL)
4428 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
36a117a5
MM
4429
4430 /* The mangled name for the NEW_FRIEND is incorrect. The call to
4431 tsubst will have resulted in a call to
4432 set_mangled_name_for_template_decl. But, the function is not a
4433 template instantiation and should not be mangled like one.
4434 Therefore, we remangle the function name. We don't have to do
4435 this if the NEW_FRIEND is a template since
4436 set_mangled_name_for_template_decl doesn't do anything if the
4437 function declaration still uses template arguments. */
4438 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
4439 {
4440 set_mangled_name_for_decl (new_friend);
4441 DECL_RTL (new_friend) = 0;
4442 make_decl_rtl (new_friend, NULL_PTR, 1);
4443 }
4444
6eb3bb27 4445 if (DECL_NAMESPACE_SCOPE_P (new_friend))
f84b4be9 4446 {
36a117a5 4447 tree old_decl;
fbf1c34b
MM
4448 tree new_friend_template_info;
4449 tree new_friend_result_template_info;
92da7074 4450 tree ns;
fbf1c34b
MM
4451 int new_friend_is_defn;
4452
4453 /* We must save some information from NEW_FRIEND before calling
4454 duplicate decls since that function will free NEW_FRIEND if
4455 possible. */
4456 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
f84b4be9 4457 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
fbf1c34b
MM
4458 {
4459 /* This declaration is a `primary' template. */
4460 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
4461
4462 new_friend_is_defn
4463 = DECL_INITIAL (DECL_RESULT (new_friend)) != NULL_TREE;
4464 new_friend_result_template_info
4465 = DECL_TEMPLATE_INFO (DECL_RESULT (new_friend));
4466 }
4467 else
4468 {
4469 new_friend_is_defn = DECL_INITIAL (new_friend) != NULL_TREE;
4470 new_friend_result_template_info = NULL_TREE;
4471 }
36a117a5 4472
1c227897
MM
4473 /* Inside pushdecl_namespace_level, we will push into the
4474 current namespace. However, the friend function should go
4475 into the namespace of the template. */
92da7074
ML
4476 ns = decl_namespace_context (new_friend);
4477 push_nested_namespace (ns);
36a117a5 4478 old_decl = pushdecl_namespace_level (new_friend);
92da7074 4479 pop_nested_namespace (ns);
36a117a5
MM
4480
4481 if (old_decl != new_friend)
4482 {
4483 /* This new friend declaration matched an existing
4484 declaration. For example, given:
4485
4486 template <class T> void f(T);
4487 template <class U> class C {
4488 template <class T> friend void f(T) {}
4489 };
4490
4491 the friend declaration actually provides the definition
4492 of `f', once C has been instantiated for some type. So,
4493 old_decl will be the out-of-class template declaration,
4494 while new_friend is the in-class definition.
4495
4496 But, if `f' was called before this point, the
4497 instantiation of `f' will have DECL_TI_ARGS corresponding
4498 to `T' but not to `U', references to which might appear
4499 in the definition of `f'. Previously, the most general
4500 template for an instantiation of `f' was the out-of-class
4501 version; now it is the in-class version. Therefore, we
4502 run through all specialization of `f', adding to their
4503 DECL_TI_ARGS appropriately. In particular, they need a
4504 new set of outer arguments, corresponding to the
4505 arguments for this class instantiation.
4506
4507 The same situation can arise with something like this:
4508
4509 friend void f(int);
4510 template <class T> class C {
4511 friend void f(T) {}
4512 };
4513
4514 when `C<int>' is instantiated. Now, `f(int)' is defined
4515 in the class. */
4516
fbf1c34b
MM
4517 if (!new_friend_is_defn)
4518 /* On the other hand, if the in-class declaration does
4519 *not* provide a definition, then we don't want to alter
4520 existing definitions. We can just leave everything
4521 alone. */
36a117a5 4522 ;
fbf1c34b 4523 else
36a117a5 4524 {
fbf1c34b
MM
4525 /* Overwrite whatever template info was there before, if
4526 any, with the new template information pertaining to
4527 the declaration. */
4528 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
4529
4530 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
4531 /* duplicate_decls will take care of this case. */
4532 ;
4533 else
36a117a5 4534 {
fbf1c34b
MM
4535 tree t;
4536 tree new_friend_args;
4537
4538 DECL_TEMPLATE_INFO (DECL_RESULT (old_decl))
4539 = new_friend_result_template_info;
4540
4541 new_friend_args = TI_ARGS (new_friend_template_info);
4542 for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
4543 t != NULL_TREE;
4544 t = TREE_CHAIN (t))
4545 {
4546 tree spec = TREE_VALUE (t);
36a117a5 4547
fbf1c34b
MM
4548 DECL_TI_ARGS (spec)
4549 = add_outermost_template_args (new_friend_args,
4550 DECL_TI_ARGS (spec));
fbf1c34b
MM
4551 }
4552
4553 /* Now, since specializations are always supposed to
4554 hang off of the most general template, we must move
4555 them. */
4556 t = most_general_template (old_decl);
4557 if (t != old_decl)
4558 {
4559 DECL_TEMPLATE_SPECIALIZATIONS (t)
4560 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
4561 DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
4562 DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
4563 }
36a117a5
MM
4564 }
4565 }
4566
4567 /* The information from NEW_FRIEND has been merged into OLD_DECL
4568 by duplicate_decls. */
4569 new_friend = old_decl;
4570 }
f84b4be9
JM
4571 }
4572 else if (TYPE_SIZE (DECL_CONTEXT (new_friend)))
4573 {
4574 /* Check to see that the declaration is really present, and,
4575 possibly obtain an improved declaration. */
4576 tree fn = check_classfn (DECL_CONTEXT (new_friend),
4577 new_friend);
4578
4579 if (fn)
4580 new_friend = fn;
4581 }
4582
27fafc8d
JM
4583 done:
4584 lineno = line;
4585 input_filename = file;
f84b4be9
JM
4586 return new_friend;
4587}
4588
1aed5355
MM
4589/* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
4590 template arguments, as for tsubst.
6757edfe
MM
4591
4592 Returns an appropriate tsbust'd friend type. */
4593
4594static tree
1aed5355
MM
4595tsubst_friend_class (friend_tmpl, args)
4596 tree friend_tmpl;
6757edfe
MM
4597 tree args;
4598{
1aed5355 4599 tree friend_type;
25aab5d0 4600 tree tmpl;
6757edfe 4601
25aab5d0
MM
4602 /* First, we look for a class template. */
4603 tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/0);
4604
4605 /* But, if we don't find one, it might be because we're in a
4606 situation like this:
4607
4608 template <class T>
4609 struct S {
4610 template <class U>
4611 friend struct S;
4612 };
4613
4614 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
4615 for `S<int>', not the TEMPLATE_DECL. */
bc639f90 4616 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
25aab5d0
MM
4617 {
4618 tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/1);
4619 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
4620 }
6757edfe 4621
25aab5d0 4622 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6757edfe
MM
4623 {
4624 /* The friend template has already been declared. Just
36a117a5
MM
4625 check to see that the declarations match, and install any new
4626 default parameters. We must tsubst the default parameters,
4627 of course. We only need the innermost template parameters
4628 because that is all that redeclare_class_template will look
4629 at. */
4630 tree parms
4631 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
4393e105 4632 args, /*complain=*/1);
36a117a5 4633 redeclare_class_template (TREE_TYPE (tmpl), parms);
6757edfe
MM
4634 friend_type = TREE_TYPE (tmpl);
4635 }
4636 else
4637 {
4638 /* The friend template has not already been declared. In this
4639 case, the instantiation of the template class will cause the
4640 injection of this template into the global scope. */
4393e105 4641 tmpl = tsubst (friend_tmpl, args, /*complain=*/1, NULL_TREE);
6757edfe
MM
4642
4643 /* The new TMPL is not an instantiation of anything, so we
4644 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
4645 the new type because that is supposed to be the corresponding
4646 template decl, i.e., TMPL. */
4647 DECL_USE_TEMPLATE (tmpl) = 0;
4648 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
4649 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
4650
4651 /* Inject this template into the global scope. */
4652 friend_type = TREE_TYPE (pushdecl_top_level (tmpl));
4653 }
4654
4655 return friend_type;
4656}
f84b4be9 4657
8d08fdba 4658tree
5566b478
MS
4659instantiate_class_template (type)
4660 tree type;
8d08fdba 4661{
61a127b3 4662 tree template, args, pattern, t;
36a117a5 4663 tree typedecl;
8d08fdba 4664
5566b478 4665 if (type == error_mark_node)
8d08fdba
MS
4666 return error_mark_node;
4667
5566b478
MS
4668 if (TYPE_BEING_DEFINED (type) || TYPE_SIZE (type))
4669 return type;
4670
6bdb985f 4671 /* Figure out which template is being instantiated. */
36a117a5 4672 template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
5566b478 4673 my_friendly_assert (TREE_CODE (template) == TEMPLATE_DECL, 279);
73aad9b9 4674
6bdb985f
MM
4675 /* Figure out which arguments are being used to do the
4676 instantiation. */
4677 args = CLASSTYPE_TI_ARGS (type);
4c571114 4678 PARTIAL_INSTANTIATION_P (type) = uses_template_parms (args);
6bdb985f 4679
4c571114
MM
4680 if (pedantic && PARTIAL_INSTANTIATION_P (type))
4681 /* If this is a partial instantiation, then we can't instantiate
4682 the type; there's no telling whether or not one of the
4683 template parameters might eventually be instantiated to some
4684 value that results in a specialization being used. For
4685 example, consider:
4686
4687 template <class T>
4688 struct S {};
4689
4690 template <class U>
4691 void f(S<U>);
4692
4693 template <>
4694 struct S<int> {};
4695
4696 Now, the `S<U>' in `f<int>' is the specialization, not an
5db698f6 4697 instantiation of the original template. */
f31c0a32 4698 return type;
4c571114
MM
4699
4700 /* Determine what specialization of the original template to
4701 instantiate. */
4702 if (PARTIAL_INSTANTIATION_P (type))
6bdb985f
MM
4703 /* There's no telling which specialization is appropriate at this
4704 point. Since all peeking at the innards of this partial
4705 instantiation are extensions (like the "implicit typename"
4706 extension, which allows users to omit the keyword `typename' on
4707 names that are declared as types in template base classes), we
4708 are free to do what we please.
4709
4710 Trying to figure out which partial instantiation to use can
4711 cause a crash. (Some of the template arguments don't even have
4712 types.) So, we just use the most general version. */
4713 t = NULL_TREE;
4714 else
73aad9b9 4715 {
6bdb985f
MM
4716 t = most_specialized_class (template, args);
4717
4718 if (t == error_mark_node)
73aad9b9 4719 {
d8e178a0 4720 const char *str = "candidates are:";
6bdb985f
MM
4721 cp_error ("ambiguous class template instantiation for `%#T'", type);
4722 for (t = DECL_TEMPLATE_SPECIALIZATIONS (template); t;
4723 t = TREE_CHAIN (t))
73aad9b9 4724 {
6bdb985f
MM
4725 if (get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t),
4726 args))
4727 {
4728 cp_error_at ("%s %+#T", str, TREE_TYPE (t));
4729 str = " ";
4730 }
73aad9b9 4731 }
6bdb985f 4732 TYPE_BEING_DEFINED (type) = 1;
f31c0a32 4733 return error_mark_node;
73aad9b9 4734 }
73aad9b9 4735 }
6bdb985f
MM
4736
4737 if (t)
73aad9b9
JM
4738 pattern = TREE_TYPE (t);
4739 else
4740 pattern = TREE_TYPE (template);
5566b478 4741
4c571114
MM
4742 /* If the template we're instantiating is incomplete, then clearly
4743 there's nothing we can do. */
5566b478 4744 if (TYPE_SIZE (pattern) == NULL_TREE)
f31c0a32 4745 return type;
5566b478 4746
4c571114
MM
4747 /* If this is a partial instantiation, don't tsubst anything. We will
4748 only use this type for implicit typename, so the actual contents don't
4749 matter. All that matters is whether a particular name is a type. */
4750 if (PARTIAL_INSTANTIATION_P (type))
4751 {
4752 /* The fields set here must be kept in sync with those cleared
4753 in begin_class_definition. */
4754 TYPE_BINFO_BASETYPES (type) = TYPE_BINFO_BASETYPES (pattern);
4755 TYPE_FIELDS (type) = TYPE_FIELDS (pattern);
4756 TYPE_METHODS (type) = TYPE_METHODS (pattern);
4757 CLASSTYPE_TAGS (type) = CLASSTYPE_TAGS (pattern);
4758 /* Pretend that the type is complete, so that we will look
4759 inside it during name lookup and such. */
4760 TYPE_SIZE (type) = integer_zero_node;
f31c0a32 4761 return type;
4c571114
MM
4762 }
4763
4764 /* If we've recursively instantiated too many templates, stop. */
4765 if (! push_tinst_level (type))
f31c0a32 4766 return type;
4c571114
MM
4767
4768 /* Now we're really doing the instantiation. Mark the type as in
4769 the process of being defined. */
4770 TYPE_BEING_DEFINED (type) = 1;
4771
4772 maybe_push_to_top_level (uses_template_parms (type));
4c571114 4773
73aad9b9 4774 if (t)
36a117a5
MM
4775 {
4776 /* This TYPE is actually a instantiation of of a partial
4777 specialization. We replace the innermost set of ARGS with
4778 the arguments appropriate for substitution. For example,
4779 given:
4780
4781 template <class T> struct S {};
4782 template <class T> struct S<T*> {};
4783
4784 and supposing that we are instantiating S<int*>, ARGS will
4785 present be {int*} but we need {int}. */
4786 tree inner_args
4787 = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t),
4788 args);
4789
4790 /* If there were multiple levels in ARGS, replacing the
4791 innermost level would alter CLASSTYPE_TI_ARGS, which we don't
4792 want, so we make a copy first. */
4793 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
4794 {
4795 args = copy_node (args);
4796 SET_TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args), inner_args);
4797 }
4798 else
4799 args = inner_args;
4800 }
8d019cef 4801
5566b478
MS
4802 if (flag_external_templates)
4803 {
4804 if (flag_alt_external_templates)
4805 {
4806 CLASSTYPE_INTERFACE_ONLY (type) = interface_only;
4807 SET_CLASSTYPE_INTERFACE_UNKNOWN_X (type, interface_unknown);
4808 CLASSTYPE_VTABLE_NEEDS_WRITING (type)
2604412d
JM
4809 = (! CLASSTYPE_INTERFACE_ONLY (type)
4810 && CLASSTYPE_INTERFACE_KNOWN (type));
5566b478
MS
4811 }
4812 else
4813 {
4814 CLASSTYPE_INTERFACE_ONLY (type) = CLASSTYPE_INTERFACE_ONLY (pattern);
4815 SET_CLASSTYPE_INTERFACE_UNKNOWN_X
4816 (type, CLASSTYPE_INTERFACE_UNKNOWN (pattern));
4817 CLASSTYPE_VTABLE_NEEDS_WRITING (type)
2604412d
JM
4818 = (! CLASSTYPE_INTERFACE_ONLY (type)
4819 && CLASSTYPE_INTERFACE_KNOWN (type));
5566b478
MS
4820 }
4821 }
4822 else
8d08fdba 4823 {
5566b478
MS
4824 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
4825 CLASSTYPE_VTABLE_NEEDS_WRITING (type) = 1;
8d08fdba
MS
4826 }
4827
f7da6097
MS
4828 TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
4829 TYPE_HAS_DESTRUCTOR (type) = TYPE_HAS_DESTRUCTOR (pattern);
f7da6097
MS
4830 TYPE_OVERLOADS_CALL_EXPR (type) = TYPE_OVERLOADS_CALL_EXPR (pattern);
4831 TYPE_OVERLOADS_ARRAY_REF (type) = TYPE_OVERLOADS_ARRAY_REF (pattern);
4832 TYPE_OVERLOADS_ARROW (type) = TYPE_OVERLOADS_ARROW (pattern);
834c6dff
MM
4833 TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
4834 TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
f7da6097
MS
4835 TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
4836 TYPE_VEC_DELETE_TAKES_SIZE (type) = TYPE_VEC_DELETE_TAKES_SIZE (pattern);
4837 TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
4838 TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
4839 TYPE_HAS_ABSTRACT_ASSIGN_REF (type) = TYPE_HAS_ABSTRACT_ASSIGN_REF (pattern);
4840 TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
4841 TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
f7da6097
MS
4842 TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
4843 TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
4c6b7393
MM
4844 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (type)
4845 = TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (pattern);
f7da6097
MS
4846 TYPE_USES_MULTIPLE_INHERITANCE (type)
4847 = TYPE_USES_MULTIPLE_INHERITANCE (pattern);
4848 TYPE_USES_VIRTUAL_BASECLASSES (type)
4849 = TYPE_USES_VIRTUAL_BASECLASSES (pattern);
4850 TYPE_PACKED (type) = TYPE_PACKED (pattern);
4851 TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
eff71ab0 4852 TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
6bdb8141
JM
4853 if (ANON_AGGR_TYPE_P (pattern))
4854 SET_ANON_AGGR_TYPE_P (type);
f7da6097 4855
3fd71a52
MM
4856 if (TYPE_BINFO_BASETYPES (pattern))
4857 {
4858 tree base_list = NULL_TREE;
4859 tree pbases = TYPE_BINFO_BASETYPES (pattern);
4860 int i;
5566b478 4861
3fd71a52
MM
4862 /* Substitute into each of the bases to determine the actual
4863 basetypes. */
4864 for (i = 0; i < TREE_VEC_LENGTH (pbases); ++i)
4865 {
4866 tree base;
4867 tree access;
4868 tree pbase;
5566b478 4869
3fd71a52 4870 pbase = TREE_VEC_ELT (pbases, i);
711734a9 4871
3fd71a52
MM
4872 /* Substitue to figure out the base class. */
4873 base = tsubst (BINFO_TYPE (pbase), args,
4874 /*complain=*/1, NULL_TREE);
4875 if (base == error_mark_node)
4876 continue;
711734a9 4877
3fd71a52
MM
4878 /* Calculate the correct access node. */
4879 if (TREE_VIA_VIRTUAL (pbase))
4880 {
4881 if (TREE_VIA_PUBLIC (pbase))
4882 access = access_public_virtual_node;
4883 else if (TREE_VIA_PROTECTED (pbase))
4884 access = access_protected_virtual_node;
d6479fe7 4885 else
3fd71a52
MM
4886 access = access_private_virtual_node;
4887 }
4888 else
4889 {
4890 if (TREE_VIA_PUBLIC (pbase))
4891 access = access_public_node;
4892 else if (TREE_VIA_PROTECTED (pbase))
4893 access = access_protected_node;
d6479fe7 4894 else
3fd71a52
MM
4895 access = access_private_node;
4896 }
dfbcd65a 4897
3fd71a52
MM
4898 base_list = tree_cons (access, base, base_list);
4899 }
dfbcd65a 4900
3fd71a52
MM
4901 /* The list is now in reverse order; correct that. */
4902 base_list = nreverse (base_list);
4903
4904 /* Now call xref_basetypes to set up all the base-class
4905 information. */
4906 xref_basetypes (TREE_CODE (pattern) == RECORD_TYPE
4907 ? (CLASSTYPE_DECLARED_CLASS (pattern)
4908 ? class_type_node : record_type_node)
4909 : union_type_node,
4910 DECL_NAME (TYPE_NAME (pattern)),
4911 type,
4912 base_list);
4913 }
5566b478 4914
b74a0560
MM
4915 /* Now that our base classes are set up, enter the scope of the
4916 class, so that name lookups into base classes, etc. will work
4917 corectly. This is precisely analagous to what we do in
4918 begin_class_definition when defining an ordinary non-template
4919 class. */
4920 pushclass (type, 1);
4921
5566b478 4922 for (t = CLASSTYPE_TAGS (pattern); t; t = TREE_CHAIN (t))
8d08fdba 4923 {
5566b478 4924 tree tag = TREE_VALUE (t);
36a117a5
MM
4925 tree name = TYPE_IDENTIFIER (tag);
4926 tree newtag;
5566b478 4927
4393e105 4928 newtag = tsubst (tag, args, /*complain=*/1, NULL_TREE);
61a127b3 4929 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
ed44da02 4930 {
486e4077
MM
4931 if (TYPE_LANG_SPECIFIC (tag) && CLASSTYPE_IS_TEMPLATE (tag))
4932 /* Unfortunately, lookup_template_class sets
4933 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
4934 instantiation (i.e., for the type of a member template
4935 class nested within a template class.) This behavior is
4936 required for maybe_process_partial_specialization to work
4937 correctly, but is not accurate in this case; the TAG is not
4938 an instantiation of anything. (The corresponding
4939 TEMPLATE_DECL is an instantiation, but the TYPE is not.) */
4940 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
4941
ed44da02
MM
4942 /* Now, we call pushtag to put this NEWTAG into the scope of
4943 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
4944 pushtag calling push_template_decl. We don't have to do
4945 this for enums because it will already have been done in
4946 tsubst_enum. */
4947 if (name)
4948 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
4949 pushtag (name, newtag, /*globalize=*/0);
4950 }
8d08fdba
MS
4951 }
4952
5566b478
MS
4953 /* Don't replace enum constants here. */
4954 for (t = TYPE_FIELDS (pattern); t; t = TREE_CHAIN (t))
8dd3f57a 4955 if (TREE_CODE (t) != CONST_DECL)
5566b478 4956 {
ae58fa02
MM
4957 tree r;
4958
4959 /* The the file and line for this declaration, to assist in
4960 error message reporting. Since we called push_tinst_level
4961 above, we don't need to restore these. */
4962 lineno = DECL_SOURCE_LINE (t);
4963 input_filename = DECL_SOURCE_FILE (t);
4964
4393e105 4965 r = tsubst (t, args, /*complain=*/1, NULL_TREE);
5566b478
MS
4966 if (TREE_CODE (r) == VAR_DECL)
4967 {
fa8d6e85
MM
4968 tree init;
4969
94c82a77 4970 if (DECL_DEFINED_IN_CLASS_P (r))
fa8d6e85
MM
4971 init = tsubst_expr (DECL_INITIAL (t), args,
4972 /*complain=*/1, NULL_TREE);
4973 else
4974 init = NULL_TREE;
4975
4976 finish_static_data_member_decl (r, init,
4977 /*asmspec_tree=*/NULL_TREE,
fa8d6e85
MM
4978 /*flags=*/0);
4979
6ba89f8e
MM
4980 if (DECL_DEFINED_IN_CLASS_P (r))
4981 check_static_variable_definition (r, TREE_TYPE (r));
5566b478 4982 }
61a127b3
MM
4983
4984 /* R will have a TREE_CHAIN if and only if it has already been
4985 processed by finish_member_declaration. This can happen
4986 if, for example, it is a TYPE_DECL for a class-scoped
4987 ENUMERAL_TYPE; such a thing will already have been added to
4988 the field list by tsubst_enum above. */
4989 if (!TREE_CHAIN (r))
4990 {
4991 set_current_access_from_decl (r);
4992 finish_member_declaration (r);
4993 }
5566b478 4994 }
8d08fdba 4995
61a127b3
MM
4996 /* Set up the list (TYPE_METHODS) and vector (CLASSTYPE_METHOD_VEC)
4997 for this instantiation. */
4998 for (t = TYPE_METHODS (pattern); t; t = TREE_CHAIN (t))
4999 {
4393e105 5000 tree r = tsubst (t, args, /*complain=*/1, NULL_TREE);
61a127b3
MM
5001 set_current_access_from_decl (r);
5002 finish_member_declaration (r);
5003 }
8d08fdba 5004
2604412d
JM
5005 /* Construct the DECL_FRIENDLIST for the new class type. */
5006 typedecl = TYPE_MAIN_DECL (type);
5007 for (t = DECL_FRIENDLIST (TYPE_MAIN_DECL (pattern));
5008 t != NULL_TREE;
5009 t = TREE_CHAIN (t))
f84b4be9 5010 {
2604412d 5011 tree friends;
f84b4be9 5012
2604412d
JM
5013 for (friends = TREE_VALUE (t);
5014 friends != NULL_TREE;
5015 friends = TREE_CHAIN (friends))
0c0aac2f
MM
5016 if (TREE_PURPOSE (friends) == error_mark_node)
5017 add_friend (type,
5018 tsubst_friend_function (TREE_VALUE (friends),
5019 args));
5020 else
4f1c5b7d 5021 my_friendly_abort (20000216);
2604412d 5022 }
5566b478 5023
6757edfe
MM
5024 for (t = CLASSTYPE_FRIEND_CLASSES (pattern);
5025 t != NULL_TREE;
5026 t = TREE_CHAIN (t))
5027 {
5028 tree friend_type = TREE_VALUE (t);
1aed5355 5029 tree new_friend_type;
6757edfe 5030
36a117a5
MM
5031 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5032 new_friend_type = tsubst_friend_class (friend_type, args);
5033 else if (uses_template_parms (friend_type))
4393e105
MM
5034 new_friend_type = tsubst (friend_type, args, /*complain=*/1,
5035 NULL_TREE);
36a117a5 5036 else
61fc8c9e
MM
5037 {
5038 tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
36a117a5 5039
61fc8c9e
MM
5040 /* The call to xref_tag_from_type does injection for friend
5041 classes. */
5042 push_nested_namespace (ns);
5043 new_friend_type =
5044 xref_tag_from_type (friend_type, NULL_TREE, 1);
5045 pop_nested_namespace (ns);
5046 }
1aed5355
MM
5047
5048 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5049 /* Trick make_friend_class into realizing that the friend
5050 we're adding is a template, not an ordinary class. It's
5051 important that we use make_friend_class since it will
5052 perform some error-checking and output cross-reference
5053 information. */
5054 ++processing_template_decl;
5055
5056 make_friend_class (type, new_friend_type);
fc378698 5057
1aed5355
MM
5058 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5059 --processing_template_decl;
6757edfe 5060 }
fc378698 5061
2604412d
JM
5062 for (t = TYPE_FIELDS (type); t; t = TREE_CHAIN (t))
5063 if (TREE_CODE (t) == FIELD_DECL)
5064 {
5065 TREE_TYPE (t) = complete_type (TREE_TYPE (t));
5066 require_complete_type (t);
5067 }
5566b478 5068
61a127b3
MM
5069 /* Set the file and line number information to whatever is given for
5070 the class itself. This puts error messages involving generated
5071 implicit functions at a predictable point, and the same point
5072 that would be used for non-template classes. */
5073 lineno = DECL_SOURCE_LINE (typedecl);
5074 input_filename = DECL_SOURCE_FILE (typedecl);
5075
5076 unreverse_member_declarations (type);
9f33663b 5077 finish_struct_1 (type);
2604412d 5078 CLASSTYPE_GOT_SEMICOLON (type) = 1;
e92cc029 5079
5524676d
JM
5080 /* Clear this now so repo_template_used is happy. */
5081 TYPE_BEING_DEFINED (type) = 0;
2604412d 5082 repo_template_used (type);
8d08fdba 5083
9188c363
MM
5084 /* Now that the class is complete, instantiate default arguments for
5085 any member functions. We don't do this earlier because the
5086 default arguments may reference members of the class. */
5087 if (!PRIMARY_TEMPLATE_P (template))
5088 for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
5089 if (TREE_CODE (t) == FUNCTION_DECL
5090 /* Implicitly generated member functions will not have tmplate
5091 information; they are not instantiations, but instead are
5092 created "fresh" for each instantiation. */
5093 && DECL_TEMPLATE_INFO (t))
5094 tsubst_default_arguments (t);
5095
b74a0560 5096 popclass ();
5566b478
MS
5097 pop_from_top_level ();
5098 pop_tinst_level ();
5099
5100 return type;
8d08fdba
MS
5101}
5102
5103static int
5104list_eq (t1, t2)
5105 tree t1, t2;
5106{
5107 if (t1 == NULL_TREE)
5108 return t2 == NULL_TREE;
5109 if (t2 == NULL_TREE)
5110 return 0;
5111 /* Don't care if one declares its arg const and the other doesn't -- the
5112 main variant of the arg type is all that matters. */
5113 if (TYPE_MAIN_VARIANT (TREE_VALUE (t1))
5114 != TYPE_MAIN_VARIANT (TREE_VALUE (t2)))
5115 return 0;
5116 return list_eq (TREE_CHAIN (t1), TREE_CHAIN (t2));
5117}
5118
00d3396f
JM
5119/* If arg is a non-type template parameter that does not depend on template
5120 arguments, fold it like we weren't in the body of a template. */
5121
5122static tree
5123maybe_fold_nontype_arg (arg)
5124 tree arg;
5125{
7610f2ce
JM
5126 /* If we're not in a template, ARG is already as simple as it's going to
5127 get, and trying to reprocess the trees will break. */
5128 if (! processing_template_decl)
5129 return arg;
5130
00d3396f
JM
5131 if (TREE_CODE_CLASS (TREE_CODE (arg)) != 't'
5132 && !uses_template_parms (arg))
5133 {
5134 /* Sometimes, one of the args was an expression involving a
5135 template constant parameter, like N - 1. Now that we've
5136 tsubst'd, we might have something like 2 - 1. This will
5137 confuse lookup_template_class, so we do constant folding
5138 here. We have to unset processing_template_decl, to
5139 fool build_expr_from_tree() into building an actual
5140 tree. */
5141
5142 int saved_processing_template_decl = processing_template_decl;
5143 processing_template_decl = 0;
5144 arg = fold (build_expr_from_tree (arg));
5145 processing_template_decl = saved_processing_template_decl;
5146 }
5147 return arg;
5148}
5149
a221d52f 5150/* Return the TREE_VEC with the arguments for the innermost template header,
36a117a5
MM
5151 where ARGS is either that or the VEC of VECs for all the
5152 arguments. */
a221d52f
JM
5153
5154tree
36a117a5 5155innermost_args (args)
a221d52f 5156 tree args;
a221d52f 5157{
36a117a5 5158 return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
a221d52f 5159}
f84b4be9 5160
830bfa74
MM
5161/* Substitute ARGS into the vector of template arguments T. */
5162
e9659ab0 5163static tree
4393e105 5164tsubst_template_arg_vector (t, args, complain)
830bfa74
MM
5165 tree t;
5166 tree args;
4393e105 5167 int complain;
830bfa74
MM
5168{
5169 int len = TREE_VEC_LENGTH (t), need_new = 0, i;
5170 tree *elts = (tree *) alloca (len * sizeof (tree));
5171
5172 bzero ((char *) elts, len * sizeof (tree));
5173
5174 for (i = 0; i < len; i++)
5175 {
5176 if (TREE_VEC_ELT (t, i) != NULL_TREE
5177 && TREE_CODE (TREE_VEC_ELT (t, i)) == TREE_VEC)
4393e105
MM
5178 elts[i] = tsubst_template_arg_vector (TREE_VEC_ELT (t, i),
5179 args, complain);
830bfa74
MM
5180 else
5181 elts[i] = maybe_fold_nontype_arg
4393e105
MM
5182 (tsubst_expr (TREE_VEC_ELT (t, i), args, complain,
5183 NULL_TREE));
830bfa74
MM
5184
5185 if (elts[i] != TREE_VEC_ELT (t, i))
5186 need_new = 1;
5187 }
5188
5189 if (!need_new)
5190 return t;
5191
f31c0a32 5192 t = make_tree_vec (len);
830bfa74
MM
5193 for (i = 0; i < len; i++)
5194 TREE_VEC_ELT (t, i) = elts[i];
5195
5196 return t;
5197}
5198
36a117a5
MM
5199/* Return the result of substituting ARGS into the template parameters
5200 given by PARMS. If there are m levels of ARGS and m + n levels of
5201 PARMS, then the result will contain n levels of PARMS. For
5202 example, if PARMS is `template <class T> template <class U>
5203 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
5204 result will be `template <int*, double, class V>'. */
5205
e9659ab0 5206static tree
4393e105 5207tsubst_template_parms (parms, args, complain)
36a117a5
MM
5208 tree parms;
5209 tree args;
4393e105 5210 int complain;
36a117a5 5211{
f71f87f9
MM
5212 tree r = NULL_TREE;
5213 tree* new_parms;
36a117a5
MM
5214
5215 for (new_parms = &r;
5216 TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
5217 new_parms = &(TREE_CHAIN (*new_parms)),
5218 parms = TREE_CHAIN (parms))
5219 {
5220 tree new_vec =
5221 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
5222 int i;
5223
5224 for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
5225 {
5226 tree default_value =
5227 TREE_PURPOSE (TREE_VEC_ELT (TREE_VALUE (parms), i));
5228 tree parm_decl =
5229 TREE_VALUE (TREE_VEC_ELT (TREE_VALUE (parms), i));
5230
5231 TREE_VEC_ELT (new_vec, i)
4393e105
MM
5232 = build_tree_list (tsubst (default_value, args, complain,
5233 NULL_TREE),
5234 tsubst (parm_decl, args, complain,
5235 NULL_TREE));
36a117a5
MM
5236 }
5237
5238 *new_parms =
5239 tree_cons (build_int_2 (0, (TMPL_PARMS_DEPTH (parms)
5240 - TMPL_ARGS_DEPTH (args))),
5241 new_vec, NULL_TREE);
5242 }
5243
5244 return r;
5245}
5246
ed44da02
MM
5247/* Substitute the ARGS into the indicated aggregate (or enumeration)
5248 type T. If T is not an aggregate or enumeration type, it is
5249 handled as if by tsubst. IN_DECL is as for tsubst. If
5250 ENTERING_SCOPE is non-zero, T is the context for a template which
5251 we are presently tsubst'ing. Return the subsituted value. */
36a117a5 5252
e9659ab0 5253static tree
4393e105 5254tsubst_aggr_type (t, args, complain, in_decl, entering_scope)
36a117a5
MM
5255 tree t;
5256 tree args;
4393e105 5257 int complain;
36a117a5
MM
5258 tree in_decl;
5259 int entering_scope;
5260{
5261 if (t == NULL_TREE)
5262 return NULL_TREE;
5263
5264 switch (TREE_CODE (t))
5265 {
5266 case RECORD_TYPE:
5267 if (TYPE_PTRMEMFUNC_P (t))
5268 {
5269 tree r = build_ptrmemfunc_type
4393e105 5270 (tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl));
adecb3f4
MM
5271 return cp_build_qualified_type_real (r, TYPE_QUALS (t),
5272 complain);
36a117a5
MM
5273 }
5274
5275 /* else fall through */
ed44da02 5276 case ENUMERAL_TYPE:
36a117a5 5277 case UNION_TYPE:
5db698f6 5278 if (TYPE_TEMPLATE_INFO (t))
36a117a5
MM
5279 {
5280 tree argvec;
5281 tree context;
5282 tree r;
5283
5284 /* First, determine the context for the type we are looking
5285 up. */
5286 if (TYPE_CONTEXT (t) != NULL_TREE)
5287 context = tsubst_aggr_type (TYPE_CONTEXT (t), args,
4393e105 5288 complain,
36a117a5
MM
5289 in_decl, /*entering_scope=*/1);
5290 else
5291 context = NULL_TREE;
5292
5293 /* Then, figure out what arguments are appropriate for the
5294 type we are trying to find. For example, given:
5295
5296 template <class T> struct S;
5297 template <class T, class U> void f(T, U) { S<U> su; }
5298
5299 and supposing that we are instantiating f<int, double>,
5300 then our ARGS will be {int, double}, but, when looking up
5301 S we only want {double}. */
4393e105
MM
5302 argvec = tsubst_template_arg_vector (TYPE_TI_ARGS (t), args,
5303 complain);
36a117a5
MM
5304
5305 r = lookup_template_class (t, argvec, in_decl, context,
5306 entering_scope);
5307
adecb3f4
MM
5308 return cp_build_qualified_type_real (r, TYPE_QUALS (t),
5309 complain);
36a117a5
MM
5310 }
5311 else
5312 /* This is not a template type, so there's nothing to do. */
5313 return t;
5314
5315 default:
4393e105 5316 return tsubst (t, args, complain, in_decl);
36a117a5
MM
5317 }
5318}
5319
9188c363
MM
5320/* Substitute into the default argument ARG (a default argument for
5321 FN), which has the indicated TYPE. */
5322
5323tree
5324tsubst_default_argument (fn, type, arg)
5325 tree fn;
5326 tree type;
5327 tree arg;
5328{
5329 /* This default argument came from a template. Instantiate the
5330 default argument here, not in tsubst. In the case of
5331 something like:
5332
5333 template <class T>
5334 struct S {
5335 static T t();
5336 void f(T = t());
5337 };
5338
5339 we must be careful to do name lookup in the scope of S<T>,
5340 rather than in the current class. */
5341 if (DECL_CLASS_SCOPE_P (fn))
4f1c5b7d 5342 pushclass (DECL_CONTEXT (fn), 2);
9188c363
MM
5343
5344 arg = tsubst_expr (arg, DECL_TI_ARGS (fn), /*complain=*/1, NULL_TREE);
5345
5346 if (DECL_CLASS_SCOPE_P (fn))
5347 popclass ();
5348
5349 /* Make sure the default argument is reasonable. */
5350 arg = check_default_argument (type, arg);
5351
5352 return arg;
5353}
5354
5355/* Substitute into all the default arguments for FN. */
5356
5357static void
5358tsubst_default_arguments (fn)
5359 tree fn;
5360{
5361 tree arg;
5362 tree tmpl_args;
5363
5364 tmpl_args = DECL_TI_ARGS (fn);
5365
5366 /* If this function is not yet instantiated, we certainly don't need
5367 its default arguments. */
5368 if (uses_template_parms (tmpl_args))
5369 return;
5370
5371 for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
5372 arg;
5373 arg = TREE_CHAIN (arg))
5374 if (TREE_PURPOSE (arg))
5375 TREE_PURPOSE (arg) = tsubst_default_argument (fn,
5376 TREE_VALUE (arg),
5377 TREE_PURPOSE (arg));
5378}
5379
ae58fa02
MM
5380/* Substitute the ARGS into the T, which is a _DECL. TYPE is the
5381 (already computed) substitution of ARGS into TREE_TYPE (T), if
5382 appropriate. Return the result of the substitution. IN_DECL is as
5383 for tsubst. */
00d3396f 5384
e9659ab0 5385static tree
ae58fa02
MM
5386tsubst_decl (t, args, type, in_decl)
5387 tree t;
5388 tree args;
5389 tree type;
8d08fdba
MS
5390 tree in_decl;
5391{
ae58fa02
MM
5392 int saved_lineno;
5393 char* saved_filename;
b370501f 5394 tree r = NULL_TREE;
830bfa74 5395
ae58fa02
MM
5396 /* Set the filename and linenumber to improve error-reporting. */
5397 saved_lineno = lineno;
5398 saved_filename = input_filename;
5399 lineno = DECL_SOURCE_LINE (t);
5400 input_filename = DECL_SOURCE_FILE (t);
b7484fbe 5401
8d08fdba
MS
5402 switch (TREE_CODE (t))
5403 {
98c1c668
JM
5404 case TEMPLATE_DECL:
5405 {
5406 /* We can get here when processing a member template function
5407 of a template class. */
98c1c668 5408 tree decl = DECL_TEMPLATE_RESULT (t);
386b8a85 5409 tree spec;
db2767b6 5410 int is_template_template_parm = DECL_TEMPLATE_TEMPLATE_PARM_P (t);
98c1c668 5411
db2767b6
MM
5412 if (!is_template_template_parm)
5413 {
36a117a5
MM
5414 /* We might already have an instance of this template.
5415 The ARGS are for the surrounding class type, so the
5416 full args contain the tsubst'd args for the context,
5417 plus the innermost args from the template decl. */
5418 tree tmpl_args = DECL_CLASS_TEMPLATE_P (t)
5419 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
5420 : DECL_TI_ARGS (DECL_RESULT (t));
7ddedda4
MM
5421 tree full_args;
5422
4393e105
MM
5423 full_args = tsubst_template_arg_vector (tmpl_args, args,
5424 /*complain=*/1);
36a117a5
MM
5425
5426 /* tsubst_template_arg_vector doesn't copy the vector if
5427 nothing changed. But, *something* should have
5428 changed. */
5429 my_friendly_assert (full_args != tmpl_args, 0);
5430
5431 spec = retrieve_specialization (t, full_args);
db2767b6 5432 if (spec != NULL_TREE)
ae58fa02
MM
5433 {
5434 r = spec;
5435 break;
5436 }
db2767b6 5437 }
98c1c668
JM
5438
5439 /* Make a new template decl. It will be similar to the
5440 original, but will record the current template arguments.
5441 We also create a new function declaration, which is just
5442 like the old one, but points to this new template, rather
5443 than the old one. */
ae58fa02
MM
5444 r = copy_node (t);
5445 copy_lang_decl (r);
5446 my_friendly_assert (DECL_LANG_SPECIFIC (r) != 0, 0);
5447 TREE_CHAIN (r) = NULL_TREE;
db2767b6
MM
5448
5449 if (is_template_template_parm)
5450 {
4393e105 5451 tree new_decl = tsubst (decl, args, /*complain=*/1, in_decl);
ae58fa02
MM
5452 DECL_RESULT (r) = new_decl;
5453 TREE_TYPE (r) = TREE_TYPE (new_decl);
5454 break;
db2767b6
MM
5455 }
5456
ae58fa02 5457 DECL_CONTEXT (r)
4f1c5b7d 5458 = tsubst_aggr_type (DECL_CONTEXT (t), args,
4393e105
MM
5459 /*complain=*/1, in_decl,
5460 /*entering_scope=*/1);
4f1c5b7d
MM
5461 DECL_VIRTUAL_CONTEXT (r)
5462 = tsubst_aggr_type (DECL_VIRTUAL_CONTEXT (t), args,
5463 /*complain=*/1, in_decl,
5464 /*entering_scope=*/1);
ae58fa02 5465 DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
93cdc044
JM
5466
5467 if (TREE_CODE (decl) == TYPE_DECL)
5468 {
4393e105
MM
5469 tree new_type = tsubst (TREE_TYPE (t), args,
5470 /*complain=*/1, in_decl);
ae58fa02
MM
5471 TREE_TYPE (r) = new_type;
5472 CLASSTYPE_TI_TEMPLATE (new_type) = r;
5473 DECL_RESULT (r) = TYPE_MAIN_DECL (new_type);
5474 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
93cdc044
JM
5475 }
5476 else
5477 {
4393e105 5478 tree new_decl = tsubst (decl, args, /*complain=*/1, in_decl);
ae58fa02
MM
5479 DECL_RESULT (r) = new_decl;
5480 DECL_TI_TEMPLATE (new_decl) = r;
5481 TREE_TYPE (r) = TREE_TYPE (new_decl);
5482 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
93cdc044
JM
5483 }
5484
ae58fa02
MM
5485 SET_DECL_IMPLICIT_INSTANTIATION (r);
5486 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
5487 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
98c1c668
JM
5488
5489 /* The template parameters for this new template are all the
5490 template parameters for the old template, except the
5491 outermost level of parameters. */
ae58fa02 5492 DECL_TEMPLATE_PARMS (r)
4393e105
MM
5493 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
5494 /*complain=*/1);
98c1c668 5495
93cdc044 5496 if (PRIMARY_TEMPLATE_P (t))
ae58fa02 5497 DECL_PRIMARY_TEMPLATE (r) = r;
93cdc044 5498
8d019cef 5499 /* We don't partially instantiate partial specializations. */
93cdc044 5500 if (TREE_CODE (decl) == TYPE_DECL)
ae58fa02 5501 break;
93cdc044 5502
75650646
MM
5503 for (spec = DECL_TEMPLATE_SPECIALIZATIONS (t);
5504 spec != NULL_TREE;
5505 spec = TREE_CHAIN (spec))
5506 {
5507 /* It helps to consider example here. Consider:
5508
5509 template <class T>
5510 struct S {
5511 template <class U>
5512 void f(U u);
5513
5514 template <>
5515 void f(T* t) {}
5516 };
5517
5518 Now, for example, we are instantiating S<int>::f(U u).
5519 We want to make a template:
5520
5521 template <class U>
5522 void S<int>::f(U);
5523
5524 It will have a specialization, for the case U = int*, of
5525 the form:
5526
5527 template <>
5528 void S<int>::f<int*>(int*);
5529
5530 This specialization will be an instantiation of
5531 the specialization given in the declaration of S, with
5532 argument list int*. */
5533
5534 tree fn = TREE_VALUE (spec);
5535 tree spec_args;
5536 tree new_fn;
5537
5538 if (!DECL_TEMPLATE_SPECIALIZATION (fn))
5539 /* Instantiations are on the same list, but they're of
5540 no concern to us. */
5541 continue;
5542
36a117a5
MM
5543 if (TREE_CODE (fn) != TEMPLATE_DECL)
5544 /* A full specialization. There's no need to record
5545 that here. */
5546 continue;
5547
4393e105
MM
5548 spec_args = tsubst (DECL_TI_ARGS (fn), args,
5549 /*complain=*/1, in_decl);
36a117a5 5550 new_fn = tsubst (DECL_RESULT (most_general_template (fn)),
4393e105 5551 spec_args, /*complain=*/1, in_decl);
36a117a5 5552 DECL_TI_TEMPLATE (new_fn) = fn;
ae58fa02 5553 register_specialization (new_fn, r,
36a117a5 5554 innermost_args (spec_args));
75650646
MM
5555 }
5556
5557 /* Record this partial instantiation. */
ae58fa02
MM
5558 register_specialization (r, t,
5559 DECL_TI_ARGS (DECL_RESULT (r)));
75650646 5560
98c1c668 5561 }
ae58fa02 5562 break;
8d08fdba
MS
5563
5564 case FUNCTION_DECL:
5565 {
386b8a85 5566 tree ctx;
87603ed0 5567 tree argvec = NULL_TREE;
cf38f48a 5568 tree *friends;
36a117a5 5569 tree gen_tmpl;
5566b478 5570 int member;
d8c4447d
MM
5571 int args_depth;
5572 int parms_depth;
5566b478 5573
36a117a5
MM
5574 /* Nobody should be tsubst'ing into non-template functions. */
5575 my_friendly_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE, 0);
5576
5577 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
5578 {
5579 tree spec;
5580
5581 /* Calculate the most general template of which R is a
5582 specialization, and the complete set of arguments used to
5583 specialize R. */
5584 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
7ddedda4
MM
5585 argvec
5586 = tsubst_template_arg_vector (DECL_TI_ARGS
5587 (DECL_TEMPLATE_RESULT (gen_tmpl)),
4393e105 5588 args, /*complain=*/1);
36a117a5
MM
5589
5590 /* Check to see if we already have this specialization. */
5591 spec = retrieve_specialization (gen_tmpl, argvec);
7ddedda4 5592
36a117a5 5593 if (spec)
ae58fa02
MM
5594 {
5595 r = spec;
5596 break;
5597 }
d8c4447d
MM
5598
5599 /* Here, we deal with the peculiar case:
5600
5601 template <class T> struct S {
5602 template <class U> friend void f();
5603 };
5604 template <class U> friend void f() {}
5605 template S<int>;
5606 template void f<double>();
5607
5608 Here, the ARGS for the instantiation of will be {int,
5609 double}. But, we only need as many ARGS as there are
5610 levels of template parameters in CODE_PATTERN. We are
5611 careful not to get fooled into reducing the ARGS in
5612 situations like:
5613
5614 template <class T> struct S { template <class U> void f(U); }
5615 template <class T> template <> void S<T>::f(int) {}
5616
5617 which we can spot because the pattern will be a
5618 specialization in this case. */
5619 args_depth = TMPL_ARGS_DEPTH (args);
5620 parms_depth =
5621 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
5622 if (args_depth > parms_depth
5623 && !DECL_TEMPLATE_SPECIALIZATION (t))
5624 {
5625 my_friendly_assert (DECL_FRIEND_P (t), 0);
5626
5627 if (parms_depth > 1)
5628 {
5629 int i;
5630
f31c0a32 5631 args = make_tree_vec (parms_depth);
d8c4447d
MM
5632 for (i = 0; i < parms_depth; ++i)
5633 TREE_VEC_ELT (args, i) =
5634 TREE_VEC_ELT (args, i + (args_depth - parms_depth));
5635 }
5636 else
5637 args = TREE_VEC_ELT (args, args_depth - parms_depth);
5638 }
36a117a5
MM
5639 }
5640 else
5641 {
5642 /* This special case arises when we have something like this:
5643
5644 template <class T> struct S {
5645 friend void f<int>(int, double);
5646 };
5647
5648 Here, the DECL_TI_TEMPLATE for the friend declaration
39c01e4c
MM
5649 will be a LOOKUP_EXPR or an IDENTIFIER_NODE. We are
5650 being called from tsubst_friend_function, and we want
5651 only to create a new decl (R) with appropriate types so
5652 that we can call determine_specialization. */
5653 my_friendly_assert ((TREE_CODE (DECL_TI_TEMPLATE (t))
5654 == LOOKUP_EXPR)
5655 || (TREE_CODE (DECL_TI_TEMPLATE (t))
5656 == IDENTIFIER_NODE), 0);
36a117a5
MM
5657 gen_tmpl = NULL_TREE;
5658 }
5659
6eb3bb27 5660 if (DECL_CLASS_SCOPE_P (t))
8d08fdba 5661 {
5566b478
MS
5662 if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
5663 member = 2;
5664 else
5665 member = 1;
4f1c5b7d 5666 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
4393e105 5667 /*complain=*/1, t,
36a117a5 5668 /*entering_scope=*/1);
5566b478
MS
5669 }
5670 else
5671 {
5672 member = 0;
4f1c5b7d 5673 ctx = DECL_CONTEXT (t);
5566b478 5674 }
4393e105 5675 type = tsubst (type, args, /*complain=*/1, in_decl);
b3da7bb1
MM
5676 if (type == error_mark_node)
5677 return error_mark_node;
8d08fdba 5678
5566b478
MS
5679 /* We do NOT check for matching decls pushed separately at this
5680 point, as they may not represent instantiations of this
5681 template, and in any case are considered separate under the
312e7d50 5682 discrete model. Instead, see add_maybe_template. */
5566b478
MS
5683
5684 r = copy_node (t);
5685 copy_lang_decl (r);
e1467ff2 5686 DECL_USE_TEMPLATE (r) = 0;
5566b478
MS
5687 TREE_TYPE (r) = type;
5688
4f1c5b7d
MM
5689 DECL_CONTEXT (r) = ctx;
5690 DECL_VIRTUAL_CONTEXT (r)
5691 = tsubst_aggr_type (DECL_VIRTUAL_CONTEXT (t), args,
5692 /*complain=*/1, t,
4393e105 5693 /*entering_scope=*/1);
5566b478 5694
4c571114 5695 if (member && IDENTIFIER_TYPENAME_P (DECL_NAME (r)))
f181d4ae
MM
5696 /* Type-conversion operator. Reconstruct the name, in
5697 case it's the name of one of the template's parameters. */
5698 DECL_NAME (r) = build_typename_overload (TREE_TYPE (type));
5566b478 5699
4393e105
MM
5700 DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
5701 /*complain=*/1, t);
711734a9
JM
5702 DECL_MAIN_VARIANT (r) = r;
5703 DECL_RESULT (r) = NULL_TREE;
711734a9
JM
5704
5705 TREE_STATIC (r) = 0;
5706 TREE_PUBLIC (r) = TREE_PUBLIC (t);
5707 DECL_EXTERNAL (r) = 1;
5708 DECL_INTERFACE_KNOWN (r) = 0;
5709 DECL_DEFER_OUTPUT (r) = 0;
5710 TREE_CHAIN (r) = NULL_TREE;
5711 DECL_PENDING_INLINE_INFO (r) = 0;
59026e79 5712 DECL_PENDING_INLINE_P (r) = 0;
711734a9
JM
5713 TREE_USED (r) = 0;
5714
36a117a5
MM
5715 /* Set up the DECL_TEMPLATE_INFO for R and compute its mangled
5716 name. There's no need to do this in the special friend
5717 case mentioned above where GEN_TMPL is NULL. */
5718 if (gen_tmpl)
386b8a85 5719 {
36a117a5 5720 DECL_TEMPLATE_INFO (r)
e1b3e07d 5721 = tree_cons (gen_tmpl, argvec, NULL_TREE);
36a117a5
MM
5722 SET_DECL_IMPLICIT_INSTANTIATION (r);
5723 register_specialization (r, gen_tmpl, argvec);
5724
5725 /* Set the mangled name for R. */
5726 if (DECL_DESTRUCTOR_P (t))
5727 DECL_ASSEMBLER_NAME (r) = build_destructor_name (ctx);
5728 else
386b8a85 5729 {
36a117a5
MM
5730 /* Instantiations of template functions must be mangled
5731 specially, in order to conform to 14.5.5.1
5732 [temp.over.link]. */
5733 tree tmpl = DECL_TI_TEMPLATE (t);
386b8a85 5734
36a117a5
MM
5735 /* TMPL will be NULL if this is a specialization of a
5736 member function of a template class. */
5737 if (name_mangling_version < 1
5738 || tmpl == NULL_TREE
5739 || (member && !is_member_template (tmpl)
5740 && !DECL_TEMPLATE_INFO (tmpl)))
5741 set_mangled_name_for_decl (r);
75650646 5742 else
36a117a5 5743 set_mangled_name_for_template_decl (r);
386b8a85 5744 }
36a117a5
MM
5745
5746 DECL_RTL (r) = 0;
5747 make_decl_rtl (r, NULL_PTR, 1);
5748
5749 /* Like grokfndecl. If we don't do this, pushdecl will
5750 mess up our TREE_CHAIN because it doesn't find a
5751 previous decl. Sigh. */
5752 if (member
c36ae80f 5753 && ! uses_template_parms (r)
36a117a5
MM
5754 && (IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (r))
5755 == NULL_TREE))
5756 SET_IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (r), r);
9188c363
MM
5757
5758 /* We're not supposed to instantiate default arguments
5759 until they are called, for a template. But, for a
5760 declaration like:
5761
5762 template <class T> void f ()
5763 { extern void g(int i = T()); }
5764
5765 we should do the substitution when the template is
5766 instantiated. We handle the member function case in
5767 instantiate_class_template since the default arguments
5768 might refer to other members of the class. */
5769 if (!member
5770 && !PRIMARY_TEMPLATE_P (gen_tmpl)
5771 && !uses_template_parms (argvec))
5772 tsubst_default_arguments (r);
386b8a85 5773 }
f181d4ae 5774
cf38f48a
MM
5775 /* Copy the list of befriending classes. */
5776 for (friends = &DECL_BEFRIENDING_CLASSES (r);
5777 *friends;
5778 friends = &TREE_CHAIN (*friends))
5779 {
5780 *friends = copy_node (*friends);
5781 TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
5782 args, /*complain=*/1,
5783 in_decl);
5784 }
5785
f181d4ae
MM
5786 if (DECL_CONSTRUCTOR_P (r))
5787 {
5788 maybe_retrofit_in_chrg (r);
5789 grok_ctor_properties (ctx, r);
5790 }
f71f87f9 5791 else if (DECL_OVERLOADED_OPERATOR_P (r))
f181d4ae 5792 grok_op_properties (r, DECL_VIRTUAL_P (r), DECL_FRIEND_P (r));
8d08fdba 5793 }
ae58fa02 5794 break;
8d08fdba
MS
5795
5796 case PARM_DECL:
5797 {
ae58fa02 5798 r = copy_node (t);
5566b478 5799 TREE_TYPE (r) = type;
1b8899d1
MM
5800 c_apply_type_quals_to_decl (CP_TYPE_QUALS (type), r);
5801
db2767b6
MM
5802 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
5803 DECL_INITIAL (r) = TREE_TYPE (r);
5804 else
4393e105
MM
5805 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
5806 /*complain=*/1, in_decl);
db2767b6 5807
5566b478 5808 DECL_CONTEXT (r) = NULL_TREE;
fa56377d
JJ
5809 if (PROMOTE_PROTOTYPES
5810 && (TREE_CODE (type) == INTEGER_TYPE
5811 || TREE_CODE (type) == ENUMERAL_TYPE)
f83b0cb6
JM
5812 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
5813 DECL_ARG_TYPE (r) = integer_type_node;
8d08fdba 5814 if (TREE_CHAIN (t))
4393e105
MM
5815 TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
5816 /*complain=*/1, TREE_CHAIN (t));
8d08fdba 5817 }
ae58fa02 5818 break;
8d08fdba 5819
5566b478
MS
5820 case FIELD_DECL:
5821 {
ae58fa02 5822 r = copy_node (t);
5566b478 5823 copy_lang_decl (r);
1b8899d1
MM
5824 TREE_TYPE (r) = type;
5825 c_apply_type_quals_to_decl (CP_TYPE_QUALS (type), r);
5826
5827 /* We don't have to set DECL_CONTEXT here; it is set by
5828 finish_member_declaration. */
4393e105
MM
5829 DECL_INITIAL (r) = tsubst_expr (DECL_INITIAL (t), args,
5830 /*complain=*/1, in_decl);
5566b478 5831 TREE_CHAIN (r) = NULL_TREE;
4393e105 5832 if (TREE_CODE (type) == VOID_TYPE)
8251199e 5833 cp_error_at ("instantiation of `%D' as type void", r);
5566b478 5834 }
ae58fa02 5835 break;
5566b478
MS
5836
5837 case USING_DECL:
5838 {
ae58fa02 5839 r = copy_node (t);
5566b478 5840 DECL_INITIAL (r)
4393e105 5841 = tsubst_copy (DECL_INITIAL (t), args, /*complain=*/1, in_decl);
5566b478 5842 TREE_CHAIN (r) = NULL_TREE;
5566b478 5843 }
ae58fa02 5844 break;
5566b478 5845
9188c363
MM
5846 case TYPE_DECL:
5847 if (DECL_IMPLICIT_TYPEDEF_P (t))
5848 {
5849 /* For an implicit typedef, we just want the implicit
5850 typedef for the tsubst'd type. We've already got the
5851 tsubst'd type, as TYPE, so we just need it's associated
5852 declaration. */
5853 r = TYPE_NAME (type);
5854 break;
5855 }
5856 else if (!DECL_LANG_SPECIFIC (t))
5857 {
5858 /* For a template type parameter, we don't have to do
5859 anything special. */
b9f39201 5860 r = TYPE_NAME (type);
9188c363
MM
5861 break;
5862 }
5863
5864 /* Fall through. */
5865
5566b478
MS
5866 case VAR_DECL:
5867 {
36a117a5
MM
5868 tree argvec;
5869 tree gen_tmpl;
5870 tree spec;
5871 tree tmpl;
9188c363
MM
5872 tree ctx;
5873
8dd3f57a
MM
5874 /* Nobody should be tsubst'ing into non-template variables. */
5875 my_friendly_assert (DECL_LANG_SPECIFIC (t)
5876 && DECL_TEMPLATE_INFO (t) != NULL_TREE, 0);
5566b478 5877
de96bf57 5878 if (TYPE_P (CP_DECL_CONTEXT (t)))
9188c363
MM
5879 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
5880 /*complain=*/1,
5881 in_decl, /*entering_scope=*/1);
5882 else
5883 /* Subsequent calls to pushdecl will fill this in. */
5884 ctx = NULL_TREE;
5885
36a117a5
MM
5886 /* Check to see if we already have this specialization. */
5887 tmpl = DECL_TI_TEMPLATE (t);
5888 gen_tmpl = most_general_template (tmpl);
4393e105 5889 argvec = tsubst (DECL_TI_ARGS (t), args, /*complain=*/1, in_decl);
9188c363
MM
5890 if (ctx)
5891 spec = retrieve_specialization (gen_tmpl, argvec);
5892 else
5893 spec = retrieve_local_specialization (gen_tmpl,
5894 current_function_decl);
5895
36a117a5 5896 if (spec)
ae58fa02
MM
5897 {
5898 r = spec;
5899 break;
5900 }
5566b478 5901
e0942dcd
MM
5902 /* This declaration is going to have to be around for a while,
5903 so me make sure it is on a saveable obstack. */
5566b478 5904 r = copy_node (t);
f9817201 5905
5566b478 5906 TREE_TYPE (r) = type;
1b8899d1 5907 c_apply_type_quals_to_decl (CP_TYPE_QUALS (type), r);
5566b478 5908 DECL_CONTEXT (r) = ctx;
d11ad92e
MS
5909
5910 /* Don't try to expand the initializer until someone tries to use
5911 this variable; otherwise we run into circular dependencies. */
5912 DECL_INITIAL (r) = NULL_TREE;
5566b478 5913 DECL_RTL (r) = 0;
06ceef4e 5914 DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
36a117a5 5915 copy_lang_decl (r);
5566b478 5916
f9817201
MM
5917 /* For __PRETTY_FUNCTION__ we have to adjust the initializer. */
5918 if (DECL_PRETTY_FUNCTION_P (r))
5919 {
5920 DECL_INITIAL (r) = tsubst (DECL_INITIAL (t),
5921 args,
5922 /*complain=*/1,
5923 NULL_TREE);
5924 TREE_TYPE (r) = TREE_TYPE (DECL_INITIAL (r));
5925 }
5926
f0adc637
MM
5927 /* If the template variable was marked TREE_ASM_WRITTEN, that
5928 means we don't need to write out any of the instantiations
5929 either. (__FUNCTION__ and its ilk are marked thusly.) */
5930 TREE_ASM_WRITTEN (r) = TREE_ASM_WRITTEN (t);
5931
e0942dcd
MM
5932 /* Even if the original location is out of scope, the newly
5933 substituted one is not. */
5934 if (TREE_CODE (r) == VAR_DECL)
5935 DECL_DEAD_FOR_LOCAL (r) = 0;
5936
fa8d6e85
MM
5937 /* A static data member declaration is always marked external
5938 when it is declared in-class, even if an initializer is
5939 present. We mimic the non-template processing here. */
e0942dcd
MM
5940 if (ctx)
5941 DECL_EXTERNAL (r) = 1;
fa8d6e85 5942
e1b3e07d 5943 DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
36a117a5 5944 SET_DECL_IMPLICIT_INSTANTIATION (r);
9188c363
MM
5945 if (ctx)
5946 register_specialization (r, gen_tmpl, argvec);
5947 else
5948 register_local_specialization (r, gen_tmpl,
5949 current_function_decl);
5566b478 5950
5566b478 5951 TREE_CHAIN (r) = NULL_TREE;
9188c363 5952 if (TREE_CODE (r) == VAR_DECL && TREE_CODE (type) == VOID_TYPE)
8251199e 5953 cp_error_at ("instantiation of `%D' as type void", r);
5566b478 5954 }
ae58fa02 5955 break;
5566b478 5956
ae58fa02
MM
5957 default:
5958 my_friendly_abort (0);
5959 }
5960
5961 /* Restore the file and line information. */
5962 lineno = saved_lineno;
5963 input_filename = saved_filename;
5964
5965 return r;
5966}
5967
cabc336a
MM
5968/* Substitue into the ARG_TYPES of a function type. */
5969
e9659ab0 5970static tree
4393e105 5971tsubst_arg_types (arg_types, args, complain, in_decl)
cabc336a
MM
5972 tree arg_types;
5973 tree args;
4393e105 5974 int complain;
cabc336a
MM
5975 tree in_decl;
5976{
5977 tree remaining_arg_types;
cabc336a
MM
5978 tree type;
5979
5980 if (!arg_types || arg_types == void_list_node)
5981 return arg_types;
5982
5983 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
4393e105
MM
5984 args, complain, in_decl);
5985 if (remaining_arg_types == error_mark_node)
5986 return error_mark_node;
5987
5988 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
5989 if (type == error_mark_node)
5990 return error_mark_node;
cabc336a 5991
4393e105
MM
5992 /* Do array-to-pointer, function-to-pointer conversion, and ignore
5993 top-level qualifiers as required. */
5994 type = TYPE_MAIN_VARIANT (type_decays_to (type));
cabc336a
MM
5995
5996 /* Note that we do not substitute into default arguments here. The
5997 standard mandates that they be instantiated only when needed,
5998 which is done in build_over_call. */
51632249
JM
5999 return hash_tree_cons (TREE_PURPOSE (arg_types), type,
6000 remaining_arg_types);
cabc336a
MM
6001
6002}
6003
4393e105
MM
6004/* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
6005 *not* handle the exception-specification for FNTYPE, because the
6006 initial substitution of explicitly provided template parameters
6007 during argument deduction forbids substitution into the
6008 exception-specification:
6009
6010 [temp.deduct]
6011
6012 All references in the function type of the function template to the
6013 corresponding template parameters are replaced by the specified tem-
6014 plate argument values. If a substitution in a template parameter or
6015 in the function type of the function template results in an invalid
6016 type, type deduction fails. [Note: The equivalent substitution in
6017 exception specifications is done only when the function is instanti-
6018 ated, at which point a program is ill-formed if the substitution
6019 results in an invalid type.] */
6020
6021static tree
6022tsubst_function_type (t, args, complain, in_decl)
6023 tree t;
6024 tree args;
6025 int complain;
6026 tree in_decl;
6027{
6028 tree return_type;
6029 tree arg_types;
6030 tree fntype;
6031
8dd3f57a 6032 /* The TYPE_CONTEXT is not used for function/method types. */
4393e105
MM
6033 my_friendly_assert (TYPE_CONTEXT (t) == NULL_TREE, 0);
6034
6035 /* Substitue the return type. */
6036 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6037 if (return_type == error_mark_node)
6038 return error_mark_node;
6039
6040 /* Substitue the argument types. */
6041 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
6042 complain, in_decl);
6043 if (arg_types == error_mark_node)
6044 return error_mark_node;
6045
6046 /* Construct a new type node and return it. */
6047 if (TREE_CODE (t) == FUNCTION_TYPE)
6048 fntype = build_function_type (return_type, arg_types);
6049 else
6050 {
6051 tree r = TREE_TYPE (TREE_VALUE (arg_types));
6052 if (! IS_AGGR_TYPE (r))
6053 {
6054 /* [temp.deduct]
6055
6056 Type deduction may fail for any of the following
6057 reasons:
6058
6059 -- Attempting to create "pointer to member of T" when T
6060 is not a class type. */
6061 if (complain)
6062 cp_error ("creating pointer to member function of non-class type `%T'",
6063 r);
6064 return error_mark_node;
6065 }
6066
6067 fntype = build_cplus_method_type (r, return_type, TREE_CHAIN
6068 (arg_types));
6069 }
6070 fntype = build_qualified_type (fntype, TYPE_QUALS (t));
ada846eb 6071 fntype = build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
4393e105
MM
6072
6073 return fntype;
6074}
6075
297e73d8
MM
6076/* Substitute into the PARMS of a call-declarator. */
6077
e9659ab0 6078static tree
4393e105 6079tsubst_call_declarator_parms (parms, args, complain, in_decl)
297e73d8
MM
6080 tree parms;
6081 tree args;
4393e105 6082 int complain;
297e73d8
MM
6083 tree in_decl;
6084{
6085 tree new_parms;
6086 tree type;
6087 tree defarg;
6088
6089 if (!parms || parms == void_list_node)
6090 return parms;
6091
6092 new_parms = tsubst_call_declarator_parms (TREE_CHAIN (parms),
4393e105 6093 args, complain, in_decl);
297e73d8
MM
6094
6095 /* Figure out the type of this parameter. */
4393e105 6096 type = tsubst (TREE_VALUE (parms), args, complain, in_decl);
297e73d8
MM
6097
6098 /* Figure out the default argument as well. Note that we use
4393e105
MM
6099 tsubst_expr since the default argument is really an expression. */
6100 defarg = tsubst_expr (TREE_PURPOSE (parms), args, complain, in_decl);
297e73d8
MM
6101
6102 /* Chain this parameter on to the front of those we have already
6103 processed. We don't use hash_tree_cons because that function
6104 doesn't check TREE_PARMLIST. */
6105 new_parms = tree_cons (defarg, type, new_parms);
6106
6107 /* And note that these are parameters. */
6108 TREE_PARMLIST (new_parms) = 1;
6109
6110 return new_parms;
6111}
6112
4393e105
MM
6113/* Take the tree structure T and replace template parameters used
6114 therein with the argument vector ARGS. IN_DECL is an associated
6115 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
6116 An appropriate error message is issued only if COMPLAIN is
6117 non-zero. Note that we must be relatively non-tolerant of
6118 extensions here, in order to preserve conformance; if we allow
6119 substitutions that should not be allowed, we may allow argument
6120 deductions that should not succeed, and therefore report ambiguous
6121 overload situations where there are none. In theory, we could
6122 allow the substitution, but indicate that it should have failed,
6123 and allow our caller to make sure that the right thing happens, but
6124 we don't try to do this yet.
6125
6126 This function is used for dealing with types, decls and the like;
6127 for expressions, use tsubst_expr or tsubst_copy. */
ae58fa02
MM
6128
6129tree
4393e105 6130tsubst (t, args, complain, in_decl)
ae58fa02 6131 tree t, args;
4393e105 6132 int complain;
ae58fa02
MM
6133 tree in_decl;
6134{
0ecfe0b4 6135 tree type, r;
ae58fa02
MM
6136
6137 if (t == NULL_TREE || t == error_mark_node
6138 || t == integer_type_node
6139 || t == void_type_node
6140 || t == char_type_node
6141 || TREE_CODE (t) == NAMESPACE_DECL)
6142 return t;
6143
6144 if (TREE_CODE (t) == IDENTIFIER_NODE)
6145 type = IDENTIFIER_TYPE_VALUE (t);
6146 else
6147 type = TREE_TYPE (t);
6148 if (type == unknown_type_node)
6149 my_friendly_abort (42);
6150
6151 if (type && TREE_CODE (t) != FUNCTION_DECL
6152 && TREE_CODE (t) != TYPENAME_TYPE
6153 && TREE_CODE (t) != TEMPLATE_DECL
4393e105
MM
6154 && TREE_CODE (t) != IDENTIFIER_NODE
6155 && TREE_CODE (t) != FUNCTION_TYPE
6156 && TREE_CODE (t) != METHOD_TYPE)
6157 type = tsubst (type, args, complain, in_decl);
6158 if (type == error_mark_node)
6159 return error_mark_node;
ae58fa02
MM
6160
6161 if (TREE_CODE_CLASS (TREE_CODE (t)) == 'd')
6162 return tsubst_decl (t, args, type, in_decl);
6163
6164 switch (TREE_CODE (t))
6165 {
6166 case RECORD_TYPE:
6167 case UNION_TYPE:
6168 case ENUMERAL_TYPE:
4393e105
MM
6169 return tsubst_aggr_type (t, args, complain, in_decl,
6170 /*entering_scope=*/0);
ae58fa02
MM
6171
6172 case ERROR_MARK:
6173 case IDENTIFIER_NODE:
6174 case OP_IDENTIFIER:
6175 case VOID_TYPE:
6176 case REAL_TYPE:
6177 case COMPLEX_TYPE:
6178 case BOOLEAN_TYPE:
6179 case INTEGER_CST:
6180 case REAL_CST:
6181 case STRING_CST:
6182 return t;
6183
6184 case INTEGER_TYPE:
6185 if (t == integer_type_node)
6186 return t;
6187
6188 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
6189 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
6190 return t;
d2e5ee5c 6191
5566b478 6192 {
ddce3528 6193 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
7ddedda4 6194
ddce3528 6195 max = tsubst_expr (omax, args, complain, in_decl);
4393e105
MM
6196 if (max == error_mark_node)
6197 return error_mark_node;
6198
8dd3f57a
MM
6199 /* See if we can reduce this expression to something simpler. */
6200 max = maybe_fold_nontype_arg (max);
6201 if (!processing_template_decl && TREE_READONLY_DECL_P (max))
6202 max = decl_constant_value (max);
6203
856216bb
MM
6204 if (processing_template_decl
6205 /* When providing explicit arguments to a template
6206 function, but leaving some arguments for subsequent
6207 deduction, MAX may be template-dependent even if we're
c95cd22e
JM
6208 not PROCESSING_TEMPLATE_DECL. We still need to check for
6209 template parms, though; MAX won't be an INTEGER_CST for
6210 dynamic arrays, either. */
6211 || (TREE_CODE (max) != INTEGER_CST
6212 && uses_template_parms (max)))
ae58fa02 6213 {
8dd3f57a
MM
6214 tree itype = make_node (INTEGER_TYPE);
6215 TYPE_MIN_VALUE (itype) = size_zero_node;
6216 TYPE_MAX_VALUE (itype) = build_min (MINUS_EXPR, sizetype, max,
6217 integer_one_node);
6218 return itype;
ae58fa02
MM
6219 }
6220
ddce3528
JM
6221 if (integer_zerop (omax))
6222 {
6223 /* Still allow an explicit array of size zero. */
6224 if (pedantic)
6225 pedwarn ("creating array with size zero");
6226 }
07c88314
MM
6227 else if (integer_zerop (max)
6228 || (TREE_CODE (max) == INTEGER_CST
6229 && INT_CST_LT (max, integer_zero_node)))
0ecfe0b4 6230 {
4393e105
MM
6231 /* [temp.deduct]
6232
6233 Type deduction may fail for any of the following
6234 reasons:
6235
bf8f3f93
MM
6236 Attempting to create an array with a size that is
6237 zero or negative. */
4393e105 6238 if (complain)
16bb3387 6239 cp_error ("creating array with size zero (`%E')", max);
4393e105
MM
6240
6241 return error_mark_node;
0ecfe0b4
JM
6242 }
6243
c95cd22e 6244 return compute_array_index_type (NULL_TREE, max);
ae58fa02
MM
6245 }
6246
6247 case TEMPLATE_TYPE_PARM:
6248 case TEMPLATE_TEMPLATE_PARM:
6249 case TEMPLATE_PARM_INDEX:
6250 {
6251 int idx;
6252 int level;
6253 int levels;
0ecfe0b4
JM
6254
6255 r = NULL_TREE;
ae58fa02
MM
6256
6257 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
6258 || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
6259 {
6260 idx = TEMPLATE_TYPE_IDX (t);
6261 level = TEMPLATE_TYPE_LEVEL (t);
6262 }
6263 else
6264 {
6265 idx = TEMPLATE_PARM_IDX (t);
6266 level = TEMPLATE_PARM_LEVEL (t);
6267 }
6268
6269 if (TREE_VEC_LENGTH (args) > 0)
6270 {
6271 tree arg = NULL_TREE;
6272
6273 levels = TMPL_ARGS_DEPTH (args);
6274 if (level <= levels)
6275 arg = TMPL_ARG (args, level, idx);
6276
8b5b8b7c
MM
6277 if (arg == error_mark_node)
6278 return error_mark_node;
6279 else if (arg != NULL_TREE)
ae58fa02
MM
6280 {
6281 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
6282 {
6283 my_friendly_assert (TREE_CODE_CLASS (TREE_CODE (arg))
6284 == 't', 0);
adecb3f4
MM
6285 return cp_build_qualified_type_real
6286 (arg, CP_TYPE_QUALS (arg) | CP_TYPE_QUALS (t),
6287 complain);
ae58fa02
MM
6288 }
6289 else if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
6290 {
7ddedda4 6291 if (TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t))
ae58fa02
MM
6292 {
6293 /* We are processing a type constructed from
6294 a template template parameter */
7ddedda4 6295 tree argvec = tsubst (TYPE_TI_ARGS (t),
4393e105
MM
6296 args, complain, in_decl);
6297 if (argvec == error_mark_node)
6298 return error_mark_node;
6299
ae58fa02
MM
6300 /* We can get a TEMPLATE_TEMPLATE_PARM here when
6301 we are resolving nested-types in the signature of
6302 a member function templates.
6303 Otherwise ARG is a TEMPLATE_DECL and is the real
6304 template to be instantiated. */
6305 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
6306 arg = TYPE_NAME (arg);
6307
6308 r = lookup_template_class (DECL_NAME (arg),
6309 argvec, in_decl,
6310 DECL_CONTEXT (arg),
6311 /*entering_scope=*/0);
adecb3f4
MM
6312 return cp_build_qualified_type_real (r,
6313 TYPE_QUALS (t),
6314 complain);
ae58fa02
MM
6315 }
6316 else
6317 /* We are processing a template argument list. */
6318 return arg;
6319 }
6320 else
6321 return arg;
6322 }
6323 }
51924768
JM
6324 else
6325 my_friendly_abort (981018);
ae58fa02
MM
6326
6327 if (level == 1)
6328 /* This can happen during the attempted tsubst'ing in
6329 unify. This means that we don't yet have any information
6330 about the template parameter in question. */
6331 return t;
6332
6333 /* If we get here, we must have been looking at a parm for a
6334 more deeply nested template. Make a new version of this
6335 template parameter, but with a lower level. */
6336 switch (TREE_CODE (t))
6337 {
6338 case TEMPLATE_TYPE_PARM:
6339 case TEMPLATE_TEMPLATE_PARM:
6340 r = copy_node (t);
6341 TEMPLATE_TYPE_PARM_INDEX (r)
6342 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
6343 r, levels);
6344 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
6345 TYPE_MAIN_VARIANT (r) = r;
6346 TYPE_POINTER_TO (r) = NULL_TREE;
6347 TYPE_REFERENCE_TO (r) = NULL_TREE;
6348
6349 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
7ddedda4 6350 && TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t))
ae58fa02 6351 {
4393e105
MM
6352 tree argvec = tsubst (TYPE_TI_ARGS (t), args,
6353 complain, in_decl);
6354 if (argvec == error_mark_node)
6355 return error_mark_node;
6356
7ddedda4 6357 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
e1b3e07d 6358 = tree_cons (TYPE_NAME (t), argvec, NULL_TREE);
ae58fa02
MM
6359 }
6360 break;
6361
6362 case TEMPLATE_PARM_INDEX:
6363 r = reduce_template_parm_level (t, type, levels);
6364 break;
6365
6366 default:
6367 my_friendly_abort (0);
6368 }
6369
5566b478 6370 return r;
ae58fa02 6371 }
5566b478 6372
8d08fdba
MS
6373 case TREE_LIST:
6374 {
6375 tree purpose, value, chain, result;
8d08fdba
MS
6376
6377 if (t == void_list_node)
6378 return t;
6379
8d08fdba
MS
6380 purpose = TREE_PURPOSE (t);
6381 if (purpose)
4393e105
MM
6382 {
6383 purpose = tsubst (purpose, args, complain, in_decl);
6384 if (purpose == error_mark_node)
6385 return error_mark_node;
6386 }
8d08fdba
MS
6387 value = TREE_VALUE (t);
6388 if (value)
4393e105
MM
6389 {
6390 value = tsubst (value, args, complain, in_decl);
6391 if (value == error_mark_node)
6392 return error_mark_node;
6393 }
8d08fdba
MS
6394 chain = TREE_CHAIN (t);
6395 if (chain && chain != void_type_node)
4393e105
MM
6396 {
6397 chain = tsubst (chain, args, complain, in_decl);
6398 if (chain == error_mark_node)
6399 return error_mark_node;
6400 }
8d08fdba
MS
6401 if (purpose == TREE_PURPOSE (t)
6402 && value == TREE_VALUE (t)
6403 && chain == TREE_CHAIN (t))
6404 return t;
51632249 6405 result = hash_tree_cons (purpose, value, chain);
8d08fdba
MS
6406 TREE_PARMLIST (result) = TREE_PARMLIST (t);
6407 return result;
6408 }
6409 case TREE_VEC:
5566b478
MS
6410 if (type != NULL_TREE)
6411 {
1ceaad38
JM
6412 /* A binfo node. We always need to make a copy, of the node
6413 itself and of its BINFO_BASETYPES. */
85b71cf2 6414
5566b478
MS
6415 t = copy_node (t);
6416
c7449f2b
JM
6417 /* Make sure type isn't a typedef copy. */
6418 type = BINFO_TYPE (TYPE_BINFO (type));
6419
5566b478 6420 TREE_TYPE (t) = complete_type (type);
6633d636
MS
6421 if (IS_AGGR_TYPE (type))
6422 {
6423 BINFO_VTABLE (t) = TYPE_BINFO_VTABLE (type);
6424 BINFO_VIRTUALS (t) = TYPE_BINFO_VIRTUALS (type);
6425 if (TYPE_BINFO_BASETYPES (type) != NULL_TREE)
6426 BINFO_BASETYPES (t) = copy_node (TYPE_BINFO_BASETYPES (type));
6427 }
5566b478
MS
6428 return t;
6429 }
85b71cf2
JM
6430
6431 /* Otherwise, a vector of template arguments. */
4393e105 6432 return tsubst_template_arg_vector (t, args, complain);
8d08fdba 6433
8d08fdba
MS
6434 case POINTER_TYPE:
6435 case REFERENCE_TYPE:
6436 {
8d08fdba 6437 enum tree_code code;
79a7c7fa 6438
8d08fdba
MS
6439 if (type == TREE_TYPE (t))
6440 return t;
6441
6442 code = TREE_CODE (t);
4393e105
MM
6443
6444
6445 /* [temp.deduct]
6446
6447 Type deduction may fail for any of the following
6448 reasons:
6449
6450 -- Attempting to create a pointer to reference type.
6451 -- Attempting to create a reference to a reference type or
6452 a reference to void. */
0ecfe0b4
JM
6453 if (TREE_CODE (type) == REFERENCE_TYPE
6454 || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
79a7c7fa
JM
6455 {
6456 static int last_line = 0;
6457 static char* last_file = 0;
6458
6459 /* We keep track of the last time we issued this error
6460 message to avoid spewing a ton of messages during a
6461 single bad template instantiation. */
4393e105
MM
6462 if (complain && (last_line != lineno ||
6463 last_file != input_filename))
79a7c7fa 6464 {
0ecfe0b4
JM
6465 if (TREE_CODE (type) == VOID_TYPE)
6466 cp_error ("forming reference to void");
6467 else
6468 cp_error ("forming %s to reference type `%T'",
6469 (code == POINTER_TYPE) ? "pointer" : "reference",
6470 type);
79a7c7fa
JM
6471 last_line = lineno;
6472 last_file = input_filename;
6473 }
6474
4393e105 6475 return error_mark_node;
79a7c7fa
JM
6476 }
6477 else if (code == POINTER_TYPE)
8d08fdba
MS
6478 r = build_pointer_type (type);
6479 else
6480 r = build_reference_type (type);
adecb3f4 6481 r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
79a7c7fa 6482
8d08fdba
MS
6483 /* Will this ever be needed for TYPE_..._TO values? */
6484 layout_type (r);
6485 return r;
6486 }
a4443a08 6487 case OFFSET_TYPE:
0ecfe0b4 6488 {
4393e105
MM
6489 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
6490 if (r == error_mark_node || !IS_AGGR_TYPE (r))
6491 {
6492 /* [temp.deduct]
6493
6494 Type deduction may fail for any of the following
6495 reasons:
6496
6497 -- Attempting to create "pointer to member of T" when T
6498 is not a class type. */
6499 if (complain)
6500 cp_error ("creating pointer to member of non-class type `%T'",
6501 r);
6502 return error_mark_node;
6503 }
0ecfe0b4
JM
6504 return build_offset_type (r, type);
6505 }
8d08fdba
MS
6506 case FUNCTION_TYPE:
6507 case METHOD_TYPE:
6508 {
c11b6f21 6509 tree fntype;
4393e105 6510 tree raises;
8d08fdba 6511
4393e105
MM
6512 fntype = tsubst_function_type (t, args, complain, in_decl);
6513 if (fntype == error_mark_node)
6514 return error_mark_node;
cabc336a
MM
6515
6516 /* Substitue the exception specification. */
6517 raises = TYPE_RAISES_EXCEPTIONS (t);
c11b6f21
MS
6518 if (raises)
6519 {
4cc1d462
NS
6520 tree list = NULL_TREE;
6521
6522 if (! TREE_VALUE (raises))
6523 list = raises;
6524 else
6525 for (; raises != NULL_TREE; raises = TREE_CHAIN (raises))
6526 {
6527 tree spec = TREE_VALUE (raises);
6528
6529 spec = tsubst (spec, args, complain, in_decl);
6530 if (spec == error_mark_node)
6531 return spec;
6532 list = add_exception_specifier (list, spec, complain);
6533 }
6534 fntype = build_exception_variant (fntype, list);
c11b6f21
MS
6535 }
6536 return fntype;
8d08fdba
MS
6537 }
6538 case ARRAY_TYPE:
6539 {
4393e105
MM
6540 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
6541 if (domain == error_mark_node)
6542 return error_mark_node;
6543
6544 /* As an optimization, we avoid regenerating the array type if
6545 it will obviously be the same as T. */
8d08fdba
MS
6546 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
6547 return t;
0ecfe0b4 6548
4393e105
MM
6549 /* These checks should match the ones in grokdeclarator.
6550
6551 [temp.deduct]
6552
6553 The deduction may fail for any of the following reasons:
6554
6555 -- Attempting to create an array with an element type that
6556 is void, a function type, or a reference type. */
6557 if (TREE_CODE (type) == VOID_TYPE
6558 || TREE_CODE (type) == FUNCTION_TYPE
6559 || TREE_CODE (type) == REFERENCE_TYPE)
0ecfe0b4 6560 {
4393e105
MM
6561 if (complain)
6562 cp_error ("creating array of `%T'", type);
6563 return error_mark_node;
0ecfe0b4
JM
6564 }
6565
8d08fdba
MS
6566 r = build_cplus_array_type (type, domain);
6567 return r;
6568 }
6569
8d08fdba 6570 case PLUS_EXPR:
5566b478 6571 case MINUS_EXPR:
4393e105
MM
6572 {
6573 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain,
6574 in_decl);
6575 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain,
6576 in_decl);
6577
6578 if (e1 == error_mark_node || e2 == error_mark_node)
6579 return error_mark_node;
6580
6581 return fold (build (TREE_CODE (t), TREE_TYPE (t), e1, e2));
6582 }
8d08fdba
MS
6583
6584 case NEGATE_EXPR:
6585 case NOP_EXPR:
4393e105
MM
6586 {
6587 tree e = tsubst (TREE_OPERAND (t, 0), args, complain,
6588 in_decl);
6589 if (e == error_mark_node)
6590 return error_mark_node;
6591
6592 return fold (build (TREE_CODE (t), TREE_TYPE (t), e));
6593 }
8d08fdba 6594
5566b478
MS
6595 case TYPENAME_TYPE:
6596 {
4393e105
MM
6597 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
6598 in_decl, /*entering_scope=*/1);
6599 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
6600 complain, in_decl);
6601
6602 if (ctx == error_mark_node || f == error_mark_node)
6603 return error_mark_node;
ae58fa02 6604
bf8f3f93
MM
6605 if (!IS_AGGR_TYPE (ctx))
6606 {
6607 if (complain)
6608 cp_error ("`%T' is not a class, struct, or union type",
6609 ctx);
6610 return error_mark_node;
6611 }
6612 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
6613 {
6614 /* Normally, make_typename_type does not require that the CTX
6615 have complete type in order to allow things like:
ae58fa02 6616
bf8f3f93 6617 template <class T> struct S { typename S<T>::X Y; };
ae58fa02 6618
bf8f3f93
MM
6619 But, such constructs have already been resolved by this
6620 point, so here CTX really should have complete type, unless
6621 it's a partial instantiation. */
4393e105
MM
6622 ctx = complete_type (ctx);
6623 if (!TYPE_SIZE (ctx))
6624 {
6625 if (complain)
6626 incomplete_type_error (NULL_TREE, ctx);
6627 return error_mark_node;
6628 }
6629 }
ae58fa02 6630
3baa501d 6631 f = make_typename_type (ctx, f, complain);
f0bcd168
MM
6632 if (f == error_mark_node)
6633 return f;
adecb3f4
MM
6634 return cp_build_qualified_type_real (f,
6635 CP_TYPE_QUALS (f)
6636 | CP_TYPE_QUALS (t),
6637 complain);
5566b478
MS
6638 }
6639
6640 case INDIRECT_REF:
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_pointer_declarator (type, e);
6647 }
6648
5566b478 6649 case ADDR_EXPR:
4393e105
MM
6650 {
6651 tree e = tsubst (TREE_OPERAND (t, 0), args, complain,
6652 in_decl);
6653 if (e == error_mark_node)
6654 return error_mark_node;
6655 return make_reference_declarator (type, e);
6656 }
5566b478
MS
6657
6658 case ARRAY_REF:
4393e105
MM
6659 {
6660 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain,
6661 in_decl);
6fb2c05a
JM
6662 tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain,
6663 in_decl);
4393e105
MM
6664 if (e1 == error_mark_node || e2 == error_mark_node)
6665 return error_mark_node;
6666
6667 return build_parse_node (ARRAY_REF, e1, e2, tsubst_expr);
6668 }
5566b478
MS
6669
6670 case CALL_EXPR:
4393e105
MM
6671 {
6672 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain,
6673 in_decl);
43f887f9
MM
6674 tree e2 = (tsubst_call_declarator_parms
6675 (CALL_DECLARATOR_PARMS (t), args, complain, in_decl));
6676 tree e3 = tsubst (CALL_DECLARATOR_EXCEPTION_SPEC (t), args,
6677 complain, in_decl);
4393e105
MM
6678
6679 if (e1 == error_mark_node || e2 == error_mark_node
6680 || e3 == error_mark_node)
6681 return error_mark_node;
6682
43f887f9 6683 return make_call_declarator (e1, e2, CALL_DECLARATOR_QUALS (t), e3);
4393e105 6684 }
5566b478 6685
fc378698 6686 case SCOPE_REF:
4393e105
MM
6687 {
6688 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain,
6689 in_decl);
6690 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
6691 if (e1 == error_mark_node || e2 == error_mark_node)
6692 return error_mark_node;
6693
6694 return build_parse_node (TREE_CODE (t), e1, e2);
6695 }
fc378698 6696
b894fc05 6697 case TYPEOF_TYPE:
4393e105
MM
6698 {
6699 tree e1 = tsubst_expr (TYPE_FIELDS (t), args, complain,
6700 in_decl);
6701 if (e1 == error_mark_node)
6702 return error_mark_node;
6703
6704 return TREE_TYPE (e1);
6705 }
b894fc05 6706
f9817201
MM
6707 case FUNCTION_NAME:
6708 {
6709 const char *name;
6710 int len;
6711 tree type;
6712 tree str;
6713
6714 /* This code should match declare_hidden_char_array in
6715 c-common.c. */
6716 name = (*decl_printable_name) (current_function_decl, 2);
6717 len = strlen (name) + 1;
6718 type = build_array_type (char_type_node,
6719 build_index_type (build_int_2 (len, 0)));
6720 str = build_string (len, name);
6721 TREE_TYPE (str) = type;
6722 return str;
6723 }
6724
8d08fdba 6725 default:
5566b478 6726 sorry ("use of `%s' in template",
8d08fdba
MS
6727 tree_code_name [(int) TREE_CODE (t)]);
6728 return error_mark_node;
6729 }
6730}
6731
00d3396f
JM
6732/* Like tsubst, but deals with expressions. This function just replaces
6733 template parms; to finish processing the resultant expression, use
6734 tsubst_expr. */
6735
5566b478 6736tree
4393e105 6737tsubst_copy (t, args, complain, in_decl)
98c1c668 6738 tree t, args;
4393e105 6739 int complain;
5566b478
MS
6740 tree in_decl;
6741{
6742 enum tree_code code;
8452b1d3 6743 tree r;
8d08fdba 6744
5566b478
MS
6745 if (t == NULL_TREE || t == error_mark_node)
6746 return t;
6747
6748 code = TREE_CODE (t);
b7484fbe 6749
5566b478
MS
6750 switch (code)
6751 {
6752 case PARM_DECL:
a759e627 6753 return do_identifier (DECL_NAME (t), 0, NULL_TREE);
5566b478
MS
6754
6755 case CONST_DECL:
ed44da02
MM
6756 {
6757 tree enum_type;
6758 tree v;
6759
6760 if (!DECL_CONTEXT (t))
6761 /* This is a global enumeration constant. */
6762 return t;
6763
6764 /* Unfortunately, we cannot just call lookup_name here.
9188c363
MM
6765 Consider:
6766
6767 template <int I> int f() {
6768 enum E { a = I };
6769 struct S { void g() { E e = a; } };
6770 };
6771
6772 When we instantiate f<7>::S::g(), say, lookup_name is not
6773 clever enough to find f<7>::a. */
ed44da02 6774 enum_type
4393e105 6775 = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
ed44da02
MM
6776 /*entering_scope=*/0);
6777
6778 for (v = TYPE_VALUES (enum_type);
6779 v != NULL_TREE;
6780 v = TREE_CHAIN (v))
6781 if (TREE_PURPOSE (v) == DECL_NAME (t))
6782 return TREE_VALUE (v);
6783
6784 /* We didn't find the name. That should never happen; if
6785 name-lookup found it during preliminary parsing, we
6786 should find it again here during instantiation. */
6787 my_friendly_abort (0);
6788 }
db04386f 6789 return t;
ed44da02 6790
5566b478
MS
6791 case FIELD_DECL:
6792 if (DECL_CONTEXT (t))
6793 {
0978790f 6794 tree ctx;
0978790f 6795
4393e105 6796 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
36a117a5 6797 /*entering_scope=*/1);
0978790f 6798 if (ctx != DECL_CONTEXT (t))
5566b478
MS
6799 return lookup_field (ctx, DECL_NAME (t), 0, 0);
6800 }
6801 return t;
6802
6803 case VAR_DECL:
6804 case FUNCTION_DECL:
6805 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
4393e105 6806 t = tsubst (t, args, complain, in_decl);
5566b478
MS
6807 mark_used (t);
6808 return t;
6809
98c1c668
JM
6810 case TEMPLATE_DECL:
6811 if (is_member_template (t))
4393e105 6812 return tsubst (t, args, complain, in_decl);
98c1c668
JM
6813 else
6814 return t;
6815
672476cb
MM
6816 case LOOKUP_EXPR:
6817 {
6818 /* We must tsbust into a LOOKUP_EXPR in case the names to
6819 which it refers is a conversion operator; in that case the
6820 name will change. We avoid making unnecessary copies,
6821 however. */
6822
4393e105 6823 tree id = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
672476cb
MM
6824
6825 if (id != TREE_OPERAND (t, 0))
6826 {
8452b1d3 6827 r = build_nt (LOOKUP_EXPR, id);
672476cb
MM
6828 LOOKUP_EXPR_GLOBAL (r) = LOOKUP_EXPR_GLOBAL (t);
6829 t = r;
6830 }
6831
6832 return t;
6833 }
6834
5566b478
MS
6835 case CAST_EXPR:
6836 case REINTERPRET_CAST_EXPR:
e92cc029
MS
6837 case CONST_CAST_EXPR:
6838 case STATIC_CAST_EXPR:
6839 case DYNAMIC_CAST_EXPR:
51924768 6840 case NOP_EXPR:
5566b478 6841 return build1
4393e105
MM
6842 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
6843 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
5566b478
MS
6844
6845 case INDIRECT_REF:
6846 case PREDECREMENT_EXPR:
6847 case PREINCREMENT_EXPR:
6848 case POSTDECREMENT_EXPR:
6849 case POSTINCREMENT_EXPR:
6850 case NEGATE_EXPR:
6851 case TRUTH_NOT_EXPR:
b87692e5 6852 case BIT_NOT_EXPR:
5566b478
MS
6853 case ADDR_EXPR:
6854 case CONVERT_EXPR: /* Unary + */
6855 case SIZEOF_EXPR:
abff8e06 6856 case ALIGNOF_EXPR:
5566b478 6857 case ARROW_EXPR:
fc378698 6858 case THROW_EXPR:
5156628f 6859 case TYPEID_EXPR:
f5733617
SS
6860 case REALPART_EXPR:
6861 case IMAGPART_EXPR:
5566b478 6862 return build1
6a629cac 6863 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
4393e105 6864 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
5566b478
MS
6865
6866 case PLUS_EXPR:
6867 case MINUS_EXPR:
6868 case MULT_EXPR:
6869 case TRUNC_DIV_EXPR:
6870 case CEIL_DIV_EXPR:
6871 case FLOOR_DIV_EXPR:
6872 case ROUND_DIV_EXPR:
6873 case EXACT_DIV_EXPR:
6874 case BIT_AND_EXPR:
6875 case BIT_ANDTC_EXPR:
6876 case BIT_IOR_EXPR:
6877 case BIT_XOR_EXPR:
6878 case TRUNC_MOD_EXPR:
6879 case FLOOR_MOD_EXPR:
6880 case TRUTH_ANDIF_EXPR:
6881 case TRUTH_ORIF_EXPR:
6882 case TRUTH_AND_EXPR:
6883 case TRUTH_OR_EXPR:
6884 case RSHIFT_EXPR:
6885 case LSHIFT_EXPR:
6886 case RROTATE_EXPR:
6887 case LROTATE_EXPR:
6888 case EQ_EXPR:
6889 case NE_EXPR:
6890 case MAX_EXPR:
6891 case MIN_EXPR:
6892 case LE_EXPR:
6893 case GE_EXPR:
6894 case LT_EXPR:
6895 case GT_EXPR:
6896 case COMPONENT_REF:
6897 case ARRAY_REF:
6898 case COMPOUND_EXPR:
6899 case SCOPE_REF:
6900 case DOTSTAR_EXPR:
6901 case MEMBER_REF:
6902 return build_nt
4393e105
MM
6903 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
6904 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
5566b478
MS
6905
6906 case CALL_EXPR:
6907 {
6908 tree fn = TREE_OPERAND (t, 0);
f84b4be9 6909 if (is_overloaded_fn (fn))
4393e105 6910 fn = tsubst_copy (get_first_fn (fn), args, complain, in_decl);
5566b478 6911 else
f84b4be9 6912 /* Sometimes FN is a LOOKUP_EXPR. */
4393e105 6913 fn = tsubst_copy (fn, args, complain, in_decl);
5566b478 6914 return build_nt
4393e105
MM
6915 (code, fn, tsubst_copy (TREE_OPERAND (t, 1), args, complain,
6916 in_decl),
5566b478
MS
6917 NULL_TREE);
6918 }
6919
6920 case METHOD_CALL_EXPR:
6921 {
6922 tree name = TREE_OPERAND (t, 0);
6923 if (TREE_CODE (name) == BIT_NOT_EXPR)
6924 {
4393e105
MM
6925 name = tsubst_copy (TREE_OPERAND (name, 0), args,
6926 complain, in_decl);
7bae46f4 6927 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
5566b478
MS
6928 }
6929 else if (TREE_CODE (name) == SCOPE_REF
6930 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
6931 {
4393e105
MM
6932 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
6933 complain, in_decl);
5566b478 6934 name = TREE_OPERAND (name, 1);
4393e105
MM
6935 name = tsubst_copy (TREE_OPERAND (name, 0), args,
6936 complain, in_decl);
11686454 6937 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
5566b478
MS
6938 name = build_nt (SCOPE_REF, base, name);
6939 }
6940 else
4393e105 6941 name = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
5566b478 6942 return build_nt
4393e105
MM
6943 (code, name, tsubst_copy (TREE_OPERAND (t, 1), args,
6944 complain, in_decl),
6945 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl),
5566b478
MS
6946 NULL_TREE);
6947 }
6948
558475f0
MM
6949 case STMT_EXPR:
6950 /* This processing should really occur in tsubst_expr, However,
6951 tsubst_expr does not recurse into expressions, since it
6952 assumes that there aren't any statements inside them.
6953 Instead, it simply calls build_expr_from_tree. So, we need
6954 to expand the STMT_EXPR here. */
6955 if (!processing_template_decl)
6956 {
b5ac18ea 6957 tree stmt_expr = begin_stmt_expr ();
447cfcb9
MM
6958 tsubst_expr (STMT_EXPR_STMT (t), args,
6959 complain, in_decl);
b5ac18ea 6960 return finish_stmt_expr (stmt_expr);
558475f0 6961 }
9d9169de
MM
6962
6963 return t;
558475f0 6964
5566b478
MS
6965 case COND_EXPR:
6966 case MODOP_EXPR:
40242ccf 6967 case PSEUDO_DTOR_EXPR:
67da3287 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));
67da3287
MM
6973 return r;
6974 }
5566b478
MS
6975
6976 case NEW_EXPR:
6977 {
8452b1d3 6978 r = build_nt
4393e105
MM
6979 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
6980 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
6981 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
5566b478
MS
6982 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
6983 return r;
6984 }
6985
6986 case DELETE_EXPR:
6987 {
8452b1d3 6988 r = build_nt
4393e105
MM
6989 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
6990 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
5566b478
MS
6991 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
6992 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
6993 return r;
6994 }
6995
386b8a85
JM
6996 case TEMPLATE_ID_EXPR:
6997 {
00d3396f 6998 /* Substituted template arguments */
4393e105
MM
6999 tree targs = tsubst_copy (TREE_OPERAND (t, 1), args, complain,
7000 in_decl);
856216bb
MM
7001
7002 if (targs && TREE_CODE (targs) == TREE_LIST)
7003 {
7004 tree chain;
7005 for (chain = targs; chain; chain = TREE_CHAIN (chain))
7006 TREE_VALUE (chain) = maybe_fold_nontype_arg (TREE_VALUE (chain));
7007 }
7008 else if (targs)
7009 {
7010 int i;
7011 for (i = 0; i < TREE_VEC_LENGTH (targs); ++i)
7012 TREE_VEC_ELT (targs, i)
7013 = maybe_fold_nontype_arg (TREE_VEC_ELT (targs, i));
7014 }
00d3396f
JM
7015
7016 return lookup_template_function
4393e105 7017 (tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl), targs);
386b8a85
JM
7018 }
7019
5566b478
MS
7020 case TREE_LIST:
7021 {
7022 tree purpose, value, chain;
7023
7024 if (t == void_list_node)
7025 return t;
7026
7027 purpose = TREE_PURPOSE (t);
7028 if (purpose)
4393e105 7029 purpose = tsubst_copy (purpose, args, complain, in_decl);
5566b478
MS
7030 value = TREE_VALUE (t);
7031 if (value)
4393e105 7032 value = tsubst_copy (value, args, complain, in_decl);
5566b478
MS
7033 chain = TREE_CHAIN (t);
7034 if (chain && chain != void_type_node)
4393e105 7035 chain = tsubst_copy (chain, args, complain, in_decl);
5566b478
MS
7036 if (purpose == TREE_PURPOSE (t)
7037 && value == TREE_VALUE (t)
7038 && chain == TREE_CHAIN (t))
7039 return t;
7040 return tree_cons (purpose, value, chain);
7041 }
7042
7043 case RECORD_TYPE:
7044 case UNION_TYPE:
7045 case ENUMERAL_TYPE:
7046 case INTEGER_TYPE:
7047 case TEMPLATE_TYPE_PARM:
73b0fce8 7048 case TEMPLATE_TEMPLATE_PARM:
f84b4be9 7049 case TEMPLATE_PARM_INDEX:
5566b478
MS
7050 case POINTER_TYPE:
7051 case REFERENCE_TYPE:
7052 case OFFSET_TYPE:
7053 case FUNCTION_TYPE:
7054 case METHOD_TYPE:
7055 case ARRAY_TYPE:
7056 case TYPENAME_TYPE:
f84b4be9 7057 case TYPE_DECL:
4393e105 7058 return tsubst (t, args, complain, in_decl);
5566b478 7059
e92cc029 7060 case IDENTIFIER_NODE:
8e710788
BK
7061 if (IDENTIFIER_TYPENAME_P (t)
7062 /* Make sure it's not just a variable named `__opr', for instance,
7063 which can occur in some existing code. */
7064 && TREE_TYPE (t))
e92cc029 7065 return build_typename_overload
4393e105 7066 (tsubst (TREE_TYPE (t), args, complain, in_decl));
e92cc029
MS
7067 else
7068 return t;
7069
5156628f 7070 case CONSTRUCTOR:
8452b1d3
JM
7071 {
7072 r = build
4393e105
MM
7073 (CONSTRUCTOR, tsubst (TREE_TYPE (t), args, complain, in_decl),
7074 NULL_TREE, tsubst_copy (CONSTRUCTOR_ELTS (t), args,
7075 complain, in_decl));
8452b1d3
JM
7076 TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
7077 return r;
7078 }
5156628f 7079
371534a9
MM
7080 case VA_ARG_EXPR:
7081 return build_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
7082 in_decl),
7083 tsubst (TREE_TYPE (t), args, complain, in_decl));
f9817201
MM
7084
7085 case FUNCTION_NAME:
7086 return tsubst (t, args, complain, in_decl);
7087
5566b478
MS
7088 default:
7089 return t;
7090 }
7091}
7092
558475f0 7093/* Like tsubst_copy, but also does semantic processing. */
00d3396f 7094
5566b478 7095tree
4393e105 7096tsubst_expr (t, args, complain, in_decl)
98c1c668 7097 tree t, args;
4393e105 7098 int complain;
5566b478
MS
7099 tree in_decl;
7100{
558475f0
MM
7101 tree stmt;
7102
5566b478
MS
7103 if (t == NULL_TREE || t == error_mark_node)
7104 return t;
7105
5156628f 7106 if (processing_template_decl)
4393e105 7107 return tsubst_copy (t, args, complain, in_decl);
5566b478
MS
7108
7109 switch (TREE_CODE (t))
8d08fdba 7110 {
558475f0 7111 case RETURN_INIT:
a7e4cfa0 7112 prep_stmt (t);
558475f0
MM
7113 finish_named_return_value
7114 (TREE_OPERAND (t, 0),
7115 tsubst_expr (TREE_OPERAND (t, 1), args, /*complain=*/1, in_decl));
7116 tsubst_expr (TREE_CHAIN (t), args, complain, in_decl);
7117 break;
7118
7119 case CTOR_INITIALIZER:
a7e4cfa0 7120 prep_stmt (t);
558475f0
MM
7121 current_member_init_list
7122 = tsubst_expr_values (TREE_OPERAND (t, 0), args);
7123 current_base_init_list
7124 = tsubst_expr_values (TREE_OPERAND (t, 1), args);
7125 setup_vtbl_ptr ();
7126 tsubst_expr (TREE_CHAIN (t), args, complain, in_decl);
7127 break;
7128
5566b478 7129 case RETURN_STMT:
a7e4cfa0 7130 prep_stmt (t);
ad321293 7131 finish_return_stmt (tsubst_expr (RETURN_EXPR (t),
4393e105 7132 args, complain, in_decl));
5566b478
MS
7133 break;
7134
7135 case EXPR_STMT:
a7e4cfa0 7136 prep_stmt (t);
ad321293 7137 finish_expr_stmt (tsubst_expr (EXPR_STMT_EXPR (t),
4393e105 7138 args, complain, in_decl));
5566b478
MS
7139 break;
7140
7141 case DECL_STMT:
7142 {
e0942dcd
MM
7143 tree decl;
7144 tree init;
5566b478 7145
a7e4cfa0 7146 prep_stmt (t);
e0942dcd 7147 decl = DECL_STMT_DECL (t);
acef433b
MM
7148 if (TREE_CODE (decl) == LABEL_DECL)
7149 finish_label_decl (DECL_NAME (decl));
7150 else
7151 {
7152 init = DECL_INITIAL (decl);
7153 decl = tsubst (decl, args, complain, in_decl);
7154 init = tsubst_expr (init, args, complain, in_decl);
24bef158
MM
7155 if (init)
7156 DECL_INITIAL (decl) = error_mark_node;
b7b8bcd2
MM
7157 /* By marking the declaration as instantiated, we avoid
7158 trying to instantiate it. Since instantiate_decl can't
7159 handle local variables, and since we've already done
7160 all that needs to be done, that's the right thing to
7161 do. */
acef433b
MM
7162 if (TREE_CODE (decl) == VAR_DECL)
7163 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
7164 maybe_push_decl (decl);
cd9f6678 7165 cp_finish_decl (decl, init, NULL_TREE, 0);
acef433b 7166 }
e0942dcd 7167 return decl;
5566b478 7168 }
8d08fdba 7169
5566b478
MS
7170 case FOR_STMT:
7171 {
7172 tree tmp;
a7e4cfa0 7173 prep_stmt (t);
5566b478 7174
558475f0 7175 stmt = begin_for_stmt ();
ad321293 7176 for (tmp = FOR_INIT_STMT (t); tmp; tmp = TREE_CHAIN (tmp))
4393e105 7177 tsubst_expr (tmp, args, complain, in_decl);
558475f0 7178 finish_for_init_stmt (stmt);
ad321293 7179 finish_for_cond (tsubst_expr (FOR_COND (t), args,
4393e105 7180 complain, in_decl),
558475f0 7181 stmt);
4393e105 7182 tmp = tsubst_expr (FOR_EXPR (t), args, complain, in_decl);
558475f0 7183 finish_for_expr (tmp, stmt);
4393e105 7184 tsubst_expr (FOR_BODY (t), args, complain, in_decl);
558475f0 7185 finish_for_stmt (tmp, stmt);
5566b478
MS
7186 }
7187 break;
8d08fdba 7188
5566b478
MS
7189 case WHILE_STMT:
7190 {
a7e4cfa0 7191 prep_stmt (t);
558475f0 7192 stmt = begin_while_stmt ();
ad321293 7193 finish_while_stmt_cond (tsubst_expr (WHILE_COND (t),
4393e105 7194 args, complain, in_decl),
558475f0 7195 stmt);
4393e105 7196 tsubst_expr (WHILE_BODY (t), args, complain, in_decl);
558475f0 7197 finish_while_stmt (stmt);
5566b478
MS
7198 }
7199 break;
8d08fdba 7200
5566b478
MS
7201 case DO_STMT:
7202 {
a7e4cfa0 7203 prep_stmt (t);
558475f0 7204 stmt = begin_do_stmt ();
4393e105 7205 tsubst_expr (DO_BODY (t), args, complain, in_decl);
558475f0 7206 finish_do_body (stmt);
ad321293 7207 finish_do_stmt (tsubst_expr (DO_COND (t), args,
4393e105 7208 complain, in_decl),
558475f0 7209 stmt);
5566b478
MS
7210 }
7211 break;
a0a33927 7212
5566b478 7213 case IF_STMT:
8d08fdba 7214 {
5566b478 7215 tree tmp;
5566b478 7216
a7e4cfa0 7217 prep_stmt (t);
558475f0 7218 stmt = begin_if_stmt ();
ad321293 7219 finish_if_stmt_cond (tsubst_expr (IF_COND (t),
4393e105 7220 args, complain, in_decl),
558475f0 7221 stmt);
db5ae43f 7222
ad321293 7223 if (tmp = THEN_CLAUSE (t), tmp)
db5ae43f 7224 {
4393e105 7225 tsubst_expr (tmp, args, complain, in_decl);
558475f0 7226 finish_then_clause (stmt);
db5ae43f
MS
7227 }
7228
ad321293
MM
7229 if (tmp = ELSE_CLAUSE (t), tmp)
7230 {
7231 begin_else_clause ();
4393e105 7232 tsubst_expr (tmp, args, complain, in_decl);
558475f0 7233 finish_else_clause (stmt);
ad321293 7234 }
8d08fdba 7235
ad321293 7236 finish_if_stmt ();
8d08fdba 7237 }
5566b478 7238 break;
8d08fdba 7239
5566b478
MS
7240 case COMPOUND_STMT:
7241 {
ad321293 7242 tree substmt;
8d08fdba 7243
a7e4cfa0 7244 prep_stmt (t);
558475f0 7245 stmt = begin_compound_stmt (COMPOUND_STMT_NO_SCOPE (t));
ad321293
MM
7246 for (substmt = COMPOUND_BODY (t);
7247 substmt != NULL_TREE;
7248 substmt = TREE_CHAIN (substmt))
4393e105 7249 tsubst_expr (substmt, args, complain, in_decl);
558475f0 7250 return finish_compound_stmt (COMPOUND_STMT_NO_SCOPE (t), stmt);
5566b478
MS
7251 }
7252 break;
8d08fdba 7253
5566b478 7254 case BREAK_STMT:
a7e4cfa0 7255 prep_stmt (t);
ad321293 7256 finish_break_stmt ();
5566b478 7257 break;
8d08fdba 7258
6467930b 7259 case CONTINUE_STMT:
a7e4cfa0 7260 prep_stmt (t);
ad321293 7261 finish_continue_stmt ();
6467930b
MS
7262 break;
7263
5566b478
MS
7264 case SWITCH_STMT:
7265 {
558475f0 7266 tree val;
5566b478 7267
a7e4cfa0 7268 prep_stmt (t);
527f0080 7269 stmt = begin_switch_stmt ();
4393e105 7270 val = tsubst_expr (SWITCH_COND (t), args, complain, in_decl);
527f0080 7271 finish_switch_cond (val, stmt);
558475f0
MM
7272 tsubst_expr (SWITCH_BODY (t), args, complain, in_decl);
7273 finish_switch_stmt (val, stmt);
5566b478
MS
7274 }
7275 break;
7276
7277 case CASE_LABEL:
a7e4cfa0 7278 prep_stmt (t);
4393e105
MM
7279 finish_case_label (tsubst_expr (CASE_LOW (t), args, complain, in_decl),
7280 tsubst_expr (CASE_HIGH (t), args, complain, in_decl));
5566b478
MS
7281 break;
7282
acef433b
MM
7283 case LABEL_STMT:
7284 lineno = STMT_LINENO (t);
7285 finish_label_stmt (DECL_NAME (LABEL_STMT_LABEL (t)));
5566b478
MS
7286 break;
7287
7288 case GOTO_STMT:
a7e4cfa0 7289 prep_stmt (t);
aa09da44 7290 t = GOTO_DESTINATION (t);
3fa56191 7291 if (TREE_CODE (t) != LABEL_DECL)
aa09da44
MM
7292 /* Computed goto's must be tsubst'd into. On the other hand,
7293 non-computed gotos must not be; the identifier in question
7294 will have no binding. */
4393e105 7295 t = tsubst_expr (t, args, complain, in_decl);
3fa56191
MM
7296 else
7297 t = DECL_NAME (t);
aa09da44 7298 finish_goto_stmt (t);
ad321293
MM
7299 break;
7300
7301 case ASM_STMT:
a7e4cfa0 7302 prep_stmt (t);
3ebc5c52 7303 finish_asm_stmt (ASM_CV_QUAL (t),
4393e105
MM
7304 tsubst_expr (ASM_STRING (t), args, complain, in_decl),
7305 tsubst_expr (ASM_OUTPUTS (t), args, complain, in_decl),
7306 tsubst_expr (ASM_INPUTS (t), args, complain, in_decl),
7307 tsubst_expr (ASM_CLOBBERS (t), args, complain,
7308 in_decl));
5566b478 7309 break;
faf5394a
MS
7310
7311 case TRY_BLOCK:
a7e4cfa0 7312 prep_stmt (t);
f1dedc31 7313 if (CLEANUP_P (t))
62409b39 7314 {
57b52417 7315 stmt = begin_try_block ();
62409b39
MM
7316 tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
7317 finish_cleanup_try_block (stmt);
7318 finish_cleanup (tsubst_expr (TRY_HANDLERS (t), args,
7319 complain, in_decl),
7320 stmt);
7321 }
f1dedc31
MM
7322 else
7323 {
62409b39
MM
7324 tree handler;
7325
7326 if (FN_TRY_BLOCK_P (t))
7327 stmt = begin_function_try_block ();
7328 else
7329 stmt = begin_try_block ();
7330
7331 tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
7332
7333 if (FN_TRY_BLOCK_P (t))
7334 finish_function_try_block (stmt);
7335 else
7336 finish_try_block (stmt);
7337
7338 handler = TRY_HANDLERS (t);
f1dedc31
MM
7339 for (; handler; handler = TREE_CHAIN (handler))
7340 tsubst_expr (handler, args, complain, in_decl);
84df082b
MM
7341 if (FN_TRY_BLOCK_P (t))
7342 finish_function_handler_sequence (stmt);
7343 else
7344 finish_handler_sequence (stmt);
f1dedc31 7345 }
faf5394a 7346 break;
b35d4555 7347
faf5394a 7348 case HANDLER:
b35d4555
MM
7349 {
7350 tree decl;
7351 tree blocks;
7352
7353 prep_stmt (t);
7354 stmt = begin_handler ();
7355 if (HANDLER_PARMS (t))
7356 {
7357 decl = DECL_STMT_DECL (HANDLER_PARMS (t));
7358 decl = tsubst (decl, args, complain, in_decl);
f8191e64
MM
7359 /* Prevent instantiate_decl from trying to instantiate
7360 this variable. We've already done all that needs to be
7361 done. */
7362 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
b35d4555
MM
7363 }
7364 else
7365 decl = NULL_TREE;
7366 blocks = finish_handler_parms (decl, stmt);
7367 tsubst_expr (HANDLER_BODY (t), args, complain, in_decl);
7368 finish_handler (blocks, stmt);
7369 }
faf5394a
MS
7370 break;
7371
b87692e5 7372 case TAG_DEFN:
a7e4cfa0 7373 prep_stmt (t);
b87692e5 7374 t = TREE_TYPE (t);
ae673f14 7375 tsubst (t, args, complain, NULL_TREE);
b87692e5
MS
7376 break;
7377
5566b478 7378 default:
4393e105 7379 return build_expr_from_tree (tsubst_copy (t, args, complain, in_decl));
5566b478
MS
7380 }
7381 return NULL_TREE;
8d08fdba
MS
7382}
7383
6ba89f8e 7384/* Instantiate the indicated variable or function template TMPL with
36a117a5
MM
7385 the template arguments in TARG_PTR. */
7386
5566b478
MS
7387tree
7388instantiate_template (tmpl, targ_ptr)
98c1c668 7389 tree tmpl, targ_ptr;
8d08fdba 7390{
5566b478 7391 tree fndecl;
36a117a5
MM
7392 tree gen_tmpl;
7393 tree spec;
5566b478 7394 int i, len;
36a117a5 7395 tree inner_args;
5566b478 7396
27fafc8d
JM
7397 if (tmpl == error_mark_node)
7398 return error_mark_node;
7399
386b8a85
JM
7400 my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 283);
7401
36a117a5
MM
7402 /* Check to see if we already have this specialization. */
7403 spec = retrieve_specialization (tmpl, targ_ptr);
7404 if (spec != NULL_TREE)
7405 return spec;
7406
7407 if (DECL_TEMPLATE_INFO (tmpl))
386b8a85 7408 {
36a117a5
MM
7409 /* The TMPL is a partial instantiation. To get a full set of
7410 arguments we must add the arguments used to perform the
7411 partial instantiation. */
7412 targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
7413 targ_ptr);
7414 gen_tmpl = most_general_template (tmpl);
7415
7416 /* Check to see if we already have this specialization. */
7417 spec = retrieve_specialization (gen_tmpl, targ_ptr);
75650646
MM
7418 if (spec != NULL_TREE)
7419 return spec;
386b8a85 7420 }
36a117a5
MM
7421 else
7422 gen_tmpl = tmpl;
386b8a85 7423
36a117a5
MM
7424 len = DECL_NTPARMS (gen_tmpl);
7425 inner_args = innermost_args (targ_ptr);
5566b478
MS
7426 i = len;
7427 while (i--)
8d08fdba 7428 {
36a117a5 7429 tree t = TREE_VEC_ELT (inner_args, i);
5566b478
MS
7430 if (TREE_CODE_CLASS (TREE_CODE (t)) == 't')
7431 {
7432 tree nt = target_type (t);
ec255269 7433 if (IS_AGGR_TYPE (nt) && decl_function_context (TYPE_MAIN_DECL (nt)))
5566b478 7434 {
8251199e
JM
7435 cp_error ("type `%T' composed from a local class is not a valid template-argument", t);
7436 cp_error (" trying to instantiate `%D'", gen_tmpl);
5566b478
MS
7437 fndecl = error_mark_node;
7438 goto out;
7439 }
7440 }
8d08fdba
MS
7441 }
7442
5566b478 7443 /* substitute template parameters */
4393e105 7444 fndecl = tsubst (DECL_RESULT (gen_tmpl), targ_ptr, /*complain=*/1, gen_tmpl);
36a117a5
MM
7445 /* The DECL_TI_TEMPLATE should always be the immediate parent
7446 template, not the most general template. */
7447 DECL_TI_TEMPLATE (fndecl) = tmpl;
8d08fdba 7448
824b9a4c
MS
7449 if (flag_external_templates)
7450 add_pending_template (fndecl);
7451
5566b478 7452 out:
5566b478 7453 return fndecl;
8d08fdba 7454}
5566b478
MS
7455
7456/* Push the name of the class template into the scope of the instantiation. */
8d08fdba
MS
7457
7458void
5566b478
MS
7459overload_template_name (type)
7460 tree type;
8d08fdba 7461{
5566b478
MS
7462 tree id = DECL_NAME (CLASSTYPE_TI_TEMPLATE (type));
7463 tree decl;
8d08fdba 7464
5566b478
MS
7465 if (IDENTIFIER_CLASS_VALUE (id)
7466 && TREE_TYPE (IDENTIFIER_CLASS_VALUE (id)) == type)
7467 return;
8d08fdba 7468
5566b478
MS
7469 decl = build_decl (TYPE_DECL, id, type);
7470 SET_DECL_ARTIFICIAL (decl);
7471 pushdecl_class_level (decl);
8d08fdba
MS
7472}
7473
4393e105
MM
7474/* The FN is a TEMPLATE_DECL for a function. The ARGS are the
7475 arguments that are being used when calling it. TARGS is a vector
7476 into which the deduced template arguments are placed.
8d08fdba
MS
7477
7478 Return zero for success, 2 for an incomplete match that doesn't resolve
7479 all the types, and 1 for complete failure. An error message will be
7480 printed only for an incomplete match.
7481
4393e105
MM
7482 If FN is a conversion operator, RETURN_TYPE is the type desired as
7483 the result of the conversion operator.
8d08fdba 7484
4393e105 7485 TPARMS is a vector of template parameters.
9f54c803
MM
7486
7487 The EXPLICIT_TARGS are explicit template arguments provided via a
7488 template-id.
6467930b 7489
830bfa74
MM
7490 The parameter STRICT is one of:
7491
7492 DEDUCE_CALL:
7493 We are deducing arguments for a function call, as in
7494 [temp.deduct.call].
7495
7496 DEDUCE_CONV:
7497 We are deducing arguments for a conversion function, as in
7498 [temp.deduct.conv].
7499
7500 DEDUCE_EXACT:
7501 We are deducing arguments when calculating the partial
7502 ordering between specializations of function or class
7503 templates, as in [temp.func.order] and [temp.class.order],
7504 when doing an explicit instantiation as in [temp.explicit],
9f54c803 7505 when determining an explicit specialization as in
830bfa74 7506 [temp.expl.spec], or when taking the address of a function
4393e105
MM
7507 template, as in [temp.deduct.funcaddr].
7508
4393e105 7509 The other arguments are as for type_unification. */
8d08fdba
MS
7510
7511int
4393e105 7512fn_type_unification (fn, explicit_targs, targs, args, return_type,
03017874 7513 strict)
4393e105 7514 tree fn, explicit_targs, targs, args, return_type;
830bfa74 7515 unification_kind_t strict;
386b8a85 7516{
4393e105
MM
7517 tree parms;
7518 tree fntype;
adecb3f4 7519 int result;
386b8a85 7520
4393e105
MM
7521 my_friendly_assert (TREE_CODE (fn) == TEMPLATE_DECL, 0);
7522
7523 fntype = TREE_TYPE (fn);
7524 if (explicit_targs)
75650646 7525 {
4393e105
MM
7526 /* [temp.deduct]
7527
7528 The specified template arguments must match the template
7529 parameters in kind (i.e., type, nontype, template), and there
7530 must not be more arguments than there are parameters;
7531 otherwise type deduction fails.
7532
7533 Nontype arguments must match the types of the corresponding
7534 nontype template parameters, or must be convertible to the
7535 types of the corresponding nontype parameters as specified in
7536 _temp.arg.nontype_, otherwise type deduction fails.
7537
7538 All references in the function type of the function template
7539 to the corresponding template parameters are replaced by the
7540 specified template argument values. If a substitution in a
7541 template parameter or in the function type of the function
7542 template results in an invalid type, type deduction fails. */
7543 int i;
7544 tree converted_args;
75650646 7545
4393e105
MM
7546 converted_args
7547 = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
7548 explicit_targs, NULL_TREE, /*complain=*/0,
7549 /*require_all_arguments=*/0));
7550 if (converted_args == error_mark_node)
75650646 7551 return 1;
386b8a85 7552
4393e105
MM
7553 fntype = tsubst (fntype, converted_args, /*complain=*/0, NULL_TREE);
7554 if (fntype == error_mark_node)
7555 return 1;
050367a3 7556
4393e105
MM
7557 /* Place the explicitly specified arguments in TARGS. */
7558 for (i = 0; i < TREE_VEC_LENGTH (targs); i++)
7559 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
75650646 7560 }
4393e105
MM
7561
7562 parms = TYPE_ARG_TYPES (fntype);
386b8a85 7563
4393e105
MM
7564 if (DECL_CONV_FN_P (fn))
7565 {
8d3631f8 7566 /* This is a template conversion operator. Remove `this', since
edef8288 7567 we could be comparing conversions from different classes. */
8d3631f8
NS
7568 parms = TREE_CHAIN (parms);
7569 args = TREE_CHAIN (args);
7570 my_friendly_assert (return_type != NULL_TREE, 20000227);
7571 }
7572
7573 if (return_type)
7574 {
7575 /* We've been given a return type to match, prepend it. */
7576 parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
7577 args = tree_cons (NULL_TREE, return_type, args);
4393e105
MM
7578 }
7579
4393e105
MM
7580 /* We allow incomplete unification without an error message here
7581 because the standard doesn't seem to explicitly prohibit it. Our
7582 callers must be ready to deal with unification failures in any
7583 event. */
adecb3f4
MM
7584 result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
7585 targs, parms, args, /*subr=*/0,
7586 strict, /*allow_incomplete*/1);
7587
7588 if (result == 0)
7589 /* All is well so far. Now, check:
7590
7591 [temp.deduct]
7592
7593 When all template arguments have been deduced, all uses of
7594 template parameters in nondeduced contexts are replaced with
7595 the corresponding deduced argument values. If the
7596 substitution results in an invalid type, as described above,
7597 type deduction fails. */
7598 if (tsubst (TREE_TYPE (fn), targs, /*complain=*/0, NULL_TREE)
7599 == error_mark_node)
7600 return 1;
7601
7602 return result;
830bfa74
MM
7603}
7604
7605/* Adjust types before performing type deduction, as described in
7606 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
4c7d0dff
MM
7607 sections are symmetric. PARM is the type of a function parameter
7608 or the return type of the conversion function. ARG is the type of
7609 the argument passed to the call, or the type of the value
7610 intialized with the result of the conversion function. */
386b8a85 7611
e9659ab0 7612static void
830bfa74
MM
7613maybe_adjust_types_for_deduction (strict, parm, arg)
7614 unification_kind_t strict;
7615 tree* parm;
7616 tree* arg;
7617{
7618 switch (strict)
7619 {
7620 case DEDUCE_CALL:
7621 break;
7622
7623 case DEDUCE_CONV:
7624 {
4c7d0dff
MM
7625 /* Swap PARM and ARG throughout the remainder of this
7626 function; the handling is precisely symmetric since PARM
7627 will initialize ARG rather than vice versa. */
830bfa74
MM
7628 tree* temp = parm;
7629 parm = arg;
7630 arg = temp;
7631 break;
7632 }
7633
7634 case DEDUCE_EXACT:
7635 /* There is nothing to do in this case. */
7636 return;
7637
7638 default:
7639 my_friendly_abort (0);
7640 }
7641
7642 if (TREE_CODE (*parm) != REFERENCE_TYPE)
7643 {
7644 /* [temp.deduct.call]
7645
7646 If P is not a reference type:
7647
7648 --If A is an array type, the pointer type produced by the
7649 array-to-pointer standard conversion (_conv.array_) is
7650 used in place of A for type deduction; otherwise,
7651
7652 --If A is a function type, the pointer type produced by
7653 the function-to-pointer standard conversion
7654 (_conv.func_) is used in place of A for type deduction;
7655 otherwise,
7656
7657 --If A is a cv-qualified type, the top level
7658 cv-qualifiers of A's type are ignored for type
7659 deduction. */
7660 if (TREE_CODE (*arg) == ARRAY_TYPE)
7661 *arg = build_pointer_type (TREE_TYPE (*arg));
d8f8dca1 7662 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
830bfa74
MM
7663 *arg = build_pointer_type (*arg);
7664 else
7665 *arg = TYPE_MAIN_VARIANT (*arg);
7666 }
7667
7668 /* [temp.deduct.call]
7669
7670 If P is a cv-qualified type, the top level cv-qualifiers
7671 of P's type are ignored for type deduction. If P is a
7672 reference type, the type referred to by P is used for
7673 type deduction. */
7674 *parm = TYPE_MAIN_VARIANT (*parm);
7675 if (TREE_CODE (*parm) == REFERENCE_TYPE)
7676 *parm = TREE_TYPE (*parm);
386b8a85
JM
7677}
7678
4393e105 7679/* Like type_unfication.
9f54c803
MM
7680
7681 If SUBR is 1, we're being called recursively (to unify the
7682 arguments of a function or method parameter of a function
7683 template). */
386b8a85 7684
4966381a 7685static int
3b3ba9f0 7686type_unification_real (tparms, targs, parms, args, subr,
4393e105 7687 strict, allow_incomplete)
050367a3 7688 tree tparms, targs, parms, args;
830bfa74
MM
7689 int subr;
7690 unification_kind_t strict;
7691 int allow_incomplete;
8d08fdba
MS
7692{
7693 tree parm, arg;
7694 int i;
7695 int ntparms = TREE_VEC_LENGTH (tparms);
830bfa74 7696 int sub_strict;
8d08fdba
MS
7697
7698 my_friendly_assert (TREE_CODE (tparms) == TREE_VEC, 289);
386b8a85
JM
7699 my_friendly_assert (parms == NULL_TREE
7700 || TREE_CODE (parms) == TREE_LIST, 290);
51c184be 7701 /* ARGS could be NULL (via a call from parse.y to
8d08fdba
MS
7702 build_x_function_call). */
7703 if (args)
7704 my_friendly_assert (TREE_CODE (args) == TREE_LIST, 291);
7705 my_friendly_assert (ntparms > 0, 292);
7706
830bfa74
MM
7707 switch (strict)
7708 {
7709 case DEDUCE_CALL:
7710 sub_strict = UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_DERIVED;
7711 break;
7712
7713 case DEDUCE_CONV:
7714 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
7715 break;
7716
7717 case DEDUCE_EXACT:
7718 sub_strict = UNIFY_ALLOW_NONE;
7719 break;
7720
7721 default:
7722 my_friendly_abort (0);
7723 }
7724
8d08fdba
MS
7725 while (parms
7726 && parms != void_list_node
7727 && args
7728 && args != void_list_node)
7729 {
7730 parm = TREE_VALUE (parms);
7731 parms = TREE_CHAIN (parms);
7732 arg = TREE_VALUE (args);
7733 args = TREE_CHAIN (args);
7734
7735 if (arg == error_mark_node)
7736 return 1;
7737 if (arg == unknown_type_node)
34016c81
JM
7738 /* We can't deduce anything from this, but we might get all the
7739 template args from other function args. */
7740 continue;
b7484fbe 7741
03e70705
JM
7742 /* Conversions will be performed on a function argument that
7743 corresponds with a function parameter that contains only
7744 non-deducible template parameters and explicitly specified
7745 template parameters. */
7746 if (! uses_template_parms (parm))
b7484fbe 7747 {
03e70705
JM
7748 tree type;
7749
7750 if (TREE_CODE_CLASS (TREE_CODE (arg)) != 't')
7751 type = TREE_TYPE (arg);
7752 else
7753 {
7754 type = arg;
7755 arg = NULL_TREE;
7756 }
7757
830bfa74 7758 if (strict == DEDUCE_EXACT)
03e70705 7759 {
3bfdc719 7760 if (same_type_p (parm, type))
03e70705
JM
7761 continue;
7762 }
03e70705 7763 else
343c89cd
JM
7764 /* It might work; we shouldn't check now, because we might
7765 get into infinite recursion. Overload resolution will
7766 handle it. */
7767 continue;
03e70705 7768
b7484fbe
MS
7769 return 1;
7770 }
7771
8d08fdba
MS
7772 if (TREE_CODE_CLASS (TREE_CODE (arg)) != 't')
7773 {
7774 my_friendly_assert (TREE_TYPE (arg) != NULL_TREE, 293);
34016c81 7775 if (type_unknown_p (arg))
28cbf42c 7776 {
34016c81
JM
7777 /* [temp.deduct.type] A template-argument can be deduced from
7778 a pointer to function or pointer to member function
7779 argument if the set of overloaded functions does not
7780 contain function templates and at most one of a set of
7781 overloaded functions provides a unique match. */
7782
7783 if (resolve_overloaded_unification
4393e105 7784 (tparms, targs, parm, arg, strict, sub_strict)
34016c81
JM
7785 != 0)
7786 return 1;
7787 continue;
28cbf42c 7788 }
8d08fdba
MS
7789 arg = TREE_TYPE (arg);
7790 }
4393e105 7791
830bfa74
MM
7792 if (!subr)
7793 maybe_adjust_types_for_deduction (strict, &parm, &arg);
db5ae43f 7794
4393e105 7795 switch (unify (tparms, targs, parm, arg, sub_strict))
8d08fdba
MS
7796 {
7797 case 0:
7798 break;
7799 case 1:
7800 return 1;
7801 }
7802 }
7803 /* Fail if we've reached the end of the parm list, and more args
7804 are present, and the parm list isn't variadic. */
7805 if (args && args != void_list_node && parms == void_list_node)
7806 return 1;
7807 /* Fail if parms are left and they don't have default values. */
7808 if (parms
7809 && parms != void_list_node
7810 && TREE_PURPOSE (parms) == NULL_TREE)
7811 return 1;
7812 if (!subr)
7813 for (i = 0; i < ntparms; i++)
050367a3 7814 if (TREE_VEC_ELT (targs, i) == NULL_TREE)
8d08fdba 7815 {
386b8a85 7816 if (!allow_incomplete)
8251199e 7817 error ("incomplete type unification");
8d08fdba
MS
7818 return 2;
7819 }
7820 return 0;
7821}
7822
34016c81
JM
7823/* Subroutine of type_unification_real. Args are like the variables at the
7824 call site. ARG is an overloaded function (or template-id); we try
7825 deducing template args from each of the overloads, and if only one
7826 succeeds, we go with that. Modifies TARGS and returns 0 on success. */
7827
7828static int
7829resolve_overloaded_unification (tparms, targs, parm, arg, strict,
4393e105 7830 sub_strict)
34016c81
JM
7831 tree tparms, targs, parm, arg;
7832 unification_kind_t strict;
7833 int sub_strict;
34016c81
JM
7834{
7835 tree tempargs = copy_node (targs);
7836 int good = 0;
7837
7838 if (TREE_CODE (arg) == ADDR_EXPR)
7839 arg = TREE_OPERAND (arg, 0);
9f3d9e46 7840
d8f8dca1
MM
7841 if (TREE_CODE (arg) == COMPONENT_REF)
7842 /* Handle `&x' where `x' is some static or non-static member
7843 function name. */
7844 arg = TREE_OPERAND (arg, 1);
7845
05e0b2f4
JM
7846 if (TREE_CODE (arg) == OFFSET_REF)
7847 arg = TREE_OPERAND (arg, 1);
7848
9f3d9e46
JM
7849 /* Strip baselink information. */
7850 while (TREE_CODE (arg) == TREE_LIST)
7851 arg = TREE_VALUE (arg);
7852
34016c81
JM
7853 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
7854 {
7855 /* If we got some explicit template args, we need to plug them into
7856 the affected templates before we try to unify, in case the
7857 explicit args will completely resolve the templates in question. */
7858
7859 tree expl_subargs = TREE_OPERAND (arg, 1);
7860 arg = TREE_OPERAND (arg, 0);
7861
7862 for (; arg; arg = OVL_NEXT (arg))
7863 {
7864 tree fn = OVL_CURRENT (arg);
7865 tree subargs, elem;
7866
7867 if (TREE_CODE (fn) != TEMPLATE_DECL)
7868 continue;
7869
7870 subargs = get_bindings_overload (fn, DECL_RESULT (fn), expl_subargs);
7871 if (subargs)
7872 {
4393e105
MM
7873 elem = tsubst (TREE_TYPE (fn), subargs, /*complain=*/0,
7874 NULL_TREE);
d8f8dca1
MM
7875 if (TREE_CODE (elem) == METHOD_TYPE)
7876 elem = build_ptrmemfunc_type (build_pointer_type (elem));
e97e5263 7877 good += try_one_overload (tparms, targs, tempargs, parm, elem,
4393e105 7878 strict, sub_strict);
34016c81
JM
7879 }
7880 }
7881 }
7882 else if (TREE_CODE (arg) == OVERLOAD)
7883 {
7884 for (; arg; arg = OVL_NEXT (arg))
d8f8dca1
MM
7885 {
7886 tree type = TREE_TYPE (OVL_CURRENT (arg));
7887 if (TREE_CODE (type) == METHOD_TYPE)
7888 type = build_ptrmemfunc_type (build_pointer_type (type));
7889 good += try_one_overload (tparms, targs, tempargs, parm,
7890 type,
4393e105 7891 strict, sub_strict);
d8f8dca1 7892 }
34016c81
JM
7893 }
7894 else
7895 my_friendly_abort (981006);
7896
7897 /* [temp.deduct.type] A template-argument can be deduced from a pointer
7898 to function or pointer to member function argument if the set of
7899 overloaded functions does not contain function templates and at most
7900 one of a set of overloaded functions provides a unique match.
7901
7902 So if we found multiple possibilities, we return success but don't
7903 deduce anything. */
7904
7905 if (good == 1)
7906 {
7907 int i = TREE_VEC_LENGTH (targs);
7908 for (; i--; )
7909 if (TREE_VEC_ELT (tempargs, i))
7910 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
7911 }
7912 if (good)
7913 return 0;
7914
7915 return 1;
7916}
7917
7918/* Subroutine of resolve_overloaded_unification; does deduction for a single
7919 overload. Fills TARGS with any deduced arguments, or error_mark_node if
7920 different overloads deduce different arguments for a given parm.
7921 Returns 1 on success. */
7922
7923static int
e97e5263 7924try_one_overload (tparms, orig_targs, targs, parm, arg, strict,
4393e105 7925 sub_strict)
e97e5263 7926 tree tparms, orig_targs, targs, parm, arg;
34016c81
JM
7927 unification_kind_t strict;
7928 int sub_strict;
34016c81
JM
7929{
7930 int nargs;
7931 tree tempargs;
7932 int i;
7933
7934 /* [temp.deduct.type] A template-argument can be deduced from a pointer
7935 to function or pointer to member function argument if the set of
7936 overloaded functions does not contain function templates and at most
7937 one of a set of overloaded functions provides a unique match.
7938
7939 So if this is a template, just return success. */
7940
7941 if (uses_template_parms (arg))
7942 return 1;
7943
7944 maybe_adjust_types_for_deduction (strict, &parm, &arg);
7945
7946 /* We don't copy orig_targs for this because if we have already deduced
7947 some template args from previous args, unify would complain when we
7948 try to deduce a template parameter for the same argument, even though
7949 there isn't really a conflict. */
7950 nargs = TREE_VEC_LENGTH (targs);
f31c0a32 7951 tempargs = make_tree_vec (nargs);
34016c81 7952
4393e105 7953 if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
34016c81
JM
7954 return 0;
7955
7956 /* First make sure we didn't deduce anything that conflicts with
e97e5263 7957 explicitly specified args. */
34016c81
JM
7958 for (i = nargs; i--; )
7959 {
7960 tree elt = TREE_VEC_ELT (tempargs, i);
e97e5263 7961 tree oldelt = TREE_VEC_ELT (orig_targs, i);
34016c81
JM
7962
7963 if (elt == NULL_TREE)
7964 continue;
7965 else if (uses_template_parms (elt))
7966 {
7967 /* Since we're unifying against ourselves, we will fill in template
7968 args used in the function parm list with our own template parms.
7969 Discard them. */
7970 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
7971 continue;
7972 }
7973 else if (oldelt && ! template_args_equal (oldelt, elt))
7974 return 0;
7975 }
7976
7977 for (i = nargs; i--; )
7978 {
7979 tree elt = TREE_VEC_ELT (tempargs, i);
7980
7981 if (elt)
7982 TREE_VEC_ELT (targs, i) = elt;
7983 }
7984
7985 return 1;
7986}
7987
4393e105
MM
7988/* PARM is a template class (perhaps with unbound template
7989 parameters). ARG is a fully instantiated type. If ARG can be
7990 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
7991 TARGS are as for unify. */
fcfb9f96
MM
7992
7993static tree
4393e105 7994try_class_unification (tparms, targs, parm, arg)
fcfb9f96
MM
7995 tree tparms;
7996 tree targs;
4393e105
MM
7997 tree parm;
7998 tree arg;
7999{
8000 int i;
8001 tree copy_of_targs;
8002
8003 if (!CLASSTYPE_TEMPLATE_INFO (arg)
8004 || CLASSTYPE_TI_TEMPLATE (arg) != CLASSTYPE_TI_TEMPLATE (parm))
8005 return NULL_TREE;
8006
8007 /* We need to make a new template argument vector for the call to
8008 unify. If we used TARGS, we'd clutter it up with the result of
8009 the attempted unification, even if this class didn't work out.
8010 We also don't want to commit ourselves to all the unifications
8011 we've already done, since unification is supposed to be done on
8012 an argument-by-argument basis. In other words, consider the
8013 following pathological case:
8014
8015 template <int I, int J, int K>
8016 struct S {};
8017
8018 template <int I, int J>
8019 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
8020
8021 template <int I, int J, int K>
8022 void f(S<I, J, K>, S<I, I, I>);
8023
8024 void g() {
8025 S<0, 0, 0> s0;
8026 S<0, 1, 2> s2;
8027
8028 f(s0, s2);
8029 }
8030
8031 Now, by the time we consider the unification involving `s2', we
8032 already know that we must have `f<0, 0, 0>'. But, even though
8033 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is not legal
8034 because there are two ways to unify base classes of S<0, 1, 2>
8035 with S<I, I, I>. If we kept the already deduced knowledge, we
8036 would reject the possibility I=1. */
f31c0a32 8037 copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
4393e105
MM
8038 i = unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
8039 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE);
4393e105
MM
8040
8041 /* If unification failed, we're done. */
8042 if (i != 0)
8043 return NULL_TREE;
8044 else
8045 return arg;
8046}
8047
8048/* Subroutine of get_template_base. RVAL, if non-NULL, is a base we
8049 have alreay discovered to be satisfactory. ARG_BINFO is the binfo
8050 for the base class of ARG that we are currently examining. */
8051
8052static tree
8053get_template_base_recursive (tparms, targs, parm,
8054 arg_binfo, rval, flags)
8055 tree tparms;
8056 tree targs;
8057 tree arg_binfo;
fcfb9f96 8058 tree rval;
4393e105
MM
8059 tree parm;
8060 int flags;
fcfb9f96
MM
8061{
8062 tree binfos;
8063 int i, n_baselinks;
4393e105 8064 tree arg = BINFO_TYPE (arg_binfo);
fcfb9f96 8065
4393e105 8066 if (!(flags & GTB_IGNORE_TYPE))
fcfb9f96 8067 {
4393e105
MM
8068 tree r = try_class_unification (tparms, targs,
8069 parm, arg);
fcfb9f96 8070
4393e105 8071 /* If there is more than one satisfactory baseclass, then:
fcfb9f96 8072
4393e105
MM
8073 [temp.deduct.call]
8074
8075 If they yield more than one possible deduced A, the type
8076 deduction fails.
8077
8078 applies. */
8079 if (r && rval && !same_type_p (r, rval))
8080 return error_mark_node;
8081 else if (r)
8082 rval = r;
fcfb9f96
MM
8083 }
8084
4393e105 8085 binfos = BINFO_BASETYPES (arg_binfo);
fcfb9f96
MM
8086 n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
8087
8088 /* Process base types. */
8089 for (i = 0; i < n_baselinks; i++)
8090 {
8091 tree base_binfo = TREE_VEC_ELT (binfos, i);
4393e105 8092 int this_virtual;
fcfb9f96 8093
4393e105
MM
8094 /* Skip this base, if we've already seen it. */
8095 if (BINFO_MARKED (base_binfo))
8096 continue;
8097
8098 this_virtual =
8099 (flags & GTB_VIA_VIRTUAL) || TREE_VIA_VIRTUAL (base_binfo);
8100
8101 /* When searching for a non-virtual, we cannot mark virtually
8102 found binfos. */
8103 if (! this_virtual)
8104 SET_BINFO_MARKED (base_binfo);
8105
8106 rval = get_template_base_recursive (tparms, targs,
8107 parm,
8108 base_binfo,
8109 rval,
8110 GTB_VIA_VIRTUAL * this_virtual);
8111
8112 /* If we discovered more than one matching base class, we can
8113 stop now. */
8114 if (rval == error_mark_node)
8115 return error_mark_node;
fcfb9f96
MM
8116 }
8117
8118 return rval;
8119}
8120
4393e105
MM
8121/* Given a template type PARM and a class type ARG, find the unique
8122 base type in ARG that is an instance of PARM. We do not examine
8123 ARG itself; only its base-classes. If there is no appropriate base
8124 class, return NULL_TREE. If there is more than one, return
8125 error_mark_node. PARM may be the type of a partial specialization,
8126 as well as a plain template type. Used by unify. */
fcfb9f96
MM
8127
8128static tree
4393e105 8129get_template_base (tparms, targs, parm, arg)
fcfb9f96
MM
8130 tree tparms;
8131 tree targs;
4393e105
MM
8132 tree parm;
8133 tree arg;
fcfb9f96 8134{
4393e105
MM
8135 tree rval;
8136 tree arg_binfo;
fcfb9f96 8137
4393e105
MM
8138 my_friendly_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)), 92);
8139
8140 arg_binfo = TYPE_BINFO (complete_type (arg));
8141 rval = get_template_base_recursive (tparms, targs,
8142 parm, arg_binfo,
8143 NULL_TREE,
8144 GTB_IGNORE_TYPE);
fcfb9f96 8145
4393e105
MM
8146 /* Since get_template_base_recursive marks the bases classes, we
8147 must unmark them here. */
d6479fe7 8148 dfs_walk (arg_binfo, dfs_unmark, markedp, 0);
fcfb9f96
MM
8149
8150 return rval;
8151}
8152
db2767b6
MM
8153/* Returns the level of DECL, which declares a template parameter. */
8154
e9659ab0 8155static int
db2767b6
MM
8156template_decl_level (decl)
8157 tree decl;
8158{
8159 switch (TREE_CODE (decl))
8160 {
8161 case TYPE_DECL:
8162 case TEMPLATE_DECL:
8163 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
8164
8165 case PARM_DECL:
8166 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
8167
8168 default:
8169 my_friendly_abort (0);
5ffe581d 8170 return 0;
db2767b6
MM
8171 }
8172}
8173
830bfa74
MM
8174/* Decide whether ARG can be unified with PARM, considering only the
8175 cv-qualifiers of each type, given STRICT as documented for unify.
8176 Returns non-zero iff the unification is OK on that basis.*/
e92cc029 8177
e9659ab0 8178static int
830bfa74
MM
8179check_cv_quals_for_unify (strict, arg, parm)
8180 int strict;
8181 tree arg;
8182 tree parm;
8183{
ef637255
MM
8184 if (!(strict & UNIFY_ALLOW_MORE_CV_QUAL)
8185 && !at_least_as_qualified_p (arg, parm))
8186 return 0;
8187
8188 if (!(strict & UNIFY_ALLOW_LESS_CV_QUAL)
8189 && !at_least_as_qualified_p (parm, arg))
8190 return 0;
8191
ef637255 8192 return 1;
830bfa74
MM
8193}
8194
8195/* Takes parameters as for type_unification. Returns 0 if the
8196 type deduction suceeds, 1 otherwise. The parameter STRICT is a
8197 bitwise or of the following flags:
8198
8199 UNIFY_ALLOW_NONE:
8200 Require an exact match between PARM and ARG.
8201 UNIFY_ALLOW_MORE_CV_QUAL:
8202 Allow the deduced ARG to be more cv-qualified than ARG.
8203 UNIFY_ALLOW_LESS_CV_QUAL:
8204 Allow the deduced ARG to be less cv-qualified than ARG.
8205 UNIFY_ALLOW_DERIVED:
8206 Allow the deduced ARG to be a template base class of ARG,
8207 or a pointer to a template base class of the type pointed to by
161c12b0
JM
8208 ARG.
8209 UNIFY_ALLOW_INTEGER:
8210 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
8211 case for more information. */
830bfa74 8212
e9659ab0 8213static int
4393e105 8214unify (tparms, targs, parm, arg, strict)
050367a3 8215 tree tparms, targs, parm, arg;
830bfa74 8216 int strict;
8d08fdba
MS
8217{
8218 int idx;
050367a3 8219 tree targ;
db2767b6 8220 tree tparm;
8d08fdba
MS
8221
8222 /* I don't think this will do the right thing with respect to types.
8223 But the only case I've seen it in so far has been array bounds, where
8224 signedness is the only information lost, and I think that will be
8225 okay. */
8226 while (TREE_CODE (parm) == NOP_EXPR)
8227 parm = TREE_OPERAND (parm, 0);
8228
8229 if (arg == error_mark_node)
8230 return 1;
8231 if (arg == unknown_type_node)
34016c81
JM
8232 /* We can't deduce anything from this, but we might get all the
8233 template args from other function args. */
8234 return 0;
8235
db2767b6 8236 /* If PARM uses template parameters, then we can't bail out here,
6bdb985f 8237 even if ARG == PARM, since we won't record unifications for the
db2767b6
MM
8238 template parameters. We might need them if we're trying to
8239 figure out which of two things is more specialized. */
8240 if (arg == parm && !uses_template_parms (parm))
8d08fdba
MS
8241 return 0;
8242
830bfa74
MM
8243 /* Immediately reject some pairs that won't unify because of
8244 cv-qualification mismatches. */
8245 if (TREE_CODE (arg) == TREE_CODE (parm)
49432171 8246 && TREE_CODE_CLASS (TREE_CODE (arg)) == 't'
830bfa74
MM
8247 /* We check the cv-qualifiers when unifying with template type
8248 parameters below. We want to allow ARG `const T' to unify with
8249 PARM `T' for example, when computing which of two templates
8250 is more specialized, for example. */
8251 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
8252 && !check_cv_quals_for_unify (strict, arg, parm))
49432171
JM
8253 return 1;
8254
8d08fdba
MS
8255 switch (TREE_CODE (parm))
8256 {
2ca340ae
JM
8257 case TYPENAME_TYPE:
8258 /* In a type which contains a nested-name-specifier, template
8259 argument values cannot be deduced for template parameters used
8260 within the nested-name-specifier. */
8261 return 0;
8262
8d08fdba 8263 case TEMPLATE_TYPE_PARM:
73b0fce8 8264 case TEMPLATE_TEMPLATE_PARM:
db2767b6
MM
8265 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
8266
8267 if (TEMPLATE_TYPE_LEVEL (parm)
8268 != template_decl_level (tparm))
8269 /* The PARM is not one we're trying to unify. Just check
8270 to see if it matches ARG. */
8271 return (TREE_CODE (arg) == TREE_CODE (parm)
3bfdc719 8272 && same_type_p (parm, arg)) ? 0 : 1;
73b0fce8 8273 idx = TEMPLATE_TYPE_IDX (parm);
050367a3 8274 targ = TREE_VEC_ELT (targs, idx);
db2767b6 8275 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
050367a3 8276
73b0fce8 8277 /* Check for mixed types and values. */
db2767b6
MM
8278 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
8279 && TREE_CODE (tparm) != TYPE_DECL)
8280 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
8281 && TREE_CODE (tparm) != TEMPLATE_DECL))
73b0fce8
KL
8282 return 1;
8283
db2767b6 8284 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
73b0fce8 8285 {
7ddedda4 8286 if (TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (parm))
db2767b6
MM
8287 {
8288 /* We arrive here when PARM does not involve template
8289 specialization. */
73b0fce8 8290
db2767b6
MM
8291 /* ARG must be constructed from a template class. */
8292 if (TREE_CODE (arg) != RECORD_TYPE || !CLASSTYPE_TEMPLATE_INFO (arg))
8293 return 1;
73b0fce8 8294
db2767b6 8295 {
7ddedda4
MM
8296 tree parmtmpl = TYPE_TI_TEMPLATE (parm);
8297 tree parmvec = TYPE_TI_ARGS (parm);
db2767b6
MM
8298 tree argvec = CLASSTYPE_TI_ARGS (arg);
8299 tree argtmplvec
8300 = DECL_INNERMOST_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (arg));
8301 int i;
8302
8303 /* The parameter and argument roles have to be switched here
8304 in order to handle default arguments properly. For example,
8305 template<template <class> class TT> void f(TT<int>)
8306 should be able to accept vector<int> which comes from
744fac59 8307 template <class T, class Allocator = allocator>
73b0fce8
KL
8308 class vector. */
8309
fcfcdfc8 8310 if (coerce_template_parms (argtmplvec, parmvec, parmtmpl, 0, 1)
db2767b6
MM
8311 == error_mark_node)
8312 return 1;
73b0fce8 8313
6b9b6b15
JM
8314 /* Deduce arguments T, i from TT<T> or TT<i>.
8315 We check each element of PARMVEC and ARGVEC individually
8316 rather than the whole TREE_VEC since they can have
8317 different number of elements. */
8318
db2767b6
MM
8319 for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
8320 {
8321 tree t = TREE_VEC_ELT (parmvec, i);
73b0fce8 8322
830bfa74
MM
8323 if (unify (tparms, targs, t,
8324 TREE_VEC_ELT (argvec, i),
4393e105 8325 UNIFY_ALLOW_NONE))
db2767b6
MM
8326 return 1;
8327 }
73b0fce8 8328 }
db2767b6
MM
8329 arg = CLASSTYPE_TI_TEMPLATE (arg);
8330 }
8331 }
8332 else
8333 {
830bfa74
MM
8334 /* If PARM is `const T' and ARG is only `int', we don't have
8335 a match unless we are allowing additional qualification.
8336 If ARG is `const int' and PARM is just `T' that's OK;
8337 that binds `const int' to `T'. */
8338 if (!check_cv_quals_for_unify (strict | UNIFY_ALLOW_LESS_CV_QUAL,
8339 arg, parm))
db2767b6
MM
8340 return 1;
8341
830bfa74
MM
8342 /* Consider the case where ARG is `const volatile int' and
8343 PARM is `const T'. Then, T should be `volatile int'. */
8344 arg =
adecb3f4
MM
8345 cp_build_qualified_type_real (arg,
8346 CP_TYPE_QUALS (arg)
8347 & ~CP_TYPE_QUALS (parm),
8348 /*complain=*/0);
8349 if (arg == error_mark_node)
8350 return 1;
73b0fce8
KL
8351 }
8352
8353 /* Simple cases: Value already set, does match or doesn't. */
4393e105 8354 if (targ != NULL_TREE && same_type_p (targ, arg))
73b0fce8 8355 return 0;
050367a3 8356 else if (targ)
73b0fce8 8357 return 1;
61cd552e
MM
8358
8359 /* Make sure that ARG is not a variable-sized array. (Note that
8360 were talking about variable-sized arrays (like `int[n]'),
8361 rather than arrays of unknown size (like `int[]').) We'll
8362 get very confused by such a type since the bound of the array
8363 will not be computable in an instantiation. Besides, such
8364 types are not allowed in ISO C++, so we can do as we please
8365 here. */
8366 if (TREE_CODE (arg) == ARRAY_TYPE
8367 && !uses_template_parms (arg)
8368 && (TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (arg)))
8369 != INTEGER_CST))
8370 return 1;
8371
050367a3 8372 TREE_VEC_ELT (targs, idx) = arg;
73b0fce8
KL
8373 return 0;
8374
f84b4be9 8375 case TEMPLATE_PARM_INDEX:
db2767b6
MM
8376 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
8377
8378 if (TEMPLATE_PARM_LEVEL (parm)
8379 != template_decl_level (tparm))
8380 /* The PARM is not one we're trying to unify. Just check
8381 to see if it matches ARG. */
8382 return (TREE_CODE (arg) == TREE_CODE (parm)
67ffc812 8383 && cp_tree_equal (parm, arg) > 0) ? 0 : 1;
db2767b6 8384
f84b4be9 8385 idx = TEMPLATE_PARM_IDX (parm);
050367a3 8386 targ = TREE_VEC_ELT (targs, idx);
db2767b6 8387
050367a3 8388 if (targ)
8d08fdba 8389 {
67ffc812 8390 int i = (cp_tree_equal (targ, arg) > 0);
312e7d50
JM
8391 if (i == 1)
8392 return 0;
8393 else if (i == 0)
8394 return 1;
8395 else
8396 my_friendly_abort (42);
8d08fdba 8397 }
8d08fdba 8398
161c12b0
JM
8399 /* [temp.deduct.type] If, in the declaration of a function template
8400 with a non-type template-parameter, the non-type
8401 template-parameter is used in an expression in the function
8402 parameter-list and, if the corresponding template-argument is
8403 deduced, the template-argument type shall match the type of the
8404 template-parameter exactly, except that a template-argument
8405 deduced from an array bound may be of any integral type. */
8406 if (same_type_p (TREE_TYPE (arg), TREE_TYPE (parm)))
8407 /* OK */;
8408 else if ((strict & UNIFY_ALLOW_INTEGER)
8409 && (TREE_CODE (TREE_TYPE (parm)) == INTEGER_TYPE
8410 || TREE_CODE (TREE_TYPE (parm)) == BOOLEAN_TYPE))
8411 /* OK */;
8412 else
8413 return 1;
8414
2a1e9fdd 8415 TREE_VEC_ELT (targs, idx) = arg;
8d08fdba
MS
8416 return 0;
8417
8418 case POINTER_TYPE:
830bfa74
MM
8419 {
8420 int sub_strict;
4ac14744 8421
830bfa74
MM
8422 if (TREE_CODE (arg) != POINTER_TYPE)
8423 return 1;
8424
8425 /* [temp.deduct.call]
8426
8427 A can be another pointer or pointer to member type that can
8428 be converted to the deduced A via a qualification
8429 conversion (_conv.qual_).
8430
8431 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
8432 This will allow for additional cv-qualification of the
8433 pointed-to types if appropriate. In general, this is a bit
8434 too generous; we are only supposed to allow qualification
8435 conversions and this method will allow an ARG of char** and
8436 a deduced ARG of const char**. However, overload
8437 resolution will subsequently invalidate the candidate, so
8438 this is probably OK. */
8439 sub_strict = strict;
8440
a7a64a77 8441 if (TREE_CODE (TREE_TYPE (arg)) != RECORD_TYPE)
830bfa74
MM
8442 /* The derived-to-base conversion only persists through one
8443 level of pointers. */
8444 sub_strict &= ~UNIFY_ALLOW_DERIVED;
8445
a7a64a77
MM
8446 return unify (tparms, targs, TREE_TYPE (parm),
8447 TREE_TYPE (arg), sub_strict);
830bfa74 8448 }
8d08fdba
MS
8449
8450 case REFERENCE_TYPE:
830bfa74
MM
8451 if (TREE_CODE (arg) != REFERENCE_TYPE)
8452 return 1;
8453 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
4393e105 8454 UNIFY_ALLOW_NONE);
8d08fdba
MS
8455
8456 case ARRAY_TYPE:
8457 if (TREE_CODE (arg) != ARRAY_TYPE)
8458 return 1;
3042d5be
MM
8459 if ((TYPE_DOMAIN (parm) == NULL_TREE)
8460 != (TYPE_DOMAIN (arg) == NULL_TREE))
8461 return 1;
8462 if (TYPE_DOMAIN (parm) != NULL_TREE
830bfa74 8463 && unify (tparms, targs, TYPE_DOMAIN (parm),
4393e105 8464 TYPE_DOMAIN (arg), UNIFY_ALLOW_NONE) != 0)
8d08fdba 8465 return 1;
830bfa74 8466 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
4393e105 8467 UNIFY_ALLOW_NONE);
8d08fdba
MS
8468
8469 case REAL_TYPE:
37c46b43 8470 case COMPLEX_TYPE:
8d08fdba 8471 case INTEGER_TYPE:
42976354 8472 case BOOLEAN_TYPE:
5ad5a526 8473 case VOID_TYPE:
f376e137
MS
8474 if (TREE_CODE (arg) != TREE_CODE (parm))
8475 return 1;
8476
514a1f18
JM
8477 if (TREE_CODE (parm) == INTEGER_TYPE
8478 && TREE_CODE (TYPE_MAX_VALUE (parm)) != INTEGER_CST)
8d08fdba
MS
8479 {
8480 if (TYPE_MIN_VALUE (parm) && TYPE_MIN_VALUE (arg)
830bfa74 8481 && unify (tparms, targs, TYPE_MIN_VALUE (parm),
4393e105 8482 TYPE_MIN_VALUE (arg), UNIFY_ALLOW_INTEGER))
8d08fdba
MS
8483 return 1;
8484 if (TYPE_MAX_VALUE (parm) && TYPE_MAX_VALUE (arg)
830bfa74 8485 && unify (tparms, targs, TYPE_MAX_VALUE (parm),
4393e105 8486 TYPE_MAX_VALUE (arg), UNIFY_ALLOW_INTEGER))
8d08fdba
MS
8487 return 1;
8488 }
514a1f18
JM
8489 /* We use the TYPE_MAIN_VARIANT since we have already
8490 checked cv-qualification at the top of the
8491 function. */
3bfdc719
MM
8492 else if (!same_type_p (TYPE_MAIN_VARIANT (arg),
8493 TYPE_MAIN_VARIANT (parm)))
ca79f85d
JM
8494 return 1;
8495
8d08fdba
MS
8496 /* As far as unification is concerned, this wins. Later checks
8497 will invalidate it if necessary. */
8498 return 0;
8499
8500 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
bd6dd845 8501 /* Type INTEGER_CST can come from ordinary constant template args. */
8d08fdba 8502 case INTEGER_CST:
bd6dd845
MS
8503 while (TREE_CODE (arg) == NOP_EXPR)
8504 arg = TREE_OPERAND (arg, 0);
8505
8d08fdba
MS
8506 if (TREE_CODE (arg) != INTEGER_CST)
8507 return 1;
8508 return !tree_int_cst_equal (parm, arg);
8509
8d08fdba
MS
8510 case TREE_VEC:
8511 {
8512 int i;
8513 if (TREE_CODE (arg) != TREE_VEC)
8514 return 1;
8515 if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
8516 return 1;
8517 for (i = TREE_VEC_LENGTH (parm) - 1; i >= 0; i--)
830bfa74 8518 if (unify (tparms, targs,
8d08fdba 8519 TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
4393e105 8520 UNIFY_ALLOW_NONE))
8d08fdba
MS
8521 return 1;
8522 return 0;
8523 }
8524
8d08fdba 8525 case RECORD_TYPE:
f181d4ae 8526 case UNION_TYPE:
f181d4ae 8527 if (TREE_CODE (arg) != TREE_CODE (parm))
a4443a08 8528 return 1;
830bfa74 8529
a7a64a77
MM
8530 if (TYPE_PTRMEMFUNC_P (parm))
8531 {
8532 if (!TYPE_PTRMEMFUNC_P (arg))
8533 return 1;
8534
8535 return unify (tparms, targs,
8536 TYPE_PTRMEMFUNC_FN_TYPE (parm),
8537 TYPE_PTRMEMFUNC_FN_TYPE (arg),
8538 strict);
8539 }
8540
5db698f6 8541 if (CLASSTYPE_TEMPLATE_INFO (parm))
5566b478 8542 {
6467930b 8543 tree t = NULL_TREE;
4393e105 8544
830bfa74 8545 if (strict & UNIFY_ALLOW_DERIVED)
4393e105
MM
8546 {
8547 /* First, we try to unify the PARM and ARG directly. */
8548 t = try_class_unification (tparms, targs,
8549 parm, arg);
8550
8551 if (!t)
8552 {
8553 /* Fallback to the special case allowed in
8554 [temp.deduct.call]:
8555
8556 If P is a class, and P has the form
8557 template-id, then A can be a derived class of
8558 the deduced A. Likewise, if P is a pointer to
8559 a class of the form template-id, A can be a
8560 pointer to a derived class pointed to by the
8561 deduced A. */
8562 t = get_template_base (tparms, targs,
8563 parm, arg);
8564
8565 if (! t || t == error_mark_node)
8566 return 1;
8567 }
8568 }
6df47b06 8569 else if (CLASSTYPE_TEMPLATE_INFO (arg)
9fbf56f7
MM
8570 && (CLASSTYPE_TI_TEMPLATE (parm)
8571 == CLASSTYPE_TI_TEMPLATE (arg)))
6df47b06
MM
8572 /* Perhaps PARM is something like S<U> and ARG is S<int>.
8573 Then, we should unify `int' and `U'. */
6467930b 8574 t = arg;
4393e105
MM
8575 else
8576 /* There's no chance of unication succeeding. */
5566b478 8577 return 1;
6467930b 8578
830bfa74 8579 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
4393e105 8580 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
5566b478 8581 }
3bfdc719
MM
8582 else if (!same_type_p (TYPE_MAIN_VARIANT (parm),
8583 TYPE_MAIN_VARIANT (arg)))
5566b478 8584 return 1;
a4443a08 8585 return 0;
8d08fdba
MS
8586
8587 case METHOD_TYPE:
8d08fdba 8588 case FUNCTION_TYPE:
830bfa74 8589 if (TREE_CODE (arg) != TREE_CODE (parm))
8d08fdba 8590 return 1;
830bfa74
MM
8591
8592 if (unify (tparms, targs, TREE_TYPE (parm),
4393e105 8593 TREE_TYPE (arg), UNIFY_ALLOW_NONE))
28cbf42c 8594 return 1;
386b8a85 8595 return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
3b3ba9f0 8596 TYPE_ARG_TYPES (arg), 1,
4393e105 8597 DEDUCE_EXACT, 0);
a4443a08
MS
8598
8599 case OFFSET_TYPE:
8600 if (TREE_CODE (arg) != OFFSET_TYPE)
8601 return 1;
830bfa74 8602 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
4393e105 8603 TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
a4443a08 8604 return 1;
830bfa74 8605 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
4393e105 8606 strict);
a4443a08 8607
f62dbf03 8608 case CONST_DECL:
830bfa74 8609 if (arg != decl_constant_value (parm))
f62dbf03
JM
8610 return 1;
8611 return 0;
8612
027905b4
KL
8613 case TEMPLATE_DECL:
8614 /* Matched cases are handled by the ARG == PARM test above. */
8615 return 1;
8616
53929c47
JM
8617 case MINUS_EXPR:
8618 if (TREE_CODE (TREE_OPERAND (parm, 1)) == INTEGER_CST)
8619 {
8620 /* We handle this case specially, since it comes up with
8621 arrays. In particular, something like:
8622
8623 template <int N> void f(int (&x)[N]);
8624
8625 Here, we are trying to unify the range type, which
8626 looks like [0 ... (N - 1)]. */
8627 tree t, t1, t2;
8628 t1 = TREE_OPERAND (parm, 0);
8629 t2 = TREE_OPERAND (parm, 1);
8630
24e2e58e 8631 t = fold (build (PLUS_EXPR, integer_type_node, arg, t2));
53929c47 8632
4393e105 8633 return unify (tparms, targs, t1, t, strict);
53929c47
JM
8634 }
8635 /* else fall through */
8636
8d08fdba 8637 default:
050367a3 8638 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (parm))))
4393e105
MM
8639 /* We're looking at an expression. This can happen with
8640 something like:
8641
8642 template <int I>
8643 void foo(S<I>, S<I + 2>);
050367a3 8644
4393e105 8645 This is a "nondeduced context":
050367a3 8646
4393e105
MM
8647 [deduct.type]
8648
8649 The nondeduced contexts are:
050367a3 8650
4393e105
MM
8651 --A type that is a template-id in which one or more of
8652 the template-arguments is an expression that references
8653 a template-parameter.
050367a3 8654
4393e105
MM
8655 In these cases, we assume deduction succeeded, but don't
8656 actually infer any unifications. */
8657 return 0;
050367a3 8658 else
b4c4a9ec
MM
8659 sorry ("use of `%s' in template type unification",
8660 tree_code_name [(int) TREE_CODE (parm)]);
050367a3 8661
8d08fdba
MS
8662 return 1;
8663 }
8664}
8d08fdba 8665\f
03d0f4af
MM
8666/* Called if RESULT is explicitly instantiated, or is a member of an
8667 explicitly instantiated class, or if using -frepo and the
8668 instantiation of RESULT has been assigned to this file. */
8669
faae18ab 8670void
5566b478 8671mark_decl_instantiated (result, extern_p)
faae18ab
MS
8672 tree result;
8673 int extern_p;
8674{
75650646
MM
8675 if (TREE_CODE (result) != FUNCTION_DECL)
8676 /* The TREE_PUBLIC flag for function declarations will have been
8677 set correctly by tsubst. */
8678 TREE_PUBLIC (result) = 1;
faae18ab
MS
8679
8680 if (! extern_p)
8681 {
8682 DECL_INTERFACE_KNOWN (result) = 1;
8683 DECL_NOT_REALLY_EXTERN (result) = 1;
a7d87521 8684
1a408d07
JM
8685 /* Always make artificials weak. */
8686 if (DECL_ARTIFICIAL (result) && flag_weak)
8687 comdat_linkage (result);
a7d87521
JM
8688 /* For WIN32 we also want to put explicit instantiations in
8689 linkonce sections. */
1a408d07 8690 else if (TREE_PUBLIC (result))
b385c841 8691 maybe_make_one_only (result);
faae18ab 8692 }
f49422da
MS
8693 else if (TREE_CODE (result) == FUNCTION_DECL)
8694 mark_inline_for_output (result);
faae18ab
MS
8695}
8696
e1467ff2
MM
8697/* Given two function templates PAT1 and PAT2, and explicit template
8698 arguments EXPLICIT_ARGS return:
6467930b
MS
8699
8700 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
8701 -1 if PAT2 is more specialized than PAT1.
8702 0 if neither is more specialized. */
8703
8704int
e1467ff2
MM
8705more_specialized (pat1, pat2, explicit_args)
8706 tree pat1, pat2, explicit_args;
6467930b 8707{
98c1c668 8708 tree targs;
73aad9b9 8709 int winner = 0;
6467930b 8710
4393e105 8711 targs = get_bindings_overload (pat1, DECL_RESULT (pat2), explicit_args);
73aad9b9 8712 if (targs)
36a117a5 8713 --winner;
6467930b 8714
4393e105 8715 targs = get_bindings_overload (pat2, DECL_RESULT (pat1), explicit_args);
73aad9b9 8716 if (targs)
36a117a5 8717 ++winner;
6467930b 8718
73aad9b9
JM
8719 return winner;
8720}
6467930b 8721
73aad9b9 8722/* Given two class template specialization list nodes PAT1 and PAT2, return:
6467930b 8723
73aad9b9
JM
8724 1 if PAT1 is more specialized than PAT2 as described in [temp.class.order].
8725 -1 if PAT2 is more specialized than PAT1.
8726 0 if neither is more specialized. */
8727
8728int
8729more_specialized_class (pat1, pat2)
8730 tree pat1, pat2;
8731{
8732 tree targs;
8733 int winner = 0;
8734
36a117a5
MM
8735 targs = get_class_bindings (TREE_VALUE (pat1), TREE_PURPOSE (pat1),
8736 TREE_PURPOSE (pat2));
73aad9b9
JM
8737 if (targs)
8738 --winner;
8739
36a117a5
MM
8740 targs = get_class_bindings (TREE_VALUE (pat2), TREE_PURPOSE (pat2),
8741 TREE_PURPOSE (pat1));
73aad9b9 8742 if (targs)
6467930b
MS
8743 ++winner;
8744
8745 return winner;
8746}
73aad9b9
JM
8747
8748/* Return the template arguments that will produce the function signature
e1467ff2 8749 DECL from the function template FN, with the explicit template
76b9a14d 8750 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is 1, the return type must
4393e105
MM
8751 also match. Return NULL_TREE if no satisfactory arguments could be
8752 found. */
73aad9b9 8753
76b9a14d
JM
8754static tree
8755get_bindings_real (fn, decl, explicit_args, check_rettype)
e1467ff2 8756 tree fn, decl, explicit_args;
76b9a14d 8757 int check_rettype;
73aad9b9 8758{
98c1c668 8759 int ntparms = DECL_NTPARMS (fn);
f31c0a32 8760 tree targs = make_tree_vec (ntparms);
4393e105 8761 tree decl_type;
03017874 8762 tree decl_arg_types;
98c1c668
JM
8763 int i;
8764
4393e105
MM
8765 /* Substitute the explicit template arguments into the type of DECL.
8766 The call to fn_type_unification will handle substitution into the
8767 FN. */
8768 decl_type = TREE_TYPE (decl);
8769 if (explicit_args && uses_template_parms (decl_type))
8770 {
8771 tree tmpl;
8772 tree converted_args;
8773
8774 if (DECL_TEMPLATE_INFO (decl))
8775 tmpl = DECL_TI_TEMPLATE (decl);
8776 else
8777 /* We can get here for some illegal specializations. */
8778 return NULL_TREE;
8779
8780 converted_args
8781 = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
8782 explicit_args, NULL_TREE,
8783 /*complain=*/0,
8784 /*require_all_arguments=*/0));
8785 if (converted_args == error_mark_node)
8786 return NULL_TREE;
8787
8788 decl_type = tsubst (decl_type, converted_args, /*complain=*/0,
8789 NULL_TREE);
8790 if (decl_type == error_mark_node)
8791 return NULL_TREE;
8792 }
8793
03017874
MM
8794 /* If FN is a static member function, adjust the type of DECL
8795 appropriately. */
4393e105 8796 decl_arg_types = TYPE_ARG_TYPES (decl_type);
d7684f2d
MM
8797 if (DECL_STATIC_FUNCTION_P (fn)
8798 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
03017874 8799 decl_arg_types = TREE_CHAIN (decl_arg_types);
d7684f2d 8800
e1467ff2 8801 i = fn_type_unification (fn, explicit_args, targs,
03017874 8802 decl_arg_types,
8d3631f8
NS
8803 (check_rettype || DECL_CONV_FN_P (fn)
8804 ? TREE_TYPE (decl_type) : NULL_TREE),
03017874 8805 DEDUCE_EXACT);
98c1c668 8806
76b9a14d
JM
8807 if (i != 0)
8808 return NULL_TREE;
8809
76b9a14d
JM
8810 return targs;
8811}
8812
8813/* For most uses, we want to check the return type. */
8814
8815tree
8816get_bindings (fn, decl, explicit_args)
8817 tree fn, decl, explicit_args;
8818{
8819 return get_bindings_real (fn, decl, explicit_args, 1);
8820}
8821
8822/* But for more_specialized, we only care about the parameter types. */
8823
8824static tree
8825get_bindings_overload (fn, decl, explicit_args)
8826 tree fn, decl, explicit_args;
8827{
8828 return get_bindings_real (fn, decl, explicit_args, 0);
73aad9b9
JM
8829}
8830
36a117a5
MM
8831/* Return the innermost template arguments that, when applied to a
8832 template specialization whose innermost template parameters are
8833 TPARMS, and whose specialization arguments are ARGS, yield the
8834 ARGS.
8835
8836 For example, suppose we have:
8837
8838 template <class T, class U> struct S {};
8839 template <class T> struct S<T*, int> {};
8840
8841 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
8842 {T}, the PARMS will be {T*, int} and the ARGS will be {double*,
8843 int}. The resulting vector will be {double}, indicating that `T'
8844 is bound to `double'. */
8845
bd6dd845 8846static tree
36a117a5
MM
8847get_class_bindings (tparms, parms, args)
8848 tree tparms, parms, args;
73aad9b9 8849{
3b3ba9f0 8850 int i, ntparms = TREE_VEC_LENGTH (tparms);
f31c0a32 8851 tree vec = make_tree_vec (ntparms);
73aad9b9 8852
36a117a5 8853 args = innermost_args (args);
8d019cef 8854
4393e105 8855 if (unify (tparms, vec, parms, args, UNIFY_ALLOW_NONE))
fcfb9f96 8856 return NULL_TREE;
73aad9b9
JM
8857
8858 for (i = 0; i < ntparms; ++i)
8859 if (! TREE_VEC_ELT (vec, i))
8860 return NULL_TREE;
8861
8862 return vec;
8863}
8864
104bf76a
MM
8865/* In INSTANTIATIONS is a list of <INSTANTIATION, TEMPLATE> pairs.
8866 Pick the most specialized template, and return the corresponding
8867 instantiation, or if there is no corresponding instantiation, the
8868 template itself. EXPLICIT_ARGS is any template arguments explicity
8869 mentioned in a template-id. If there is no most specialized
8870 tempalte, error_mark_node is returned. If there are no templates
8871 at all, NULL_TREE is returned. */
73aad9b9
JM
8872
8873tree
104bf76a
MM
8874most_specialized_instantiation (instantiations, explicit_args)
8875 tree instantiations;
8876 tree explicit_args;
73aad9b9 8877{
104bf76a 8878 tree fn, champ;
73aad9b9
JM
8879 int fate;
8880
104bf76a 8881 if (!instantiations)
73aad9b9
JM
8882 return NULL_TREE;
8883
104bf76a
MM
8884 champ = instantiations;
8885 for (fn = TREE_CHAIN (instantiations); fn; fn = TREE_CHAIN (fn))
73aad9b9 8886 {
104bf76a
MM
8887 fate = more_specialized (TREE_VALUE (champ),
8888 TREE_VALUE (fn), explicit_args);
73aad9b9
JM
8889 if (fate == 1)
8890 ;
8891 else
8892 {
8893 if (fate == 0)
8894 {
8895 fn = TREE_CHAIN (fn);
8896 if (! fn)
8897 return error_mark_node;
8898 }
104bf76a 8899 champ = fn;
73aad9b9
JM
8900 }
8901 }
8902
104bf76a 8903 for (fn = instantiations; fn && fn != champ; fn = TREE_CHAIN (fn))
73aad9b9 8904 {
104bf76a
MM
8905 fate = more_specialized (TREE_VALUE (champ),
8906 TREE_VALUE (fn), explicit_args);
73aad9b9
JM
8907 if (fate != 1)
8908 return error_mark_node;
8909 }
8910
104bf76a
MM
8911 return TREE_PURPOSE (champ) ? TREE_PURPOSE (champ) : TREE_VALUE (champ);
8912}
8913
8914/* Return the most specialized of the list of templates in FNS that can
8915 produce an instantiation matching DECL, given the explicit template
8916 arguments EXPLICIT_ARGS. */
8917
e9659ab0 8918static tree
104bf76a
MM
8919most_specialized (fns, decl, explicit_args)
8920 tree fns, decl, explicit_args;
8921{
8922 tree candidates = NULL_TREE;
8923 tree fn, args;
8924
8925 for (fn = fns; fn; fn = TREE_CHAIN (fn))
8926 {
8927 tree candidate = TREE_VALUE (fn);
8928
8929 args = get_bindings (candidate, decl, explicit_args);
8930 if (args)
e1b3e07d 8931 candidates = tree_cons (NULL_TREE, candidate, candidates);
104bf76a
MM
8932 }
8933
8934 return most_specialized_instantiation (candidates, explicit_args);
73aad9b9
JM
8935}
8936
36a117a5
MM
8937/* If DECL is a specialization of some template, return the most
8938 general such template. For example, given:
8939
8940 template <class T> struct S { template <class U> void f(U); };
8941
8942 if TMPL is `template <class U> void S<int>::f(U)' this will return
8943 the full template. This function will not trace past partial
8944 specializations, however. For example, given in addition:
8945
8946 template <class T> struct S<T*> { template <class U> void f(U); };
8947
8948 if TMPL is `template <class U> void S<int*>::f(U)' this will return
8949 `template <class T> template <class U> S<T*>::f(U)'. */
73aad9b9 8950
612c671a 8951tree
36a117a5
MM
8952most_general_template (decl)
8953 tree decl;
73aad9b9 8954{
b5ac18ea
MM
8955 while (DECL_TEMPLATE_INFO (decl)
8956 /* The DECL_TI_TEMPLATE can be a LOOKUP_EXPR or
8957 IDENTIFIER_NODE in some cases. (See cp-tree.h for
8958 details.) */
8959 && TREE_CODE (DECL_TI_TEMPLATE (decl)) == TEMPLATE_DECL)
36a117a5
MM
8960 decl = DECL_TI_TEMPLATE (decl);
8961
8962 return decl;
8963}
8964
8965/* Return the most specialized of the class template specializations
8966 of TMPL which can produce an instantiation matching ARGS, or
8967 error_mark_node if the choice is ambiguous. */
8968
e9659ab0 8969static tree
36a117a5
MM
8970most_specialized_class (tmpl, args)
8971 tree tmpl;
8972 tree args;
8973{
8974 tree list = NULL_TREE;
8975 tree t;
8976 tree champ;
73aad9b9
JM
8977 int fate;
8978
36a117a5
MM
8979 tmpl = most_general_template (tmpl);
8980 for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
73aad9b9 8981 {
36a117a5
MM
8982 tree spec_args
8983 = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args);
8984 if (spec_args)
73aad9b9
JM
8985 {
8986 list = decl_tree_cons (TREE_PURPOSE (t), TREE_VALUE (t), list);
8987 TREE_TYPE (list) = TREE_TYPE (t);
8988 }
8989 }
8990
8991 if (! list)
8992 return NULL_TREE;
8993
8994 t = list;
8995 champ = t;
8996 t = TREE_CHAIN (t);
8997 for (; t; t = TREE_CHAIN (t))
8998 {
8999 fate = more_specialized_class (champ, t);
9000 if (fate == 1)
9001 ;
9002 else
9003 {
9004 if (fate == 0)
9005 {
9006 t = TREE_CHAIN (t);
9007 if (! t)
9008 return error_mark_node;
9009 }
9010 champ = t;
9011 }
9012 }
9013
9014 for (t = list; t && t != champ; t = TREE_CHAIN (t))
9015 {
85b71cf2 9016 fate = more_specialized_class (champ, t);
73aad9b9
JM
9017 if (fate != 1)
9018 return error_mark_node;
9019 }
9020
9021 return champ;
9022}
9023
8d08fdba 9024/* called from the parser. */
e92cc029 9025
8d08fdba 9026void
6633d636 9027do_decl_instantiation (declspecs, declarator, storage)
f0e01782 9028 tree declspecs, declarator, storage;
8d08fdba 9029{
c11b6f21 9030 tree decl = grokdeclarator (declarator, declspecs, NORMAL, 0, NULL_TREE);
8d08fdba 9031 tree result = NULL_TREE;
faae18ab 9032 int extern_p = 0;
e8abc66f 9033
3fa56191
MM
9034 if (!decl)
9035 /* An error ocurred, for which grokdeclarator has already issued
9036 an appropriate message. */
9037 return;
9038 else if (! DECL_LANG_SPECIFIC (decl))
ec255269 9039 {
8251199e 9040 cp_error ("explicit instantiation of non-template `%#D'", decl);
ec255269
MS
9041 return;
9042 }
03d0f4af 9043 else if (TREE_CODE (decl) == VAR_DECL)
6633d636 9044 {
03d0f4af
MM
9045 /* There is an asymmetry here in the way VAR_DECLs and
9046 FUNCTION_DECLs are handled by grokdeclarator. In the case of
9047 the latter, the DECL we get back will be marked as a
9048 template instantiation, and the appropriate
9049 DECL_TEMPLATE_INFO will be set up. This does not happen for
9050 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
9051 should handle VAR_DECLs as it currently handles
9052 FUNCTION_DECLs. */
6633d636
MS
9053 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, 0);
9054 if (result && TREE_CODE (result) != VAR_DECL)
03d0f4af 9055 {
8251199e 9056 cp_error ("no matching template for `%D' found", result);
03d0f4af
MM
9057 return;
9058 }
6633d636
MS
9059 }
9060 else if (TREE_CODE (decl) != FUNCTION_DECL)
9061 {
8251199e 9062 cp_error ("explicit instantiation of `%#D'", decl);
6633d636
MS
9063 return;
9064 }
03d0f4af
MM
9065 else
9066 result = decl;
672476cb 9067
03d0f4af
MM
9068 /* Check for various error cases. Note that if the explicit
9069 instantiation is legal the RESULT will currently be marked as an
9070 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
9071 until we get here. */
9072
9073 if (DECL_TEMPLATE_SPECIALIZATION (result))
672476cb 9074 {
03d0f4af
MM
9075 /* [temp.spec]
9076
9077 No program shall both explicitly instantiate and explicitly
9078 specialize a template. */
6f1b4c42
JM
9079 cp_pedwarn ("explicit instantiation of `%#D' after", result);
9080 cp_pedwarn_at ("explicit specialization here", result);
672476cb
MM
9081 return;
9082 }
03d0f4af
MM
9083 else if (DECL_EXPLICIT_INSTANTIATION (result))
9084 {
9085 /* [temp.spec]
98c1c668 9086
03d0f4af
MM
9087 No program shall explicitly instantiate any template more
9088 than once.
9089
2aaf816d
JM
9090 We check DECL_INTERFACE_KNOWN so as not to complain when the first
9091 instantiation was `extern' and the second is not, and EXTERN_P for
9092 the opposite case. If -frepo, chances are we already got marked
9093 as an explicit instantion because of the repo file. */
9094 if (DECL_INTERFACE_KNOWN (result) && !extern_p && !flag_use_repository)
6f1b4c42 9095 cp_pedwarn ("duplicate explicit instantiation of `%#D'", result);
03d0f4af
MM
9096
9097 /* If we've already instantiated the template, just return now. */
9098 if (DECL_INTERFACE_KNOWN (result))
9099 return;
9100 }
9101 else if (!DECL_IMPLICIT_INSTANTIATION (result))
faae18ab 9102 {
8251199e 9103 cp_error ("no matching template for `%D' found", result);
faae18ab
MS
9104 return;
9105 }
03d0f4af 9106 else if (!DECL_TEMPLATE_INFO (result))
6633d636 9107 {
8251199e 9108 cp_pedwarn ("explicit instantiation of non-template `%#D'", result);
6633d636
MS
9109 return;
9110 }
9111
a0a33927
MS
9112 if (flag_external_templates)
9113 return;
9114
f0e01782 9115 if (storage == NULL_TREE)
00595019 9116 ;
faae18ab 9117 else if (storage == ridpointers[(int) RID_EXTERN])
03d0f4af
MM
9118 {
9119 if (pedantic)
cab1f180 9120 cp_pedwarn ("ISO C++ forbids the use of `extern' on explicit instantiations");
03d0f4af
MM
9121 extern_p = 1;
9122 }
f0e01782 9123 else
8251199e 9124 cp_error ("storage class `%D' applied to template instantiation",
f0e01782 9125 storage);
5566b478 9126
03d0f4af 9127 SET_DECL_EXPLICIT_INSTANTIATION (result);
5566b478 9128 mark_decl_instantiated (result, extern_p);
44a8d0b3 9129 repo_template_instantiated (result, extern_p);
c91a56d2
MS
9130 if (! extern_p)
9131 instantiate_decl (result);
7177d104
MS
9132}
9133
faae18ab
MS
9134void
9135mark_class_instantiated (t, extern_p)
9136 tree t;
9137 int extern_p;
9138{
9139 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
eb773359
JM
9140 SET_CLASSTYPE_INTERFACE_KNOWN (t);
9141 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
faae18ab
MS
9142 CLASSTYPE_VTABLE_NEEDS_WRITING (t) = ! extern_p;
9143 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
9144 if (! extern_p)
9145 {
9146 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
9147 rest_of_type_compilation (t, 1);
9148 }
9149}
e8abc66f 9150
7177d104 9151void
ca79f85d
JM
9152do_type_instantiation (t, storage)
9153 tree t, storage;
7177d104 9154{
e8abc66f
MS
9155 int extern_p = 0;
9156 int nomem_p = 0;
5566b478
MS
9157 int static_p = 0;
9158
ca79f85d
JM
9159 if (TREE_CODE (t) == TYPE_DECL)
9160 t = TREE_TYPE (t);
9161
7ddedda4 9162 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
ca79f85d 9163 {
8251199e 9164 cp_error ("explicit instantiation of non-template type `%T'", t);
ca79f85d
JM
9165 return;
9166 }
9167
5566b478 9168 complete_type (t);
7177d104 9169
a292b002
MS
9170 /* With -fexternal-templates, explicit instantiations are treated the same
9171 as implicit ones. */
a0a33927
MS
9172 if (flag_external_templates)
9173 return;
9174
f0e01782
MS
9175 if (TYPE_SIZE (t) == NULL_TREE)
9176 {
8251199e 9177 cp_error ("explicit instantiation of `%#T' before definition of template",
f0e01782
MS
9178 t);
9179 return;
9180 }
9181
03d0f4af 9182 if (storage != NULL_TREE)
f0e01782 9183 {
03d0f4af 9184 if (pedantic)
cab1f180 9185 cp_pedwarn("ISO C++ forbids the use of `%s' on explicit instantiations",
8251199e 9186 IDENTIFIER_POINTER (storage));
03d0f4af
MM
9187
9188 if (storage == ridpointers[(int) RID_INLINE])
9189 nomem_p = 1;
9190 else if (storage == ridpointers[(int) RID_EXTERN])
9191 extern_p = 1;
9192 else if (storage == ridpointers[(int) RID_STATIC])
9193 static_p = 1;
9194 else
9195 {
8251199e 9196 cp_error ("storage class `%D' applied to template instantiation",
03d0f4af
MM
9197 storage);
9198 extern_p = 0;
9199 }
f0e01782
MS
9200 }
9201
03d0f4af
MM
9202 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
9203 {
9204 /* [temp.spec]
a292b002 9205
03d0f4af
MM
9206 No program shall both explicitly instantiate and explicitly
9207 specialize a template. */
8251199e
JM
9208 cp_error ("explicit instantiation of `%#T' after", t);
9209 cp_error_at ("explicit specialization here", t);
03d0f4af
MM
9210 return;
9211 }
9212 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
44a8d0b3 9213 {
03d0f4af
MM
9214 /* [temp.spec]
9215
9216 No program shall explicitly instantiate any template more
9217 than once.
9218
2aaf816d
JM
9219 If CLASSTYPE_INTERFACE_ONLY, then the first explicit instantiation
9220 was `extern'. If EXTERN_P then the second is. If -frepo, chances
9221 are we already got marked as an explicit instantion because of the
9222 repo file. All these cases are OK. */
9223 if (!CLASSTYPE_INTERFACE_ONLY (t) && !extern_p && !flag_use_repository)
9224 cp_pedwarn ("duplicate explicit instantiation of `%#T'", t);
03d0f4af
MM
9225
9226 /* If we've already instantiated the template, just return now. */
9227 if (!CLASSTYPE_INTERFACE_ONLY (t))
9228 return;
44a8d0b3 9229 }
e8abc66f 9230
03d0f4af
MM
9231 mark_class_instantiated (t, extern_p);
9232 repo_template_instantiated (t, extern_p);
9233
e8abc66f
MS
9234 if (nomem_p)
9235 return;
9236
7177d104 9237 {
db5ae43f 9238 tree tmp;
5566b478 9239
03d0f4af
MM
9240 /* In contrast to implicit instantiation, where only the
9241 declarations, and not the definitions, of members are
9242 instantiated, we have here:
9243
9244 [temp.explicit]
9245
9246 The explicit instantiation of a class template specialization
9247 implies the instantiation of all of its members not
9248 previously explicitly specialized in the translation unit
9249 containing the explicit instantiation.
9250
9251 Of course, we can't instantiate member template classes, since
9252 we don't have any arguments for them. Note that the standard
9253 is unclear on whether the instatiation of the members are
9254 *explicit* instantiations or not. We choose to be generous,
9255 and not set DECL_EXPLICIT_INSTANTIATION. Therefore, we allow
9256 the explicit instantiation of a class where some of the members
9257 have no definition in the current translation unit. */
9258
5566b478
MS
9259 if (! static_p)
9260 for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
a7d87521 9261 if (TREE_CODE (tmp) == FUNCTION_DECL
1f109f0f 9262 && DECL_TEMPLATE_INSTANTIATION (tmp))
5566b478
MS
9263 {
9264 mark_decl_instantiated (tmp, extern_p);
9265 repo_template_instantiated (tmp, extern_p);
9266 if (! extern_p)
9267 instantiate_decl (tmp);
9268 }
9269
9270 for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
9271 if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
863adfc0 9272 {
5566b478 9273 mark_decl_instantiated (tmp, extern_p);
863adfc0 9274 repo_template_instantiated (tmp, extern_p);
5566b478
MS
9275 if (! extern_p)
9276 instantiate_decl (tmp);
863adfc0 9277 }
7177d104 9278
a292b002 9279 for (tmp = CLASSTYPE_TAGS (t); tmp; tmp = TREE_CHAIN (tmp))
e4a84209
MM
9280 if (IS_AGGR_TYPE (TREE_VALUE (tmp))
9281 && !uses_template_parms (CLASSTYPE_TI_ARGS (TREE_VALUE (tmp))))
f376e137 9282 do_type_instantiation (TYPE_MAIN_DECL (TREE_VALUE (tmp)), storage);
a292b002 9283 }
8d08fdba 9284}
a28e3c7f 9285
36a117a5
MM
9286/* Given a function DECL, which is a specialization of TMPL, modify
9287 DECL to be a re-instantiation of TMPL with the same template
9288 arguments. TMPL should be the template into which tsubst'ing
9289 should occur for DECL, not the most general template.
830bfa74
MM
9290
9291 One reason for doing this is a scenario like this:
9292
9293 template <class T>
9294 void f(const T&, int i);
9295
9296 void g() { f(3, 7); }
9297
9298 template <class T>
9299 void f(const T& t, const int i) { }
9300
9301 Note that when the template is first instantiated, with
9302 instantiate_template, the resulting DECL will have no name for the
9303 first parameter, and the wrong type for the second. So, when we go
9304 to instantiate the DECL, we regenerate it. */
9305
e9659ab0 9306static void
830bfa74
MM
9307regenerate_decl_from_template (decl, tmpl)
9308 tree decl;
9309 tree tmpl;
9310{
9311 tree args;
830bfa74
MM
9312 tree code_pattern;
9313 tree new_decl;
36a117a5
MM
9314 tree gen_tmpl;
9315 int unregistered;
830bfa74
MM
9316
9317 args = DECL_TI_ARGS (decl);
9318 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
9319
8251199e
JM
9320 /* Unregister the specialization so that when we tsubst we will not
9321 just return DECL. We don't have to unregister DECL from TMPL
9322 because if would only be registered there if it were a partial
9323 instantiation of a specialization, which it isn't: it's a full
9324 instantiation. */
36a117a5
MM
9325 gen_tmpl = most_general_template (tmpl);
9326 unregistered = unregister_specialization (decl, gen_tmpl);
9327
9328 /* If the DECL was not unregistered then something peculiar is
9329 happening: we created a specialization but did not call
9330 register_specialization for it. */
9331 my_friendly_assert (unregistered, 0);
9332
61a127b3
MM
9333 if (TREE_CODE (decl) == VAR_DECL)
9334 /* Make sure that we can see identifiers, and compute access
9335 correctly, for the class members used in the declaration of
9336 this static variable. */
9337 pushclass (DECL_CONTEXT (decl), 2);
9338
d8c4447d 9339 /* Do the substitution to get the new declaration. */
4393e105 9340 new_decl = tsubst (code_pattern, args, /*complain=*/1, NULL_TREE);
830bfa74
MM
9341
9342 if (TREE_CODE (decl) == VAR_DECL)
9343 {
9344 /* Set up DECL_INITIAL, since tsubst doesn't. */
830bfa74 9345 DECL_INITIAL (new_decl) =
d8c4447d 9346 tsubst_expr (DECL_INITIAL (code_pattern), args,
4393e105 9347 /*complain=*/1, DECL_TI_TEMPLATE (decl));
61a127b3 9348 /* Pop the class context we pushed above. */
b74a0560 9349 popclass ();
830bfa74 9350 }
2b0a63a3 9351 else if (TREE_CODE (decl) == FUNCTION_DECL)
fbf1c34b
MM
9352 {
9353 /* Convince duplicate_decls to use the DECL_ARGUMENTS from the
9354 new decl. */
9355 DECL_INITIAL (new_decl) = error_mark_node;
9356 /* And don't complain about a duplicate definition. */
9357 DECL_INITIAL (decl) = NULL_TREE;
9358 }
36a117a5
MM
9359
9360 /* The immediate parent of the new template is still whatever it was
9361 before, even though tsubst sets DECL_TI_TEMPLATE up as the most
9362 general template. We also reset the DECL_ASSEMBLER_NAME since
9363 tsubst always calculates the name as if the function in question
9364 were really a template instance, and sometimes, with friend
9365 functions, this is not so. See tsubst_friend_function for
9366 details. */
9367 DECL_TI_TEMPLATE (new_decl) = DECL_TI_TEMPLATE (decl);
9368 DECL_ASSEMBLER_NAME (new_decl) = DECL_ASSEMBLER_NAME (decl);
9369 DECL_RTL (new_decl) = DECL_RTL (decl);
9370
9371 /* Call duplicate decls to merge the old and new declarations. */
830bfa74
MM
9372 duplicate_decls (new_decl, decl);
9373
36a117a5
MM
9374 /* Now, re-register the specialization. */
9375 register_specialization (decl, gen_tmpl, args);
830bfa74
MM
9376}
9377
f84b4be9
JM
9378/* Produce the definition of D, a _DECL generated from a template. */
9379
a28e3c7f 9380tree
5566b478
MS
9381instantiate_decl (d)
9382 tree d;
a28e3c7f 9383{
36a117a5
MM
9384 tree tmpl = DECL_TI_TEMPLATE (d);
9385 tree args = DECL_TI_ARGS (d);
830bfa74 9386 tree td;
36a117a5
MM
9387 tree code_pattern;
9388 tree spec;
9389 tree gen_tmpl;
5566b478 9390 int nested = in_function_p ();
5566b478 9391 int pattern_defined;
c27be9b9
JM
9392 int line = lineno;
9393 char *file = input_filename;
7c913d33 9394 tree old_fn = current_function_decl;
5566b478 9395
36a117a5
MM
9396 /* This function should only be used to instantiate templates for
9397 functions and static member variables. */
9398 my_friendly_assert (TREE_CODE (d) == FUNCTION_DECL
9399 || TREE_CODE (d) == VAR_DECL, 0);
9400
fbf1c34b 9401 if (DECL_TEMPLATE_INSTANTIATED (d))
03d0f4af
MM
9402 /* D has already been instantiated. It might seem reasonable to
9403 check whether or not D is an explict instantiation, and, if so,
9404 stop here. But when an explicit instantiation is deferred
9405 until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
9406 is set, even though we still need to do the instantiation. */
36a117a5
MM
9407 return d;
9408
9409 /* If we already have a specialization of this declaration, then
9410 there's no reason to instantiate it. Note that
9411 retrieve_specialization gives us both instantiations and
9412 specializations, so we must explicitly check
9413 DECL_TEMPLATE_SPECIALIZATION. */
9414 gen_tmpl = most_general_template (tmpl);
9415 spec = retrieve_specialization (gen_tmpl, args);
9416 if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
9417 return spec;
9418
9419 /* This needs to happen before any tsubsting. */
9420 if (! push_tinst_level (d))
9421 return d;
9422
4d85e00e
MM
9423 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
9424 for the instantiation. This is not always the most general
9425 template. Consider, for example:
9426
9427 template <class T>
9428 struct S { template <class U> void f();
9429 template <> void f<int>(); };
9430
9431 and an instantiation of S<double>::f<int>. We want TD to be the
9432 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
9433 td = tmpl;
9434 for (td = tmpl;
9435 /* An instantiation cannot have a definition, so we need a
9436 more general template. */
9437 DECL_TEMPLATE_INSTANTIATION (td)
9438 /* We must also deal with friend templates. Given:
9439
9440 template <class T> struct S {
9441 template <class U> friend void f() {};
9442 };
9443
9444 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
9445 so far as the language is concerned, but that's still
9446 where we get the pattern for the instantiation from. On
9447 ther hand, if the definition comes outside the class, say:
9448
9449 template <class T> struct S {
9450 template <class U> friend void f();
9451 };
9452 template <class U> friend void f() {}
9453
9454 we don't need to look any further. That's what the check for
9455 DECL_INITIAL is for. */
9456 || (TREE_CODE (d) == FUNCTION_DECL
61289ca3 9457 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (td)
4d85e00e 9458 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (td)));
f84b4be9 9459 )
4d85e00e
MM
9460 {
9461 /* The present template, TD, should not be a definition. If it
9462 were a definition, we should be using it! Note that we
9463 cannot restructure the loop to just keep going until we find
9464 a template with a definition, since that might go too far if
9465 a specialization was declared, but not defined. */
4d85e00e
MM
9466 my_friendly_assert (!(TREE_CODE (d) == VAR_DECL
9467 && !DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (td))),
9468 0);
9469
9470 /* Fetch the more general template. */
9471 td = DECL_TI_TEMPLATE (td);
9472 }
27bb8339 9473
fee23f54 9474 code_pattern = DECL_TEMPLATE_RESULT (td);
27bb8339 9475
5566b478 9476 if (TREE_CODE (d) == FUNCTION_DECL)
39c76b4f 9477 pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
5566b478 9478 else
36a117a5 9479 pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
de22184b
MS
9480
9481 push_to_top_level ();
9482 lineno = DECL_SOURCE_LINE (d);
9483 input_filename = DECL_SOURCE_FILE (d);
9484
de22184b 9485 if (pattern_defined)
5566b478
MS
9486 {
9487 repo_template_used (d);
9488
9489 if (flag_external_templates && ! DECL_INTERFACE_KNOWN (d))
9490 {
9491 if (flag_alt_external_templates)
9492 {
9493 if (interface_unknown)
9494 warn_if_unknown_interface (d);
9495 }
fee23f54 9496 else if (DECL_INTERFACE_KNOWN (code_pattern))
5566b478
MS
9497 {
9498 DECL_INTERFACE_KNOWN (d) = 1;
fee23f54 9499 DECL_NOT_REALLY_EXTERN (d) = ! DECL_EXTERNAL (code_pattern);
5566b478
MS
9500 }
9501 else
fee23f54 9502 warn_if_unknown_interface (code_pattern);
5566b478
MS
9503 }
9504
e92cc029 9505 if (at_eof)
5566b478
MS
9506 import_export_decl (d);
9507 }
9508
c4ae3f91
JM
9509 /* Reject all external templates except inline functions. */
9510 if (DECL_INTERFACE_KNOWN (d)
9511 && ! DECL_NOT_REALLY_EXTERN (d)
9512 && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d)))
9513 goto out;
9514
67ffc812 9515 if (TREE_CODE (d) == VAR_DECL
711734a9 9516 && TREE_READONLY (d)
67ffc812
MM
9517 && DECL_INITIAL (d) == NULL_TREE
9518 && DECL_INITIAL (code_pattern) != NULL_TREE)
9519 /* We need to set up DECL_INITIAL regardless of pattern_defined if
7c913d33
JM
9520 the variable is a static const initialized in the class body. */;
9521 else if (pattern_defined && nested
9522 && TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d))
9523 /* An inline function used in another function; instantiate it now so
9524 we can inline it. */;
9525 else if (! pattern_defined || ! at_eof)
9526 {
9527 /* Defer all other templates. We restore the source position
9528 here because it's used by add_pending_template. */
c27be9b9
JM
9529 lineno = line;
9530 input_filename = file;
9531
03d0f4af
MM
9532 if (at_eof && !pattern_defined
9533 && DECL_EXPLICIT_INSTANTIATION (d))
9534 /* [temp.explicit]
9535
9536 The definition of a non-exported function template, a
9537 non-exported member function template, or a non-exported
9538 member function or static data member of a class template
9539 shall be present in every translation unit in which it is
9540 explicitly instantiated. */
8251199e 9541 cp_error ("explicit instantiation of `%D' but no definition available",
03d0f4af
MM
9542 d);
9543
5566b478 9544 add_pending_template (d);
de22184b 9545 goto out;
5566b478
MS
9546 }
9547
7c913d33
JM
9548 /* If this instantiation is COMDAT, we don't know whether or not we
9549 will really need to write it out. If we can't be sure, mark it
9550 DECL_DEFER_OUTPUT. NOTE: This increases memory consumption,
9551 since we keep some instantiations in memory rather than write
9552 them out immediately and forget them. A better approach would be
9553 to wait until we know we need them to do the instantiation, but
9554 that would break templates with static locals, because we
9555 generate the functions to destroy statics before we determine
9556 which functions are needed. A better solution would be to
9557 generate the ctor and dtor functions as we go. */
9558
9559 if (TREE_CODE (d) == FUNCTION_DECL
9560 && DECL_COMDAT (d)
9561 && ! DECL_NEEDED_P (d)
9562 /* If the function that caused us to be instantiated is needed, we
9563 will be needed, too. */
1c227897 9564 && (! nested || (old_fn && ! DECL_NEEDED_P (old_fn))))
7c913d33
JM
9565 DECL_DEFER_OUTPUT (d) = 1;
9566
2b0a63a3
MM
9567 /* We're now committed to instantiating this template. Mark it as
9568 instantiated so that recursive calls to instantiate_decl do not
9569 try to instantiate it again. */
fbf1c34b 9570 DECL_TEMPLATE_INSTANTIATED (d) = 1;
120722ac 9571
06f07977
JM
9572 /* And we're not deferring instantiation any more. */
9573 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
9574
2b0a63a3
MM
9575 /* Regenerate the declaration in case the template has been modified
9576 by a subsequent redeclaration. */
9577 regenerate_decl_from_template (d, td);
9578
120722ac
MM
9579 /* We already set the file and line above. Reset them now in case
9580 they changed as a result of calling regenerate_decl_from_template. */
5156628f
MS
9581 lineno = DECL_SOURCE_LINE (d);
9582 input_filename = DECL_SOURCE_FILE (d);
9583
5566b478
MS
9584 if (TREE_CODE (d) == VAR_DECL)
9585 {
9586 DECL_IN_AGGR_P (d) = 0;
9587 if (DECL_INTERFACE_KNOWN (d))
9588 DECL_EXTERNAL (d) = ! DECL_NOT_REALLY_EXTERN (d);
9589 else
9590 {
9591 DECL_EXTERNAL (d) = 1;
9592 DECL_NOT_REALLY_EXTERN (d) = 1;
9593 }
cd9f6678 9594 cp_finish_decl (d, DECL_INITIAL (d), NULL_TREE, 0);
5566b478
MS
9595 }
9596 else if (TREE_CODE (d) == FUNCTION_DECL)
9597 {
558475f0 9598 /* Set up context. */
a8f73d4b 9599 start_function (NULL_TREE, d, NULL_TREE, SF_PRE_PARSED);
5566b478
MS
9600 store_parm_decls ();
9601
f9817201
MM
9602 /* We already set up __FUNCTION__, etc., so we don't want to do
9603 it again now. */
9604 current_function_name_declared = 1;
9605
558475f0
MM
9606 /* Substitute into the body of the function. */
9607 tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
9608 /*complain=*/1, tmpl);
9609
4d6abc1c
MM
9610 /* Finish the function. */
9611 expand_body (finish_function (lineno, 0));
5566b478
MS
9612 }
9613
de22184b 9614out:
c27be9b9
JM
9615 lineno = line;
9616 input_filename = file;
9617
5566b478 9618 pop_from_top_level ();
5566b478 9619 pop_tinst_level ();
a28e3c7f 9620
a28e3c7f
MS
9621 return d;
9622}
5566b478 9623
0aafb128
MM
9624/* Run through the list of templates that we wish we could
9625 instantiate, and instantiate any we can. */
9626
9627int
9628instantiate_pending_templates ()
9629{
9630 tree *t;
9631 int instantiated_something = 0;
9632 int reconsider;
9633
9634 do
9635 {
9636 reconsider = 0;
9637
9638 t = &pending_templates;
9639 while (*t)
9640 {
9641 tree srcloc = TREE_PURPOSE (*t);
9642 tree instantiation = TREE_VALUE (*t);
9643
9644 input_filename = SRCLOC_FILE (srcloc);
9645 lineno = SRCLOC_LINE (srcloc);
9646
9647 if (TREE_CODE_CLASS (TREE_CODE (instantiation)) == 't')
9648 {
9649 tree fn;
9650
9651 if (!TYPE_SIZE (instantiation))
9652 {
9653 instantiate_class_template (instantiation);
9654 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
9655 for (fn = TYPE_METHODS (instantiation);
9656 fn;
9657 fn = TREE_CHAIN (fn))
9658 if (! DECL_ARTIFICIAL (fn))
9659 instantiate_decl (fn);
9660 if (TYPE_SIZE (instantiation))
9661 {
9662 instantiated_something = 1;
9663 reconsider = 1;
9664 }
9665 }
9666
9667 if (TYPE_SIZE (instantiation))
9668 /* If INSTANTIATION has been instantiated, then we don't
9669 need to consider it again in the future. */
9670 *t = TREE_CHAIN (*t);
9671 else
9672 t = &TREE_CHAIN (*t);
9673 }
9674 else
9675 {
9676 if (DECL_TEMPLATE_INSTANTIATION (instantiation)
9677 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
9678 {
9679 instantiation = instantiate_decl (instantiation);
9680 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
9681 {
9682 instantiated_something = 1;
9683 reconsider = 1;
9684 }
9685 }
9686
9687 if (!DECL_TEMPLATE_INSTANTIATION (instantiation)
9688 || DECL_TEMPLATE_INSTANTIATED (instantiation))
9689 /* If INSTANTIATION has been instantiated, then we don't
9690 need to consider it again in the future. */
9691 *t = TREE_CHAIN (*t);
9692 else
9693 t = &TREE_CHAIN (*t);
9694 }
9695 }
9696 template_tail = t;
9697
9698 /* Go through the things that are template instantiations if we are
9699 using guiding declarations. */
9700 t = &maybe_templates;
9701 while (*t)
9702 {
9703 tree template;
9704 tree fn;
9705 tree args;
9706
9707 fn = TREE_VALUE (*t);
9708
9709 if (DECL_INITIAL (fn))
9710 /* If the FN is already defined, then it was either already
9711 instantiated or, even though guiding declarations were
9712 allowed, a non-template definition was provided. */
9713 ;
9714 else
9715 {
9716 template = TREE_PURPOSE (*t);
9717 args = get_bindings (template, fn, NULL_TREE);
9718 fn = instantiate_template (template, args);
9719 instantiate_decl (fn);
9720 reconsider = 1;
9721 }
9722
9723 /* Remove this entry from the chain. */
9724 *t = TREE_CHAIN (*t);
9725 }
9726 maybe_template_tail = t;
9727 }
9728 while (reconsider);
9729
9730 return instantiated_something;
9731}
9732
4393e105
MM
9733/* Substitute ARGVEC into T, which is a TREE_LIST. In particular, it
9734 is an initializer list: the TREE_PURPOSEs are DECLs, and the
9735 TREE_VALUEs are initializer values. Used by instantiate_decl. */
9736
824b9a4c 9737static tree
5566b478
MS
9738tsubst_expr_values (t, argvec)
9739 tree t, argvec;
9740{
9741 tree first = NULL_TREE;
9742 tree *p = &first;
9743
9744 for (; t; t = TREE_CHAIN (t))
9745 {
4393e105
MM
9746 tree pur = tsubst_copy (TREE_PURPOSE (t), argvec,
9747 /*complain=*/1, NULL_TREE);
9748 tree val = tsubst_expr (TREE_VALUE (t), argvec, /*complain=*/1,
9749 NULL_TREE);
5566b478
MS
9750 *p = build_tree_list (pur, val);
9751 p = &TREE_CHAIN (*p);
9752 }
9753 return first;
9754}
9755
73aad9b9
JM
9756/* D is an undefined function declaration in the presence of templates with
9757 the same name, listed in FNS. If one of them can produce D as an
9758 instantiation, remember this so we can instantiate it at EOF if D has
9759 not been defined by that time. */
9760
9761void
9762add_maybe_template (d, fns)
9763 tree d, fns;
9764{
9765 tree t;
9766
9767 if (DECL_MAYBE_TEMPLATE (d))
9768 return;
9769
e1467ff2 9770 t = most_specialized (fns, d, NULL_TREE);
73aad9b9
JM
9771 if (! t)
9772 return;
9773 if (t == error_mark_node)
9774 {
8251199e 9775 cp_error ("ambiguous template instantiation for `%D'", d);
73aad9b9
JM
9776 return;
9777 }
9778
e1b3e07d 9779 *maybe_template_tail = tree_cons (t, d, NULL_TREE);
73aad9b9
JM
9780 maybe_template_tail = &TREE_CHAIN (*maybe_template_tail);
9781 DECL_MAYBE_TEMPLATE (d) = 1;
9782}
b87692e5 9783
61a127b3
MM
9784/* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
9785
9786static void
9787set_current_access_from_decl (decl)
9788 tree decl;
9789{
9790 if (TREE_PRIVATE (decl))
9791 current_access_specifier = access_private_node;
9792 else if (TREE_PROTECTED (decl))
9793 current_access_specifier = access_protected_node;
9794 else
9795 current_access_specifier = access_public_node;
9796}
9797
dbfe2124
MM
9798/* Instantiate an enumerated type. TAG is the template type, NEWTAG
9799 is the instantiation (which should have been created with
9800 start_enum) and ARGS are the template arguments to use. */
b87692e5 9801
dbfe2124
MM
9802static void
9803tsubst_enum (tag, newtag, args)
9804 tree tag;
9805 tree newtag;
9806 tree args;
b87692e5 9807{
dbfe2124 9808 tree e;
b87692e5
MS
9809
9810 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
9811 {
61a127b3 9812 tree value;
58595203 9813
61a127b3
MM
9814 /* Note that in a template enum, the TREE_VALUE is the
9815 CONST_DECL, not the corresponding INTEGER_CST. */
9816 value = tsubst_expr (DECL_INITIAL (TREE_VALUE (e)),
4393e105
MM
9817 args, /*complain=*/1,
9818 NULL_TREE);
61a127b3
MM
9819
9820 /* Give this enumeration constant the correct access. */
9821 set_current_access_from_decl (TREE_VALUE (e));
9822
9823 /* Actually build the enumerator itself. */
58595203 9824 build_enumerator (TREE_PURPOSE (e), value, newtag);
dbfe2124 9825 }
b3d5a58b 9826
dbfe2124 9827 finish_enum (newtag);
b87692e5 9828}
36a117a5
MM
9829
9830/* Set the DECL_ASSEMBLER_NAME for DECL, which is a FUNCTION_DECL that
9831 is either an instantiation or specialization of a template
9832 function. */
9833
9834static void
9835set_mangled_name_for_template_decl (decl)
9836 tree decl;
9837{
9838 tree saved_namespace;
b370501f 9839 tree context = NULL_TREE;
36a117a5
MM
9840 tree fn_type;
9841 tree ret_type;
9842 tree parm_types;
9843 tree tparms;
9844 tree targs;
9845 tree tmpl;
9846 int parm_depth;
9847
9848 my_friendly_assert (TREE_CODE (decl) == FUNCTION_DECL, 0);
9849 my_friendly_assert (DECL_TEMPLATE_INFO (decl) != NULL_TREE, 0);
9850
9851 /* The names of template functions must be mangled so as to indicate
9852 what template is being specialized with what template arguments.
9853 For example, each of the following three functions must get
9854 different mangled names:
9855
9856 void f(int);
9857 template <> void f<7>(int);
9858 template <> void f<8>(int); */
9859
9860 targs = DECL_TI_ARGS (decl);
9861 if (uses_template_parms (targs))
9862 /* This DECL is for a partial instantiation. There's no need to
9863 mangle the name of such an entity. */
9864 return;
9865
9866 tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
9867 tparms = DECL_TEMPLATE_PARMS (tmpl);
9868 parm_depth = TMPL_PARMS_DEPTH (tparms);
9869
9870 /* There should be as many levels of arguments as there are levels
9871 of parameters. */
9872 my_friendly_assert (parm_depth == TMPL_ARGS_DEPTH (targs), 0);
9873
9874 /* We now compute the PARMS and RET_TYPE to give to
9875 build_decl_overload_real. The PARMS and RET_TYPE are the
9876 parameter and return types of the template, after all but the
9877 innermost template arguments have been substituted, not the
9878 parameter and return types of the function DECL. For example,
9879 given:
9880
9881 template <class T> T f(T);
9882
9883 both PARMS and RET_TYPE should be `T' even if DECL is `int f(int)'.
9884 A more subtle example is:
9885
9886 template <class T> struct S { template <class U> void f(T, U); }
9887
9888 Here, if DECL is `void S<int>::f(int, double)', PARMS should be
9889 {int, U}. Thus, the args that we want to subsitute into the
9890 return and parameter type for the function are those in TARGS,
9891 with the innermost level omitted. */
9892 fn_type = TREE_TYPE (tmpl);
9893 if (DECL_STATIC_FUNCTION_P (decl))
4f1c5b7d 9894 context = DECL_CONTEXT (decl);
36a117a5
MM
9895
9896 if (parm_depth == 1)
9897 /* No substitution is necessary. */
9898 ;
9899 else
9900 {
9901 int i;
9902 tree partial_args;
9903
9904 /* Replace the innermost level of the TARGS with NULL_TREEs to
9905 let tsubst know not to subsitute for those parameters. */
f31c0a32 9906 partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
36a117a5
MM
9907 for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
9908 SET_TMPL_ARGS_LEVEL (partial_args, i,
9909 TMPL_ARGS_LEVEL (targs, i));
9910 SET_TMPL_ARGS_LEVEL (partial_args,
9911 TMPL_ARGS_DEPTH (targs),
f31c0a32 9912 make_tree_vec (DECL_NTPARMS (tmpl)));
36a117a5
MM
9913
9914 /* Now, do the (partial) substitution to figure out the
9915 appropriate function type. */
4393e105 9916 fn_type = tsubst (fn_type, partial_args, /*complain=*/1, NULL_TREE);
36a117a5 9917 if (DECL_STATIC_FUNCTION_P (decl))
4393e105 9918 context = tsubst (context, partial_args, /*complain=*/1, NULL_TREE);
36a117a5
MM
9919
9920 /* Substitute into the template parameters to obtain the real
9921 innermost set of parameters. This step is important if the
9922 innermost set of template parameters contains value
9923 parameters whose types depend on outer template parameters. */
9924 TREE_VEC_LENGTH (partial_args)--;
4393e105 9925 tparms = tsubst_template_parms (tparms, partial_args, /*complain=*/1);
36a117a5
MM
9926 }
9927
9928 /* Now, get the innermost parameters and arguments, and figure out
9929 the parameter and return types. */
9930 tparms = INNERMOST_TEMPLATE_PARMS (tparms);
9931 targs = innermost_args (targs);
9932 ret_type = TREE_TYPE (fn_type);
9933 parm_types = TYPE_ARG_TYPES (fn_type);
9934
9935 /* For a static member function, we generate a fake `this' pointer,
9936 for the purposes of mangling. This indicates of which class the
9937 function is a member. Because of:
9938
9939 [class.static]
9940
9941 There shall not be a static and a nonstatic member function
9942 with the same name and the same parameter types
9943
9944 we don't have to worry that this will result in a clash with a
9945 non-static member function. */
9946 if (DECL_STATIC_FUNCTION_P (decl))
9947 parm_types = hash_tree_chain (build_pointer_type (context), parm_types);
9948
9949 /* There should be the same number of template parameters as
9950 template arguments. */
9951 my_friendly_assert (TREE_VEC_LENGTH (tparms) == TREE_VEC_LENGTH (targs),
9952 0);
9953
9954 /* If the template is in a namespace, we need to put that into the
9955 mangled name. Unfortunately, build_decl_overload_real does not
9956 get the decl to mangle, so it relies on the current
9957 namespace. Therefore, we set that here temporarily. */
9958 my_friendly_assert (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd', 980702);
9959 saved_namespace = current_namespace;
9960 current_namespace = CP_DECL_CONTEXT (decl);
9961
9962 /* Actually set the DCL_ASSEMBLER_NAME. */
9963 DECL_ASSEMBLER_NAME (decl)
9964 = build_decl_overload_real (DECL_NAME (decl), parm_types, ret_type,
9965 tparms, targs,
9966 DECL_FUNCTION_MEMBER_P (decl)
9967 + DECL_CONSTRUCTOR_P (decl));
9968
9969 /* Restore the previously active namespace. */
9970 current_namespace = saved_namespace;
9971}
This page took 2.281423 seconds and 5 git commands to generate.