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