]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/pt.c
invoke.texi (Warning Options): Describe -Wold-style-definition.
[thirdparty/gcc.git] / gcc / cp / pt.c
CommitLineData
8d08fdba 1/* Handle parameterized types (templates) for GNU C++.
3febd123 2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
cc23546e 3 2001, 2002, 2003 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 6
f5adbb8d 7This file is part of GCC.
8d08fdba 8
f5adbb8d 9GCC is free software; you can redistribute it and/or modify
8d08fdba
MS
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
f5adbb8d 14GCC is distributed in the hope that it will be useful,
8d08fdba
MS
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
f5adbb8d 20along with GCC; 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"
4977bab6
ZW
31#include "coretypes.h"
32#include "tm.h"
8d08fdba 33#include "obstack.h"
8d08fdba
MS
34#include "tree.h"
35#include "flags.h"
36#include "cp-tree.h"
25af8512 37#include "tree-inline.h"
8d08fdba 38#include "decl.h"
f0e01782 39#include "lex.h"
e8abc66f 40#include "output.h"
49c249e1 41#include "except.h"
54f92bfb 42#include "toplev.h"
3dcaad8b 43#include "rtl.h"
297a5329 44#include "timevar.h"
49c249e1 45
050367a3
MM
46/* The type of functions taking a tree, and some additional data, and
47 returning an int. */
3a978d72 48typedef int (*tree_fn_t) (tree, void*);
050367a3 49
0aafb128
MM
50/* The PENDING_TEMPLATES is a TREE_LIST of templates whose
51 instantiations have been deferred, either because their definitions
d78e771d
ZW
52 were not yet available, or because we were putting off doing the work.
53 The TREE_PURPOSE of each entry is either a DECL (for a function or
54 static data member), or a TYPE (for a class) indicating what we are
55 hoping to instantiate. The TREE_VALUE is not used. */
e2500fed 56static GTY(()) tree pending_templates;
13e73b29 57static GTY(()) tree last_pending_template;
73aad9b9 58
67ffc812 59int processing_template_parmlist;
386b8a85
JM
60static int template_header_count;
61
e2500fed
GK
62static GTY(()) tree saved_trees;
63static GTY(()) varray_type inline_parm_levels;
3dcaad8b 64static size_t inline_parm_levels_used;
75650646 65
e2500fed 66static GTY(()) tree current_tinst_level;
3ae18eaf 67
2b59fc25
KL
68static GTY(()) tree saved_access_scope;
69
6dfbb909
MM
70/* A map from local variable declarations in the body of the template
71 presently being instantiated to the corresponding instantiated
72 local variables. */
73static htab_t local_specializations;
74
830bfa74
MM
75#define UNIFY_ALLOW_NONE 0
76#define UNIFY_ALLOW_MORE_CV_QUAL 1
77#define UNIFY_ALLOW_LESS_CV_QUAL 2
78#define UNIFY_ALLOW_DERIVED 4
161c12b0 79#define UNIFY_ALLOW_INTEGER 8
028d1f20 80#define UNIFY_ALLOW_OUTER_LEVEL 16
62e4a758
NS
81#define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
82#define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
d9f818d9 83#define UNIFY_ALLOW_MAX_CORRECTION 128
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
3a978d72
NN
91static void push_access_scope (tree);
92static void pop_access_scope (tree);
93static int resolve_overloaded_unification (tree, tree, tree, tree,
94 unification_kind_t, int);
95static int try_one_overload (tree, tree, tree, tree, tree,
f23fb7f5 96 unification_kind_t, int, bool);
3a978d72
NN
97static int unify (tree, tree, tree, tree, int);
98static void add_pending_template (tree);
99static void reopen_tinst_level (tree);
100static tree classtype_mangled_name (tree);
101static char* mangle_class_name_for_template (const char *, tree, tree);
102static tree tsubst_initializer_list (tree, tree);
3a978d72
NN
103static tree get_class_bindings (tree, tree, tree);
104static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t, int);
105static void tsubst_enum (tree, tree, tree);
106static tree add_to_template_args (tree, tree);
107static tree add_outermost_template_args (tree, tree);
108static bool check_instantiated_args (tree, tree, tsubst_flags_t);
109static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*);
110static int type_unification_real (tree, tree, tree, tree,
111 int, unification_kind_t, int, int);
112static void note_template_header (int);
3a978d72
NN
113static tree convert_nontype_argument (tree, tree);
114static tree convert_template_argument (tree, tree, tree,
115 tsubst_flags_t, int, tree);
116static tree get_bindings_overload (tree, tree, tree);
117static int for_each_template_parm (tree, tree_fn_t, void*, htab_t);
118static tree build_template_parm_index (int, int, int, tree, tree);
119static int inline_needs_template_parms (tree);
120static void push_inline_template_parms_recursive (tree, int);
121static tree retrieve_specialization (tree, tree);
122static tree retrieve_local_specialization (tree);
123static tree register_specialization (tree, tree, tree);
124static void register_local_specialization (tree, tree);
3a978d72
NN
125static tree reduce_template_parm_level (tree, tree, int);
126static tree build_template_decl (tree, tree);
127static int mark_template_parm (tree, void *);
128static int template_parm_this_level_p (tree, void *);
129static tree tsubst_friend_function (tree, tree);
130static tree tsubst_friend_class (tree, tree);
131static int can_complete_type_without_circularity (tree);
10b1d5e7 132static tree get_bindings (tree, tree, tree);
3a978d72
NN
133static tree get_bindings_real (tree, tree, tree, int, int, int);
134static int template_decl_level (tree);
135static int check_cv_quals_for_unify (int, tree, tree);
a91db711
NS
136static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
137static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
3a978d72
NN
138static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
139static void regenerate_decl_from_template (tree, tree);
140static tree most_specialized (tree, tree, tree);
141static tree most_specialized_class (tree, tree);
142static int template_class_depth_real (tree, int);
143static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
144static tree tsubst_decl (tree, tree, tree, tsubst_flags_t);
145static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
146static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
147static void check_specialization_scope (void);
148static tree process_partial_specialization (tree);
149static void set_current_access_from_decl (tree);
150static void check_default_tmpl_args (tree, tree, int, int);
151static tree tsubst_call_declarator_parms (tree, tree, tsubst_flags_t, tree);
152static tree get_template_base_recursive (tree, tree, tree, tree, tree, int);
153static tree get_template_base (tree, tree, tree, tree);
154static int verify_class_unification (tree, tree, tree);
155static tree try_class_unification (tree, tree, tree, tree);
156static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
157 tree, tree);
158static tree determine_specialization (tree, tree, tree *, int);
159static int template_args_equal (tree, tree);
160static void tsubst_default_arguments (tree);
161static tree for_each_template_parm_r (tree *, int *, void *);
162static tree copy_default_args_to_explicit_spec_1 (tree, tree);
163static void copy_default_args_to_explicit_spec (tree);
164static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
a723baf1 165static int eq_local_specializations (const void *, const void *);
5552b43c 166static bool dependent_type_p_r (tree);
14d22dd6
MM
167static tree tsubst (tree, tree, tsubst_flags_t, tree);
168static tree tsubst_expr (tree, tree, tsubst_flags_t, tree);
169static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
36a117a5 170
2b59fc25
KL
171/* Make the current scope suitable for access checking when we are
172 processing T. T can be FUNCTION_DECL for instantiated function
2b907f5c
KL
173 template, or VAR_DECL for static member variable (need by
174 instantiate_decl). */
2b59fc25 175
8ce33230 176static void
2b907f5c 177push_access_scope (tree t)
2b59fc25 178{
2b907f5c
KL
179 my_friendly_assert (TREE_CODE (t) == FUNCTION_DECL
180 || TREE_CODE (t) == VAR_DECL,
181 0);
2b59fc25 182
2b907f5c
KL
183 if (DECL_CLASS_SCOPE_P (t))
184 push_nested_class (DECL_CONTEXT (t));
0f399e5f
KL
185 else
186 push_to_top_level ();
187
2b907f5c 188 if (TREE_CODE (t) == FUNCTION_DECL)
0f399e5f
KL
189 {
190 saved_access_scope = tree_cons
191 (NULL_TREE, current_function_decl, saved_access_scope);
192 current_function_decl = t;
193 }
2b59fc25
KL
194}
195
2b59fc25
KL
196/* Restore the scope set up by push_access_scope. T is the node we
197 are processing. */
198
8ce33230 199static void
3a978d72 200pop_access_scope (tree t)
2b59fc25 201{
2b907f5c 202 if (TREE_CODE (t) == FUNCTION_DECL)
2b59fc25
KL
203 {
204 current_function_decl = TREE_VALUE (saved_access_scope);
205 saved_access_scope = TREE_CHAIN (saved_access_scope);
206 }
0f399e5f
KL
207
208 if (DECL_CLASS_SCOPE_P (t))
209 pop_nested_class ();
210 else
211 pop_from_top_level ();
2b59fc25
KL
212}
213
a723baf1
MM
214/* Do any processing required when DECL (a member template
215 declaration) is finished. Returns the TEMPLATE_DECL corresponding
216 to DECL, unless it is a specialization, in which case the DECL
217 itself is returned. */
e1467ff2
MM
218
219tree
3a978d72 220finish_member_template_decl (tree decl)
e1467ff2 221{
a723baf1
MM
222 if (decl == error_mark_node)
223 return error_mark_node;
224
225 my_friendly_assert (DECL_P (decl), 20020812);
226
227 if (TREE_CODE (decl) == TYPE_DECL)
93cdc044 228 {
a723baf1
MM
229 tree type;
230
231 type = TREE_TYPE (decl);
232 if (IS_AGGR_TYPE (type)
233 && CLASSTYPE_TEMPLATE_INFO (type)
234 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
93cdc044 235 {
a723baf1 236 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
93cdc044
JM
237 check_member_template (tmpl);
238 return tmpl;
239 }
8d019cef 240 return NULL_TREE;
93cdc044 241 }
07c88314 242 else if (TREE_CODE (decl) == FIELD_DECL)
33bd39a2 243 error ("data member `%D' cannot be a member template", decl);
a1da6cba 244 else if (DECL_TEMPLATE_INFO (decl))
e1467ff2 245 {
a1da6cba
MM
246 if (!DECL_TEMPLATE_SPECIALIZATION (decl))
247 {
248 check_member_template (DECL_TI_TEMPLATE (decl));
249 return DECL_TI_TEMPLATE (decl);
250 }
251 else
252 return decl;
253 }
254 else
33bd39a2 255 error ("invalid member template declaration `%D'", decl);
e1467ff2 256
a1da6cba 257 return error_mark_node;
f84b4be9 258}
e1467ff2 259
f84b4be9
JM
260/* Returns the template nesting level of the indicated class TYPE.
261
262 For example, in:
263 template <class T>
264 struct A
265 {
266 template <class U>
267 struct B {};
268 };
269
39c01e4c
MM
270 A<T>::B<U> has depth two, while A<T> has depth one.
271 Both A<T>::B<int> and A<int>::B<U> have depth one, if
272 COUNT_SPECIALIZATIONS is 0 or if they are instantiations, not
273 specializations.
274
275 This function is guaranteed to return 0 if passed NULL_TREE so
276 that, for example, `template_class_depth (current_class_type)' is
277 always safe. */
f84b4be9 278
e9659ab0 279static int
3a978d72 280template_class_depth_real (tree type, int count_specializations)
f84b4be9 281{
93cdc044 282 int depth;
f84b4be9 283
2c73f9f5 284 for (depth = 0;
ed44da02
MM
285 type && TREE_CODE (type) != NAMESPACE_DECL;
286 type = (TREE_CODE (type) == FUNCTION_DECL)
4f1c5b7d 287 ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
ed44da02
MM
288 {
289 if (TREE_CODE (type) != FUNCTION_DECL)
290 {
291 if (CLASSTYPE_TEMPLATE_INFO (type)
292 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type))
293 && ((count_specializations
370af2d5 294 && CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
ed44da02
MM
295 || uses_template_parms (CLASSTYPE_TI_ARGS (type))))
296 ++depth;
297 }
298 else
299 {
300 if (DECL_TEMPLATE_INFO (type)
301 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (type))
302 && ((count_specializations
303 && DECL_TEMPLATE_SPECIALIZATION (type))
304 || uses_template_parms (DECL_TI_ARGS (type))))
305 ++depth;
306 }
307 }
f84b4be9
JM
308
309 return depth;
e1467ff2 310}
98c1c668 311
39c01e4c
MM
312/* Returns the template nesting level of the indicated class TYPE.
313 Like template_class_depth_real, but instantiations do not count in
314 the depth. */
315
316int
3a978d72 317template_class_depth (tree type)
39c01e4c
MM
318{
319 return template_class_depth_real (type, /*count_specializations=*/0);
320}
321
cae40af6
JM
322/* Returns 1 if processing DECL as part of do_pending_inlines
323 needs us to push template parms. */
324
325static int
3a978d72 326inline_needs_template_parms (tree decl)
cae40af6
JM
327{
328 if (! DECL_TEMPLATE_INFO (decl))
329 return 0;
f84b4be9 330
36a117a5 331 return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
cae40af6
JM
332 > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
333}
334
335/* Subroutine of maybe_begin_member_template_processing.
336 Push the template parms in PARMS, starting from LEVELS steps into the
337 chain, and ending at the beginning, since template parms are listed
338 innermost first. */
339
340static void
3a978d72 341push_inline_template_parms_recursive (tree parmlist, int levels)
cae40af6
JM
342{
343 tree parms = TREE_VALUE (parmlist);
344 int i;
345
346 if (levels > 1)
347 push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
786b5245 348
98c1c668 349 ++processing_template_decl;
cae40af6 350 current_template_parms
4890c2f4 351 = tree_cons (size_int (processing_template_decl),
98c1c668 352 parms, current_template_parms);
cae40af6
JM
353 TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
354
786b5245 355 pushlevel (0);
98c1c668
JM
356 for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
357 {
786b5245 358 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
2f939d94 359 my_friendly_assert (DECL_P (parm), 0);
cae40af6 360
98c1c668
JM
361 switch (TREE_CODE (parm))
362 {
786b5245 363 case TYPE_DECL:
73b0fce8 364 case TEMPLATE_DECL:
98c1c668
JM
365 pushdecl (parm);
366 break;
786b5245
MM
367
368 case PARM_DECL:
369 {
fc03edb3
MM
370 /* Make a CONST_DECL as is done in process_template_parm.
371 It is ugly that we recreate this here; the original
372 version built in process_template_parm is no longer
373 available. */
786b5245
MM
374 tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
375 TREE_TYPE (parm));
c727aa5e 376 DECL_ARTIFICIAL (decl) = 1;
3e4a3562 377 TREE_CONSTANT (decl) = TREE_READONLY (decl) = 1;
786b5245 378 DECL_INITIAL (decl) = DECL_INITIAL (parm);
cd9f6678 379 SET_DECL_TEMPLATE_PARM_P (decl);
786b5245
MM
380 pushdecl (decl);
381 }
cae40af6 382 break;
786b5245 383
98c1c668 384 default:
a98facb0 385 abort ();
98c1c668
JM
386 }
387 }
388}
389
cae40af6
JM
390/* Restore the template parameter context for a member template or
391 a friend template defined in a class definition. */
392
393void
3a978d72 394maybe_begin_member_template_processing (tree decl)
cae40af6
JM
395{
396 tree parms;
3dcaad8b 397 int levels = 0;
cae40af6 398
3dcaad8b
MM
399 if (inline_needs_template_parms (decl))
400 {
401 parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
402 levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
cae40af6 403
3dcaad8b
MM
404 if (DECL_TEMPLATE_SPECIALIZATION (decl))
405 {
406 --levels;
407 parms = TREE_CHAIN (parms);
408 }
cae40af6 409
3dcaad8b 410 push_inline_template_parms_recursive (parms, levels);
cae40af6
JM
411 }
412
3dcaad8b
MM
413 /* Remember how many levels of template parameters we pushed so that
414 we can pop them later. */
415 if (!inline_parm_levels)
416 VARRAY_INT_INIT (inline_parm_levels, 4, "inline_parm_levels");
417 if (inline_parm_levels_used == inline_parm_levels->num_elements)
418 VARRAY_GROW (inline_parm_levels, 2 * inline_parm_levels_used);
419 VARRAY_INT (inline_parm_levels, inline_parm_levels_used) = levels;
420 ++inline_parm_levels_used;
cae40af6
JM
421}
422
c6002625 423/* Undo the effects of begin_member_template_processing. */
98c1c668
JM
424
425void
3a978d72 426maybe_end_member_template_processing (void)
98c1c668 427{
3dcaad8b
MM
428 int i;
429
430 if (!inline_parm_levels_used)
98c1c668
JM
431 return;
432
3dcaad8b
MM
433 --inline_parm_levels_used;
434 for (i = 0;
435 i < VARRAY_INT (inline_parm_levels, inline_parm_levels_used);
436 ++i)
cae40af6
JM
437 {
438 --processing_template_decl;
439 current_template_parms = TREE_CHAIN (current_template_parms);
440 poplevel (0, 0, 0);
441 }
98c1c668
JM
442}
443
838dfd8a 444/* Returns nonzero iff T is a member template function. We must be
f84b4be9 445 careful as in
75650646
MM
446
447 template <class T> class C { void f(); }
448
449 Here, f is a template function, and a member, but not a member
450 template. This function does not concern itself with the origin of
451 T, only its present state. So if we have
452
453 template <class T> class C { template <class U> void f(U); }
454
455 then neither C<int>::f<char> nor C<T>::f<double> is considered
f181d4ae
MM
456 to be a member template. But, `template <class U> void
457 C<int>::f(U)' is considered a member template. */
98c1c668 458
cae40af6 459int
3a978d72 460is_member_template (tree t)
98c1c668 461{
f181d4ae 462 if (!DECL_FUNCTION_TEMPLATE_P (t))
75650646 463 /* Anything that isn't a function or a template function is
aa5f3bad
MM
464 certainly not a member template. */
465 return 0;
466
cae40af6 467 /* A local class can't have member templates. */
4f1c5b7d 468 if (decl_function_context (t))
cae40af6
JM
469 return 0;
470
f181d4ae 471 return (DECL_FUNCTION_MEMBER_P (DECL_TEMPLATE_RESULT (t))
f84b4be9
JM
472 /* If there are more levels of template parameters than
473 there are template classes surrounding the declaration,
474 then we have a member template. */
f181d4ae 475 && (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (t)) >
4f1c5b7d 476 template_class_depth (DECL_CONTEXT (t))));
f84b4be9 477}
98c1c668 478
ba4f4e5d 479#if 0 /* UNUSED */
838dfd8a 480/* Returns nonzero iff T is a member template class. See
2ee4e084
MM
481 is_member_template for a description of what precisely constitutes
482 a member template. */
483
484int
3a978d72 485is_member_template_class (tree t)
2ee4e084
MM
486{
487 if (!DECL_CLASS_TEMPLATE_P (t))
488 /* Anything that isn't a class template, is certainly not a member
489 template. */
490 return 0;
491
492 if (!DECL_CLASS_SCOPE_P (t))
493 /* Anything whose context isn't a class type is surely not a
494 member template. */
495 return 0;
496
497 /* If there are more levels of template parameters than there are
498 template classes surrounding the declaration, then we have a
499 member template. */
36a117a5 500 return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (t)) >
2ee4e084
MM
501 template_class_depth (DECL_CONTEXT (t)));
502}
ba4f4e5d 503#endif
2ee4e084 504
36a117a5 505/* Return a new template argument vector which contains all of ARGS,
f9a7ae04 506 but has as its innermost set of arguments the EXTRA_ARGS. */
e6f1275f
JM
507
508static tree
3a978d72 509add_to_template_args (tree args, tree extra_args)
e6f1275f 510{
36a117a5
MM
511 tree new_args;
512 int extra_depth;
513 int i;
514 int j;
e6f1275f 515
36a117a5 516 extra_depth = TMPL_ARGS_DEPTH (extra_args);
f31c0a32 517 new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
e6f1275f 518
36a117a5
MM
519 for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
520 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
e6f1275f 521
36a117a5
MM
522 for (j = 1; j <= extra_depth; ++j, ++i)
523 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
524
e6f1275f
JM
525 return new_args;
526}
527
36a117a5
MM
528/* Like add_to_template_args, but only the outermost ARGS are added to
529 the EXTRA_ARGS. In particular, all but TMPL_ARGS_DEPTH
530 (EXTRA_ARGS) levels are added. This function is used to combine
531 the template arguments from a partial instantiation with the
532 template arguments used to attain the full instantiation from the
533 partial instantiation. */
98c1c668 534
4966381a 535static tree
3a978d72 536add_outermost_template_args (tree args, tree extra_args)
98c1c668
JM
537{
538 tree new_args;
539
e4a84209
MM
540 /* If there are more levels of EXTRA_ARGS than there are ARGS,
541 something very fishy is going on. */
542 my_friendly_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args),
543 0);
544
545 /* If *all* the new arguments will be the EXTRA_ARGS, just return
546 them. */
547 if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
548 return extra_args;
549
36a117a5
MM
550 /* For the moment, we make ARGS look like it contains fewer levels. */
551 TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
552
553 new_args = add_to_template_args (args, extra_args);
98c1c668 554
36a117a5
MM
555 /* Now, we restore ARGS to its full dimensions. */
556 TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
98c1c668
JM
557
558 return new_args;
559}
5566b478 560
f9a7ae04
MM
561/* Return the N levels of innermost template arguments from the ARGS. */
562
563tree
3a978d72 564get_innermost_template_args (tree args, int n)
f9a7ae04
MM
565{
566 tree new_args;
567 int extra_levels;
568 int i;
569
570 my_friendly_assert (n >= 0, 20000603);
571
572 /* If N is 1, just return the innermost set of template arguments. */
573 if (n == 1)
574 return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
575
576 /* If we're not removing anything, just return the arguments we were
577 given. */
578 extra_levels = TMPL_ARGS_DEPTH (args) - n;
579 my_friendly_assert (extra_levels >= 0, 20000603);
580 if (extra_levels == 0)
581 return args;
582
583 /* Make a new set of arguments, not containing the outer arguments. */
584 new_args = make_tree_vec (n);
585 for (i = 1; i <= n; ++i)
586 SET_TMPL_ARGS_LEVEL (new_args, i,
587 TMPL_ARGS_LEVEL (args, i + extra_levels));
588
589 return new_args;
590}
591
5566b478
MS
592/* We've got a template header coming up; push to a new level for storing
593 the parms. */
8d08fdba 594
8d08fdba 595void
3a978d72 596begin_template_parm_list (void)
8d08fdba 597{
6757edfe
MM
598 /* We use a non-tag-transparent scope here, which causes pushtag to
599 put tags in this scope, rather than in the enclosing class or
600 namespace scope. This is the right thing, since we want
601 TEMPLATE_DECLS, and not TYPE_DECLS for template classes. For a
602 global template class, push_template_decl handles putting the
603 TEMPLATE_DECL into top-level scope. For a nested template class,
604 e.g.:
605
606 template <class T> struct S1 {
607 template <class T> struct S2 {};
608 };
609
610 pushtag contains special code to call pushdecl_with_scope on the
611 TEMPLATE_DECL for S2. */
74b846e0 612 begin_scope (sk_template_parms);
5156628f 613 ++processing_template_decl;
67ffc812 614 ++processing_template_parmlist;
386b8a85
JM
615 note_template_header (0);
616}
617
6c30752f 618/* This routine is called when a specialization is declared. If it is
0e339752 619 invalid to declare a specialization here, an error is reported. */
6c30752f 620
e9659ab0 621static void
3a978d72 622check_specialization_scope (void)
6c30752f
MM
623{
624 tree scope = current_scope ();
3ddfb0e6 625
6c30752f
MM
626 /* [temp.expl.spec]
627
628 An explicit specialization shall be declared in the namespace of
629 which the template is a member, or, for member templates, in the
630 namespace of which the enclosing class or enclosing class
631 template is a member. An explicit specialization of a member
632 function, member class or static data member of a class template
633 shall be declared in the namespace of which the class template
634 is a member. */
635 if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
33bd39a2 636 error ("explicit specialization in non-namespace scope `%D'",
6c30752f 637 scope);
3ddfb0e6 638
6c30752f
MM
639 /* [temp.expl.spec]
640
641 In an explicit specialization declaration for a member of a class
642 template or a member template that appears in namespace scope,
643 the member template and some of its enclosing class templates may
644 remain unspecialized, except that the declaration shall not
645 explicitly specialize a class member template if its enclosing
646 class templates are not explicitly specialized as well. */
647 if (current_template_parms)
33bd39a2 648 error ("enclosing class templates are not explicitly specialized");
6c30752f
MM
649}
650
c6002625 651/* We've just seen template <>. */
386b8a85
JM
652
653void
3a978d72 654begin_specialization (void)
386b8a85 655{
74b846e0 656 begin_scope (sk_template_spec);
386b8a85 657 note_template_header (1);
6c30752f 658 check_specialization_scope ();
386b8a85
JM
659}
660
dc957d14 661/* Called at then end of processing a declaration preceded by
386b8a85
JM
662 template<>. */
663
664void
3a978d72 665end_specialization (void)
386b8a85 666{
74b846e0 667 finish_scope ();
386b8a85
JM
668 reset_specialization ();
669}
670
386b8a85 671/* Any template <>'s that we have seen thus far are not referring to a
c6002625 672 function specialization. */
386b8a85
JM
673
674void
3a978d72 675reset_specialization (void)
386b8a85
JM
676{
677 processing_specialization = 0;
678 template_header_count = 0;
679}
680
838dfd8a 681/* We've just seen a template header. If SPECIALIZATION is nonzero,
386b8a85
JM
682 it was of the form template <>. */
683
4966381a 684static void
3a978d72 685note_template_header (int specialization)
386b8a85
JM
686{
687 processing_specialization = specialization;
688 template_header_count++;
689}
690
75650646 691/* We're beginning an explicit instantiation. */
386b8a85 692
75650646 693void
3a978d72 694begin_explicit_instantiation (void)
386b8a85 695{
a723baf1
MM
696 my_friendly_assert (!processing_explicit_instantiation, 20020913);
697 processing_explicit_instantiation = true;
75650646 698}
386b8a85 699
386b8a85 700
75650646 701void
3a978d72 702end_explicit_instantiation (void)
75650646 703{
a723baf1
MM
704 my_friendly_assert(processing_explicit_instantiation, 20020913);
705 processing_explicit_instantiation = false;
75650646 706}
386b8a85 707
36a117a5
MM
708/* The TYPE is being declared. If it is a template type, that means it
709 is a partial specialization. Do appropriate error-checking. */
710
711void
3a978d72 712maybe_process_partial_specialization (tree type)
36a117a5 713{
6e049fcd
KL
714 /* TYPE maybe an ERROR_MARK_NODE. */
715 tree context = TYPE_P (type) ? TYPE_CONTEXT (type) : NULL_TREE;
716
a723baf1 717 if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
36a117a5 718 {
6e049fcd
KL
719 /* This is for ordinary explicit specialization and partial
720 specialization of a template class such as:
721
722 template <> class C<int>;
723
724 or:
725
726 template <class T> class C<T*>;
727
728 Make sure that `C<int>' and `C<T*>' are implicit instantiations. */
729
36a117a5 730 if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
d0f062fb 731 && !COMPLETE_TYPE_P (type))
36a117a5 732 {
700466c2
JM
733 if (current_namespace
734 != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
735 {
33bd39a2 736 pedwarn ("specializing `%#T' in different namespace", type);
700466c2
JM
737 cp_pedwarn_at (" from definition of `%#D'",
738 CLASSTYPE_TI_TEMPLATE (type));
739 }
370af2d5 740 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
36a117a5
MM
741 if (processing_template_decl)
742 push_template_decl (TYPE_MAIN_DECL (type));
743 }
744 else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
33bd39a2 745 error ("specialization of `%T' after instantiation", type);
36a117a5 746 }
6e049fcd
KL
747 else if (CLASS_TYPE_P (type)
748 && !CLASSTYPE_USE_TEMPLATE (type)
749 && CLASSTYPE_TEMPLATE_INFO (type)
750 && context && CLASS_TYPE_P (context)
751 && CLASSTYPE_TEMPLATE_INFO (context))
752 {
753 /* This is for an explicit specialization of member class
754 template according to [temp.expl.spec/18]:
755
756 template <> template <class U> class C<int>::D;
757
758 The context `C<int>' must be an implicit instantiation.
759 Otherwise this is just a member class template declared
760 earlier like:
761
762 template <> class C<int> { template <class U> class D; };
763 template <> template <class U> class C<int>::D;
764
765 In the first case, `C<int>::D' is a specialization of `C<T>::D'
766 while in the second case, `C<int>::D' is a primary template
767 and `C<T>::D' may not exist. */
768
769 if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
770 && !COMPLETE_TYPE_P (type))
771 {
772 tree t;
773
774 if (current_namespace
775 != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
776 {
777 pedwarn ("specializing `%#T' in different namespace", type);
778 cp_pedwarn_at (" from definition of `%#D'",
779 CLASSTYPE_TI_TEMPLATE (type));
780 }
781
782 /* Check for invalid specialization after instantiation:
783
784 template <> template <> class C<int>::D<int>;
785 template <> template <class U> class C<int>::D; */
786
787 for (t = DECL_TEMPLATE_INSTANTIATIONS
788 (most_general_template (CLASSTYPE_TI_TEMPLATE (type)));
789 t; t = TREE_CHAIN (t))
790 if (TREE_VALUE (t) != type
791 && TYPE_CONTEXT (TREE_VALUE (t)) == context)
792 error ("specialization `%T' after instantiation `%T'",
793 type, TREE_VALUE (t));
794
795 /* Mark TYPE as a specialization. And as a result, we only
796 have one level of template argument for the innermost
797 class template. */
798 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
799 CLASSTYPE_TI_ARGS (type)
800 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
801 }
802 }
20496fa2 803 else if (processing_specialization)
33bd39a2 804 error ("explicit specialization of non-template `%T'", type);
36a117a5
MM
805}
806
75650646
MM
807/* Retrieve the specialization (in the sense of [temp.spec] - a
808 specialization is either an instantiation or an explicit
809 specialization) of TMPL for the given template ARGS. If there is
810 no such specialization, return NULL_TREE. The ARGS are a vector of
811 arguments, or a vector of vectors of arguments, in the case of
812 templates with more than one level of parameters. */
813
814static tree
3a978d72 815retrieve_specialization (tree tmpl, tree args)
75650646
MM
816{
817 tree s;
818
819 my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 0);
820
36a117a5
MM
821 /* There should be as many levels of arguments as there are
822 levels of parameters. */
823 my_friendly_assert (TMPL_ARGS_DEPTH (args)
824 == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)),
825 0);
826
75650646
MM
827 for (s = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
828 s != NULL_TREE;
829 s = TREE_CHAIN (s))
830 if (comp_template_args (TREE_PURPOSE (s), args))
831 return TREE_VALUE (s);
832
833 return NULL_TREE;
386b8a85
JM
834}
835
dc957d14 836/* Like retrieve_specialization, but for local declarations. */
9188c363
MM
837
838static tree
3a978d72 839retrieve_local_specialization (tree tmpl)
9188c363 840{
c68b0a84
KG
841 tree spec = htab_find_with_hash (local_specializations, tmpl,
842 htab_hash_pointer (tmpl));
a723baf1 843 return spec ? TREE_PURPOSE (spec) : NULL_TREE;
9188c363
MM
844}
845
838dfd8a 846/* Returns nonzero iff DECL is a specialization of TMPL. */
6757edfe
MM
847
848int
3a978d72 849is_specialization_of (tree decl, tree tmpl)
6757edfe
MM
850{
851 tree t;
852
853 if (TREE_CODE (decl) == FUNCTION_DECL)
854 {
855 for (t = decl;
856 t != NULL_TREE;
857 t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
858 if (t == tmpl)
859 return 1;
860 }
861 else
862 {
863 my_friendly_assert (TREE_CODE (decl) == TYPE_DECL, 0);
864
865 for (t = TREE_TYPE (decl);
866 t != NULL_TREE;
867 t = CLASSTYPE_USE_TEMPLATE (t)
868 ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
9edc3913 869 if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
6757edfe
MM
870 return 1;
871 }
386b8a85 872
6757edfe
MM
873 return 0;
874}
75650646
MM
875
876/* Register the specialization SPEC as a specialization of TMPL with
36a117a5
MM
877 the indicated ARGS. Returns SPEC, or an equivalent prior
878 declaration, if available. */
75650646 879
36a117a5 880static tree
3a978d72 881register_specialization (tree spec, tree tmpl, tree args)
75650646
MM
882{
883 tree s;
884
885 my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 0);
886
36a117a5
MM
887 if (TREE_CODE (spec) == FUNCTION_DECL
888 && uses_template_parms (DECL_TI_ARGS (spec)))
889 /* This is the FUNCTION_DECL for a partial instantiation. Don't
890 register it; we want the corresponding TEMPLATE_DECL instead.
891 We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
892 the more obvious `uses_template_parms (spec)' to avoid problems
893 with default function arguments. In particular, given
894 something like this:
895
896 template <class T> void f(T t1, T t = T())
897
898 the default argument expression is not substituted for in an
899 instantiation unless and until it is actually needed. */
900 return spec;
75650646 901
36a117a5
MM
902 /* There should be as many levels of arguments as there are
903 levels of parameters. */
904 my_friendly_assert (TMPL_ARGS_DEPTH (args)
905 == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)),
906 0);
907
75650646
MM
908 for (s = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
909 s != NULL_TREE;
910 s = TREE_CHAIN (s))
22e9174f
MM
911 {
912 tree fn = TREE_VALUE (s);
913
914 /* We can sometimes try to re-register a specialization that we've
915 already got. In particular, regenerate_decl_from_template
916 calls duplicate_decls which will update the specialization
917 list. But, we'll still get called again here anyhow. It's
918 more convenient to simply allow this than to try to prevent it. */
919 if (fn == spec)
920 return spec;
921 else if (comp_template_args (TREE_PURPOSE (s), args))
922 {
923 if (DECL_TEMPLATE_SPECIALIZATION (spec))
924 {
925 if (DECL_TEMPLATE_INSTANTIATION (fn))
926 {
927 if (TREE_USED (fn)
928 || DECL_EXPLICIT_INSTANTIATION (fn))
929 {
33bd39a2 930 error ("specialization of %D after instantiation",
22e9174f
MM
931 fn);
932 return spec;
933 }
934 else
935 {
936 /* This situation should occur only if the first
937 specialization is an implicit instantiation,
938 the second is an explicit specialization, and
939 the implicit instantiation has not yet been
940 used. That situation can occur if we have
941 implicitly instantiated a member function and
942 then specialized it later.
943
944 We can also wind up here if a friend
945 declaration that looked like an instantiation
946 turns out to be a specialization:
947
948 template <class T> void foo(T);
949 class S { friend void foo<>(int) };
950 template <> void foo(int);
951
952 We transform the existing DECL in place so that
953 any pointers to it become pointers to the
954 updated declaration.
955
956 If there was a definition for the template, but
957 not for the specialization, we want this to
958 look as if there is no definition, and vice
959 versa. */
960 DECL_INITIAL (fn) = NULL_TREE;
961 duplicate_decls (spec, fn);
962
963 return fn;
964 }
965 }
966 else if (DECL_TEMPLATE_SPECIALIZATION (fn))
967 {
b190f239
NS
968 if (!duplicate_decls (spec, fn) && DECL_INITIAL (spec))
969 /* Dup decl failed, but this is a new
970 definition. Set the line number so any errors
9bcb9aae 971 match this new definition. */
b190f239
NS
972 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
973
22e9174f
MM
974 return fn;
975 }
976 }
977 }
75650646
MM
978 }
979
980 DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
e1b3e07d 981 = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
36a117a5
MM
982
983 return spec;
984}
985
986/* Unregister the specialization SPEC as a specialization of TMPL.
b3445994
MM
987 Replace it with NEW_SPEC, if NEW_SPEC is non-NULL. Returns true
988 if the SPEC was listed as a specialization of TMPL. */
36a117a5 989
b3445994
MM
990bool
991reregister_specialization (tree spec, tree tmpl, tree new_spec)
36a117a5
MM
992{
993 tree* s;
994
995 for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
996 *s != NULL_TREE;
997 s = &TREE_CHAIN (*s))
998 if (TREE_VALUE (*s) == spec)
999 {
b3445994
MM
1000 if (!new_spec)
1001 *s = TREE_CHAIN (*s);
1002 else
a3d87771 1003 TREE_VALUE (*s) = new_spec;
36a117a5
MM
1004 return 1;
1005 }
1006
1007 return 0;
75650646
MM
1008}
1009
a723baf1
MM
1010/* Compare an entry in the local specializations hash table P1 (which
1011 is really a pointer to a TREE_LIST) with P2 (which is really a
1012 DECL). */
1013
1014static int
1015eq_local_specializations (const void *p1, const void *p2)
1016{
1017 return TREE_VALUE ((tree) p1) == (tree) p2;
1018}
1019
69f794a7
MM
1020/* Hash P1, an entry in the local specializations table. */
1021
1022static hashval_t
1023hash_local_specialization (const void* p1)
1024{
1025 return htab_hash_pointer (TREE_VALUE ((tree) p1));
1026}
1027
6dfbb909
MM
1028/* Like register_specialization, but for local declarations. We are
1029 registering SPEC, an instantiation of TMPL. */
9188c363 1030
414ea4aa 1031static void
3a978d72 1032register_local_specialization (tree spec, tree tmpl)
9188c363 1033{
6dfbb909
MM
1034 void **slot;
1035
69f794a7
MM
1036 slot = htab_find_slot_with_hash (local_specializations, tmpl,
1037 htab_hash_pointer (tmpl), INSERT);
a723baf1 1038 *slot = build_tree_list (spec, tmpl);
9188c363
MM
1039}
1040
e1467ff2
MM
1041/* Print the list of candidate FNS in an error message. */
1042
104bf76a 1043void
3a978d72 1044print_candidates (tree fns)
e1467ff2
MM
1045{
1046 tree fn;
1047
d8e178a0 1048 const char *str = "candidates are:";
e1467ff2
MM
1049
1050 for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1051 {
d6479fe7
MM
1052 tree f;
1053
1054 for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
1055 cp_error_at ("%s %+#D", str, OVL_CURRENT (f));
e1467ff2
MM
1056 str = " ";
1057 }
1058}
1059
75650646 1060/* Returns the template (one of the functions given by TEMPLATE_ID)
e1467ff2 1061 which can be specialized to match the indicated DECL with the
03017874
MM
1062 explicit template args given in TEMPLATE_ID. The DECL may be
1063 NULL_TREE if none is available. In that case, the functions in
1064 TEMPLATE_ID are non-members.
1065
838dfd8a 1066 If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
03017874
MM
1067 specialization of a member template.
1068
1069 The template args (those explicitly specified and those deduced)
1070 are output in a newly created vector *TARGS_OUT.
1071
1072 If it is impossible to determine the result, an error message is
bf8f3f93 1073 issued. The error_mark_node is returned to indicate failure. */
75650646 1074
e9659ab0 1075static tree
3a978d72
NN
1076determine_specialization (tree template_id,
1077 tree decl,
1078 tree* targs_out,
1079 int need_member_template)
386b8a85 1080{
03017874
MM
1081 tree fns;
1082 tree targs;
1083 tree explicit_targs;
1084 tree candidates = NULL_TREE;
1085 tree templates = NULL_TREE;
386b8a85 1086
e1467ff2
MM
1087 *targs_out = NULL_TREE;
1088
f2e48b67
BK
1089 if (template_id == error_mark_node)
1090 return error_mark_node;
1091
1092 fns = TREE_OPERAND (template_id, 0);
03017874 1093 explicit_targs = TREE_OPERAND (template_id, 1);
f2e48b67 1094
27fafc8d
JM
1095 if (fns == error_mark_node)
1096 return error_mark_node;
1097
c6002625 1098 /* Check for baselinks. */
91e490ab 1099 if (BASELINK_P (fns))
da15dae6 1100 fns = BASELINK_FUNCTIONS (fns);
386b8a85 1101
91e490ab
MM
1102 if (!is_overloaded_fn (fns))
1103 {
33bd39a2 1104 error ("`%D' is not a function template", fns);
91e490ab
MM
1105 return error_mark_node;
1106 }
1107
2c73f9f5 1108 for (; fns; fns = OVL_NEXT (fns))
386b8a85 1109 {
9dfce8fd 1110 tree fn = OVL_CURRENT (fns);
03017874
MM
1111
1112 if (TREE_CODE (fn) == TEMPLATE_DECL)
d955f6ea
KL
1113 {
1114 tree decl_arg_types;
1115
1116 /* DECL might be a specialization of FN. */
1117
1118 /* Adjust the type of DECL in case FN is a static member. */
1119 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1120 if (DECL_STATIC_FUNCTION_P (fn)
1121 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1122 decl_arg_types = TREE_CHAIN (decl_arg_types);
1123
1124 /* Check that the number of function parameters matches.
1125 For example,
1126 template <class T> void f(int i = 0);
1127 template <> void f<int>();
0e339752 1128 The specialization f<int> is invalid but is not caught
d955f6ea
KL
1129 by get_bindings below. */
1130
1131 if (list_length (TYPE_ARG_TYPES (TREE_TYPE (fn)))
1132 != list_length (decl_arg_types))
1133 continue;
1134
1135 /* See whether this function might be a specialization of this
1136 template. */
1137 targs = get_bindings (fn, decl, explicit_targs);
1138
1139 if (!targs)
1140 /* We cannot deduce template arguments that when used to
1141 specialize TMPL will produce DECL. */
1142 continue;
1143
1144 /* Save this template, and the arguments deduced. */
1145 templates = tree_cons (targs, fn, templates);
1146 }
03017874
MM
1147 else if (need_member_template)
1148 /* FN is an ordinary member function, and we need a
1149 specialization of a member template. */
d955f6ea 1150 ;
03017874
MM
1151 else if (TREE_CODE (fn) != FUNCTION_DECL)
1152 /* We can get IDENTIFIER_NODEs here in certain erroneous
1153 cases. */
d955f6ea 1154 ;
03017874
MM
1155 else if (!DECL_FUNCTION_MEMBER_P (fn))
1156 /* This is just an ordinary non-member function. Nothing can
1157 be a specialization of that. */
d955f6ea 1158 ;
3b82c249
KL
1159 else if (DECL_ARTIFICIAL (fn))
1160 /* Cannot specialize functions that are created implicitly. */
d955f6ea 1161 ;
75650646 1162 else
03017874
MM
1163 {
1164 tree decl_arg_types;
386b8a85 1165
03017874
MM
1166 /* This is an ordinary member function. However, since
1167 we're here, we can assume it's enclosing class is a
1168 template class. For example,
1169
1170 template <typename T> struct S { void f(); };
1171 template <> void S<int>::f() {}
1172
1173 Here, S<int>::f is a non-template, but S<int> is a
1174 template class. If FN has the same type as DECL, we
1175 might be in business. */
f5d47abd
KL
1176
1177 if (!DECL_TEMPLATE_INFO (fn))
1178 /* Its enclosing class is an explicit specialization
1179 of a template class. This is not a candidate. */
1180 continue;
1181
03017874
MM
1182 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1183 TREE_TYPE (TREE_TYPE (fn))))
1184 /* The return types differ. */
1185 continue;
1186
1187 /* Adjust the type of DECL in case FN is a static member. */
1188 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1189 if (DECL_STATIC_FUNCTION_P (fn)
1190 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1191 decl_arg_types = TREE_CHAIN (decl_arg_types);
1192
1193 if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1194 decl_arg_types))
1195 /* They match! */
1196 candidates = tree_cons (NULL_TREE, fn, candidates);
03017874 1197 }
386b8a85 1198 }
03017874 1199
bf8f3f93 1200 if (templates && TREE_CHAIN (templates))
386b8a85 1201 {
03017874
MM
1202 /* We have:
1203
1204 [temp.expl.spec]
1205
1206 It is possible for a specialization with a given function
1207 signature to be instantiated from more than one function
1208 template. In such cases, explicit specification of the
1209 template arguments must be used to uniquely identify the
1210 function template specialization being specialized.
1211
1212 Note that here, there's no suggestion that we're supposed to
1213 determine which of the candidate templates is most
1214 specialized. However, we, also have:
1215
1216 [temp.func.order]
1217
1218 Partial ordering of overloaded function template
1219 declarations is used in the following contexts to select
1220 the function template to which a function template
1221 specialization refers:
1222
1223 -- when an explicit specialization refers to a function
1224 template.
1225
1226 So, we do use the partial ordering rules, at least for now.
0e339752 1227 This extension can only serve to make invalid programs valid,
03017874
MM
1228 so it's safe. And, there is strong anecdotal evidence that
1229 the committee intended the partial ordering rules to apply;
1230 the EDG front-end has that behavior, and John Spicer claims
1231 that the committee simply forgot to delete the wording in
1232 [temp.expl.spec]. */
1233 tree tmpl = most_specialized (templates, decl, explicit_targs);
1234 if (tmpl && tmpl != error_mark_node)
1235 {
1236 targs = get_bindings (tmpl, decl, explicit_targs);
e1b3e07d 1237 templates = tree_cons (targs, tmpl, NULL_TREE);
03017874 1238 }
e1467ff2
MM
1239 }
1240
03017874 1241 if (templates == NULL_TREE && candidates == NULL_TREE)
e1467ff2 1242 {
bf8f3f93
MM
1243 cp_error_at ("template-id `%D' for `%+D' does not match any template declaration",
1244 template_id, decl);
03017874 1245 return error_mark_node;
386b8a85 1246 }
03017874 1247 else if ((templates && TREE_CHAIN (templates))
bf8f3f93
MM
1248 || (candidates && TREE_CHAIN (candidates))
1249 || (templates && candidates))
386b8a85 1250 {
bf8f3f93
MM
1251 cp_error_at ("ambiguous template specialization `%D' for `%+D'",
1252 template_id, decl);
1253 chainon (candidates, templates);
1254 print_candidates (candidates);
03017874 1255 return error_mark_node;
386b8a85
JM
1256 }
1257
c6002625 1258 /* We have one, and exactly one, match. */
03017874
MM
1259 if (candidates)
1260 {
1261 /* It was a specialization of an ordinary member function in a
1262 template class. */
1263 *targs_out = copy_node (DECL_TI_ARGS (TREE_VALUE (candidates)));
1264 return DECL_TI_TEMPLATE (TREE_VALUE (candidates));
1265 }
1266
1267 /* It was a specialization of a template. */
17aec3eb 1268 targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
03017874
MM
1269 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1270 {
1271 *targs_out = copy_node (targs);
1272 SET_TMPL_ARGS_LEVEL (*targs_out,
1273 TMPL_ARGS_DEPTH (*targs_out),
1274 TREE_PURPOSE (templates));
1275 }
1276 else
1277 *targs_out = TREE_PURPOSE (templates);
e1467ff2 1278 return TREE_VALUE (templates);
8d08fdba 1279}
8afa707f
MM
1280
1281/* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1282 but with the default argument values filled in from those in the
1283 TMPL_TYPES. */
6757edfe 1284
8afa707f 1285static tree
3a978d72
NN
1286copy_default_args_to_explicit_spec_1 (tree spec_types,
1287 tree tmpl_types)
8afa707f
MM
1288{
1289 tree new_spec_types;
1290
1291 if (!spec_types)
1292 return NULL_TREE;
1293
1294 if (spec_types == void_list_node)
1295 return void_list_node;
1296
1297 /* Substitute into the rest of the list. */
1298 new_spec_types =
1299 copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1300 TREE_CHAIN (tmpl_types));
1301
1302 /* Add the default argument for this parameter. */
1303 return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1304 TREE_VALUE (spec_types),
1305 new_spec_types);
1306}
1307
1308/* DECL is an explicit specialization. Replicate default arguments
1309 from the template it specializes. (That way, code like:
1310
1311 template <class T> void f(T = 3);
1312 template <> void f(double);
1313 void g () { f (); }
1314
1315 works, as required.) An alternative approach would be to look up
1316 the correct default arguments at the call-site, but this approach
1317 is consistent with how implicit instantiations are handled. */
1318
1319static void
3a978d72 1320copy_default_args_to_explicit_spec (tree decl)
8afa707f
MM
1321{
1322 tree tmpl;
1323 tree spec_types;
1324 tree tmpl_types;
1325 tree new_spec_types;
1326 tree old_type;
1327 tree new_type;
1328 tree t;
08c2df0f
NS
1329 tree object_type = NULL_TREE;
1330 tree in_charge = NULL_TREE;
e0fff4b3 1331 tree vtt = NULL_TREE;
8afa707f
MM
1332
1333 /* See if there's anything we need to do. */
1334 tmpl = DECL_TI_TEMPLATE (decl);
1335 tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1336 for (t = tmpl_types; t; t = TREE_CHAIN (t))
1337 if (TREE_PURPOSE (t))
1338 break;
1339 if (!t)
1340 return;
1341
1342 old_type = TREE_TYPE (decl);
1343 spec_types = TYPE_ARG_TYPES (old_type);
1344
8afa707f
MM
1345 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1346 {
08c2df0f
NS
1347 /* Remove the this pointer, but remember the object's type for
1348 CV quals. */
1349 object_type = TREE_TYPE (TREE_VALUE (spec_types));
8afa707f
MM
1350 spec_types = TREE_CHAIN (spec_types);
1351 tmpl_types = TREE_CHAIN (tmpl_types);
08c2df0f 1352
8afa707f 1353 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
08c2df0f
NS
1354 {
1355 /* DECL may contain more parameters than TMPL due to the extra
1356 in-charge parameter in constructors and destructors. */
1357 in_charge = spec_types;
1358 spec_types = TREE_CHAIN (spec_types);
1359 }
e0fff4b3
JM
1360 if (DECL_HAS_VTT_PARM_P (decl))
1361 {
1362 vtt = spec_types;
1363 spec_types = TREE_CHAIN (spec_types);
1364 }
8afa707f
MM
1365 }
1366
1367 /* Compute the merged default arguments. */
1368 new_spec_types =
1369 copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1370
08c2df0f
NS
1371 /* Compute the new FUNCTION_TYPE. */
1372 if (object_type)
8afa707f 1373 {
e0fff4b3
JM
1374 if (vtt)
1375 new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
1376 TREE_VALUE (vtt),
1377 new_spec_types);
1378
08c2df0f
NS
1379 if (in_charge)
1380 /* Put the in-charge parameter back. */
1381 new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1382 TREE_VALUE (in_charge),
1383 new_spec_types);
1384
43dc123f
MM
1385 new_type = build_method_type_directly (object_type,
1386 TREE_TYPE (old_type),
1387 new_spec_types);
8afa707f 1388 }
8afa707f
MM
1389 else
1390 new_type = build_function_type (TREE_TYPE (old_type),
08c2df0f 1391 new_spec_types);
8afa707f
MM
1392 new_type = build_type_attribute_variant (new_type,
1393 TYPE_ATTRIBUTES (old_type));
1394 new_type = build_exception_variant (new_type,
1395 TYPE_RAISES_EXCEPTIONS (old_type));
1396 TREE_TYPE (decl) = new_type;
1397}
1398
386b8a85 1399/* Check to see if the function just declared, as indicated in
75650646
MM
1400 DECLARATOR, and in DECL, is a specialization of a function
1401 template. We may also discover that the declaration is an explicit
1402 instantiation at this point.
1403
e1467ff2 1404 Returns DECL, or an equivalent declaration that should be used
03017874
MM
1405 instead if all goes well. Issues an error message if something is
1406 amiss. Returns error_mark_node if the error is not easily
1407 recoverable.
75650646 1408
75650646
MM
1409 FLAGS is a bitmask consisting of the following flags:
1410
75650646
MM
1411 2: The function has a definition.
1412 4: The function is a friend.
75650646
MM
1413
1414 The TEMPLATE_COUNT is the number of references to qualifying
1415 template classes that appeared in the name of the function. For
1416 example, in
1417
1418 template <class T> struct S { void f(); };
1419 void S<int>::f();
1420
1421 the TEMPLATE_COUNT would be 1. However, explicitly specialized
1422 classes are not counted in the TEMPLATE_COUNT, so that in
1423
1424 template <class T> struct S {};
1425 template <> struct S<int> { void f(); }
36a117a5 1426 template <> void S<int>::f();
75650646
MM
1427
1428 the TEMPLATE_COUNT would be 0. (Note that this declaration is
0e339752 1429 invalid; there should be no template <>.)
75650646
MM
1430
1431 If the function is a specialization, it is marked as such via
1432 DECL_TEMPLATE_SPECIALIZATION. Furthermore, its DECL_TEMPLATE_INFO
1433 is set up correctly, and it is added to the list of specializations
1434 for that template. */
386b8a85 1435
e1467ff2 1436tree
3a978d72
NN
1437check_explicit_specialization (tree declarator,
1438 tree decl,
1439 int template_count,
1440 int flags)
386b8a85 1441{
75650646
MM
1442 int have_def = flags & 2;
1443 int is_friend = flags & 4;
1444 int specialization = 0;
e1467ff2 1445 int explicit_instantiation = 0;
fd4de5ff 1446 int member_specialization = 0;
75650646
MM
1447 tree ctype = DECL_CLASS_CONTEXT (decl);
1448 tree dname = DECL_NAME (decl);
74b846e0 1449 tmpl_spec_kind tsk;
386b8a85 1450
74b846e0 1451 tsk = current_tmpl_spec_kind (template_count);
75650646 1452
74b846e0
MM
1453 switch (tsk)
1454 {
1455 case tsk_none:
1456 if (processing_specialization)
75650646 1457 {
fd4de5ff
MM
1458 specialization = 1;
1459 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
75650646 1460 }
74b846e0 1461 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
386b8a85 1462 {
74b846e0
MM
1463 if (is_friend)
1464 /* This could be something like:
75650646 1465
74b846e0
MM
1466 template <class T> void f(T);
1467 class S { friend void f<>(int); } */
1468 specialization = 1;
1469 else
1470 {
1471 /* This case handles bogus declarations like template <>
1472 template <class T> void f<int>(); */
1473
33bd39a2 1474 error ("template-id `%D' in declaration of primary template",
74b846e0
MM
1475 declarator);
1476 return decl;
1477 }
1478 }
1479 break;
1480
1481 case tsk_invalid_member_spec:
1482 /* The error has already been reported in
1483 check_specialization_scope. */
1484 return error_mark_node;
1485
1486 case tsk_invalid_expl_inst:
33bd39a2 1487 error ("template parameter list used in explicit instantiation");
74b846e0
MM
1488
1489 /* Fall through. */
1490
1491 case tsk_expl_inst:
fd4de5ff 1492 if (have_def)
33bd39a2 1493 error ("definition provided for explicit instantiation");
74b846e0 1494
fd4de5ff 1495 explicit_instantiation = 1;
74b846e0 1496 break;
fd4de5ff 1497
74b846e0 1498 case tsk_excessive_parms:
33bd39a2 1499 error ("too many template parameter lists in declaration of `%D'",
74b846e0
MM
1500 decl);
1501 return error_mark_node;
75650646 1502
74b846e0
MM
1503 /* Fall through. */
1504 case tsk_expl_spec:
1505 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1506 if (ctype)
1507 member_specialization = 1;
1508 else
1509 specialization = 1;
1510 break;
1511
1512 case tsk_insufficient_parms:
fd4de5ff
MM
1513 if (template_header_count)
1514 {
33bd39a2 1515 error("too few template parameter lists in declaration of `%D'",
74b846e0 1516 decl);
fd4de5ff 1517 return decl;
c6f2ed0d 1518 }
74b846e0
MM
1519 else if (ctype != NULL_TREE
1520 && !TYPE_BEING_DEFINED (ctype)
1521 && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype)
1522 && !is_friend)
1523 {
1524 /* For backwards compatibility, we accept:
fd4de5ff 1525
74b846e0
MM
1526 template <class T> struct S { void f(); };
1527 void S<int>::f() {} // Missing template <>
fd4de5ff 1528
0e339752 1529 That used to be valid C++. */
74b846e0 1530 if (pedantic)
33bd39a2 1531 pedwarn
74b846e0
MM
1532 ("explicit specialization not preceded by `template <>'");
1533 specialization = 1;
1534 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1535 }
1536 break;
1537
1538 case tsk_template:
1539 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
c6f2ed0d 1540 {
fd4de5ff
MM
1541 /* This case handles bogus declarations like template <>
1542 template <class T> void f<int>(); */
75650646 1543
655dc6ee 1544 if (uses_template_parms (declarator))
33bd39a2 1545 error ("partial specialization `%D' of function template",
655dc6ee
JM
1546 declarator);
1547 else
33bd39a2 1548 error ("template-id `%D' in declaration of primary template",
655dc6ee 1549 declarator);
fd4de5ff 1550 return decl;
386b8a85 1551 }
74b846e0
MM
1552
1553 if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1554 /* This is a specialization of a member template, without
1555 specialization the containing class. Something like:
1556
1557 template <class T> struct S {
1558 template <class U> void f (U);
1559 };
1560 template <> template <class U> void S<int>::f(U) {}
1561
1562 That's a specialization -- but of the entire template. */
1563 specialization = 1;
1564 break;
1565
1566 default:
a98facb0 1567 abort ();
75650646 1568 }
386b8a85 1569
670960ac
JM
1570 if (specialization || member_specialization)
1571 {
1572 tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
1573 for (; t; t = TREE_CHAIN (t))
1574 if (TREE_PURPOSE (t))
1575 {
33bd39a2 1576 pedwarn
8251199e 1577 ("default argument specified in explicit specialization");
670960ac
JM
1578 break;
1579 }
f3400fe2 1580 if (current_lang_name == lang_name_c)
33bd39a2 1581 error ("template specialization with C linkage");
670960ac
JM
1582 }
1583
e1467ff2 1584 if (specialization || member_specialization || explicit_instantiation)
75650646
MM
1585 {
1586 tree tmpl = NULL_TREE;
1587 tree targs = NULL_TREE;
75650646
MM
1588
1589 /* Make sure that the declarator is a TEMPLATE_ID_EXPR. */
386b8a85
JM
1590 if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
1591 {
1592 tree fns;
1593
2f54a1db
GB
1594 my_friendly_assert (TREE_CODE (declarator) == IDENTIFIER_NODE, 0);
1595 if (ctype)
386b8a85 1596 fns = dname;
2f54a1db
GB
1597 else
1598 {
1599 /* If there is no class context, the explicit instantiation
1600 must be at namespace scope. */
1601 my_friendly_assert (DECL_NAMESPACE_SCOPE_P (decl), 20030625);
1602
1603 /* Find the namespace binding, using the declaration
1604 context. */
1605 fns = namespace_binding (dname, CP_DECL_CONTEXT (decl));
1606 }
386b8a85 1607
2f54a1db 1608 declarator = lookup_template_function (fns, NULL_TREE);
386b8a85
JM
1609 }
1610
f2e48b67
BK
1611 if (declarator == error_mark_node)
1612 return error_mark_node;
1613
75650646
MM
1614 if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
1615 {
8ec2ac34 1616 if (!explicit_instantiation)
0e339752 1617 /* A specialization in class scope. This is invalid,
6c30752f
MM
1618 but the error will already have been flagged by
1619 check_specialization_scope. */
1620 return error_mark_node;
8ec2ac34 1621 else
b370501f 1622 {
0e339752 1623 /* It's not valid to write an explicit instantiation in
b370501f 1624 class scope, e.g.:
8ec2ac34 1625
b370501f 1626 class C { template void f(); }
8ec2ac34 1627
b370501f
KG
1628 This case is caught by the parser. However, on
1629 something like:
8ec2ac34 1630
b370501f 1631 template class C { void f(); };
8ec2ac34 1632
0e339752 1633 (which is invalid) we can get here. The error will be
b370501f
KG
1634 issued later. */
1635 ;
1636 }
8ec2ac34 1637
e1467ff2 1638 return decl;
75650646
MM
1639 }
1640 else if (ctype != NULL_TREE
1641 && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
1642 IDENTIFIER_NODE))
386b8a85 1643 {
75650646
MM
1644 /* Find the list of functions in ctype that have the same
1645 name as the declared function. */
1646 tree name = TREE_OPERAND (declarator, 0);
03017874
MM
1647 tree fns = NULL_TREE;
1648 int idx;
1649
8ba658ee 1650 if (constructor_name_p (name, ctype))
386b8a85 1651 {
75650646
MM
1652 int is_constructor = DECL_CONSTRUCTOR_P (decl);
1653
1654 if (is_constructor ? !TYPE_HAS_CONSTRUCTOR (ctype)
1655 : !TYPE_HAS_DESTRUCTOR (ctype))
1656 {
1657 /* From [temp.expl.spec]:
e1467ff2 1658
75650646
MM
1659 If such an explicit specialization for the member
1660 of a class template names an implicitly-declared
1661 special member function (clause _special_), the
e1467ff2
MM
1662 program is ill-formed.
1663
1664 Similar language is found in [temp.explicit]. */
33bd39a2 1665 error ("specialization of implicitly-declared special member function");
03017874 1666 return error_mark_node;
75650646 1667 }
386b8a85 1668
42da2fd8 1669 name = is_constructor ? ctor_identifier : dtor_identifier;
75650646 1670 }
42da2fd8 1671
421844e7 1672 if (!DECL_CONV_FN_P (decl))
03017874
MM
1673 {
1674 idx = lookup_fnfields_1 (ctype, name);
1675 if (idx >= 0)
1676 fns = TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (ctype), idx);
1677 }
1678 else
1679 {
1680 tree methods;
1681
1682 /* For a type-conversion operator, we cannot do a
1683 name-based lookup. We might be looking for `operator
1684 int' which will be a specialization of `operator T'.
1685 So, we find *all* the conversion operators, and then
1686 select from them. */
1687 fns = NULL_TREE;
1688
1689 methods = CLASSTYPE_METHOD_VEC (ctype);
1690 if (methods)
5dd236e2
NS
1691 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
1692 idx < TREE_VEC_LENGTH (methods); ++idx)
03017874
MM
1693 {
1694 tree ovl = TREE_VEC_ELT (methods, idx);
1695
1696 if (!ovl || !DECL_CONV_FN_P (OVL_CURRENT (ovl)))
1697 /* There are no more conversion functions. */
1698 break;
1699
1700 /* Glue all these conversion functions together
1701 with those we already have. */
1702 for (; ovl; ovl = OVL_NEXT (ovl))
1703 fns = ovl_cons (OVL_CURRENT (ovl), fns);
1704 }
1705 }
1706
386b8a85
JM
1707 if (fns == NULL_TREE)
1708 {
33bd39a2 1709 error ("no member function `%D' declared in `%T'",
b3f738da 1710 name, ctype);
03017874 1711 return error_mark_node;
386b8a85
JM
1712 }
1713 else
1714 TREE_OPERAND (declarator, 0) = fns;
1715 }
75650646 1716
e1467ff2
MM
1717 /* Figure out what exactly is being specialized at this point.
1718 Note that for an explicit instantiation, even one for a
38e01259 1719 member function, we cannot tell apriori whether the
e1467ff2 1720 instantiation is for a member template, or just a member
36a117a5
MM
1721 function of a template class. Even if a member template is
1722 being instantiated, the member template arguments may be
1723 elided if they can be deduced from the rest of the
1724 declaration. */
e1467ff2
MM
1725 tmpl = determine_specialization (declarator, decl,
1726 &targs,
bf8f3f93 1727 member_specialization);
386b8a85 1728
03017874
MM
1729 if (!tmpl || tmpl == error_mark_node)
1730 /* We couldn't figure out what this declaration was
1731 specializing. */
1732 return error_mark_node;
1733 else
386b8a85 1734 {
25aab5d0 1735 tree gen_tmpl = most_general_template (tmpl);
36a117a5 1736
e1467ff2
MM
1737 if (explicit_instantiation)
1738 {
03d0f4af 1739 /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
25aab5d0
MM
1740 is done by do_decl_instantiation later. */
1741
1742 int arg_depth = TMPL_ARGS_DEPTH (targs);
1743 int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
1744
1745 if (arg_depth > parm_depth)
1746 {
1747 /* If TMPL is not the most general template (for
1748 example, if TMPL is a friend template that is
1749 injected into namespace scope), then there will
dc957d14 1750 be too many levels of TARGS. Remove some of them
25aab5d0
MM
1751 here. */
1752 int i;
1753 tree new_targs;
1754
f31c0a32 1755 new_targs = make_tree_vec (parm_depth);
25aab5d0
MM
1756 for (i = arg_depth - parm_depth; i < arg_depth; ++i)
1757 TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
1758 = TREE_VEC_ELT (targs, i);
1759 targs = new_targs;
1760 }
1761
3e4a3562 1762 return instantiate_template (tmpl, targs, tf_error);
e1467ff2 1763 }
74b846e0 1764
6c07f448
KL
1765 /* If we thought that the DECL was a member function, but it
1766 turns out to be specializing a static member function,
1767 make DECL a static member function as well. We also have
1768 to adjust last_function_parms to avoid confusing
1769 start_function later. */
1770 if (DECL_STATIC_FUNCTION_P (tmpl)
1771 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1772 {
1773 revert_static_member_fn (decl);
1774 last_function_parms = TREE_CHAIN (last_function_parms);
1775 }
1776
f9a7ae04
MM
1777 /* If this is a specialization of a member template of a
1778 template class. In we want to return the TEMPLATE_DECL,
1779 not the specialization of it. */
74b846e0
MM
1780 if (tsk == tsk_template)
1781 {
1782 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
f9a7ae04 1783 DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
b190f239
NS
1784 if (have_def)
1785 {
1786 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
1787 DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl))
1788 = DECL_SOURCE_LOCATION (decl);
1789 }
74b846e0
MM
1790 return tmpl;
1791 }
1792
36a117a5 1793 /* Set up the DECL_TEMPLATE_INFO for DECL. */
e1b3e07d 1794 DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
36a117a5 1795
8afa707f
MM
1796 /* Inherit default function arguments from the template
1797 DECL is specializing. */
1798 copy_default_args_to_explicit_spec (decl);
1799
c750255c
MM
1800 /* This specialization has the same protection as the
1801 template it specializes. */
1802 TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
1803 TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
1804
386b8a85 1805 if (is_friend && !have_def)
36a117a5
MM
1806 /* This is not really a declaration of a specialization.
1807 It's just the name of an instantiation. But, it's not
1808 a request for an instantiation, either. */
fbf1c34b 1809 SET_DECL_IMPLICIT_INSTANTIATION (decl);
08511114
KL
1810 else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
1811 /* This is indeed a specialization. In case of constructors
1812 and destructors, we need in-charge and not-in-charge
1813 versions in V3 ABI. */
1814 clone_function_decl (decl, /*update_method_vec_p=*/0);
75650646 1815
36a117a5
MM
1816 /* Register this specialization so that we can find it
1817 again. */
1818 decl = register_specialization (decl, gen_tmpl, targs);
386b8a85
JM
1819 }
1820 }
75650646 1821
e1467ff2 1822 return decl;
386b8a85 1823}
75650646 1824
39c01e4c
MM
1825/* TYPE is being declared. Verify that the use of template headers
1826 and such is reasonable. Issue error messages if not. */
1827
1828void
3a978d72 1829maybe_check_template_type (tree type)
39c01e4c
MM
1830{
1831 if (template_header_count)
1832 {
1833 /* We are in the scope of some `template <...>' header. */
1834
1835 int context_depth
1836 = template_class_depth_real (TYPE_CONTEXT (type),
1837 /*count_specializations=*/1);
1838
1839 if (template_header_count <= context_depth)
1840 /* This is OK; the template headers are for the context. We
1841 are actually too lenient here; like
1842 check_explicit_specialization we should consider the number
1843 of template types included in the actual declaration. For
1844 example,
1845
1846 template <class T> struct S {
1847 template <class U> template <class V>
1848 struct I {};
1849 };
1850
0e339752 1851 is invalid, but:
39c01e4c
MM
1852
1853 template <class T> struct S {
1854 template <class U> struct I;
1855 };
1856
1857 template <class T> template <class U.
1858 struct S<T>::I {};
1859
1860 is not. */
1861 ;
1862 else if (template_header_count > context_depth + 1)
1863 /* There are two many template parameter lists. */
33bd39a2 1864 error ("too many template parameter lists in declaration of `%T'", type);
39c01e4c
MM
1865 }
1866}
1867
75650646
MM
1868/* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
1869 parameters. These are represented in the same format used for
1870 DECL_TEMPLATE_PARMS. */
1871
3a978d72 1872int comp_template_parms (tree parms1, tree parms2)
75650646
MM
1873{
1874 tree p1;
1875 tree p2;
1876
1877 if (parms1 == parms2)
1878 return 1;
1879
1880 for (p1 = parms1, p2 = parms2;
1881 p1 != NULL_TREE && p2 != NULL_TREE;
1882 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
1883 {
1884 tree t1 = TREE_VALUE (p1);
1885 tree t2 = TREE_VALUE (p2);
1886 int i;
1887
1888 my_friendly_assert (TREE_CODE (t1) == TREE_VEC, 0);
1889 my_friendly_assert (TREE_CODE (t2) == TREE_VEC, 0);
1890
1891 if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
1892 return 0;
1893
1894 for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
1895 {
1896 tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
1897 tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
1898
1899 if (TREE_CODE (parm1) != TREE_CODE (parm2))
1900 return 0;
1901
1902 if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM)
1903 continue;
3bfdc719 1904 else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
75650646
MM
1905 return 0;
1906 }
1907 }
1908
1909 if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
1910 /* One set of parameters has more parameters lists than the
1911 other. */
1912 return 0;
1913
1914 return 1;
1915}
1916
f3400fe2
JM
1917/* Complain if DECL shadows a template parameter.
1918
1919 [temp.local]: A template-parameter shall not be redeclared within its
1920 scope (including nested scopes). */
1921
1922void
3a978d72 1923check_template_shadow (tree decl)
f3400fe2 1924{
8f032717
MM
1925 tree olddecl;
1926
b5d9b9ab
MM
1927 /* If we're not in a template, we can't possibly shadow a template
1928 parameter. */
1929 if (!current_template_parms)
1930 return;
1931
1932 /* Figure out what we're shadowing. */
8f032717
MM
1933 if (TREE_CODE (decl) == OVERLOAD)
1934 decl = OVL_CURRENT (decl);
1935 olddecl = IDENTIFIER_VALUE (DECL_NAME (decl));
f3400fe2 1936
b5d9b9ab
MM
1937 /* If there's no previous binding for this name, we're not shadowing
1938 anything, let alone a template parameter. */
1939 if (!olddecl)
1940 return;
1941
1942 /* If we're not shadowing a template parameter, we're done. Note
1943 that OLDDECL might be an OVERLOAD (or perhaps even an
1944 ERROR_MARK), so we can't just blithely assume it to be a _DECL
1945 node. */
2f939d94 1946 if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
b5d9b9ab
MM
1947 return;
1948
1949 /* We check for decl != olddecl to avoid bogus errors for using a
1950 name inside a class. We check TPFI to avoid duplicate errors for
1951 inline member templates. */
1952 if (decl == olddecl
1953 || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
1954 return;
1955
1956 cp_error_at ("declaration of `%#D'", decl);
1957 cp_error_at (" shadows template parm `%#D'", olddecl);
f3400fe2 1958}
22a7be53 1959
f3400fe2 1960/* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
f84b4be9
JM
1961 ORIG_LEVEL, DECL, and TYPE. */
1962
1963static tree
3a978d72
NN
1964build_template_parm_index (int index,
1965 int level,
1966 int orig_level,
1967 tree decl,
1968 tree type)
f84b4be9
JM
1969{
1970 tree t = make_node (TEMPLATE_PARM_INDEX);
1971 TEMPLATE_PARM_IDX (t) = index;
1972 TEMPLATE_PARM_LEVEL (t) = level;
1973 TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
1974 TEMPLATE_PARM_DECL (t) = decl;
1975 TREE_TYPE (t) = type;
3e4a3562
NS
1976 TREE_CONSTANT (t) = TREE_CONSTANT (decl);
1977 TREE_READONLY (t) = TREE_READONLY (decl);
f84b4be9
JM
1978
1979 return t;
1980}
1981
f84b4be9 1982/* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
93cdc044 1983 TEMPLATE_PARM_LEVEL has been decreased by LEVELS. If such a
f84b4be9
JM
1984 TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
1985 new one is created. */
1986
1987static tree
3a978d72 1988reduce_template_parm_level (tree index, tree type, int levels)
f84b4be9
JM
1989{
1990 if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
1991 || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
93cdc044 1992 != TEMPLATE_PARM_LEVEL (index) - levels))
f84b4be9 1993 {
3e4a3562
NS
1994 tree orig_decl = TEMPLATE_PARM_DECL (index);
1995 tree decl, t;
1996
1997 decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
1998 TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
1999 TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2000 DECL_ARTIFICIAL (decl) = 1;
2001 SET_DECL_TEMPLATE_PARM_P (decl);
2002
2003 t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
93cdc044 2004 TEMPLATE_PARM_LEVEL (index) - levels,
f84b4be9
JM
2005 TEMPLATE_PARM_ORIG_LEVEL (index),
2006 decl, type);
2007 TEMPLATE_PARM_DESCENDANTS (index) = t;
cae40af6
JM
2008
2009 /* Template template parameters need this. */
2010 DECL_TEMPLATE_PARMS (decl)
2011 = DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index));
f84b4be9
JM
2012 }
2013
2014 return TEMPLATE_PARM_DESCENDANTS (index);
2015}
2016
8d08fdba 2017/* Process information from new template parameter NEXT and append it to the
5566b478 2018 LIST being built. */
e92cc029 2019
8d08fdba 2020tree
3a978d72 2021process_template_parm (tree list, tree next)
8d08fdba
MS
2022{
2023 tree parm;
2024 tree decl = 0;
a292b002 2025 tree defval;
5566b478 2026 int is_type, idx;
f84b4be9 2027
8d08fdba
MS
2028 parm = next;
2029 my_friendly_assert (TREE_CODE (parm) == TREE_LIST, 259);
a292b002
MS
2030 defval = TREE_PURPOSE (parm);
2031 parm = TREE_VALUE (parm);
2032 is_type = TREE_PURPOSE (parm) == class_type_node;
5566b478
MS
2033
2034 if (list)
2035 {
2036 tree p = TREE_VALUE (tree_last (list));
2037
1899c3a4 2038 if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
5566b478
MS
2039 idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
2040 else
f84b4be9 2041 idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
5566b478
MS
2042 ++idx;
2043 }
2044 else
2045 idx = 0;
2046
8d08fdba
MS
2047 if (!is_type)
2048 {
a292b002 2049 my_friendly_assert (TREE_CODE (TREE_PURPOSE (parm)) == TREE_LIST, 260);
8d08fdba 2050 /* is a const-param */
a292b002 2051 parm = grokdeclarator (TREE_VALUE (parm), TREE_PURPOSE (parm),
91d231cb 2052 PARM, 0, NULL);
833aa4c4 2053 SET_DECL_TEMPLATE_PARM_P (parm);
d490621d
MM
2054
2055 /* [temp.param]
2056
2057 The top-level cv-qualifiers on the template-parameter are
2058 ignored when determining its type. */
2059 TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
2060
8d08fdba 2061 /* A template parameter is not modifiable. */
3e4a3562 2062 TREE_READONLY (parm) = TREE_CONSTANT (parm) = 1;
11b810f1 2063 if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
db3f4e4e 2064 TREE_TYPE (parm) = void_type_node;
8d08fdba 2065 decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3e4a3562 2066 TREE_CONSTANT (decl) = TREE_READONLY (decl) = 1;
f84b4be9
JM
2067 DECL_INITIAL (parm) = DECL_INITIAL (decl)
2068 = build_template_parm_index (idx, processing_template_decl,
2069 processing_template_decl,
2070 decl, TREE_TYPE (parm));
8d08fdba
MS
2071 }
2072 else
2073 {
73b0fce8
KL
2074 tree t;
2075 parm = TREE_VALUE (parm);
2076
2077 if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
2078 {
33848bb0 2079 t = make_aggr_type (TEMPLATE_TEMPLATE_PARM);
73b0fce8
KL
2080 /* This is for distinguishing between real templates and template
2081 template parameters */
2082 TREE_TYPE (parm) = t;
2083 TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
2084 decl = parm;
2085 }
2086 else
2087 {
33848bb0 2088 t = make_aggr_type (TEMPLATE_TYPE_PARM);
73b0fce8
KL
2089 /* parm is either IDENTIFIER_NODE or NULL_TREE */
2090 decl = build_decl (TYPE_DECL, parm, t);
2091 }
2092
d2e5ee5c
MS
2093 TYPE_NAME (t) = decl;
2094 TYPE_STUB_DECL (t) = decl;
a292b002 2095 parm = decl;
f84b4be9
JM
2096 TEMPLATE_TYPE_PARM_INDEX (t)
2097 = build_template_parm_index (idx, processing_template_decl,
2098 processing_template_decl,
2099 decl, TREE_TYPE (parm));
8d08fdba 2100 }
c727aa5e 2101 DECL_ARTIFICIAL (decl) = 1;
cd9f6678 2102 SET_DECL_TEMPLATE_PARM_P (decl);
8d08fdba 2103 pushdecl (decl);
a292b002 2104 parm = build_tree_list (defval, parm);
8d08fdba
MS
2105 return chainon (list, parm);
2106}
2107
2108/* The end of a template parameter list has been reached. Process the
2109 tree list into a parameter vector, converting each parameter into a more
2110 useful form. Type parameters are saved as IDENTIFIER_NODEs, and others
2111 as PARM_DECLs. */
2112
2113tree
3a978d72 2114end_template_parm_list (tree parms)
8d08fdba 2115{
5566b478 2116 int nparms;
9471d3e2 2117 tree parm, next;
5566b478
MS
2118 tree saved_parmlist = make_tree_vec (list_length (parms));
2119
5566b478 2120 current_template_parms
4890c2f4 2121 = tree_cons (size_int (processing_template_decl),
5566b478 2122 saved_parmlist, current_template_parms);
8d08fdba 2123
9471d3e2
NS
2124 for (parm = parms, nparms = 0; parm; parm = next, nparms++)
2125 {
2126 next = TREE_CHAIN (parm);
2127 TREE_VEC_ELT (saved_parmlist, nparms) = parm;
2128 TREE_CHAIN (parm) = NULL_TREE;
2129 }
a292b002 2130
67ffc812
MM
2131 --processing_template_parmlist;
2132
8d08fdba
MS
2133 return saved_parmlist;
2134}
2135
5566b478
MS
2136/* end_template_decl is called after a template declaration is seen. */
2137
8d08fdba 2138void
3a978d72 2139end_template_decl (void)
8d08fdba 2140{
386b8a85
JM
2141 reset_specialization ();
2142
5156628f 2143 if (! processing_template_decl)
73aad9b9
JM
2144 return;
2145
5566b478 2146 /* This matches the pushlevel in begin_template_parm_list. */
74b846e0 2147 finish_scope ();
8d08fdba 2148
5566b478
MS
2149 --processing_template_decl;
2150 current_template_parms = TREE_CHAIN (current_template_parms);
5566b478 2151}
8d08fdba 2152
36a117a5
MM
2153/* Given a template argument vector containing the template PARMS.
2154 The innermost PARMS are given first. */
9a3b49ac
MS
2155
2156tree
3a978d72 2157current_template_args (void)
5566b478 2158{
36a117a5 2159 tree header;
b370501f 2160 tree args = NULL_TREE;
36a117a5 2161 int length = TMPL_PARMS_DEPTH (current_template_parms);
98c1c668
JM
2162 int l = length;
2163
36a117a5
MM
2164 /* If there is only one level of template parameters, we do not
2165 create a TREE_VEC of TREE_VECs. Instead, we return a single
2166 TREE_VEC containing the arguments. */
2167 if (length > 1)
2168 args = make_tree_vec (length);
2169
2170 for (header = current_template_parms; header; header = TREE_CHAIN (header))
8d08fdba 2171 {
5566b478 2172 tree a = copy_node (TREE_VALUE (header));
36a117a5
MM
2173 int i;
2174
5566b478 2175 TREE_TYPE (a) = NULL_TREE;
36a117a5 2176 for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
5566b478 2177 {
98c1c668
JM
2178 tree t = TREE_VEC_ELT (a, i);
2179
36a117a5 2180 /* T will be a list if we are called from within a
98c1c668
JM
2181 begin/end_template_parm_list pair, but a vector directly
2182 if within a begin/end_member_template_processing pair. */
2183 if (TREE_CODE (t) == TREE_LIST)
2184 {
2185 t = TREE_VALUE (t);
2186
73b0fce8
KL
2187 if (TREE_CODE (t) == TYPE_DECL
2188 || TREE_CODE (t) == TEMPLATE_DECL)
98c1c668
JM
2189 t = TREE_TYPE (t);
2190 else
2191 t = DECL_INITIAL (t);
36a117a5 2192 TREE_VEC_ELT (a, i) = t;
98c1c668 2193 }
5566b478 2194 }
36a117a5
MM
2195
2196 if (length > 1)
2197 TREE_VEC_ELT (args, --l) = a;
2198 else
2199 args = a;
8d08fdba
MS
2200 }
2201
9a3b49ac
MS
2202 return args;
2203}
75650646 2204
e1467ff2
MM
2205/* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
2206 template PARMS. Used by push_template_decl below. */
2207
75650646 2208static tree
3a978d72 2209build_template_decl (tree decl, tree parms)
75650646
MM
2210{
2211 tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
2212 DECL_TEMPLATE_PARMS (tmpl) = parms;
2213 DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
2214 if (DECL_LANG_SPECIFIC (decl))
2215 {
8f032717
MM
2216 DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
2217 DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
c8460010 2218 DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
11f98788 2219 DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
1f6e1acc
AS
2220 DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
2221 if (DECL_OVERLOADED_OPERATOR_P (decl))
2222 SET_OVERLOADED_OPERATOR_CODE (tmpl,
2223 DECL_OVERLOADED_OPERATOR_P (decl));
75650646
MM
2224 }
2225
2226 return tmpl;
2227}
2228
050367a3
MM
2229struct template_parm_data
2230{
6c30752f
MM
2231 /* The level of the template parameters we are currently
2232 processing. */
050367a3 2233 int level;
6c30752f
MM
2234
2235 /* The index of the specialization argument we are currently
2236 processing. */
2237 int current_arg;
2238
2239 /* An array whose size is the number of template parameters. The
838dfd8a 2240 elements are nonzero if the parameter has been used in any one
6c30752f 2241 of the arguments processed so far. */
050367a3 2242 int* parms;
6c30752f
MM
2243
2244 /* An array whose size is the number of template arguments. The
838dfd8a 2245 elements are nonzero if the argument makes use of template
6c30752f
MM
2246 parameters of this level. */
2247 int* arg_uses_template_parms;
050367a3
MM
2248};
2249
2250/* Subroutine of push_template_decl used to see if each template
2251 parameter in a partial specialization is used in the explicit
2252 argument list. If T is of the LEVEL given in DATA (which is
2253 treated as a template_parm_data*), then DATA->PARMS is marked
2254 appropriately. */
2255
2256static int
3a978d72 2257mark_template_parm (tree t, void* data)
050367a3
MM
2258{
2259 int level;
2260 int idx;
2261 struct template_parm_data* tpd = (struct template_parm_data*) data;
2262
2263 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
2264 {
2265 level = TEMPLATE_PARM_LEVEL (t);
2266 idx = TEMPLATE_PARM_IDX (t);
2267 }
2268 else
2269 {
2270 level = TEMPLATE_TYPE_LEVEL (t);
2271 idx = TEMPLATE_TYPE_IDX (t);
2272 }
2273
2274 if (level == tpd->level)
6c30752f
MM
2275 {
2276 tpd->parms[idx] = 1;
2277 tpd->arg_uses_template_parms[tpd->current_arg] = 1;
2278 }
050367a3
MM
2279
2280 /* Return zero so that for_each_template_parm will continue the
2281 traversal of the tree; we want to mark *every* template parm. */
2282 return 0;
2283}
2284
6c30752f
MM
2285/* Process the partial specialization DECL. */
2286
e9659ab0 2287static tree
3a978d72 2288process_partial_specialization (tree decl)
6c30752f
MM
2289{
2290 tree type = TREE_TYPE (decl);
2291 tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
2292 tree specargs = CLASSTYPE_TI_ARGS (type);
f9a7ae04 2293 tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
6c30752f
MM
2294 tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
2295 tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
2296 int nargs = TREE_VEC_LENGTH (inner_args);
2297 int ntparms = TREE_VEC_LENGTH (inner_parms);
2298 int i;
2299 int did_error_intro = 0;
6c30752f
MM
2300 struct template_parm_data tpd;
2301 struct template_parm_data tpd2;
2302
6c30752f
MM
2303 /* We check that each of the template parameters given in the
2304 partial specialization is used in the argument list to the
2305 specialization. For example:
2306
2307 template <class T> struct S;
2308 template <class T> struct S<T*>;
2309
2310 The second declaration is OK because `T*' uses the template
2311 parameter T, whereas
2312
2313 template <class T> struct S<int>;
2314
2315 is no good. Even trickier is:
2316
2317 template <class T>
2318 struct S1
2319 {
2320 template <class U>
2321 struct S2;
2322 template <class U>
2323 struct S2<T>;
2324 };
2325
0e339752 2326 The S2<T> declaration is actually invalid; it is a
6c30752f
MM
2327 full-specialization. Of course,
2328
2329 template <class U>
2330 struct S2<T (*)(U)>;
2331
2332 or some such would have been OK. */
2333 tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
2334 tpd.parms = alloca (sizeof (int) * ntparms);
fad205ff 2335 memset (tpd.parms, 0, sizeof (int) * ntparms);
6c30752f
MM
2336
2337 tpd.arg_uses_template_parms = alloca (sizeof (int) * nargs);
fad205ff 2338 memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
6c30752f
MM
2339 for (i = 0; i < nargs; ++i)
2340 {
2341 tpd.current_arg = i;
2342 for_each_template_parm (TREE_VEC_ELT (inner_args, i),
2343 &mark_template_parm,
4f2c9d7e
MM
2344 &tpd,
2345 NULL);
6c30752f
MM
2346 }
2347 for (i = 0; i < ntparms; ++i)
2348 if (tpd.parms[i] == 0)
2349 {
2350 /* One of the template parms was not used in the
f9a7ae04 2351 specialization. */
6c30752f
MM
2352 if (!did_error_intro)
2353 {
33bd39a2 2354 error ("template parameters not used in partial specialization:");
6c30752f
MM
2355 did_error_intro = 1;
2356 }
2357
33bd39a2 2358 error (" `%D'",
6c30752f
MM
2359 TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
2360 }
2361
2362 /* [temp.class.spec]
2363
2364 The argument list of the specialization shall not be identical to
2365 the implicit argument list of the primary template. */
f9a7ae04
MM
2366 if (comp_template_args
2367 (inner_args,
2368 INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
2369 (maintmpl)))))
33bd39a2 2370 error ("partial specialization `%T' does not specialize any template arguments", type);
6c30752f
MM
2371
2372 /* [temp.class.spec]
2373
2374 A partially specialized non-type argument expression shall not
2375 involve template parameters of the partial specialization except
2376 when the argument expression is a simple identifier.
2377
2378 The type of a template parameter corresponding to a specialized
2379 non-type argument shall not be dependent on a parameter of the
2380 specialization. */
2381 my_friendly_assert (nargs == DECL_NTPARMS (maintmpl), 0);
2382 tpd2.parms = 0;
2383 for (i = 0; i < nargs; ++i)
2384 {
2385 tree arg = TREE_VEC_ELT (inner_args, i);
2386 if (/* These first two lines are the `non-type' bit. */
2f939d94 2387 !TYPE_P (arg)
6c30752f
MM
2388 && TREE_CODE (arg) != TEMPLATE_DECL
2389 /* This next line is the `argument expression is not just a
2390 simple identifier' condition and also the `specialized
2391 non-type argument' bit. */
2392 && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
2393 {
2394 if (tpd.arg_uses_template_parms[i])
33bd39a2 2395 error ("template argument `%E' involves template parameter(s)", arg);
6c30752f
MM
2396 else
2397 {
2398 /* Look at the corresponding template parameter,
2399 marking which template parameters its type depends
2400 upon. */
2401 tree type =
2402 TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (main_inner_parms,
2403 i)));
2404
2405 if (!tpd2.parms)
2406 {
2407 /* We haven't yet initialized TPD2. Do so now. */
2408 tpd2.arg_uses_template_parms
c68b0a84 2409 = alloca (sizeof (int) * nargs);
104bf76a 2410 /* The number of parameters here is the number in the
76a83782
RH
2411 main template, which, as checked in the assertion
2412 above, is NARGS. */
c68b0a84 2413 tpd2.parms = alloca (sizeof (int) * nargs);
6c30752f
MM
2414 tpd2.level =
2415 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
2416 }
2417
104bf76a 2418 /* Mark the template parameters. But this time, we're
6c30752f
MM
2419 looking for the template parameters of the main
2420 template, not in the specialization. */
2421 tpd2.current_arg = i;
2422 tpd2.arg_uses_template_parms[i] = 0;
fad205ff 2423 memset (tpd2.parms, 0, sizeof (int) * nargs);
6c30752f
MM
2424 for_each_template_parm (type,
2425 &mark_template_parm,
4f2c9d7e
MM
2426 &tpd2,
2427 NULL);
6c30752f
MM
2428
2429 if (tpd2.arg_uses_template_parms [i])
2430 {
2431 /* The type depended on some template parameters.
2432 If they are fully specialized in the
2433 specialization, that's OK. */
2434 int j;
2435 for (j = 0; j < nargs; ++j)
2436 if (tpd2.parms[j] != 0
2437 && tpd.arg_uses_template_parms [j])
2438 {
33bd39a2 2439 error ("type `%T' of template argument `%E' depends on template parameter(s)",
6c30752f
MM
2440 type,
2441 arg);
2442 break;
2443 }
2444 }
2445 }
2446 }
2447 }
2448
2449 if (retrieve_specialization (maintmpl, specargs))
2450 /* We've already got this specialization. */
2451 return decl;
2452
d8b64f80 2453 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
e1b3e07d
MM
2454 = tree_cons (inner_args, inner_parms,
2455 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
6c30752f
MM
2456 TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
2457 return decl;
2458}
2459
6ba89f8e
MM
2460/* Check that a template declaration's use of default arguments is not
2461 invalid. Here, PARMS are the template parameters. IS_PRIMARY is
838dfd8a
KH
2462 nonzero if DECL is the thing declared by a primary template.
2463 IS_PARTIAL is nonzero if DECL is a partial specialization. */
6ba89f8e
MM
2464
2465static void
3a978d72 2466check_default_tmpl_args (tree decl, tree parms, int is_primary, int is_partial)
6ba89f8e 2467{
d8e178a0 2468 const char *msg;
66191c20
MM
2469 int last_level_to_check;
2470 tree parm_level;
6ba89f8e
MM
2471
2472 /* [temp.param]
2473
2474 A default template-argument shall not be specified in a
2475 function template declaration or a function template definition, nor
2476 in the template-parameter-list of the definition of a member of a
2477 class template. */
2478
4f1c5b7d 2479 if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
e0942dcd
MM
2480 /* You can't have a function template declaration in a local
2481 scope, nor you can you define a member of a class template in a
2482 local scope. */
2483 return;
2484
6ba89f8e
MM
2485 if (current_class_type
2486 && !TYPE_BEING_DEFINED (current_class_type)
3d7de1fa 2487 && DECL_LANG_SPECIFIC (decl)
5937a6f9
MM
2488 /* If this is either a friend defined in the scope of the class
2489 or a member function. */
6df5158a
NS
2490 && (DECL_FUNCTION_MEMBER_P (decl)
2491 ? same_type_p (DECL_CONTEXT (decl), current_class_type)
2492 : DECL_FRIEND_CONTEXT (decl)
2493 ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
2494 : false)
5937a6f9
MM
2495 /* And, if it was a member function, it really was defined in
2496 the scope of the class. */
6df5158a
NS
2497 && (!DECL_FUNCTION_MEMBER_P (decl)
2498 || DECL_INITIALIZED_IN_CLASS_P (decl)))
6ba89f8e 2499 /* We already checked these parameters when the template was
5937a6f9
MM
2500 declared, so there's no need to do it again now. This function
2501 was defined in class scope, but we're processing it's body now
2502 that the class is complete. */
6ba89f8e
MM
2503 return;
2504
66191c20
MM
2505 /* [temp.param]
2506
2507 If a template-parameter has a default template-argument, all
2508 subsequent template-parameters shall have a default
2509 template-argument supplied. */
2510 for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
2511 {
2512 tree inner_parms = TREE_VALUE (parm_level);
2513 int ntparms = TREE_VEC_LENGTH (inner_parms);
2514 int seen_def_arg_p = 0;
2515 int i;
2516
2517 for (i = 0; i < ntparms; ++i)
2518 {
2519 tree parm = TREE_VEC_ELT (inner_parms, i);
2520 if (TREE_PURPOSE (parm))
2521 seen_def_arg_p = 1;
2522 else if (seen_def_arg_p)
2523 {
33bd39a2 2524 error ("no default argument for `%D'", TREE_VALUE (parm));
66191c20
MM
2525 /* For better subsequent error-recovery, we indicate that
2526 there should have been a default argument. */
2527 TREE_PURPOSE (parm) = error_mark_node;
2528 }
2529 }
2530 }
2531
6ba89f8e
MM
2532 if (TREE_CODE (decl) != TYPE_DECL || is_partial || !is_primary)
2533 /* For an ordinary class template, default template arguments are
2534 allowed at the innermost level, e.g.:
2535 template <class T = int>
2536 struct S {};
2537 but, in a partial specialization, they're not allowed even
2538 there, as we have in [temp.class.spec]:
2539
2540 The template parameter list of a specialization shall not
2541 contain default template argument values.
2542
2543 So, for a partial specialization, or for a function template,
2544 we look at all of them. */
2545 ;
2546 else
2547 /* But, for a primary class template that is not a partial
2548 specialization we look at all template parameters except the
2549 innermost ones. */
2550 parms = TREE_CHAIN (parms);
2551
2552 /* Figure out what error message to issue. */
2553 if (TREE_CODE (decl) == FUNCTION_DECL)
8653a2c3 2554 msg = "default template arguments may not be used in function templates";
6ba89f8e 2555 else if (is_partial)
8653a2c3 2556 msg = "default template arguments may not be used in partial specializations";
6ba89f8e
MM
2557 else
2558 msg = "default argument for template parameter for class enclosing `%D'";
2559
2560 if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
2561 /* If we're inside a class definition, there's no need to
104bf76a 2562 examine the parameters to the class itself. On the one
6ba89f8e 2563 hand, they will be checked when the class is defined, and,
0e339752 2564 on the other, default arguments are valid in things like:
6ba89f8e
MM
2565 template <class T = double>
2566 struct S { template <class U> void f(U); };
2567 Here the default argument for `S' has no bearing on the
2568 declaration of `f'. */
2569 last_level_to_check = template_class_depth (current_class_type) + 1;
2570 else
2571 /* Check everything. */
2572 last_level_to_check = 0;
2573
66191c20
MM
2574 for (parm_level = parms;
2575 parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
2576 parm_level = TREE_CHAIN (parm_level))
6ba89f8e 2577 {
66191c20
MM
2578 tree inner_parms = TREE_VALUE (parm_level);
2579 int i;
2580 int ntparms;
6ba89f8e
MM
2581
2582 ntparms = TREE_VEC_LENGTH (inner_parms);
2583 for (i = 0; i < ntparms; ++i)
2584 if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
2585 {
2586 if (msg)
2587 {
33bd39a2 2588 error (msg, decl);
6ba89f8e
MM
2589 msg = 0;
2590 }
2591
2592 /* Clear out the default argument so that we are not
2593 confused later. */
2594 TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
2595 }
2596
2597 /* At this point, if we're still interested in issuing messages,
2598 they must apply to classes surrounding the object declared. */
2599 if (msg)
2600 msg = "default argument for template parameter for class enclosing `%D'";
2601 }
2602}
2603
5dd236e2
NS
2604/* Worker for push_template_decl_real, called via
2605 for_each_template_parm. DATA is really an int, indicating the
2606 level of the parameters we are interested in. If T is a template
838dfd8a 2607 parameter of that level, return nonzero. */
5dd236e2
NS
2608
2609static int
3a978d72 2610template_parm_this_level_p (tree t, void* data)
5dd236e2 2611{
6e04241f 2612 int this_level = *(int *)data;
5dd236e2
NS
2613 int level;
2614
2615 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
2616 level = TEMPLATE_PARM_LEVEL (t);
2617 else
2618 level = TEMPLATE_TYPE_LEVEL (t);
2619 return level == this_level;
2620}
2621
3ac3d9ea 2622/* Creates a TEMPLATE_DECL for the indicated DECL using the template
f84b4be9
JM
2623 parameters given by current_template_args, or reuses a
2624 previously existing one, if appropriate. Returns the DECL, or an
6757edfe
MM
2625 equivalent one, if it is replaced via a call to duplicate_decls.
2626
838dfd8a 2627 If IS_FRIEND is nonzero, DECL is a friend declaration. */
3ac3d9ea
MM
2628
2629tree
3a978d72 2630push_template_decl_real (tree decl, int is_friend)
9a3b49ac
MS
2631{
2632 tree tmpl;
f84b4be9 2633 tree args;
9a3b49ac 2634 tree info;
f84b4be9
JM
2635 tree ctx;
2636 int primary;
6ba89f8e 2637 int is_partial;
cfe507be 2638 int new_template_p = 0;
6ba89f8e
MM
2639
2640 /* See if this is a partial specialization. */
9188c363 2641 is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
6ba89f8e 2642 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
370af2d5 2643 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
6757edfe
MM
2644
2645 is_friend |= (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl));
f84b4be9
JM
2646
2647 if (is_friend)
2648 /* For a friend, we want the context of the friend function, not
2649 the type of which it is a friend. */
2650 ctx = DECL_CONTEXT (decl);
4f1c5b7d
MM
2651 else if (CP_DECL_CONTEXT (decl)
2652 && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
f84b4be9
JM
2653 /* In the case of a virtual function, we want the class in which
2654 it is defined. */
4f1c5b7d 2655 ctx = CP_DECL_CONTEXT (decl);
f84b4be9 2656 else
dc957d14 2657 /* Otherwise, if we're currently defining some class, the DECL
f84b4be9 2658 is assumed to be a member of the class. */
9188c363 2659 ctx = current_scope ();
f84b4be9 2660
2c73f9f5
ML
2661 if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
2662 ctx = NULL_TREE;
2663
2664 if (!DECL_CONTEXT (decl))
cb0dbb9a 2665 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2c73f9f5 2666
6ba89f8e 2667 /* See if this is a primary template. */
74b846e0 2668 primary = template_parm_scope_p ();
9a3b49ac 2669
83566abf
JM
2670 if (primary)
2671 {
2672 if (current_lang_name == lang_name_c)
33bd39a2 2673 error ("template with C linkage");
4ce3d537
MM
2674 else if (TREE_CODE (decl) == TYPE_DECL
2675 && ANON_AGGRNAME_P (DECL_NAME (decl)))
33bd39a2 2676 error ("template class without a name");
4b0d3cbe
MM
2677 else if (TREE_CODE (decl) == FUNCTION_DECL
2678 && DECL_DESTRUCTOR_P (decl))
2679 {
2680 /* [temp.mem]
2681
2682 A destructor shall not be a member template. */
2683 error ("destructor `%D' declared as member template", decl);
2684 return error_mark_node;
2685 }
2aaf816d
JM
2686 else if ((DECL_IMPLICIT_TYPEDEF_P (decl)
2687 && CLASS_TYPE_P (TREE_TYPE (decl)))
2688 || (TREE_CODE (decl) == VAR_DECL && ctx && CLASS_TYPE_P (ctx))
2689 || TREE_CODE (decl) == FUNCTION_DECL)
2690 /* OK */;
2691 else
33bd39a2 2692 error ("template declaration of `%#D'", decl);
83566abf
JM
2693 }
2694
6ba89f8e
MM
2695 /* Check to see that the rules regarding the use of default
2696 arguments are not being violated. */
2697 check_default_tmpl_args (decl, current_template_parms,
2698 primary, is_partial);
73aad9b9 2699
6ba89f8e
MM
2700 if (is_partial)
2701 return process_partial_specialization (decl);
d32789d8 2702
9a3b49ac
MS
2703 args = current_template_args ();
2704
f84b4be9
JM
2705 if (!ctx
2706 || TREE_CODE (ctx) == FUNCTION_DECL
a723baf1 2707 || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
f84b4be9 2708 || (is_friend && !DECL_TEMPLATE_INFO (decl)))
8d08fdba 2709 {
75650646 2710 if (DECL_LANG_SPECIFIC (decl)
f84b4be9
JM
2711 && DECL_TEMPLATE_INFO (decl)
2712 && DECL_TI_TEMPLATE (decl))
2713 tmpl = DECL_TI_TEMPLATE (decl);
1c10870d
AS
2714 /* If DECL is a TYPE_DECL for a class-template, then there won't
2715 be DECL_LANG_SPECIFIC. The information equivalent to
2716 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead. */
2717 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
2718 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
2719 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
2720 {
2721 /* Since a template declaration already existed for this
2722 class-type, we must be redeclaring it here. Make sure
0e339752 2723 that the redeclaration is valid. */
1c10870d
AS
2724 redeclare_class_template (TREE_TYPE (decl),
2725 current_template_parms);
2726 /* We don't need to create a new TEMPLATE_DECL; just use the
2727 one we already had. */
2728 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
2729 }
f84b4be9 2730 else
786b5245 2731 {
f84b4be9 2732 tmpl = build_template_decl (decl, current_template_parms);
cfe507be
MM
2733 new_template_p = 1;
2734
f84b4be9
JM
2735 if (DECL_LANG_SPECIFIC (decl)
2736 && DECL_TEMPLATE_SPECIALIZATION (decl))
2737 {
2738 /* A specialization of a member template of a template
c6002625 2739 class. */
f84b4be9
JM
2740 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2741 DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
2742 DECL_TEMPLATE_INFO (decl) = NULL_TREE;
2743 }
786b5245 2744 }
8d08fdba
MS
2745 }
2746 else
2747 {
e1a5ccf7 2748 tree a, t, current, parms;
ba4f4e5d 2749 int i;
6633d636 2750
6b9ab5cc
MM
2751 if (TREE_CODE (decl) == TYPE_DECL)
2752 {
ed44da02
MM
2753 if ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (decl)))
2754 || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
2755 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
2756 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
2757 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
6b9ab5cc
MM
2758 else
2759 {
33bd39a2 2760 error ("`%D' does not declare a template type", decl);
6b9ab5cc
MM
2761 return decl;
2762 }
2763 }
f3368a90 2764 else if (!DECL_LANG_SPECIFIC (decl) || !DECL_TEMPLATE_INFO (decl))
c91a56d2 2765 {
33bd39a2 2766 error ("template definition of non-template `%#D'", decl);
3ac3d9ea 2767 return decl;
c91a56d2 2768 }
8d08fdba 2769 else
5566b478 2770 tmpl = DECL_TI_TEMPLATE (decl);
98c1c668 2771
e1a5ccf7
JM
2772 if (is_member_template (tmpl)
2773 && DECL_FUNCTION_TEMPLATE_P (tmpl)
2774 && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
2775 && DECL_TEMPLATE_SPECIALIZATION (decl))
98c1c668 2776 {
e1a5ccf7
JM
2777 tree new_tmpl;
2778
2779 /* The declaration is a specialization of a member
2780 template, declared outside the class. Therefore, the
2781 innermost template arguments will be NULL, so we
2782 replace them with the arguments determined by the
2783 earlier call to check_explicit_specialization. */
2784 args = DECL_TI_ARGS (decl);
2785
2786 new_tmpl
2787 = build_template_decl (decl, current_template_parms);
2788 DECL_TEMPLATE_RESULT (new_tmpl) = decl;
2789 TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
2790 DECL_TI_TEMPLATE (decl) = new_tmpl;
2791 SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
e1b3e07d
MM
2792 DECL_TEMPLATE_INFO (new_tmpl)
2793 = tree_cons (tmpl, args, NULL_TREE);
e1a5ccf7 2794
f9a7ae04
MM
2795 register_specialization (new_tmpl,
2796 most_general_template (tmpl),
2797 args);
e1a5ccf7 2798 return decl;
98c1c668 2799 }
98c1c668 2800
e1a5ccf7 2801 /* Make sure the template headers we got make sense. */
6633d636 2802
e1a5ccf7
JM
2803 parms = DECL_TEMPLATE_PARMS (tmpl);
2804 i = TMPL_PARMS_DEPTH (parms);
2805 if (TMPL_ARGS_DEPTH (args) != i)
98c1c668 2806 {
33bd39a2 2807 error ("expected %d levels of template parms for `%#D', got %d",
e1a5ccf7 2808 i, decl, TMPL_ARGS_DEPTH (args));
98c1c668 2809 }
e1a5ccf7
JM
2810 else
2811 for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
2812 {
2813 a = TMPL_ARGS_LEVEL (args, i);
2814 t = INNERMOST_TEMPLATE_PARMS (parms);
2815
2816 if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
2817 {
2818 if (current == decl)
33bd39a2 2819 error ("got %d template parameters for `%#D'",
e1a5ccf7
JM
2820 TREE_VEC_LENGTH (a), decl);
2821 else
33bd39a2 2822 error ("got %d template parameters for `%#T'",
e1a5ccf7 2823 TREE_VEC_LENGTH (a), current);
33bd39a2 2824 error (" but %d required", TREE_VEC_LENGTH (t));
e1a5ccf7 2825 }
98c1c668 2826
e1a5ccf7
JM
2827 /* Perhaps we should also check that the parms are used in the
2828 appropriate qualifying scopes in the declarator? */
6633d636 2829
e1a5ccf7
JM
2830 if (current == decl)
2831 current = ctx;
2832 else
2833 current = TYPE_CONTEXT (current);
2834 }
5566b478 2835 }
8d08fdba 2836
5566b478
MS
2837 DECL_TEMPLATE_RESULT (tmpl) = decl;
2838 TREE_TYPE (tmpl) = TREE_TYPE (decl);
8d08fdba 2839
36a117a5
MM
2840 /* Push template declarations for global functions and types. Note
2841 that we do not try to push a global template friend declared in a
2842 template class; such a thing may well depend on the template
39c01e4c 2843 parameters of the class. */
cfe507be 2844 if (new_template_p && !ctx
36a117a5 2845 && !(is_friend && template_class_depth (current_class_type) > 0))
2c73f9f5 2846 tmpl = pushdecl_namespace_level (tmpl);
8d08fdba 2847
5566b478 2848 if (primary)
5dd236e2
NS
2849 {
2850 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
2851 if (DECL_CONV_FN_P (tmpl))
2852 {
6e04241f
GS
2853 int depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2854
5dd236e2
NS
2855 /* It is a conversion operator. See if the type converted to
2856 depends on innermost template operands. */
2857
6e04241f
GS
2858 if (for_each_template_parm (TREE_TYPE (TREE_TYPE (tmpl)),
2859 template_parm_this_level_p,
4f2c9d7e
MM
2860 &depth,
2861 NULL))
5dd236e2
NS
2862 DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
2863 }
2864 }
5566b478 2865
e1b3e07d 2866 info = tree_cons (tmpl, args, NULL_TREE);
5566b478 2867
9188c363 2868 if (DECL_IMPLICIT_TYPEDEF_P (decl))
8d08fdba 2869 {
ed44da02
MM
2870 SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
2871 if ((!ctx || TREE_CODE (ctx) != FUNCTION_DECL)
b60ecc04
MM
2872 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
2873 /* Don't change the name if we've already set it up. */
2874 && !IDENTIFIER_TEMPLATE (DECL_NAME (decl)))
75650646 2875 DECL_NAME (decl) = classtype_mangled_name (TREE_TYPE (decl));
51c184be 2876 }
2aaf816d 2877 else if (DECL_LANG_SPECIFIC (decl))
5566b478 2878 DECL_TEMPLATE_INFO (decl) = info;
3ac3d9ea
MM
2879
2880 return DECL_TEMPLATE_RESULT (tmpl);
8d08fdba
MS
2881}
2882
6757edfe 2883tree
3a978d72 2884push_template_decl (tree decl)
6757edfe
MM
2885{
2886 return push_template_decl_real (decl, 0);
2887}
2888
2889/* Called when a class template TYPE is redeclared with the indicated
2890 template PARMS, e.g.:
7fe6899f
MM
2891
2892 template <class T> struct S;
2893 template <class T> struct S {}; */
2894
2895void
3a978d72 2896redeclare_class_template (tree type, tree parms)
7fe6899f 2897{
3d7de1fa 2898 tree tmpl;
6757edfe 2899 tree tmpl_parms;
7fe6899f
MM
2900 int i;
2901
3d7de1fa
MM
2902 if (!TYPE_TEMPLATE_INFO (type))
2903 {
33bd39a2 2904 error ("`%T' is not a template type", type);
3d7de1fa
MM
2905 return;
2906 }
2907
2908 tmpl = TYPE_TI_TEMPLATE (type);
7fe6899f
MM
2909 if (!PRIMARY_TEMPLATE_P (tmpl))
2910 /* The type is nested in some template class. Nothing to worry
2911 about here; there are no new template parameters for the nested
2912 type. */
2913 return;
2914
6757edfe
MM
2915 parms = INNERMOST_TEMPLATE_PARMS (parms);
2916 tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
2917
7fe6899f
MM
2918 if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
2919 {
8251199e 2920 cp_error_at ("previous declaration `%D'", tmpl);
33bd39a2 2921 error ("used %d template parameter%s instead of %d",
7fe6899f
MM
2922 TREE_VEC_LENGTH (tmpl_parms),
2923 TREE_VEC_LENGTH (tmpl_parms) == 1 ? "" : "s",
2924 TREE_VEC_LENGTH (parms));
2925 return;
2926 }
2927
2928 for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
2929 {
2930 tree tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
2931 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
2932 tree tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
2933 tree parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
2934
2935 if (TREE_CODE (tmpl_parm) != TREE_CODE (parm))
2936 {
8251199e 2937 cp_error_at ("template parameter `%#D'", tmpl_parm);
33bd39a2 2938 error ("redeclared here as `%#D'", parm);
7fe6899f
MM
2939 return;
2940 }
2941
2942 if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
2943 {
2944 /* We have in [temp.param]:
2945
2946 A template-parameter may not be given default arguments
2947 by two different declarations in the same scope. */
33bd39a2 2948 error ("redefinition of default argument for `%#D'", parm);
04d6ccbd
KG
2949 error ("%H original definition appeared here",
2950 &DECL_SOURCE_LOCATION (tmpl_parm));
7fe6899f
MM
2951 return;
2952 }
2953
2954 if (parm_default != NULL_TREE)
2955 /* Update the previous template parameters (which are the ones
2956 that will really count) with the new default value. */
2957 TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
7ce74c5e
MM
2958 else if (tmpl_default != NULL_TREE)
2959 /* Update the new parameters, too; they'll be used as the
2960 parameters for any members. */
2961 TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
7fe6899f
MM
2962 }
2963}
75650646 2964
75650646
MM
2965/* Attempt to convert the non-type template parameter EXPR to the
2966 indicated TYPE. If the conversion is successful, return the
dc957d14 2967 converted value. If the conversion is unsuccessful, return
75650646
MM
2968 NULL_TREE if we issued an error message, or error_mark_node if we
2969 did not. We issue error messages for out-and-out bad template
2970 parameters, but not simply because the conversion failed, since we
2971 might be just trying to do argument deduction. By the time this
2972 function is called, neither TYPE nor EXPR may make use of template
2973 parameters. */
2974
2975static tree
3a978d72 2976convert_nontype_argument (tree type, tree expr)
75650646
MM
2977{
2978 tree expr_type = TREE_TYPE (expr);
2979
2980 /* A template-argument for a non-type, non-template
2981 template-parameter shall be one of:
2982
2983 --an integral constant-expression of integral or enumeration
2984 type; or
2985
2986 --the name of a non-type template-parameter; or
2987
2988 --the name of an object or function with external linkage,
2989 including function templates and function template-ids but
86052cc3 2990 excluding non-static class members, expressed as id-expression;
75650646
MM
2991 or
2992
2993 --the address of an object or function with external linkage,
2994 including function templates and function template-ids but
2995 excluding non-static class members, expressed as & id-expression
2996 where the & is optional if the name refers to a function or
2997 array; or
2998
2999 --a pointer to member expressed as described in _expr.unary.op_. */
3000
638dd8fc
MM
3001 /* An integral constant-expression can include const variables or
3002 enumerators. Simplify things by folding them to their values,
3003 unless we're about to bind the declaration to a reference
3004 parameter. */
fc611ce0 3005 if (INTEGRAL_TYPE_P (expr_type)
638dd8fc 3006 && TREE_CODE (type) != REFERENCE_TYPE)
86052cc3
JM
3007 expr = decl_constant_value (expr);
3008
7bf2682f
MM
3009 if (is_overloaded_fn (expr))
3010 /* OK for now. We'll check that it has external linkage later.
3011 Check this first since if expr_type is the unknown_type_node
3012 we would otherwise complain below. */
3013 ;
a5ac359a 3014 else if (TYPE_PTR_TO_MEMBER_P (expr_type))
e08a8f45
MM
3015 {
3016 if (TREE_CODE (expr) != PTRMEM_CST)
3017 goto bad_argument;
3018 }
f3400fe2
JM
3019 else if (TYPE_PTR_P (expr_type)
3020 || TREE_CODE (expr_type) == ARRAY_TYPE
3021 || TREE_CODE (type) == REFERENCE_TYPE
75650646
MM
3022 /* If expr is the address of an overloaded function, we
3023 will get the unknown_type_node at this point. */
3024 || expr_type == unknown_type_node)
3025 {
3026 tree referent;
49bf0d6f
MM
3027 tree e = expr;
3028 STRIP_NOPS (e);
75650646 3029
0dc09a61
MM
3030 if (TREE_CODE (expr_type) == ARRAY_TYPE
3031 || (TREE_CODE (type) == REFERENCE_TYPE
3032 && TREE_CODE (e) != ADDR_EXPR))
f3400fe2
JM
3033 referent = e;
3034 else
75650646 3035 {
f3400fe2
JM
3036 if (TREE_CODE (e) != ADDR_EXPR)
3037 {
3038 bad_argument:
33bd39a2 3039 error ("`%E' is not a valid template argument", expr);
e08a8f45
MM
3040 if (TYPE_PTR_P (expr_type))
3041 {
3042 if (TREE_CODE (TREE_TYPE (expr_type)) == FUNCTION_TYPE)
33bd39a2 3043 error ("it must be the address of a function with external linkage");
e08a8f45 3044 else
33bd39a2 3045 error ("it must be the address of an object with external linkage");
e08a8f45 3046 }
a5ac359a 3047 else if (TYPE_PTR_TO_MEMBER_P (expr_type))
33bd39a2 3048 error ("it must be a pointer-to-member of the form `&X::Y'");
e08a8f45 3049
f3400fe2
JM
3050 return NULL_TREE;
3051 }
3052
3053 referent = TREE_OPERAND (e, 0);
3054 STRIP_NOPS (referent);
75650646
MM
3055 }
3056
75650646
MM
3057 if (TREE_CODE (referent) == STRING_CST)
3058 {
33bd39a2 3059 error ("string literal %E is not a valid template argument because it is the address of an object with static linkage",
75650646 3060 referent);
75650646
MM
3061 return NULL_TREE;
3062 }
3063
279b8466
MM
3064 if (TREE_CODE (referent) == SCOPE_REF)
3065 referent = TREE_OPERAND (referent, 1);
3066
75650646
MM
3067 if (is_overloaded_fn (referent))
3068 /* We'll check that it has external linkage later. */
3069 ;
3070 else if (TREE_CODE (referent) != VAR_DECL)
3071 goto bad_argument;
ad50e811 3072 else if (!DECL_EXTERNAL_LINKAGE_P (referent))
75650646 3073 {
33bd39a2 3074 error ("address of non-extern `%E' cannot be used as template argument", referent);
75650646
MM
3075 return error_mark_node;
3076 }
3077 }
a5ac359a 3078 else if (INTEGRAL_TYPE_P (expr_type) || TYPE_PTR_TO_MEMBER_P (expr_type))
75650646 3079 {
f3400fe2
JM
3080 if (! TREE_CONSTANT (expr))
3081 {
3082 non_constant:
33bd39a2 3083 error ("non-constant `%E' cannot be used as template argument",
f3400fe2
JM
3084 expr);
3085 return NULL_TREE;
3086 }
75650646 3087 }
75650646
MM
3088 else
3089 {
c61dce3a
GDR
3090 if (TYPE_P (expr))
3091 error ("type '%T' cannot be used as a value for a non-type "
3092 "template-parameter", expr);
3093 else if (DECL_P (expr))
3094 error ("invalid use of '%D' as a non-type template-argument", expr);
3095 else
3096 error ("invalid use of '%E' as a non-type template-argument", expr);
3097
75650646
MM
3098 return NULL_TREE;
3099 }
3100
3101 switch (TREE_CODE (type))
3102 {
3103 case INTEGER_TYPE:
3104 case BOOLEAN_TYPE:
3105 case ENUMERAL_TYPE:
3106 /* For a non-type template-parameter of integral or enumeration
3107 type, integral promotions (_conv.prom_) and integral
c6002625 3108 conversions (_conv.integral_) are applied. */
75650646
MM
3109 if (!INTEGRAL_TYPE_P (expr_type))
3110 return error_mark_node;
3111
3112 /* It's safe to call digest_init in this case; we know we're
3113 just converting one integral constant expression to another. */
db02b6b9 3114 expr = digest_init (type, expr, (tree*) 0);
75650646 3115
db02b6b9 3116 if (TREE_CODE (expr) != INTEGER_CST)
f3400fe2 3117 /* Curiously, some TREE_CONSTANT integral expressions do not
db02b6b9
MM
3118 simplify to integer constants. For example, `3 % 0',
3119 remains a TRUNC_MOD_EXPR. */
3120 goto non_constant;
3121
3122 return expr;
a5ac359a
MM
3123
3124 case OFFSET_TYPE:
3125 {
3126 tree e;
3127
3128 /* For a non-type template-parameter of type pointer to data
3129 member, qualification conversions (_conv.qual_) are
3130 applied. */
3131 e = perform_qualification_conversions (type, expr);
3132 if (TREE_CODE (e) == NOP_EXPR)
3133 /* The call to perform_qualification_conversions will
3134 insert a NOP_EXPR over EXPR to do express conversion,
3135 if necessary. But, that will confuse us if we use
3136 this (converted) template parameter to instantiate
3137 another template; then the thing will not look like a
3138 valid template argument. So, just make a new
3139 constant, of the appropriate type. */
3140 e = make_ptrmem_cst (type, PTRMEM_CST_MEMBER (expr));
3141 return e;
3142 }
3143
75650646
MM
3144 case POINTER_TYPE:
3145 {
3146 tree type_pointed_to = TREE_TYPE (type);
3147
a5ac359a 3148 if (TREE_CODE (type_pointed_to) == FUNCTION_TYPE)
75650646
MM
3149 {
3150 /* For a non-type template-parameter of type pointer to
3151 function, only the function-to-pointer conversion
3152 (_conv.func_) is applied. If the template-argument
3153 represents a set of overloaded functions (or a pointer to
3154 such), the matching function is selected from the set
3155 (_over.over_). */
3156 tree fns;
3157 tree fn;
3158
7bf2682f 3159 if (TREE_CODE (expr) == ADDR_EXPR)
75650646
MM
3160 fns = TREE_OPERAND (expr, 0);
3161 else
3162 fns = expr;
3163
c2ea3a40 3164 fn = instantiate_type (type_pointed_to, fns, tf_none);
75650646
MM
3165
3166 if (fn == error_mark_node)
3167 return error_mark_node;
3168
ad50e811 3169 if (!DECL_EXTERNAL_LINKAGE_P (fn))
75650646
MM
3170 {
3171 if (really_overloaded_fn (fns))
3172 return error_mark_node;
3173 else
3174 goto bad_argument;
3175 }
3176
3177 expr = build_unary_op (ADDR_EXPR, fn, 0);
3178
3bfdc719 3179 my_friendly_assert (same_type_p (type, TREE_TYPE (expr)),
75650646
MM
3180 0);
3181 return expr;
3182 }
3183 else
3184 {
3185 /* For a non-type template-parameter of type pointer to
3186 object, qualification conversions (_conv.qual_) and the
3187 array-to-pointer conversion (_conv.array_) are applied.
3188 [Note: In particular, neither the null pointer conversion
3189 (_conv.ptr_) nor the derived-to-base conversion
3190 (_conv.ptr_) are applied. Although 0 is a valid
3191 template-argument for a non-type template-parameter of
3192 integral type, it is not a valid template-argument for a
e1467ff2
MM
3193 non-type template-parameter of pointer type.]
3194
3195 The call to decay_conversion performs the
3196 array-to-pointer conversion, if appropriate. */
3197 expr = decay_conversion (expr);
75650646
MM
3198
3199 if (expr == error_mark_node)
3200 return error_mark_node;
3201 else
3202 return perform_qualification_conversions (type, expr);
3203 }
3204 }
3205 break;
3206
3207 case REFERENCE_TYPE:
3208 {
3209 tree type_referred_to = TREE_TYPE (type);
3210
0dc09a61 3211 /* If this expression already has reference type, get the
3281be05 3212 underlying object. */
0dc09a61
MM
3213 if (TREE_CODE (expr_type) == REFERENCE_TYPE)
3214 {
3281be05
MM
3215 if (TREE_CODE (expr) == NOP_EXPR
3216 && TREE_CODE (TREE_OPERAND (expr, 0)) == ADDR_EXPR)
3217 STRIP_NOPS (expr);
0dc09a61
MM
3218 my_friendly_assert (TREE_CODE (expr) == ADDR_EXPR, 20000604);
3219 expr = TREE_OPERAND (expr, 0);
3220 expr_type = TREE_TYPE (expr);
3221 }
3222
75650646
MM
3223 if (TREE_CODE (type_referred_to) == FUNCTION_TYPE)
3224 {
3225 /* For a non-type template-parameter of type reference to
39c01e4c
MM
3226 function, no conversions apply. If the
3227 template-argument represents a set of overloaded
3228 functions, the matching function is selected from the
3229 set (_over.over_). */
75650646
MM
3230 tree fn;
3231
c2ea3a40 3232 fn = instantiate_type (type_referred_to, expr, tf_none);
e6e174e5
JM
3233
3234 if (fn == error_mark_node)
3235 return error_mark_node;
75650646 3236
ad50e811 3237 if (!DECL_EXTERNAL_LINKAGE_P (fn))
75650646 3238 {
0dc09a61 3239 if (really_overloaded_fn (expr))
75650646
MM
3240 /* Don't issue an error here; we might get a different
3241 function if the overloading had worked out
3242 differently. */
3243 return error_mark_node;
3244 else
3245 goto bad_argument;
3246 }
3247
3bfdc719
MM
3248 my_friendly_assert (same_type_p (type_referred_to,
3249 TREE_TYPE (fn)),
75650646
MM
3250 0);
3251
0dc09a61 3252 expr = fn;
75650646
MM
3253 }
3254 else
3255 {
3256 /* For a non-type template-parameter of type reference to
3257 object, no conversions apply. The type referred to by the
3258 reference may be more cv-qualified than the (otherwise
3259 identical) type of the template-argument. The
3260 template-parameter is bound directly to the
3261 template-argument, which must be an lvalue. */
0dc09a61
MM
3262 if (!same_type_p (TYPE_MAIN_VARIANT (expr_type),
3263 TYPE_MAIN_VARIANT (type_referred_to))
91063b51
MM
3264 || !at_least_as_qualified_p (type_referred_to,
3265 expr_type)
75650646 3266 || !real_lvalue_p (expr))
fd74ca0b 3267 return error_mark_node;
75650646 3268 }
0dc09a61 3269
dffd7eb6 3270 cxx_mark_addressable (expr);
3281be05 3271 return build_nop (type, build_address (expr));
75650646
MM
3272 }
3273 break;
3274
3275 case RECORD_TYPE:
3276 {
db3f4e4e 3277 my_friendly_assert (TYPE_PTRMEMFUNC_P (type), 20010112);
75650646
MM
3278
3279 /* For a non-type template-parameter of type pointer to member
3280 function, no conversions apply. If the template-argument
3281 represents a set of overloaded member functions, the
3282 matching member function is selected from the set
3283 (_over.over_). */
3284
3285 if (!TYPE_PTRMEMFUNC_P (expr_type) &&
3286 expr_type != unknown_type_node)
3287 return error_mark_node;
3288
e08a8f45 3289 if (TREE_CODE (expr) == PTRMEM_CST)
75650646
MM
3290 {
3291 /* A ptr-to-member constant. */
3bfdc719 3292 if (!same_type_p (type, expr_type))
75650646
MM
3293 return error_mark_node;
3294 else
3295 return expr;
3296 }
3297
3298 if (TREE_CODE (expr) != ADDR_EXPR)
3299 return error_mark_node;
3300
c2ea3a40 3301 expr = instantiate_type (type, expr, tf_none);
75650646 3302
d8f8dca1 3303 if (expr == error_mark_node)
75650646
MM
3304 return error_mark_node;
3305
3bfdc719 3306 my_friendly_assert (same_type_p (type, TREE_TYPE (expr)),
75650646
MM
3307 0);
3308 return expr;
3309 }
3310 break;
3311
3312 default:
3313 /* All non-type parameters must have one of these types. */
a98facb0 3314 abort ();
75650646
MM
3315 break;
3316 }
3317
3318 return error_mark_node;
3319}
3320
744fac59
KL
3321/* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
3322 template template parameters. Both PARM_PARMS and ARG_PARMS are
3323 vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
3324 or PARM_DECL.
3325
3326 ARG_PARMS may contain more parameters than PARM_PARMS. If this is
3327 the case, then extra parameters must have default arguments.
3328
3329 Consider the example:
3330 template <class T, class Allocator = allocator> class vector;
3331 template<template <class U> class TT> class C;
3332
3333 C<vector> is a valid instantiation. PARM_PARMS for the above code
3334 contains a TYPE_DECL (for U), ARG_PARMS contains two TYPE_DECLs (for
3335 T and Allocator) and OUTER_ARGS contains the argument that is used to
3336 substitute the TT parameter. */
3337
3338static int
3a978d72
NN
3339coerce_template_template_parms (tree parm_parms,
3340 tree arg_parms,
3341 tsubst_flags_t complain,
3342 tree in_decl,
3343 tree outer_args)
744fac59
KL
3344{
3345 int nparms, nargs, i;
3346 tree parm, arg;
3347
3348 my_friendly_assert (TREE_CODE (parm_parms) == TREE_VEC, 0);
3349 my_friendly_assert (TREE_CODE (arg_parms) == TREE_VEC, 0);
3350
3351 nparms = TREE_VEC_LENGTH (parm_parms);
3352 nargs = TREE_VEC_LENGTH (arg_parms);
3353
3354 /* The rule here is opposite of coerce_template_parms. */
3355 if (nargs < nparms
3356 || (nargs > nparms
3357 && TREE_PURPOSE (TREE_VEC_ELT (arg_parms, nparms)) == NULL_TREE))
3358 return 0;
3359
3360 for (i = 0; i < nparms; ++i)
3361 {
3362 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
3363 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
3364
3365 if (arg == NULL_TREE || arg == error_mark_node
3366 || parm == NULL_TREE || parm == error_mark_node)
3367 return 0;
3368
3369 if (TREE_CODE (arg) != TREE_CODE (parm))
3370 return 0;
3371
3372 switch (TREE_CODE (parm))
3373 {
3374 case TYPE_DECL:
3375 break;
3376
3377 case TEMPLATE_DECL:
3378 /* We encounter instantiations of templates like
3379 template <template <template <class> class> class TT>
3380 class C; */
700466c2
JM
3381 {
3382 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3383 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3384
8c6ab2db
NS
3385 if (!coerce_template_template_parms
3386 (parmparm, argparm, complain, in_decl, outer_args))
700466c2
JM
3387 return 0;
3388 }
3389 break;
744fac59
KL
3390
3391 case PARM_DECL:
3392 /* The tsubst call is used to handle cases such as
3393 template <class T, template <T> class TT> class D;
3394 i.e. the parameter list of TT depends on earlier parameters. */
8c6ab2db
NS
3395 if (!same_type_p
3396 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
3397 TREE_TYPE (arg)))
744fac59
KL
3398 return 0;
3399 break;
3400
3401 default:
a98facb0 3402 abort ();
744fac59
KL
3403 }
3404 }
3405 return 1;
3406}
3407
8b5b8b7c
MM
3408/* Convert the indicated template ARG as necessary to match the
3409 indicated template PARM. Returns the converted ARG, or
c2ea3a40
NS
3410 error_mark_node if the conversion was unsuccessful. Error and
3411 warning messages are issued under control of COMPLAIN. This
3412 conversion is for the Ith parameter in the parameter list. ARGS is
3413 the full set of template arguments deduced so far. */
8b5b8b7c
MM
3414
3415static tree
3a978d72
NN
3416convert_template_argument (tree parm,
3417 tree arg,
3418 tree args,
3419 tsubst_flags_t complain,
3420 int i,
3421 tree in_decl)
8b5b8b7c
MM
3422{
3423 tree val;
3424 tree inner_args;
3425 int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
3426
f9a7ae04 3427 inner_args = INNERMOST_TEMPLATE_ARGS (args);
8b5b8b7c
MM
3428
3429 if (TREE_CODE (arg) == TREE_LIST
a5ac359a 3430 && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
8b5b8b7c
MM
3431 {
3432 /* The template argument was the name of some
3433 member function. That's usually
0e339752 3434 invalid, but static members are OK. In any
8b5b8b7c
MM
3435 case, grab the underlying fields/functions
3436 and issue an error later if required. */
3437 arg = TREE_VALUE (arg);
3438 TREE_TYPE (arg) = unknown_type_node;
3439 }
3440
3441 requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
3442 requires_type = (TREE_CODE (parm) == TYPE_DECL
3443 || requires_tmpl_type);
3444
cbd63935
KL
3445 is_tmpl_type = ((TREE_CODE (arg) == TEMPLATE_DECL
3446 && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
3447 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3448 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
303d1c55 3449
b8c6534b
KL
3450 if (is_tmpl_type
3451 && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3452 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
8b5b8b7c 3453 arg = TYPE_STUB_DECL (arg);
8b5b8b7c 3454
2f939d94 3455 is_type = TYPE_P (arg) || is_tmpl_type;
8b5b8b7c
MM
3456
3457 if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
3458 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
3459 {
33bd39a2 3460 pedwarn ("to refer to a type member of a template parameter, use `typename %E'", arg);
8b5b8b7c
MM
3461
3462 arg = make_typename_type (TREE_OPERAND (arg, 0),
3baa501d 3463 TREE_OPERAND (arg, 1),
c2ea3a40 3464 complain & tf_error);
8b5b8b7c
MM
3465 is_type = 1;
3466 }
3467 if (is_type != requires_type)
3468 {
3469 if (in_decl)
3470 {
c2ea3a40 3471 if (complain & tf_error)
8b5b8b7c 3472 {
33bd39a2 3473 error ("type/value mismatch at argument %d in template parameter list for `%D'",
8b5b8b7c
MM
3474 i + 1, in_decl);
3475 if (is_type)
33bd39a2 3476 error (" expected a constant of type `%T', got `%T'",
8b5b8b7c
MM
3477 TREE_TYPE (parm),
3478 (is_tmpl_type ? DECL_NAME (arg) : arg));
d12a7283
KL
3479 else if (requires_tmpl_type)
3480 error (" expected a class template, got `%E'", arg);
8b5b8b7c 3481 else
33bd39a2 3482 error (" expected a type, got `%E'", arg);
8b5b8b7c
MM
3483 }
3484 }
3485 return error_mark_node;
3486 }
3487 if (is_tmpl_type ^ requires_tmpl_type)
3488 {
c2ea3a40 3489 if (in_decl && (complain & tf_error))
8b5b8b7c 3490 {
33bd39a2 3491 error ("type/value mismatch at argument %d in template parameter list for `%D'",
8b5b8b7c
MM
3492 i + 1, in_decl);
3493 if (is_tmpl_type)
33bd39a2 3494 error (" expected a type, got `%T'", DECL_NAME (arg));
8b5b8b7c 3495 else
33bd39a2 3496 error (" expected a class template, got `%T'", arg);
8b5b8b7c
MM
3497 }
3498 return error_mark_node;
3499 }
3500
3501 if (is_type)
3502 {
3503 if (requires_tmpl_type)
3504 {
b8c6534b
KL
3505 if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
3506 /* The number of argument required is not known yet.
3507 Just accept it for now. */
3508 val = TREE_TYPE (arg);
8b5b8b7c
MM
3509 else
3510 {
b8c6534b
KL
3511 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3512 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3513
3514 if (coerce_template_template_parms (parmparm, argparm,
3515 complain, in_decl,
3516 inner_args))
8b5b8b7c 3517 {
b8c6534b
KL
3518 val = arg;
3519
3520 /* TEMPLATE_TEMPLATE_PARM node is preferred over
3521 TEMPLATE_DECL. */
3522 if (val != error_mark_node
3523 && DECL_TEMPLATE_TEMPLATE_PARM_P (val))
3524 val = TREE_TYPE (val);
8b5b8b7c 3525 }
b8c6534b
KL
3526 else
3527 {
c2ea3a40 3528 if (in_decl && (complain & tf_error))
b8c6534b 3529 {
33bd39a2 3530 error ("type/value mismatch at argument %d in template parameter list for `%D'",
b8c6534b 3531 i + 1, in_decl);
33bd39a2 3532 error (" expected a template of type `%D', got `%D'", parm, arg);
b8c6534b 3533 }
8b5b8b7c 3534
b8c6534b
KL
3535 val = error_mark_node;
3536 }
8b5b8b7c
MM
3537 }
3538 }
3539 else
3e4a3562 3540 val = groktypename (arg);
8b5b8b7c
MM
3541 }
3542 else
3543 {
4393e105 3544 tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
8b5b8b7c 3545
11b810f1 3546 if (invalid_nontype_parm_type_p (t, complain))
db3f4e4e
NS
3547 return error_mark_node;
3548
d768a589 3549 if (!uses_template_parms (arg) && !uses_template_parms (t))
8b5b8b7c
MM
3550 /* We used to call digest_init here. However, digest_init
3551 will report errors, which we don't want when complain
3552 is zero. More importantly, digest_init will try too
3553 hard to convert things: for example, `0' should not be
3554 converted to pointer type at this point according to
3555 the standard. Accepting this is not merely an
3556 extension, since deciding whether or not these
3557 conversions can occur is part of determining which
dc957d14 3558 function template to call, or whether a given explicit
0e339752 3559 argument specification is valid. */
8b5b8b7c
MM
3560 val = convert_nontype_argument (t, arg);
3561 else
3562 val = arg;
3563
3564 if (val == NULL_TREE)
3565 val = error_mark_node;
c2ea3a40 3566 else if (val == error_mark_node && (complain & tf_error))
33bd39a2 3567 error ("could not convert template argument `%E' to `%T'",
8b5b8b7c
MM
3568 arg, t);
3569 }
3570
3571 return val;
3572}
3573
3574/* Convert all template arguments to their appropriate types, and
3575 return a vector containing the innermost resulting template
c2ea3a40 3576 arguments. If any error occurs, return error_mark_node. Error and
3e4a3562 3577 warning messages are issued under control of COMPLAIN.
75650646 3578
838dfd8a 3579 If REQUIRE_ALL_ARGUMENTS is nonzero, all arguments must be
75650646
MM
3580 provided in ARGLIST, or else trailing parameters must have default
3581 values. If REQUIRE_ALL_ARGUMENTS is zero, we will attempt argument
6dfbb909 3582 deduction for any unspecified trailing arguments. */
de575009 3583
8d08fdba 3584static tree
3a978d72
NN
3585coerce_template_parms (tree parms,
3586 tree args,
3587 tree in_decl,
3588 tsubst_flags_t complain,
3589 int require_all_arguments)
8d08fdba 3590{
a292b002 3591 int nparms, nargs, i, lost = 0;
e4a84209 3592 tree inner_args;
8b5b8b7c
MM
3593 tree new_args;
3594 tree new_inner_args;
a292b002 3595
f9a7ae04 3596 inner_args = INNERMOST_TEMPLATE_ARGS (args);
bf12d54d 3597 nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
a292b002
MS
3598 nparms = TREE_VEC_LENGTH (parms);
3599
3600 if (nargs > nparms
3601 || (nargs < nparms
75650646 3602 && require_all_arguments
a292b002 3603 && TREE_PURPOSE (TREE_VEC_ELT (parms, nargs)) == NULL_TREE))
8d08fdba 3604 {
c2ea3a40 3605 if (complain & tf_error)
75650646 3606 {
33bd39a2 3607 error ("wrong number of template arguments (%d, should be %d)",
e4a84209 3608 nargs, nparms);
75650646
MM
3609
3610 if (in_decl)
8251199e 3611 cp_error_at ("provided for `%D'", in_decl);
75650646
MM
3612 }
3613
8d08fdba
MS
3614 return error_mark_node;
3615 }
3616
f31c0a32 3617 new_inner_args = make_tree_vec (nparms);
8b5b8b7c
MM
3618 new_args = add_outermost_template_args (args, new_inner_args);
3619 for (i = 0; i < nparms; i++)
8d08fdba 3620 {
8b5b8b7c
MM
3621 tree arg;
3622 tree parm;
e4a84209 3623
8b5b8b7c
MM
3624 /* Get the Ith template parameter. */
3625 parm = TREE_VEC_ELT (parms, i);
75650646 3626
8b5b8b7c 3627 /* Calculate the Ith argument. */
bf12d54d 3628 if (i < nargs)
8b5b8b7c 3629 arg = TREE_VEC_ELT (inner_args, i);
ffd49b19
NS
3630 else if (require_all_arguments)
3631 /* There must be a default arg in this case. */
a91db711
NS
3632 arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
3633 complain, in_decl);
ffd49b19
NS
3634 else
3635 break;
3636
3637 my_friendly_assert (arg, 20030727);
3638 if (arg == error_mark_node)
3639 error ("template argument %d is invalid", i + 1);
8b5b8b7c
MM
3640 else
3641 arg = convert_template_argument (TREE_VALUE (parm),
3642 arg, new_args, complain, i,
3643 in_decl);
3644
3645 if (arg == error_mark_node)
8d08fdba 3646 lost++;
8b5b8b7c 3647 TREE_VEC_ELT (new_inner_args, i) = arg;
8d08fdba 3648 }
8b5b8b7c 3649
8d08fdba
MS
3650 if (lost)
3651 return error_mark_node;
8b5b8b7c
MM
3652
3653 return new_inner_args;
8d08fdba
MS
3654}
3655
34016c81
JM
3656/* Returns 1 if template args OT and NT are equivalent. */
3657
d8e178a0 3658static int
3a978d72 3659template_args_equal (tree ot, tree nt)
34016c81
JM
3660{
3661 if (nt == ot)
3662 return 1;
74601d7c 3663
34016c81
JM
3664 if (TREE_CODE (nt) == TREE_VEC)
3665 /* For member templates */
74601d7c
KL
3666 return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
3667 else if (TYPE_P (nt))
3668 return TYPE_P (ot) && same_type_p (ot, nt);
3669 else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
3670 return 0;
34016c81 3671 else
c8a209ca 3672 return cp_tree_equal (ot, nt);
34016c81
JM
3673}
3674
3675/* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
f84b4be9
JM
3676 of template arguments. Returns 0 otherwise. */
3677
6757edfe 3678int
3a978d72 3679comp_template_args (tree oldargs, tree newargs)
5566b478
MS
3680{
3681 int i;
3682
386b8a85
JM
3683 if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
3684 return 0;
3685
5566b478
MS
3686 for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
3687 {
3688 tree nt = TREE_VEC_ELT (newargs, i);
3689 tree ot = TREE_VEC_ELT (oldargs, i);
3690
34016c81 3691 if (! template_args_equal (ot, nt))
61a127b3 3692 return 0;
5566b478
MS
3693 }
3694 return 1;
3695}
3696
8d08fdba
MS
3697/* Given class template name and parameter list, produce a user-friendly name
3698 for the instantiation. */
e92cc029 3699
8d08fdba 3700static char *
3a978d72 3701mangle_class_name_for_template (const char* name, tree parms, tree arglist)
8d08fdba
MS
3702{
3703 static struct obstack scratch_obstack;
3704 static char *scratch_firstobj;
3705 int i, nparms;
8d08fdba
MS
3706
3707 if (!scratch_firstobj)
fc378698 3708 gcc_obstack_init (&scratch_obstack);
8d08fdba
MS
3709 else
3710 obstack_free (&scratch_obstack, scratch_firstobj);
fc378698 3711 scratch_firstobj = obstack_alloc (&scratch_obstack, 1);
8d08fdba 3712
18e314ad
GS
3713#define ccat(C) obstack_1grow (&scratch_obstack, (C));
3714#define cat(S) obstack_grow (&scratch_obstack, (S), strlen (S))
8d08fdba
MS
3715
3716 cat (name);
3717 ccat ('<');
3718 nparms = TREE_VEC_LENGTH (parms);
f9a7ae04 3719 arglist = INNERMOST_TEMPLATE_ARGS (arglist);
8d08fdba
MS
3720 my_friendly_assert (nparms == TREE_VEC_LENGTH (arglist), 268);
3721 for (i = 0; i < nparms; i++)
3722 {
a292b002
MS
3723 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
3724 tree arg = TREE_VEC_ELT (arglist, i);
8d08fdba
MS
3725
3726 if (i)
3727 ccat (',');
3728
a292b002 3729 if (TREE_CODE (parm) == TYPE_DECL)
8d08fdba 3730 {
761f0855 3731 cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
8d08fdba
MS
3732 continue;
3733 }
73b0fce8
KL
3734 else if (TREE_CODE (parm) == TEMPLATE_DECL)
3735 {
3736 if (TREE_CODE (arg) == TEMPLATE_DECL)
2c73f9f5
ML
3737 {
3738 /* Already substituted with real template. Just output
3739 the template name here */
cb0dbb9a 3740 tree context = DECL_CONTEXT (arg);
ec4f972f
AS
3741 if (context)
3742 {
3743 /* The template may be defined in a namespace, or
3744 may be a member template. */
3745 my_friendly_assert (TREE_CODE (context) == NAMESPACE_DECL
3746 || CLASS_TYPE_P (context),
3747 980422);
761f0855 3748 cat(decl_as_string (DECL_CONTEXT (arg), TFF_PLAIN_IDENTIFIER));
2c73f9f5
ML
3749 cat("::");
3750 }
3751 cat (IDENTIFIER_POINTER (DECL_NAME (arg)));
3752 }
73b0fce8
KL
3753 else
3754 /* Output the parameter declaration */
761f0855 3755 cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
73b0fce8
KL
3756 continue;
3757 }
8d08fdba
MS
3758 else
3759 my_friendly_assert (TREE_CODE (parm) == PARM_DECL, 269);
3760
8d08fdba
MS
3761 /* No need to check arglist against parmlist here; we did that
3762 in coerce_template_parms, called from lookup_template_class. */
761f0855 3763 cat (expr_as_string (arg, TFF_PLAIN_IDENTIFIER));
8d08fdba
MS
3764 }
3765 {
3766 char *bufp = obstack_next_free (&scratch_obstack);
3767 int offset = 0;
3768 while (bufp[offset - 1] == ' ')
3769 offset--;
3770 obstack_blank_fast (&scratch_obstack, offset);
3771
3772 /* B<C<char> >, not B<C<char>> */
3773 if (bufp[offset - 1] == '>')
3774 ccat (' ');
3775 }
3776 ccat ('>');
3777 ccat ('\0');
3778 return (char *) obstack_base (&scratch_obstack);
8d08fdba
MS
3779}
3780
bd6dd845 3781static tree
3a978d72 3782classtype_mangled_name (tree t)
5566b478
MS
3783{
3784 if (CLASSTYPE_TEMPLATE_INFO (t)
36a117a5
MM
3785 /* Specializations have already had their names set up in
3786 lookup_template_class. */
370af2d5 3787 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
9fbf56f7
MM
3788 {
3789 tree tmpl = most_general_template (CLASSTYPE_TI_TEMPLATE (t));
3790
36a117a5
MM
3791 /* For non-primary templates, the template parameters are
3792 implicit from their surrounding context. */
9fbf56f7
MM
3793 if (PRIMARY_TEMPLATE_P (tmpl))
3794 {
3795 tree name = DECL_NAME (tmpl);
3796 char *mangled_name = mangle_class_name_for_template
3797 (IDENTIFIER_POINTER (name),
3798 DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
3799 CLASSTYPE_TI_ARGS (t));
3800 tree id = get_identifier (mangled_name);
3801 IDENTIFIER_TEMPLATE (id) = name;
3802 return id;
3803 }
5566b478 3804 }
9fbf56f7
MM
3805
3806 return TYPE_IDENTIFIER (t);
5566b478
MS
3807}
3808
3809static void
3a978d72 3810add_pending_template (tree d)
5566b478 3811{
3ae18eaf
JM
3812 tree ti = (TYPE_P (d)
3813 ? CLASSTYPE_TEMPLATE_INFO (d)
3814 : DECL_TEMPLATE_INFO (d));
46ccf50a 3815 tree pt;
3ae18eaf 3816 int level;
e92cc029 3817
824b9a4c 3818 if (TI_PENDING_TEMPLATE_FLAG (ti))
5566b478
MS
3819 return;
3820
3ae18eaf
JM
3821 /* We are called both from instantiate_decl, where we've already had a
3822 tinst_level pushed, and instantiate_template, where we haven't.
3823 Compensate. */
3824 level = !(current_tinst_level && TINST_DECL (current_tinst_level) == d);
3825
3826 if (level)
3827 push_tinst_level (d);
3828
46ccf50a
JM
3829 pt = tree_cons (current_tinst_level, d, NULL_TREE);
3830 if (last_pending_template)
3831 TREE_CHAIN (last_pending_template) = pt;
3832 else
3833 pending_templates = pt;
3834
3835 last_pending_template = pt;
3836
824b9a4c 3837 TI_PENDING_TEMPLATE_FLAG (ti) = 1;
3ae18eaf
JM
3838
3839 if (level)
3840 pop_tinst_level ();
5566b478
MS
3841}
3842
386b8a85 3843
4ba126e4
MM
3844/* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
3845 ARGLIST. Valid choices for FNS are given in the cp-tree.def
3846 documentation for TEMPLATE_ID_EXPR. */
386b8a85
JM
3847
3848tree
3a978d72 3849lookup_template_function (tree fns, tree arglist)
386b8a85 3850{
2c73f9f5 3851 tree type;
050367a3 3852
4ba126e4
MM
3853 if (fns == error_mark_node || arglist == error_mark_node)
3854 return error_mark_node;
3855
bf12d54d 3856 my_friendly_assert (!arglist || TREE_CODE (arglist) == TREE_VEC, 20030726);
ceeae2d1
MM
3857 if (fns == NULL_TREE
3858 || TREE_CODE (fns) == FUNCTION_DECL)
386b8a85 3859 {
33bd39a2 3860 error ("non-template used as template");
386b8a85
JM
3861 return error_mark_node;
3862 }
3863
4ba126e4
MM
3864 my_friendly_assert (TREE_CODE (fns) == TEMPLATE_DECL
3865 || TREE_CODE (fns) == OVERLOAD
50ad9642 3866 || BASELINK_P (fns)
10b1d5e7 3867 || TREE_CODE (fns) == IDENTIFIER_NODE,
4ba126e4
MM
3868 20020730);
3869
50ad9642
MM
3870 if (BASELINK_P (fns))
3871 {
3872 BASELINK_FUNCTIONS (fns) = build (TEMPLATE_ID_EXPR,
3873 unknown_type_node,
3874 BASELINK_FUNCTIONS (fns),
3875 arglist);
3876 return fns;
3877 }
3878
2c73f9f5
ML
3879 type = TREE_TYPE (fns);
3880 if (TREE_CODE (fns) == OVERLOAD || !type)
3881 type = unknown_type_node;
4ba126e4
MM
3882
3883 return build (TEMPLATE_ID_EXPR, type, fns, arglist);
386b8a85
JM
3884}
3885
a2b60a0e
MM
3886/* Within the scope of a template class S<T>, the name S gets bound
3887 (in build_self_reference) to a TYPE_DECL for the class, not a
3888 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
3889 or one of its enclosing classes, and that type is a template,
3890 return the associated TEMPLATE_DECL. Otherwise, the original
3891 DECL is returned. */
3892
a723baf1 3893tree
3a978d72 3894maybe_get_template_decl_from_type_decl (tree decl)
a2b60a0e
MM
3895{
3896 return (decl != NULL_TREE
3897 && TREE_CODE (decl) == TYPE_DECL
3898 && DECL_ARTIFICIAL (decl)
511b60ff 3899 && CLASS_TYPE_P (TREE_TYPE (decl))
a2b60a0e
MM
3900 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
3901 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
3902}
386b8a85 3903
8d08fdba
MS
3904/* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
3905 parameters, find the desired type.
3906
3907 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
8d08fdba
MS
3908
3909 IN_DECL, if non-NULL, is the template declaration we are trying to
75650646
MM
3910 instantiate.
3911
838dfd8a 3912 If ENTERING_SCOPE is nonzero, we are about to enter the scope of
36a117a5 3913 the class we are looking up.
f9c244b8 3914
c2ea3a40 3915 Issue error and warning messages under control of COMPLAIN.
36a117a5 3916
75650646
MM
3917 If the template class is really a local class in a template
3918 function, then the FUNCTION_CONTEXT is the function in which it is
3919 being instantiated. */
e92cc029 3920
8d08fdba 3921tree
3a978d72
NN
3922lookup_template_class (tree d1,
3923 tree arglist,
3924 tree in_decl,
3925 tree context,
3926 int entering_scope,
3927 tsubst_flags_t complain)
8d08fdba 3928{
a703fb38 3929 tree template = NULL_TREE, parmlist;
dbfe2124 3930 tree t;
42eaed49 3931
fd295cb2 3932 timevar_push (TV_NAME_LOOKUP);
42eaed49 3933
5566b478
MS
3934 if (TREE_CODE (d1) == IDENTIFIER_NODE)
3935 {
f181d4ae
MM
3936 if (IDENTIFIER_VALUE (d1)
3937 && DECL_TEMPLATE_TEMPLATE_PARM_P (IDENTIFIER_VALUE (d1)))
3938 template = IDENTIFIER_VALUE (d1);
73b0fce8
KL
3939 else
3940 {
2c73f9f5
ML
3941 if (context)
3942 push_decl_namespace (context);
3ebc5c52
MM
3943 template = lookup_name (d1, /*prefer_type=*/0);
3944 template = maybe_get_template_decl_from_type_decl (template);
2c73f9f5
ML
3945 if (context)
3946 pop_decl_namespace ();
73b0fce8 3947 }
8d019cef
JM
3948 if (template)
3949 context = DECL_CONTEXT (template);
5566b478 3950 }
c91a56d2
MS
3951 else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
3952 {
802dbc34
JM
3953 tree type = TREE_TYPE (d1);
3954
3955 /* If we are declaring a constructor, say A<T>::A<T>, we will get
3956 an implicit typename for the second A. Deal with it. */
3957 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
3958 type = TREE_TYPE (type);
3959
3960 if (CLASSTYPE_TEMPLATE_INFO (type))
f3400fe2 3961 {
802dbc34 3962 template = CLASSTYPE_TI_TEMPLATE (type);
f3400fe2
JM
3963 d1 = DECL_NAME (template);
3964 }
c91a56d2 3965 }
ed44da02 3966 else if (TREE_CODE (d1) == ENUMERAL_TYPE
2f939d94 3967 || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
5566b478 3968 {
ed44da02 3969 template = TYPE_TI_TEMPLATE (d1);
5566b478
MS
3970 d1 = DECL_NAME (template);
3971 }
93cdc044 3972 else if (TREE_CODE (d1) == TEMPLATE_DECL
17aec3eb 3973 && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
93cdc044
JM
3974 {
3975 template = d1;
3976 d1 = DECL_NAME (template);
3977 context = DECL_CONTEXT (template);
3978 }
8d08fdba 3979
8d08fdba 3980 /* With something like `template <class T> class X class X { ... };'
f181d4ae
MM
3981 we could end up with D1 having nothing but an IDENTIFIER_VALUE.
3982 We don't want to do that, but we have to deal with the situation,
3983 so let's give them some syntax errors to chew on instead of a
1bc0793e 3984 crash. Alternatively D1 might not be a template type at all. */
8d08fdba 3985 if (! template)
f3400fe2 3986 {
c2ea3a40 3987 if (complain & tf_error)
33bd39a2 3988 error ("`%T' is not a template", d1);
fd295cb2 3989 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
f3400fe2 3990 }
2c73f9f5 3991
a87b4257 3992 if (TREE_CODE (template) != TEMPLATE_DECL
42eaed49
NS
3993 /* Make sure it's a user visible template, if it was named by
3994 the user. */
3995 || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (template)
3996 && !PRIMARY_TEMPLATE_P (template)))
8d08fdba 3997 {
c2ea3a40 3998 if (complain & tf_error)
f9c244b8 3999 {
33bd39a2 4000 error ("non-template type `%T' used as a template", d1);
f9c244b8
NS
4001 if (in_decl)
4002 cp_error_at ("for template declaration `%D'", in_decl);
4003 }
fd295cb2 4004 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
8d08fdba 4005 }
8d08fdba 4006
42eaed49
NS
4007 complain &= ~tf_user;
4008
73b0fce8
KL
4009 if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
4010 {
4011 /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
4012 template arguments */
4013
1899c3a4 4014 tree parm;
73b0fce8
KL
4015 tree arglist2;
4016
73b0fce8
KL
4017 parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
4018
4f96ff63
KL
4019 /* Consider an example where a template template parameter declared as
4020
4021 template <class T, class U = std::allocator<T> > class TT
4022
4023 The template parameter level of T and U are one level larger than
4024 of TT. To proper process the default argument of U, say when an
4025 instantiation `TT<int>' is seen, we need to build the full
342cea95
KL
4026 arguments containing {int} as the innermost level. Outer levels,
4027 available when not appearing as default template argument, can be
4028 obtained from `current_template_args ()'.
4f96ff63 4029
342cea95
KL
4030 Suppose that TT is later substituted with std::vector. The above
4031 instantiation is `TT<int, std::allocator<T> >' with TT at
4032 level 1, and T at level 2, while the template arguments at level 1
4033 becomes {std::vector} and the inner level 2 is {int}. */
4034
4035 if (current_template_parms)
4f96ff63
KL
4036 arglist = add_to_template_args (current_template_args (), arglist);
4037
f9c244b8
NS
4038 arglist2 = coerce_template_parms (parmlist, arglist, template,
4039 complain, /*require_all_args=*/1);
3e4a3562 4040 if (arglist2 == error_mark_node
544aef8c 4041 || (!uses_template_parms (arglist2)
3e4a3562 4042 && check_instantiated_args (template, arglist2, complain)))
fd295cb2 4043 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
73b0fce8 4044
dac65501 4045 parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
fd295cb2 4046 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
73b0fce8 4047 }
36a117a5 4048 else
8d08fdba 4049 {
36a117a5 4050 tree template_type = TREE_TYPE (template);
7ac7b28f 4051 tree gen_tmpl;
36a117a5
MM
4052 tree type_decl;
4053 tree found = NULL_TREE;
414ea4aa 4054 tree *tp;
36a117a5
MM
4055 int arg_depth;
4056 int parm_depth;
dbfe2124 4057 int is_partial_instantiation;
830bfa74 4058
7ac7b28f
MM
4059 gen_tmpl = most_general_template (template);
4060 parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
36a117a5
MM
4061 parm_depth = TMPL_PARMS_DEPTH (parmlist);
4062 arg_depth = TMPL_ARGS_DEPTH (arglist);
4063
4064 if (arg_depth == 1 && parm_depth > 1)
4065 {
39c01e4c 4066 /* We've been given an incomplete set of template arguments.
36a117a5
MM
4067 For example, given:
4068
4069 template <class T> struct S1 {
4070 template <class U> struct S2 {};
4071 template <class U> struct S2<U*> {};
4072 };
4073
4074 we will be called with an ARGLIST of `U*', but the
4075 TEMPLATE will be `template <class T> template
4076 <class U> struct S1<T>::S2'. We must fill in the missing
4077 arguments. */
7ac7b28f
MM
4078 arglist
4079 = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
4080 arglist);
36a117a5
MM
4081 arg_depth = TMPL_ARGS_DEPTH (arglist);
4082 }
5566b478 4083
41f5d4b1 4084 /* Now we should have enough arguments. */
36a117a5
MM
4085 my_friendly_assert (parm_depth == arg_depth, 0);
4086
7ac7b28f
MM
4087 /* From here on, we're only interested in the most general
4088 template. */
4089 template = gen_tmpl;
4090
36a117a5
MM
4091 /* Calculate the BOUND_ARGS. These will be the args that are
4092 actually tsubst'd into the definition to create the
4093 instantiation. */
4094 if (parm_depth > 1)
830bfa74
MM
4095 {
4096 /* We have multiple levels of arguments to coerce, at once. */
830bfa74 4097 int i;
e4a84209 4098 int saved_depth = TMPL_ARGS_DEPTH (arglist);
36a117a5 4099
f31c0a32 4100 tree bound_args = make_tree_vec (parm_depth);
830bfa74 4101
e4a84209 4102 for (i = saved_depth,
830bfa74 4103 t = DECL_TEMPLATE_PARMS (template);
e4a84209 4104 i > 0 && t != NULL_TREE;
830bfa74 4105 --i, t = TREE_CHAIN (t))
e4a84209 4106 {
ee3071ef
NS
4107 tree a = coerce_template_parms (TREE_VALUE (t),
4108 arglist, template,
4109 complain, /*require_all_args=*/1);
88e98cfe
KL
4110
4111 /* Don't process further if one of the levels fails. */
4112 if (a == error_mark_node)
4113 {
4114 /* Restore the ARGLIST to its full size. */
4115 TREE_VEC_LENGTH (arglist) = saved_depth;
4116 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4117 }
4118
e4a84209
MM
4119 SET_TMPL_ARGS_LEVEL (bound_args, i, a);
4120
4121 /* We temporarily reduce the length of the ARGLIST so
4122 that coerce_template_parms will see only the arguments
4123 corresponding to the template parameters it is
4124 examining. */
4125 TREE_VEC_LENGTH (arglist)--;
4126 }
4127
4128 /* Restore the ARGLIST to its full size. */
4129 TREE_VEC_LENGTH (arglist) = saved_depth;
4130
36a117a5 4131 arglist = bound_args;
830bfa74
MM
4132 }
4133 else
36a117a5
MM
4134 arglist
4135 = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
f9a7ae04 4136 INNERMOST_TEMPLATE_ARGS (arglist),
f9c244b8
NS
4137 template,
4138 complain, /*require_all_args=*/1);
36a117a5 4139
3e4a3562 4140 if (arglist == error_mark_node
544aef8c 4141 || (!uses_template_parms (INNERMOST_TEMPLATE_ARGS (arglist))
3e4a3562
NS
4142 && check_instantiated_args (template,
4143 INNERMOST_TEMPLATE_ARGS (arglist),
4144 complain)))
36a117a5 4145 /* We were unable to bind the arguments. */
fd295cb2 4146 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5566b478 4147
36a117a5
MM
4148 /* In the scope of a template class, explicit references to the
4149 template class refer to the type of the template, not any
4150 instantiation of it. For example, in:
4151
4152 template <class T> class C { void f(C<T>); }
4153
4154 the `C<T>' is just the same as `C'. Outside of the
4155 class, however, such a reference is an instantiation. */
ed44da02 4156 if (comp_template_args (TYPE_TI_ARGS (template_type),
36a117a5
MM
4157 arglist))
4158 {
4159 found = template_type;
4160
4161 if (!entering_scope && PRIMARY_TEMPLATE_P (template))
5566b478 4162 {
36a117a5
MM
4163 tree ctx;
4164
36a117a5
MM
4165 for (ctx = current_class_type;
4166 ctx;
6df5158a
NS
4167 ctx = TYPE_CONTEXT (ctx))
4168 {
4169 if (TREE_CODE (ctx) == NAMESPACE_DECL)
4170 break;
4171 if (same_type_p (ctx, template_type))
4172 goto found_ctx;
4173 }
36a117a5 4174
6df5158a
NS
4175 /* We're not in the scope of the class, so the
4176 TEMPLATE_TYPE is not the type we want after all. */
4177 found = NULL_TREE;
4178 found_ctx:;
5566b478
MS
4179 }
4180 }
36a117a5 4181 if (found)
fd295cb2 4182 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
414ea4aa
MM
4183
4184 for (tp = &DECL_TEMPLATE_INSTANTIATIONS (template);
4185 *tp;
4186 tp = &TREE_CHAIN (*tp))
4187 if (comp_template_args (TREE_PURPOSE (*tp), arglist))
4188 {
4189 found = *tp;
7e7d9517
MM
4190
4191 /* Use the move-to-front heuristic to speed up future
4192 searches. */
414ea4aa
MM
4193 *tp = TREE_CHAIN (*tp);
4194 TREE_CHAIN (found)
4195 = DECL_TEMPLATE_INSTANTIATIONS (template);
4196 DECL_TEMPLATE_INSTANTIATIONS (template) = found;
7e7d9517 4197
fd295cb2 4198 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, TREE_VALUE (found));
414ea4aa 4199 }
5566b478 4200
dbfe2124 4201 /* This type is a "partial instantiation" if any of the template
ab097535 4202 arguments still involve template parameters. Note that we set
486e4077
MM
4203 IS_PARTIAL_INSTANTIATION for partial specializations as
4204 well. */
dbfe2124
MM
4205 is_partial_instantiation = uses_template_parms (arglist);
4206
3ebc5c52
MM
4207 if (!is_partial_instantiation
4208 && !PRIMARY_TEMPLATE_P (template)
4209 && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
4210 {
3ebc5c52
MM
4211 found = xref_tag_from_type (TREE_TYPE (template),
4212 DECL_NAME (template),
4213 /*globalize=*/1);
fd295cb2 4214 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
3ebc5c52 4215 }
3ebc5c52 4216
95ee998c 4217 context = tsubst (DECL_CONTEXT (template), arglist,
c2ea3a40 4218 complain, in_decl);
95ee998c
MM
4219 if (!context)
4220 context = global_namespace;
4221
36a117a5 4222 /* Create the type. */
ed44da02
MM
4223 if (TREE_CODE (template_type) == ENUMERAL_TYPE)
4224 {
dbfe2124 4225 if (!is_partial_instantiation)
92777ce4
NS
4226 {
4227 set_current_access_from_decl (TYPE_NAME (template_type));
4228 t = start_enum (TYPE_IDENTIFIER (template_type));
4229 }
ed44da02 4230 else
dbfe2124 4231 /* We don't want to call start_enum for this type, since
ed44da02
MM
4232 the values for the enumeration constants may involve
4233 template parameters. And, no one should be interested
4234 in the enumeration constants for such a type. */
4235 t = make_node (ENUMERAL_TYPE);
4236 }
4237 else
4238 {
33848bb0 4239 t = make_aggr_type (TREE_CODE (template_type));
ed44da02
MM
4240 CLASSTYPE_DECLARED_CLASS (t)
4241 = CLASSTYPE_DECLARED_CLASS (template_type);
ed44da02 4242 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
f668f160 4243 TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
ae673f14
JM
4244
4245 /* A local class. Make sure the decl gets registered properly. */
4246 if (context == current_function_decl)
4247 pushtag (DECL_NAME (template), t, 0);
ed44da02
MM
4248 }
4249
ae673f14
JM
4250 /* If we called start_enum or pushtag above, this information
4251 will already be set up. */
ed44da02
MM
4252 if (!TYPE_NAME (t))
4253 {
4254 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
36a117a5 4255
9188c363 4256 type_decl = create_implicit_typedef (DECL_NAME (template), t);
ed44da02 4257 DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
9188c363 4258 TYPE_STUB_DECL (t) = type_decl;
3e72ec9a
GDR
4259 DECL_SOURCE_LOCATION (type_decl)
4260 = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
ed44da02
MM
4261 }
4262 else
4263 type_decl = TYPE_NAME (t);
36a117a5 4264
cab7a9a3
KL
4265 TREE_PRIVATE (type_decl)
4266 = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
4267 TREE_PROTECTED (type_decl)
4268 = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
4269
9fbf56f7
MM
4270 /* Set up the template information. We have to figure out which
4271 template is the immediate parent if this is a full
4272 instantiation. */
4273 if (parm_depth == 1 || is_partial_instantiation
4274 || !PRIMARY_TEMPLATE_P (template))
4275 /* This case is easy; there are no member templates involved. */
4276 found = template;
4277 else
4278 {
ab097535
NS
4279 /* This is a full instantiation of a member template. Look
4280 for a partial instantiation of which this is an instance. */
9fbf56f7
MM
4281
4282 for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
4283 found; found = TREE_CHAIN (found))
4284 {
4285 int success;
4286 tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
4287
4288 /* We only want partial instantiations, here, not
4289 specializations or full instantiations. */
370af2d5 4290 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
9fbf56f7
MM
4291 || !uses_template_parms (TREE_VALUE (found)))
4292 continue;
4293
4294 /* Temporarily reduce by one the number of levels in the
4295 ARGLIST and in FOUND so as to avoid comparing the
4296 last set of arguments. */
4297 TREE_VEC_LENGTH (arglist)--;
4298 TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
4299
4300 /* See if the arguments match. If they do, then TMPL is
4301 the partial instantiation we want. */
4302 success = comp_template_args (TREE_PURPOSE (found), arglist);
4303
4304 /* Restore the argument vectors to their full size. */
4305 TREE_VEC_LENGTH (arglist)++;
4306 TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
4307
4308 if (success)
4309 {
4310 found = tmpl;
4311 break;
4312 }
4313 }
4314
4315 if (!found)
ab097535
NS
4316 {
4317 /* There was no partial instantiation. This happens
4318 where C<T> is a member template of A<T> and it's used
4319 in something like
4320
4321 template <typename T> struct B { A<T>::C<int> m; };
4322 B<float>;
4323
4324 Create the partial instantiation.
4325 */
4326 TREE_VEC_LENGTH (arglist)--;
c2ea3a40 4327 found = tsubst (template, arglist, complain, NULL_TREE);
ab097535 4328 TREE_VEC_LENGTH (arglist)++;
ab097535 4329 }
9fbf56f7
MM
4330 }
4331
ab097535 4332 SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
dbfe2124
MM
4333 DECL_TEMPLATE_INSTANTIATIONS (template)
4334 = tree_cons (arglist, t,
4335 DECL_TEMPLATE_INSTANTIATIONS (template));
4336
4337 if (TREE_CODE (t) == ENUMERAL_TYPE
4338 && !is_partial_instantiation)
61a127b3
MM
4339 /* Now that the type has been registered on the instantiations
4340 list, we set up the enumerators. Because the enumeration
4341 constants may involve the enumeration type itself, we make
4342 sure to register the type first, and then create the
4343 constants. That way, doing tsubst_expr for the enumeration
4344 constants won't result in recursive calls here; we'll find
4345 the instantiation and exit above. */
4346 tsubst_enum (template_type, t, arglist);
dbfe2124 4347
36a117a5
MM
4348 /* Reset the name of the type, now that CLASSTYPE_TEMPLATE_INFO
4349 is set up. */
ed44da02
MM
4350 if (TREE_CODE (t) != ENUMERAL_TYPE)
4351 DECL_NAME (type_decl) = classtype_mangled_name (t);
dbfe2124 4352 if (!is_partial_instantiation)
36a117a5 4353 {
50a6dbd7
JM
4354 /* For backwards compatibility; code that uses
4355 -fexternal-templates expects looking up a template to
4356 instantiate it. I think DDD still relies on this.
4357 (jason 8/20/1998) */
ed44da02
MM
4358 if (TREE_CODE (t) != ENUMERAL_TYPE
4359 && flag_external_templates
36a117a5
MM
4360 && CLASSTYPE_INTERFACE_KNOWN (TREE_TYPE (template))
4361 && ! CLASSTYPE_INTERFACE_ONLY (TREE_TYPE (template)))
4362 add_pending_template (t);
4363 }
4364 else
077e7015
MM
4365 /* If the type makes use of template parameters, the
4366 code that generates debugging information will crash. */
4367 DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
8d08fdba 4368
fd295cb2 4369 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
36a117a5 4370 }
fd295cb2 4371 timevar_pop (TV_NAME_LOOKUP);
8d08fdba
MS
4372}
4373\f
8dfaeb63 4374struct pair_fn_data
8d08fdba 4375{
8dfaeb63
MM
4376 tree_fn_t fn;
4377 void *data;
4f2c9d7e 4378 htab_t visited;
8dfaeb63
MM
4379};
4380
4381/* Called from for_each_template_parm via walk_tree. */
581d38d0 4382
8dfaeb63 4383static tree
3a978d72 4384for_each_template_parm_r (tree* tp, int* walk_subtrees, void* d)
8dfaeb63
MM
4385{
4386 tree t = *tp;
4387 struct pair_fn_data *pfd = (struct pair_fn_data *) d;
4388 tree_fn_t fn = pfd->fn;
4389 void *data = pfd->data;
4f2c9d7e
MM
4390 void **slot;
4391
4392 /* If we have already visited this tree, there's no need to walk
4393 subtrees. Otherwise, add it to the visited table. */
4394 slot = htab_find_slot (pfd->visited, *tp, INSERT);
4395 if (*slot)
4396 {
4397 *walk_subtrees = 0;
4398 return NULL_TREE;
4399 }
4400 *slot = *tp;
4401
2f939d94 4402 if (TYPE_P (t)
4f2c9d7e 4403 && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited))
8dfaeb63 4404 return error_mark_node;
581d38d0 4405
8d08fdba
MS
4406 switch (TREE_CODE (t))
4407 {
8d08fdba 4408 case RECORD_TYPE:
9076e292 4409 if (TYPE_PTRMEMFUNC_P (t))
8dfaeb63 4410 break;
ed44da02
MM
4411 /* Fall through. */
4412
8d08fdba 4413 case UNION_TYPE:
ed44da02 4414 case ENUMERAL_TYPE:
8dfaeb63
MM
4415 if (!TYPE_TEMPLATE_INFO (t))
4416 *walk_subtrees = 0;
4417 else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
4f2c9d7e 4418 fn, data, pfd->visited))
8dfaeb63
MM
4419 return error_mark_node;
4420 break;
4421
588c2d1c 4422 case METHOD_TYPE:
8dfaeb63
MM
4423 /* Since we're not going to walk subtrees, we have to do this
4424 explicitly here. */
4f2c9d7e
MM
4425 if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
4426 pfd->visited))
8dfaeb63 4427 return error_mark_node;
4890c2f4 4428 /* Fall through. */
588c2d1c
MM
4429
4430 case FUNCTION_TYPE:
8dfaeb63 4431 /* Check the return type. */
4f2c9d7e 4432 if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
8dfaeb63
MM
4433 return error_mark_node;
4434
588c2d1c
MM
4435 /* Check the parameter types. Since default arguments are not
4436 instantiated until they are needed, the TYPE_ARG_TYPES may
4437 contain expressions that involve template parameters. But,
4438 no-one should be looking at them yet. And, once they're
4439 instantiated, they don't contain template parameters, so
4440 there's no point in looking at them then, either. */
4441 {
4442 tree parm;
4443
4444 for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
4f2c9d7e
MM
4445 if (for_each_template_parm (TREE_VALUE (parm), fn, data,
4446 pfd->visited))
8dfaeb63 4447 return error_mark_node;
5566b478 4448
8dfaeb63
MM
4449 /* Since we've already handled the TYPE_ARG_TYPES, we don't
4450 want walk_tree walking into them itself. */
4451 *walk_subtrees = 0;
4452 }
4453 break;
3ac3d9ea 4454
a723baf1
MM
4455 case TYPEOF_TYPE:
4456 if (for_each_template_parm (TYPE_FIELDS (t), fn, data,
4457 pfd->visited))
4458 return error_mark_node;
4459 break;
4460
8d08fdba 4461 case FUNCTION_DECL:
5566b478 4462 case VAR_DECL:
5566b478 4463 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
4f2c9d7e
MM
4464 && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
4465 pfd->visited))
8dfaeb63
MM
4466 return error_mark_node;
4467 /* Fall through. */
4468
8d08fdba 4469 case PARM_DECL:
a723baf1
MM
4470 case CONST_DECL:
4471 if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
4472 && for_each_template_parm (DECL_INITIAL (t), fn, data,
4473 pfd->visited))
4474 return error_mark_node;
050367a3 4475 if (DECL_CONTEXT (t)
4f2c9d7e
MM
4476 && for_each_template_parm (DECL_CONTEXT (t), fn, data,
4477 pfd->visited))
8dfaeb63
MM
4478 return error_mark_node;
4479 break;
8d08fdba 4480
a1281f45 4481 case BOUND_TEMPLATE_TEMPLATE_PARM:
744fac59 4482 /* Record template parameters such as `T' inside `TT<T>'. */
4f2c9d7e 4483 if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited))
8dfaeb63
MM
4484 return error_mark_node;
4485 /* Fall through. */
4486
a1281f45 4487 case TEMPLATE_TEMPLATE_PARM:
744fac59 4488 case TEMPLATE_TYPE_PARM:
f84b4be9 4489 case TEMPLATE_PARM_INDEX:
8dfaeb63
MM
4490 if (fn && (*fn)(t, data))
4491 return error_mark_node;
4492 else if (!fn)
4493 return error_mark_node;
4494 break;
5156628f 4495
8dfaeb63
MM
4496 case TEMPLATE_DECL:
4497 /* A template template parameter is encountered */
4498 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
4f2c9d7e 4499 && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
8dfaeb63 4500 return error_mark_node;
db5ae43f 4501
8dfaeb63
MM
4502 /* Already substituted template template parameter */
4503 *walk_subtrees = 0;
4504 break;
b8865407 4505
4699c561 4506 case TYPENAME_TYPE:
4f2c9d7e
MM
4507 if (!fn
4508 || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
4509 data, pfd->visited))
8dfaeb63
MM
4510 return error_mark_node;
4511 break;
4699c561 4512
8dfaeb63
MM
4513 case CONSTRUCTOR:
4514 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
4515 && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
4f2c9d7e
MM
4516 (TREE_TYPE (t)), fn, data,
4517 pfd->visited))
8dfaeb63
MM
4518 return error_mark_node;
4519 break;
4520
b8865407
MM
4521 case INDIRECT_REF:
4522 case COMPONENT_REF:
4699c561 4523 /* If there's no type, then this thing must be some expression
b8865407 4524 involving template parameters. */
4699c561 4525 if (!fn && !TREE_TYPE (t))
8dfaeb63
MM
4526 return error_mark_node;
4527 break;
b8865407 4528
42976354
BK
4529 case MODOP_EXPR:
4530 case CAST_EXPR:
4531 case REINTERPRET_CAST_EXPR:
4532 case CONST_CAST_EXPR:
4533 case STATIC_CAST_EXPR:
4534 case DYNAMIC_CAST_EXPR:
42976354
BK
4535 case ARROW_EXPR:
4536 case DOTSTAR_EXPR:
4537 case TYPEID_EXPR:
40242ccf 4538 case PSEUDO_DTOR_EXPR:
b8865407 4539 if (!fn)
8dfaeb63
MM
4540 return error_mark_node;
4541 break;
abff8e06 4542
bd9bb3d2
MM
4543 case BASELINK:
4544 /* If we do not handle this case specially, we end up walking
4545 the BINFO hierarchy, which is circular, and therefore
4546 confuses walk_tree. */
4547 *walk_subtrees = 0;
4f2c9d7e
MM
4548 if (for_each_template_parm (BASELINK_FUNCTIONS (*tp), fn, data,
4549 pfd->visited))
bd9bb3d2
MM
4550 return error_mark_node;
4551 break;
4552
8d08fdba 4553 default:
8dfaeb63 4554 break;
8d08fdba 4555 }
8dfaeb63
MM
4556
4557 /* We didn't find any template parameters we liked. */
4558 return NULL_TREE;
4559}
4560
a1281f45
KL
4561/* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
4562 BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
4563 call FN with the parameter and the DATA.
838dfd8a 4564 If FN returns nonzero, the iteration is terminated, and
8dfaeb63 4565 for_each_template_parm returns 1. Otherwise, the iteration
838dfd8a 4566 continues. If FN never returns a nonzero value, the value
8dfaeb63
MM
4567 returned by for_each_template_parm is 0. If FN is NULL, it is
4568 considered to be the function which always returns 1. */
4569
4570static int
3a978d72 4571for_each_template_parm (tree t, tree_fn_t fn, void* data, htab_t visited)
8dfaeb63
MM
4572{
4573 struct pair_fn_data pfd;
ad2ae3b2 4574 int result;
8dfaeb63
MM
4575
4576 /* Set up. */
4577 pfd.fn = fn;
4578 pfd.data = data;
4579
4890c2f4
MM
4580 /* Walk the tree. (Conceptually, we would like to walk without
4581 duplicates, but for_each_template_parm_r recursively calls
4582 for_each_template_parm, so we would need to reorganize a fair
4f2c9d7e
MM
4583 bit to use walk_tree_without_duplicates, so we keep our own
4584 visited list.) */
4585 if (visited)
4586 pfd.visited = visited;
4587 else
4588 pfd.visited = htab_create (37, htab_hash_pointer, htab_eq_pointer,
4589 NULL);
ad2ae3b2
MM
4590 result = walk_tree (&t,
4591 for_each_template_parm_r,
4592 &pfd,
4593 NULL) != NULL_TREE;
4594
4595 /* Clean up. */
4596 if (!visited)
4597 htab_delete (pfd.visited);
4598
4599 return result;
8d08fdba
MS
4600}
4601
050367a3 4602int
3a978d72 4603uses_template_parms (tree t)
050367a3 4604{
4f2c9d7e 4605 return for_each_template_parm (t, 0, 0, NULL);
050367a3
MM
4606}
4607
27fafc8d 4608static int tinst_depth;
e9f32eb5 4609extern int max_tinst_depth;
5566b478 4610#ifdef GATHER_STATISTICS
27fafc8d 4611int depth_reached;
5566b478 4612#endif
8dfaeb63
MM
4613static int tinst_level_tick;
4614static int last_template_error_tick;
8d08fdba 4615
3ae18eaf
JM
4616/* We're starting to instantiate D; record the template instantiation context
4617 for diagnostics and to restore it later. */
4618
742a37d5 4619int
3a978d72 4620push_tinst_level (tree d)
8d08fdba 4621{
3ae18eaf 4622 tree new;
8d08fdba 4623
7215f9a0
MS
4624 if (tinst_depth >= max_tinst_depth)
4625 {
8adf5b5e
JM
4626 /* If the instantiation in question still has unbound template parms,
4627 we don't really care if we can't instantiate it, so just return.
4628 This happens with base instantiation for implicit `typename'. */
4629 if (uses_template_parms (d))
4630 return 0;
4631
1139b3d8 4632 last_template_error_tick = tinst_level_tick;
33bd39a2 4633 error ("template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN to increase the maximum) instantiating `%D'",
b4f4233d 4634 max_tinst_depth, d);
5566b478 4635
cb753e49 4636 print_instantiation_context ();
5566b478 4637
7215f9a0
MS
4638 return 0;
4639 }
4640
d479d37f 4641 new = build_expr_wfl (d, input_filename, input_line, 0);
3ae18eaf 4642 TREE_CHAIN (new) = current_tinst_level;
8d08fdba 4643 current_tinst_level = new;
5566b478 4644
7215f9a0 4645 ++tinst_depth;
5566b478
MS
4646#ifdef GATHER_STATISTICS
4647 if (tinst_depth > depth_reached)
4648 depth_reached = tinst_depth;
4649#endif
4650
27fafc8d 4651 ++tinst_level_tick;
7215f9a0 4652 return 1;
8d08fdba
MS
4653}
4654
3ae18eaf
JM
4655/* We're done instantiating this template; return to the instantiation
4656 context. */
4657
8d08fdba 4658void
3a978d72 4659pop_tinst_level (void)
8d08fdba 4660{
3ae18eaf 4661 tree old = current_tinst_level;
8d08fdba 4662
ae58fa02
MM
4663 /* Restore the filename and line number stashed away when we started
4664 this instantiation. */
d479d37f 4665 input_line = TINST_LINE (old);
3ae18eaf 4666 input_filename = TINST_FILE (old);
5f2c99c4 4667 extract_interface_info ();
ae58fa02 4668
3ae18eaf 4669 current_tinst_level = TREE_CHAIN (old);
7215f9a0 4670 --tinst_depth;
27fafc8d 4671 ++tinst_level_tick;
8d08fdba
MS
4672}
4673
3ae18eaf
JM
4674/* We're instantiating a deferred template; restore the template
4675 instantiation context in which the instantiation was requested, which
4676 is one step out from LEVEL. */
4677
4678static void
3a978d72 4679reopen_tinst_level (tree level)
3ae18eaf
JM
4680{
4681 tree t;
4682
4683 tinst_depth = 0;
4684 for (t = level; t; t = TREE_CHAIN (t))
4685 ++tinst_depth;
4686
4687 current_tinst_level = level;
4688 pop_tinst_level ();
4689}
4690
4691/* Return the outermost template instantiation context, for use with
4692 -falt-external-templates. */
4693
4694tree
3a978d72 4695tinst_for_decl (void)
8d08fdba 4696{
3ae18eaf 4697 tree p = current_tinst_level;
8d08fdba
MS
4698
4699 if (p)
3ae18eaf 4700 for (; TREE_CHAIN (p) ; p = TREE_CHAIN (p))
8d08fdba
MS
4701 ;
4702 return p;
4703}
4704
f84b4be9
JM
4705/* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
4706 vector of template arguments, as for tsubst.
4707
dc957d14 4708 Returns an appropriate tsubst'd friend declaration. */
f84b4be9
JM
4709
4710static tree
3a978d72 4711tsubst_friend_function (tree decl, tree args)
f84b4be9
JM
4712{
4713 tree new_friend;
82a98427 4714 location_t saved_loc = input_location;
27fafc8d 4715
82a98427 4716 input_location = DECL_SOURCE_LOCATION (decl);
27fafc8d 4717
f84b4be9
JM
4718 if (TREE_CODE (decl) == FUNCTION_DECL
4719 && DECL_TEMPLATE_INSTANTIATION (decl)
4720 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
4721 /* This was a friend declared with an explicit template
4722 argument list, e.g.:
4723
4724 friend void f<>(T);
4725
4726 to indicate that f was a template instantiation, not a new
4727 function declaration. Now, we have to figure out what
4728 instantiation of what template. */
4729 {
76e57b45 4730 tree template_id, arglist, fns;
f84b4be9
JM
4731 tree new_args;
4732 tree tmpl;
ed2fa432 4733 tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
76e57b45
NS
4734
4735 /* Friend functions are looked up in the containing namespace scope.
4736 We must enter that scope, to avoid finding member functions of the
4737 current cless with same name. */
4738 push_nested_namespace (ns);
4739 fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
c2ea3a40 4740 tf_error | tf_warning, NULL_TREE);
76e57b45
NS
4741 pop_nested_namespace (ns);
4742 arglist = tsubst (DECL_TI_ARGS (decl), args,
c2ea3a40 4743 tf_error | tf_warning, NULL_TREE);
76e57b45
NS
4744 template_id = lookup_template_function (fns, arglist);
4745
c2ea3a40 4746 new_friend = tsubst (decl, args, tf_error | tf_warning, NULL_TREE);
36a117a5
MM
4747 tmpl = determine_specialization (template_id, new_friend,
4748 &new_args,
bf8f3f93 4749 /*need_member_template=*/0);
3e4a3562 4750 new_friend = instantiate_template (tmpl, new_args, tf_error);
27fafc8d 4751 goto done;
f84b4be9 4752 }
36a117a5 4753
c2ea3a40 4754 new_friend = tsubst (decl, args, tf_error | tf_warning, NULL_TREE);
f84b4be9 4755
36a117a5 4756 /* The NEW_FRIEND will look like an instantiation, to the
f84b4be9
JM
4757 compiler, but is not an instantiation from the point of view of
4758 the language. For example, we might have had:
4759
4760 template <class T> struct S {
4761 template <class U> friend void f(T, U);
4762 };
4763
4764 Then, in S<int>, template <class U> void f(int, U) is not an
4765 instantiation of anything. */
4766 DECL_USE_TEMPLATE (new_friend) = 0;
4767 if (TREE_CODE (decl) == TEMPLATE_DECL)
655dc6ee
JM
4768 {
4769 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
4770 DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
4771 = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
4772 }
36a117a5 4773
92643fea
MM
4774 /* The mangled name for the NEW_FRIEND is incorrect. The function
4775 is not a template instantiation and should not be mangled like
4776 one. Therefore, we forget the mangling here; we'll recompute it
4777 later if we need it. */
36a117a5
MM
4778 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
4779 {
19e7881c 4780 SET_DECL_RTL (new_friend, NULL_RTX);
92643fea 4781 SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
36a117a5
MM
4782 }
4783
6eb3bb27 4784 if (DECL_NAMESPACE_SCOPE_P (new_friend))
f84b4be9 4785 {
36a117a5 4786 tree old_decl;
fbf1c34b
MM
4787 tree new_friend_template_info;
4788 tree new_friend_result_template_info;
92da7074 4789 tree ns;
fbf1c34b
MM
4790 int new_friend_is_defn;
4791
4792 /* We must save some information from NEW_FRIEND before calling
4793 duplicate decls since that function will free NEW_FRIEND if
4794 possible. */
4795 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
f84b4be9 4796 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
fbf1c34b
MM
4797 {
4798 /* This declaration is a `primary' template. */
4799 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
4800
4801 new_friend_is_defn
17aec3eb 4802 = DECL_INITIAL (DECL_TEMPLATE_RESULT (new_friend)) != NULL_TREE;
fbf1c34b 4803 new_friend_result_template_info
17aec3eb 4804 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
fbf1c34b
MM
4805 }
4806 else
4807 {
4808 new_friend_is_defn = DECL_INITIAL (new_friend) != NULL_TREE;
4809 new_friend_result_template_info = NULL_TREE;
4810 }
36a117a5 4811
1c227897
MM
4812 /* Inside pushdecl_namespace_level, we will push into the
4813 current namespace. However, the friend function should go
c6002625 4814 into the namespace of the template. */
92da7074
ML
4815 ns = decl_namespace_context (new_friend);
4816 push_nested_namespace (ns);
36a117a5 4817 old_decl = pushdecl_namespace_level (new_friend);
92da7074 4818 pop_nested_namespace (ns);
36a117a5
MM
4819
4820 if (old_decl != new_friend)
4821 {
4822 /* This new friend declaration matched an existing
4823 declaration. For example, given:
4824
4825 template <class T> void f(T);
4826 template <class U> class C {
4827 template <class T> friend void f(T) {}
4828 };
4829
4830 the friend declaration actually provides the definition
4831 of `f', once C has been instantiated for some type. So,
4832 old_decl will be the out-of-class template declaration,
4833 while new_friend is the in-class definition.
4834
4835 But, if `f' was called before this point, the
4836 instantiation of `f' will have DECL_TI_ARGS corresponding
4837 to `T' but not to `U', references to which might appear
4838 in the definition of `f'. Previously, the most general
4839 template for an instantiation of `f' was the out-of-class
4840 version; now it is the in-class version. Therefore, we
4841 run through all specialization of `f', adding to their
4842 DECL_TI_ARGS appropriately. In particular, they need a
4843 new set of outer arguments, corresponding to the
4844 arguments for this class instantiation.
4845
4846 The same situation can arise with something like this:
4847
4848 friend void f(int);
4849 template <class T> class C {
4850 friend void f(T) {}
4851 };
4852
4853 when `C<int>' is instantiated. Now, `f(int)' is defined
4854 in the class. */
4855
fbf1c34b
MM
4856 if (!new_friend_is_defn)
4857 /* On the other hand, if the in-class declaration does
4858 *not* provide a definition, then we don't want to alter
4859 existing definitions. We can just leave everything
4860 alone. */
36a117a5 4861 ;
fbf1c34b 4862 else
36a117a5 4863 {
fbf1c34b
MM
4864 /* Overwrite whatever template info was there before, if
4865 any, with the new template information pertaining to
4866 the declaration. */
4867 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
4868
4869 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
8d83f792
MM
4870 reregister_specialization (new_friend,
4871 most_general_template (old_decl),
4872 old_decl);
fbf1c34b 4873 else
36a117a5 4874 {
fbf1c34b
MM
4875 tree t;
4876 tree new_friend_args;
4877
17aec3eb 4878 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
fbf1c34b
MM
4879 = new_friend_result_template_info;
4880
4881 new_friend_args = TI_ARGS (new_friend_template_info);
4882 for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
4883 t != NULL_TREE;
4884 t = TREE_CHAIN (t))
4885 {
4886 tree spec = TREE_VALUE (t);
36a117a5 4887
fbf1c34b
MM
4888 DECL_TI_ARGS (spec)
4889 = add_outermost_template_args (new_friend_args,
4890 DECL_TI_ARGS (spec));
fbf1c34b
MM
4891 }
4892
4893 /* Now, since specializations are always supposed to
4894 hang off of the most general template, we must move
4895 them. */
4896 t = most_general_template (old_decl);
4897 if (t != old_decl)
4898 {
4899 DECL_TEMPLATE_SPECIALIZATIONS (t)
4900 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
4901 DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
4902 DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
4903 }
36a117a5
MM
4904 }
4905 }
4906
4907 /* The information from NEW_FRIEND has been merged into OLD_DECL
4908 by duplicate_decls. */
4909 new_friend = old_decl;
4910 }
f84b4be9 4911 }
d0f062fb 4912 else if (COMPLETE_TYPE_P (DECL_CONTEXT (new_friend)))
f84b4be9
JM
4913 {
4914 /* Check to see that the declaration is really present, and,
4915 possibly obtain an improved declaration. */
4916 tree fn = check_classfn (DECL_CONTEXT (new_friend),
4917 new_friend);
4918
4919 if (fn)
4920 new_friend = fn;
4921 }
4922
27fafc8d 4923 done:
82a98427 4924 input_location = saved_loc;
f84b4be9
JM
4925 return new_friend;
4926}
4927
1aed5355
MM
4928/* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
4929 template arguments, as for tsubst.
6757edfe 4930
dc957d14 4931 Returns an appropriate tsubst'd friend type or error_mark_node on
4b054b80 4932 failure. */
6757edfe
MM
4933
4934static tree
3a978d72 4935tsubst_friend_class (tree friend_tmpl, tree args)
6757edfe 4936{
1aed5355 4937 tree friend_type;
25aab5d0 4938 tree tmpl;
3e0ec82f 4939 tree context;
6757edfe 4940
3e0ec82f
MM
4941 context = DECL_CONTEXT (friend_tmpl);
4942
4943 if (context)
77adef84 4944 {
3e0ec82f
MM
4945 if (TREE_CODE (context) == NAMESPACE_DECL)
4946 push_nested_namespace (context);
4947 else
14d22dd6 4948 push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
3e0ec82f 4949 }
25aab5d0 4950
3e0ec82f
MM
4951 /* First, we look for a class template. */
4952 tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/0);
25aab5d0 4953
3e0ec82f
MM
4954 /* But, if we don't find one, it might be because we're in a
4955 situation like this:
77adef84 4956
3e0ec82f
MM
4957 template <class T>
4958 struct S {
4959 template <class U>
4960 friend struct S;
4961 };
4962
4963 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
4964 for `S<int>', not the TEMPLATE_DECL. */
4965 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
4966 {
4967 tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/1);
4968 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
25aab5d0 4969 }
6757edfe 4970
25aab5d0 4971 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6757edfe
MM
4972 {
4973 /* The friend template has already been declared. Just
36a117a5
MM
4974 check to see that the declarations match, and install any new
4975 default parameters. We must tsubst the default parameters,
4976 of course. We only need the innermost template parameters
4977 because that is all that redeclare_class_template will look
4978 at. */
3e0ec82f
MM
4979 if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
4980 > TMPL_ARGS_DEPTH (args))
4981 {
4982 tree parms;
4983 parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
4984 args, tf_error | tf_warning);
4985 redeclare_class_template (TREE_TYPE (tmpl), parms);
4986 }
4987
6757edfe
MM
4988 friend_type = TREE_TYPE (tmpl);
4989 }
4990 else
4991 {
4992 /* The friend template has not already been declared. In this
4993 case, the instantiation of the template class will cause the
4994 injection of this template into the global scope. */
c2ea3a40 4995 tmpl = tsubst (friend_tmpl, args, tf_error | tf_warning, NULL_TREE);
6757edfe
MM
4996
4997 /* The new TMPL is not an instantiation of anything, so we
4998 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
4999 the new type because that is supposed to be the corresponding
5000 template decl, i.e., TMPL. */
5001 DECL_USE_TEMPLATE (tmpl) = 0;
5002 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
5003 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
5004
5005 /* Inject this template into the global scope. */
5006 friend_type = TREE_TYPE (pushdecl_top_level (tmpl));
5007 }
5008
3e0ec82f
MM
5009 if (context)
5010 {
5011 if (TREE_CODE (context) == NAMESPACE_DECL)
5012 pop_nested_namespace (context);
5013 else
5014 pop_nested_class ();
5015 }
5016
6757edfe
MM
5017 return friend_type;
5018}
f84b4be9 5019
17f29637
KL
5020/* Returns zero if TYPE cannot be completed later due to circularity.
5021 Otherwise returns one. */
5022
d5372501 5023static int
3a978d72 5024can_complete_type_without_circularity (tree type)
17f29637
KL
5025{
5026 if (type == NULL_TREE || type == error_mark_node)
5027 return 0;
5028 else if (COMPLETE_TYPE_P (type))
5029 return 1;
5030 else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
5031 return can_complete_type_without_circularity (TREE_TYPE (type));
8c6ab2db
NS
5032 else if (CLASS_TYPE_P (type)
5033 && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
17f29637
KL
5034 return 0;
5035 else
5036 return 1;
5037}
5038
8d08fdba 5039tree
3a978d72 5040instantiate_class_template (tree type)
8d08fdba 5041{
7088fca9 5042 tree template, args, pattern, t, member;
36a117a5 5043 tree typedecl;
dbbf88d1
NS
5044 tree pbinfo;
5045
5566b478 5046 if (type == error_mark_node)
8d08fdba
MS
5047 return error_mark_node;
5048
ca099ac8
MM
5049 if (TYPE_BEING_DEFINED (type)
5050 || COMPLETE_TYPE_P (type)
5051 || dependent_type_p (type))
5566b478
MS
5052 return type;
5053
6bdb985f 5054 /* Figure out which template is being instantiated. */
36a117a5 5055 template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
5566b478 5056 my_friendly_assert (TREE_CODE (template) == TEMPLATE_DECL, 279);
73aad9b9 5057
6bdb985f
MM
5058 /* Figure out which arguments are being used to do the
5059 instantiation. */
5060 args = CLASSTYPE_TI_ARGS (type);
4c571114
MM
5061
5062 /* Determine what specialization of the original template to
5063 instantiate. */
8fbc5ae7
MM
5064 t = most_specialized_class (template, args);
5065 if (t == error_mark_node)
73aad9b9 5066 {
8fbc5ae7
MM
5067 const char *str = "candidates are:";
5068 error ("ambiguous class template instantiation for `%#T'", type);
5069 for (t = DECL_TEMPLATE_SPECIALIZATIONS (template); t;
5070 t = TREE_CHAIN (t))
73aad9b9 5071 {
8c6ab2db 5072 if (get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args))
73aad9b9 5073 {
8fbc5ae7
MM
5074 cp_error_at ("%s %+#T", str, TREE_TYPE (t));
5075 str = " ";
73aad9b9
JM
5076 }
5077 }
8fbc5ae7
MM
5078 TYPE_BEING_DEFINED (type) = 1;
5079 return error_mark_node;
73aad9b9 5080 }
6bdb985f
MM
5081
5082 if (t)
73aad9b9
JM
5083 pattern = TREE_TYPE (t);
5084 else
5085 pattern = TREE_TYPE (template);
5566b478 5086
4c571114
MM
5087 /* If the template we're instantiating is incomplete, then clearly
5088 there's nothing we can do. */
d0f062fb 5089 if (!COMPLETE_TYPE_P (pattern))
f31c0a32 5090 return type;
5566b478 5091
4c571114
MM
5092 /* If we've recursively instantiated too many templates, stop. */
5093 if (! push_tinst_level (type))
f31c0a32 5094 return type;
4c571114
MM
5095
5096 /* Now we're really doing the instantiation. Mark the type as in
5097 the process of being defined. */
5098 TYPE_BEING_DEFINED (type) = 1;
5099
78757caa
KL
5100 /* We may be in the middle of deferred access check. Disable
5101 it now. */
5102 push_deferring_access_checks (dk_no_deferred);
5103
4c571114 5104 maybe_push_to_top_level (uses_template_parms (type));
4c571114 5105
73aad9b9 5106 if (t)
36a117a5 5107 {
27631dae 5108 /* This TYPE is actually an instantiation of a partial
36a117a5
MM
5109 specialization. We replace the innermost set of ARGS with
5110 the arguments appropriate for substitution. For example,
5111 given:
5112
5113 template <class T> struct S {};
5114 template <class T> struct S<T*> {};
5115
5116 and supposing that we are instantiating S<int*>, ARGS will
5117 present be {int*} but we need {int}. */
5118 tree inner_args
5119 = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t),
5120 args);
5121
5122 /* If there were multiple levels in ARGS, replacing the
5123 innermost level would alter CLASSTYPE_TI_ARGS, which we don't
5124 want, so we make a copy first. */
5125 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
5126 {
5127 args = copy_node (args);
5128 SET_TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args), inner_args);
5129 }
5130 else
5131 args = inner_args;
5132 }
8d019cef 5133
5566b478
MS
5134 if (flag_external_templates)
5135 {
5136 if (flag_alt_external_templates)
5137 {
5138 CLASSTYPE_INTERFACE_ONLY (type) = interface_only;
5139 SET_CLASSTYPE_INTERFACE_UNKNOWN_X (type, interface_unknown);
5566b478
MS
5140 }
5141 else
5142 {
5143 CLASSTYPE_INTERFACE_ONLY (type) = CLASSTYPE_INTERFACE_ONLY (pattern);
5144 SET_CLASSTYPE_INTERFACE_UNKNOWN_X
5145 (type, CLASSTYPE_INTERFACE_UNKNOWN (pattern));
5566b478
MS
5146 }
5147 }
5148 else
8d08fdba 5149 {
5566b478 5150 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
8d08fdba
MS
5151 }
5152
68ea098a
NS
5153 /* Set the input location to the template definition. This is needed
5154 if tsubsting causes an error. */
5155 input_location = DECL_SOURCE_LOCATION (TYPE_NAME (pattern));
5156
f7da6097
MS
5157 TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
5158 TYPE_HAS_DESTRUCTOR (type) = TYPE_HAS_DESTRUCTOR (pattern);
834c6dff
MM
5159 TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
5160 TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
f7da6097 5161 TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
f7da6097
MS
5162 TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
5163 TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
5164 TYPE_HAS_ABSTRACT_ASSIGN_REF (type) = TYPE_HAS_ABSTRACT_ASSIGN_REF (pattern);
5165 TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
5166 TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
f7da6097
MS
5167 TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
5168 TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
4c6b7393
MM
5169 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (type)
5170 = TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (pattern);
f7da6097
MS
5171 TYPE_USES_MULTIPLE_INHERITANCE (type)
5172 = TYPE_USES_MULTIPLE_INHERITANCE (pattern);
5173 TYPE_USES_VIRTUAL_BASECLASSES (type)
5174 = TYPE_USES_VIRTUAL_BASECLASSES (pattern);
5175 TYPE_PACKED (type) = TYPE_PACKED (pattern);
5176 TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
11cf4d18 5177 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
eff71ab0 5178 TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
6bdb8141
JM
5179 if (ANON_AGGR_TYPE_P (pattern))
5180 SET_ANON_AGGR_TYPE_P (type);
f7da6097 5181
dbbf88d1
NS
5182 pbinfo = TYPE_BINFO (pattern);
5183
5184 if (BINFO_BASETYPES (pbinfo))
3fd71a52
MM
5185 {
5186 tree base_list = NULL_TREE;
dbbf88d1
NS
5187 tree pbases = BINFO_BASETYPES (pbinfo);
5188 tree paccesses = BINFO_BASEACCESSES (pbinfo);
a2507277 5189 tree context = TYPE_CONTEXT (type);
3fd71a52 5190 int i;
5566b478 5191
a2507277
NS
5192 /* We must enter the scope containing the type, as that is where
5193 the accessibility of types named in dependent bases are
5194 looked up from. */
5195 push_scope (context ? context : global_namespace);
5196
3fd71a52
MM
5197 /* Substitute into each of the bases to determine the actual
5198 basetypes. */
5199 for (i = 0; i < TREE_VEC_LENGTH (pbases); ++i)
5200 {
5201 tree base;
5202 tree access;
5203 tree pbase;
5566b478 5204
3fd71a52 5205 pbase = TREE_VEC_ELT (pbases, i);
dbbf88d1 5206 access = TREE_VEC_ELT (paccesses, i);
711734a9 5207
dc957d14 5208 /* Substitute to figure out the base class. */
c2ea3a40 5209 base = tsubst (BINFO_TYPE (pbase), args, tf_error, NULL_TREE);
3fd71a52
MM
5210 if (base == error_mark_node)
5211 continue;
dbbf88d1 5212
3fd71a52 5213 base_list = tree_cons (access, base, base_list);
dbbf88d1 5214 TREE_VIA_VIRTUAL (base_list) = TREE_VIA_VIRTUAL (pbase);
3fd71a52 5215 }
dfbcd65a 5216
3fd71a52
MM
5217 /* The list is now in reverse order; correct that. */
5218 base_list = nreverse (base_list);
5219
5220 /* Now call xref_basetypes to set up all the base-class
5221 information. */
da15dae6 5222 xref_basetypes (type, base_list);
a2507277
NS
5223
5224 pop_scope (context ? context : global_namespace);
3fd71a52 5225 }
5566b478 5226
b74a0560
MM
5227 /* Now that our base classes are set up, enter the scope of the
5228 class, so that name lookups into base classes, etc. will work
dc957d14 5229 correctly. This is precisely analogous to what we do in
b74a0560
MM
5230 begin_class_definition when defining an ordinary non-template
5231 class. */
29370796 5232 pushclass (type);
b74a0560 5233
7088fca9 5234 /* Now members are processed in the order of declaration. */
8c6ab2db
NS
5235 for (member = CLASSTYPE_DECL_LIST (pattern);
5236 member; member = TREE_CHAIN (member))
8d08fdba 5237 {
7088fca9 5238 tree t = TREE_VALUE (member);
5566b478 5239
7088fca9 5240 if (TREE_PURPOSE (member))
ed44da02 5241 {
7088fca9
KL
5242 if (TYPE_P (t))
5243 {
5e0c54e5 5244 /* Build new CLASSTYPE_NESTED_UTDS. */
8d08fdba 5245
7088fca9
KL
5246 tree tag = t;
5247 tree name = TYPE_IDENTIFIER (tag);
5248 tree newtag;
ae58fa02 5249
7088fca9
KL
5250 newtag = tsubst (tag, args, tf_error, NULL_TREE);
5251 my_friendly_assert (newtag != error_mark_node, 20010206);
5252 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
5253 {
5254 if (TYPE_LANG_SPECIFIC (tag) && CLASSTYPE_IS_TEMPLATE (tag))
5255 /* Unfortunately, lookup_template_class sets
5256 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
5257 instantiation (i.e., for the type of a member template
5258 class nested within a template class.) This behavior is
5259 required for maybe_process_partial_specialization to work
5260 correctly, but is not accurate in this case; the TAG is not
5261 an instantiation of anything. (The corresponding
5262 TEMPLATE_DECL is an instantiation, but the TYPE is not.) */
5263 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
5264
5265 /* Now, we call pushtag to put this NEWTAG into the scope of
5266 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
5267 pushtag calling push_template_decl. We don't have to do
5268 this for enums because it will already have been done in
5269 tsubst_enum. */
5270 if (name)
5271 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
5272 pushtag (name, newtag, /*globalize=*/0);
5273 }
5274 }
5275 else if (TREE_CODE (t) == FUNCTION_DECL
5276 || DECL_FUNCTION_TEMPLATE_P (t))
5277 {
5278 /* Build new TYPE_METHODS. */
ae58fa02 5279
7088fca9
KL
5280 tree r = tsubst (t, args, tf_error, NULL_TREE);
5281 set_current_access_from_decl (r);
5282 grok_special_member_properties (r);
5283 finish_member_declaration (r);
5284 }
5285 else
5286 {
5287 /* Build new TYPE_FIELDS. */
fa8d6e85 5288
7088fca9
KL
5289 if (TREE_CODE (t) != CONST_DECL)
5290 {
5291 tree r;
fa8d6e85 5292
d479d37f
NS
5293 /* The the file and line for this declaration, to
5294 assist in error message reporting. Since we
5295 called push_tinst_level above, we don't need to
5296 restore these. */
82a98427 5297 input_location = DECL_SOURCE_LOCATION (t);
fa8d6e85 5298
fb5ce3c9
NS
5299 if (TREE_CODE (t) == TEMPLATE_DECL)
5300 processing_template_decl++;
7088fca9 5301 r = tsubst (t, args, tf_error | tf_warning, NULL_TREE);
fb5ce3c9
NS
5302 if (TREE_CODE (t) == TEMPLATE_DECL)
5303 processing_template_decl--;
7088fca9
KL
5304 if (TREE_CODE (r) == VAR_DECL)
5305 {
5306 tree init;
17f29637 5307
7088fca9
KL
5308 if (DECL_INITIALIZED_IN_CLASS_P (r))
5309 init = tsubst_expr (DECL_INITIAL (t), args,
5310 tf_error | tf_warning, NULL_TREE);
5311 else
5312 init = NULL_TREE;
8d08fdba 5313
8c6ab2db
NS
5314 finish_static_data_member_decl
5315 (r, init, /*asmspec_tree=*/NULL_TREE, /*flags=*/0);
8d08fdba 5316
7088fca9
KL
5317 if (DECL_INITIALIZED_IN_CLASS_P (r))
5318 check_static_variable_definition (r, TREE_TYPE (r));
5319 }
5320 else if (TREE_CODE (r) == FIELD_DECL)
5321 {
5322 /* Determine whether R has a valid type and can be
5323 completed later. If R is invalid, then it is
5324 replaced by error_mark_node so that it will not be
5325 added to TYPE_FIELDS. */
5326 tree rtype = TREE_TYPE (r);
5327 if (can_complete_type_without_circularity (rtype))
5328 complete_type (rtype);
5329
5330 if (!COMPLETE_TYPE_P (rtype))
5331 {
5332 cxx_incomplete_type_error (r, rtype);
5333 r = error_mark_node;
5334 }
5335 }
5566b478 5336
7088fca9
KL
5337 /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
5338 such a thing will already have been added to the field
5339 list by tsubst_enum in finish_member_declaration in the
5e0c54e5 5340 CLASSTYPE_NESTED_UTDS case above. */
7088fca9
KL
5341 if (!(TREE_CODE (r) == TYPE_DECL
5342 && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
43b26a01 5343 && DECL_ARTIFICIAL (r)))
7088fca9
KL
5344 {
5345 set_current_access_from_decl (r);
5346 finish_member_declaration (r);
5347 }
5348 }
5349 }
61fc8c9e 5350 }
7088fca9
KL
5351 else
5352 {
5353 if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
5354 {
5355 /* Build new CLASSTYPE_FRIEND_CLASSES. */
5356
5357 tree friend_type = t;
5358 tree new_friend_type;
1aed5355 5359
7088fca9
KL
5360 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5361 new_friend_type = tsubst_friend_class (friend_type, args);
5362 else if (uses_template_parms (friend_type))
5363 new_friend_type = tsubst (friend_type, args,
5364 tf_error | tf_warning, NULL_TREE);
c4d0910c
KL
5365 else if (CLASSTYPE_USE_TEMPLATE (friend_type))
5366 new_friend_type = friend_type;
7088fca9
KL
5367 else
5368 {
5369 tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
5370
5371 /* The call to xref_tag_from_type does injection for friend
5372 classes. */
5373 push_nested_namespace (ns);
5374 new_friend_type =
5375 xref_tag_from_type (friend_type, NULL_TREE, 1);
5376 pop_nested_namespace (ns);
5377 }
1aed5355 5378
7088fca9
KL
5379 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5380 /* Trick make_friend_class into realizing that the friend
5381 we're adding is a template, not an ordinary class. It's
5382 important that we use make_friend_class since it will
5383 perform some error-checking and output cross-reference
5384 information. */
5385 ++processing_template_decl;
fc378698 5386
7088fca9 5387 if (new_friend_type != error_mark_node)
19db77ce
KL
5388 make_friend_class (type, new_friend_type,
5389 /*complain=*/false);
fc378698 5390
7088fca9
KL
5391 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5392 --processing_template_decl;
5393 }
5394 else
963142fc 5395 /* Build new DECL_FRIENDLIST. */
19db77ce
KL
5396 add_friend (type, tsubst_friend_function (t, args),
5397 /*complain=*/false);
7088fca9
KL
5398 }
5399 }
5566b478 5400
61a127b3
MM
5401 /* Set the file and line number information to whatever is given for
5402 the class itself. This puts error messages involving generated
5403 implicit functions at a predictable point, and the same point
5404 that would be used for non-template classes. */
7088fca9 5405 typedecl = TYPE_MAIN_DECL (type);
82a98427
NS
5406 input_location = DECL_SOURCE_LOCATION (typedecl);
5407
61a127b3 5408 unreverse_member_declarations (type);
9f33663b 5409 finish_struct_1 (type);
e92cc029 5410
5524676d
JM
5411 /* Clear this now so repo_template_used is happy. */
5412 TYPE_BEING_DEFINED (type) = 0;
2604412d 5413 repo_template_used (type);
8d08fdba 5414
9188c363
MM
5415 /* Now that the class is complete, instantiate default arguments for
5416 any member functions. We don't do this earlier because the
5417 default arguments may reference members of the class. */
5418 if (!PRIMARY_TEMPLATE_P (template))
5419 for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
5420 if (TREE_CODE (t) == FUNCTION_DECL
dc957d14 5421 /* Implicitly generated member functions will not have template
9188c363
MM
5422 information; they are not instantiations, but instead are
5423 created "fresh" for each instantiation. */
5424 && DECL_TEMPLATE_INFO (t))
5425 tsubst_default_arguments (t);
5426
b74a0560 5427 popclass ();
5566b478 5428 pop_from_top_level ();
78757caa 5429 pop_deferring_access_checks ();
5566b478
MS
5430 pop_tinst_level ();
5431
9aad8f83
MA
5432 if (TYPE_CONTAINS_VPTR_P (type))
5433 keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
5434
5566b478 5435 return type;
8d08fdba
MS
5436}
5437
00d3396f 5438static tree
a91db711 5439tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
00d3396f 5440{
a91db711
NS
5441 tree r;
5442
5443 if (!t)
5444 r = t;
5445 else if (TYPE_P (t))
5446 r = tsubst (t, args, complain, in_decl);
5447 else
00d3396f 5448 {
a91db711
NS
5449 r = tsubst_expr (t, args, complain, in_decl);
5450
5451 if (!uses_template_parms (r))
4d5f3fbd 5452 {
a91db711
NS
5453 /* Sometimes, one of the args was an expression involving a
5454 template constant parameter, like N - 1. Now that we've
5455 tsubst'd, we might have something like 2 - 1. This will
5456 confuse lookup_template_class, so we do constant folding
5457 here. We have to unset processing_template_decl, to fool
5458 tsubst_copy_and_build() into building an actual tree. */
5459
5460 /* If the TREE_TYPE of ARG is not NULL_TREE, ARG is already
5461 as simple as it's going to get, and trying to reprocess
5462 the trees will break. Once tsubst_expr et al DTRT for
5463 non-dependent exprs, this code can go away, as the type
5464 will always be set. */
5465 if (!TREE_TYPE (r))
5466 {
5467 int saved_processing_template_decl = processing_template_decl;
5468 processing_template_decl = 0;
5469 r = tsubst_copy_and_build (r, /*args=*/NULL_TREE,
5470 tf_error, /*in_decl=*/NULL_TREE,
5471 /*function_p=*/false);
5472 processing_template_decl = saved_processing_template_decl;
5473 }
5474 r = fold (r);
4d5f3fbd 5475 }
bd83b409 5476 }
a91db711 5477 return r;
bd83b409
NS
5478}
5479
a91db711 5480/* Substitute ARGS into the vector or list of template arguments T. */
830bfa74 5481
e9659ab0 5482static tree
a91db711 5483tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
830bfa74 5484{
bf12d54d 5485 int len = TREE_VEC_LENGTH (t);
a91db711 5486 int need_new = 0, i;
c68b0a84 5487 tree *elts = alloca (len * sizeof (tree));
830bfa74 5488
830bfa74
MM
5489 for (i = 0; i < len; i++)
5490 {
bf12d54d
NS
5491 tree orig_arg = TREE_VEC_ELT (t, i);
5492 tree new_arg;
a91db711 5493
bf12d54d
NS
5494 if (TREE_CODE (orig_arg) == TREE_VEC)
5495 new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
830bfa74 5496 else
a91db711 5497 new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
830bfa74 5498
a91db711 5499 if (new_arg == error_mark_node)
08e72a19
JM
5500 return error_mark_node;
5501
a91db711
NS
5502 elts[i] = new_arg;
5503 if (new_arg != orig_arg)
830bfa74
MM
5504 need_new = 1;
5505 }
5506
5507 if (!need_new)
5508 return t;
a91db711 5509
bf12d54d
NS
5510 t = make_tree_vec (len);
5511 for (i = 0; i < len; i++)
5512 TREE_VEC_ELT (t, i) = elts[i];
830bfa74
MM
5513
5514 return t;
5515}
5516
36a117a5
MM
5517/* Return the result of substituting ARGS into the template parameters
5518 given by PARMS. If there are m levels of ARGS and m + n levels of
5519 PARMS, then the result will contain n levels of PARMS. For
5520 example, if PARMS is `template <class T> template <class U>
5521 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
5522 result will be `template <int*, double, class V>'. */
5523
e9659ab0 5524static tree
3a978d72 5525tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
36a117a5 5526{
f71f87f9
MM
5527 tree r = NULL_TREE;
5528 tree* new_parms;
36a117a5
MM
5529
5530 for (new_parms = &r;
5531 TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
5532 new_parms = &(TREE_CHAIN (*new_parms)),
5533 parms = TREE_CHAIN (parms))
5534 {
5535 tree new_vec =
5536 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
5537 int i;
5538
5539 for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
5540 {
833aa4c4
NS
5541 tree tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
5542 tree default_value = TREE_PURPOSE (tuple);
5543 tree parm_decl = TREE_VALUE (tuple);
5544
5545 parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
a91db711
NS
5546 default_value = tsubst_template_arg (default_value, args,
5547 complain, NULL_TREE);
5548
5549 tuple = build_tree_list (default_value, parm_decl);
833aa4c4 5550 TREE_VEC_ELT (new_vec, i) = tuple;
36a117a5
MM
5551 }
5552
5553 *new_parms =
4890c2f4
MM
5554 tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
5555 - TMPL_ARGS_DEPTH (args)),
36a117a5
MM
5556 new_vec, NULL_TREE);
5557 }
5558
5559 return r;
5560}
5561
ed44da02
MM
5562/* Substitute the ARGS into the indicated aggregate (or enumeration)
5563 type T. If T is not an aggregate or enumeration type, it is
5564 handled as if by tsubst. IN_DECL is as for tsubst. If
838dfd8a 5565 ENTERING_SCOPE is nonzero, T is the context for a template which
dc957d14 5566 we are presently tsubst'ing. Return the substituted value. */
36a117a5 5567
e9659ab0 5568static tree
3a978d72
NN
5569tsubst_aggr_type (tree t,
5570 tree args,
5571 tsubst_flags_t complain,
5572 tree in_decl,
5573 int entering_scope)
36a117a5
MM
5574{
5575 if (t == NULL_TREE)
5576 return NULL_TREE;
5577
5578 switch (TREE_CODE (t))
5579 {
5580 case RECORD_TYPE:
5581 if (TYPE_PTRMEMFUNC_P (t))
46c895ac 5582 return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
36a117a5
MM
5583
5584 /* else fall through */
ed44da02 5585 case ENUMERAL_TYPE:
36a117a5 5586 case UNION_TYPE:
5db698f6 5587 if (TYPE_TEMPLATE_INFO (t))
36a117a5
MM
5588 {
5589 tree argvec;
5590 tree context;
5591 tree r;
5592
5593 /* First, determine the context for the type we are looking
5594 up. */
4f7847ca
NS
5595 context = TYPE_CONTEXT (t);
5596 if (context)
5597 context = tsubst_aggr_type (context, args, complain,
36a117a5 5598 in_decl, /*entering_scope=*/1);
36a117a5
MM
5599
5600 /* Then, figure out what arguments are appropriate for the
5601 type we are trying to find. For example, given:
5602
5603 template <class T> struct S;
5604 template <class T, class U> void f(T, U) { S<U> su; }
5605
5606 and supposing that we are instantiating f<int, double>,
5607 then our ARGS will be {int, double}, but, when looking up
5608 S we only want {double}. */
a91db711
NS
5609 argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
5610 complain, in_decl);
08e72a19
JM
5611 if (argvec == error_mark_node)
5612 return error_mark_node;
36a117a5
MM
5613
5614 r = lookup_template_class (t, argvec, in_decl, context,
f9c244b8 5615 entering_scope, complain);
36a117a5 5616
c2ea3a40 5617 return cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
36a117a5
MM
5618 }
5619 else
5620 /* This is not a template type, so there's nothing to do. */
5621 return t;
5622
5623 default:
4393e105 5624 return tsubst (t, args, complain, in_decl);
36a117a5
MM
5625 }
5626}
5627
9188c363
MM
5628/* Substitute into the default argument ARG (a default argument for
5629 FN), which has the indicated TYPE. */
5630
5631tree
3a978d72 5632tsubst_default_argument (tree fn, tree type, tree arg)
9188c363
MM
5633{
5634 /* This default argument came from a template. Instantiate the
5635 default argument here, not in tsubst. In the case of
5636 something like:
5637
5638 template <class T>
5639 struct S {
5640 static T t();
5641 void f(T = t());
5642 };
5643
5644 we must be careful to do name lookup in the scope of S<T>,
a29e1034
JM
5645 rather than in the current class.
5646
5647 ??? current_class_type affects a lot more than name lookup. This is
5648 very fragile. Fortunately, it will go away when we do 2-phase name
5649 binding properly. */
2b59fc25
KL
5650
5651 /* FN is already the desired FUNCTION_DECL. */
5652 push_access_scope (fn);
9188c363 5653
c2ea3a40
NS
5654 arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
5655 tf_error | tf_warning, NULL_TREE);
9188c363 5656
2b59fc25 5657 pop_access_scope (fn);
9188c363
MM
5658
5659 /* Make sure the default argument is reasonable. */
5660 arg = check_default_argument (type, arg);
5661
5662 return arg;
5663}
5664
5665/* Substitute into all the default arguments for FN. */
5666
5667static void
3a978d72 5668tsubst_default_arguments (tree fn)
9188c363
MM
5669{
5670 tree arg;
5671 tree tmpl_args;
5672
5673 tmpl_args = DECL_TI_ARGS (fn);
5674
5675 /* If this function is not yet instantiated, we certainly don't need
5676 its default arguments. */
5677 if (uses_template_parms (tmpl_args))
5678 return;
5679
5680 for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
5681 arg;
5682 arg = TREE_CHAIN (arg))
5683 if (TREE_PURPOSE (arg))
5684 TREE_PURPOSE (arg) = tsubst_default_argument (fn,
5685 TREE_VALUE (arg),
5686 TREE_PURPOSE (arg));
5687}
5688
ae58fa02
MM
5689/* Substitute the ARGS into the T, which is a _DECL. TYPE is the
5690 (already computed) substitution of ARGS into TREE_TYPE (T), if
c2ea3a40
NS
5691 appropriate. Return the result of the substitution. Issue error
5692 and warning messages under control of COMPLAIN. */
00d3396f 5693
e9659ab0 5694static tree
3a978d72 5695tsubst_decl (tree t, tree args, tree type, tsubst_flags_t complain)
8d08fdba 5696{
82a98427 5697 location_t saved_loc;
b370501f 5698 tree r = NULL_TREE;
4b2811e9 5699 tree in_decl = t;
830bfa74 5700
ae58fa02 5701 /* Set the filename and linenumber to improve error-reporting. */
82a98427
NS
5702 saved_loc = input_location;
5703 input_location = DECL_SOURCE_LOCATION (t);
b7484fbe 5704
8d08fdba
MS
5705 switch (TREE_CODE (t))
5706 {
98c1c668
JM
5707 case TEMPLATE_DECL:
5708 {
5709 /* We can get here when processing a member template function
5710 of a template class. */
98c1c668 5711 tree decl = DECL_TEMPLATE_RESULT (t);
386b8a85 5712 tree spec;
db2767b6 5713 int is_template_template_parm = DECL_TEMPLATE_TEMPLATE_PARM_P (t);
98c1c668 5714
db2767b6
MM
5715 if (!is_template_template_parm)
5716 {
36a117a5
MM
5717 /* We might already have an instance of this template.
5718 The ARGS are for the surrounding class type, so the
5719 full args contain the tsubst'd args for the context,
5720 plus the innermost args from the template decl. */
5721 tree tmpl_args = DECL_CLASS_TEMPLATE_P (t)
5722 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
17aec3eb 5723 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
7ddedda4
MM
5724 tree full_args;
5725
a91db711
NS
5726 full_args = tsubst_template_args (tmpl_args, args,
5727 complain, in_decl);
36a117a5 5728
a91db711 5729 /* tsubst_template_args doesn't copy the vector if
36a117a5
MM
5730 nothing changed. But, *something* should have
5731 changed. */
5732 my_friendly_assert (full_args != tmpl_args, 0);
5733
5734 spec = retrieve_specialization (t, full_args);
db2767b6 5735 if (spec != NULL_TREE)
ae58fa02
MM
5736 {
5737 r = spec;
5738 break;
5739 }
db2767b6 5740 }
98c1c668
JM
5741
5742 /* Make a new template decl. It will be similar to the
5743 original, but will record the current template arguments.
5744 We also create a new function declaration, which is just
5745 like the old one, but points to this new template, rather
5746 than the old one. */
0acf7199 5747 r = copy_decl (t);
ae58fa02
MM
5748 my_friendly_assert (DECL_LANG_SPECIFIC (r) != 0, 0);
5749 TREE_CHAIN (r) = NULL_TREE;
db2767b6
MM
5750
5751 if (is_template_template_parm)
5752 {
c2ea3a40 5753 tree new_decl = tsubst (decl, args, complain, in_decl);
17aec3eb 5754 DECL_TEMPLATE_RESULT (r) = new_decl;
ae58fa02
MM
5755 TREE_TYPE (r) = TREE_TYPE (new_decl);
5756 break;
db2767b6
MM
5757 }
5758
ae58fa02 5759 DECL_CONTEXT (r)
4f1c5b7d 5760 = tsubst_aggr_type (DECL_CONTEXT (t), args,
c2ea3a40 5761 complain, in_decl,
4393e105 5762 /*entering_scope=*/1);
ae58fa02 5763 DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
93cdc044
JM
5764
5765 if (TREE_CODE (decl) == TYPE_DECL)
5766 {
c2ea3a40 5767 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
ae58fa02
MM
5768 TREE_TYPE (r) = new_type;
5769 CLASSTYPE_TI_TEMPLATE (new_type) = r;
17aec3eb 5770 DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
ae58fa02 5771 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
93cdc044
JM
5772 }
5773 else
5774 {
c2ea3a40 5775 tree new_decl = tsubst (decl, args, complain, in_decl);
caec1dc0
KL
5776 if (new_decl == error_mark_node)
5777 return error_mark_node;
17aec3eb
RK
5778
5779 DECL_TEMPLATE_RESULT (r) = new_decl;
ae58fa02
MM
5780 DECL_TI_TEMPLATE (new_decl) = r;
5781 TREE_TYPE (r) = TREE_TYPE (new_decl);
5782 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
93cdc044
JM
5783 }
5784
ae58fa02
MM
5785 SET_DECL_IMPLICIT_INSTANTIATION (r);
5786 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
5787 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
98c1c668
JM
5788
5789 /* The template parameters for this new template are all the
5790 template parameters for the old template, except the
c6002625 5791 outermost level of parameters. */
ae58fa02 5792 DECL_TEMPLATE_PARMS (r)
4393e105 5793 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
c2ea3a40 5794 complain);
98c1c668 5795
93cdc044 5796 if (PRIMARY_TEMPLATE_P (t))
ae58fa02 5797 DECL_PRIMARY_TEMPLATE (r) = r;
93cdc044 5798
8c6ab2db
NS
5799 if (TREE_CODE (decl) != TYPE_DECL)
5800 /* Record this non-type partial instantiation. */
5801 register_specialization (r, t,
5802 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)));
98c1c668 5803 }
ae58fa02 5804 break;
8d08fdba
MS
5805
5806 case FUNCTION_DECL:
5807 {
386b8a85 5808 tree ctx;
87603ed0 5809 tree argvec = NULL_TREE;
cf38f48a 5810 tree *friends;
36a117a5 5811 tree gen_tmpl;
5566b478 5812 int member;
d8c4447d
MM
5813 int args_depth;
5814 int parms_depth;
5566b478 5815
36a117a5
MM
5816 /* Nobody should be tsubst'ing into non-template functions. */
5817 my_friendly_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE, 0);
5818
5819 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
5820 {
5821 tree spec;
00cf3e31
MM
5822 bool dependent_p;
5823
5824 /* If T is not dependent, just return it. We have to
5825 increment PROCESSING_TEMPLATE_DECL because
5826 value_dependent_expression_p assumes that nothing is
5827 dependent when PROCESSING_TEMPLATE_DECL is zero. */
5828 ++processing_template_decl;
5829 dependent_p = value_dependent_expression_p (t);
5830 --processing_template_decl;
5831 if (!dependent_p)
5832 return t;
36a117a5
MM
5833
5834 /* Calculate the most general template of which R is a
5835 specialization, and the complete set of arguments used to
5836 specialize R. */
5837 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
a91db711
NS
5838 argvec = tsubst_template_args (DECL_TI_ARGS
5839 (DECL_TEMPLATE_RESULT (gen_tmpl)),
5840 args, complain, in_decl);
36a117a5
MM
5841
5842 /* Check to see if we already have this specialization. */
5843 spec = retrieve_specialization (gen_tmpl, argvec);
7ddedda4 5844
36a117a5 5845 if (spec)
ae58fa02
MM
5846 {
5847 r = spec;
5848 break;
5849 }
d8c4447d 5850
f9a7ae04
MM
5851 /* We can see more levels of arguments than parameters if
5852 there was a specialization of a member template, like
5853 this:
5854
5855 template <class T> struct S { template <class U> void f(); }
5856 template <> template <class U> void S<int>::f(U);
5857
dc957d14 5858 Here, we'll be substituting into the specialization,
f9a7ae04
MM
5859 because that's where we can find the code we actually
5860 want to generate, but we'll have enough arguments for
5861 the most general template.
5862
5863 We also deal with the peculiar case:
d8c4447d
MM
5864
5865 template <class T> struct S {
5866 template <class U> friend void f();
5867 };
74b846e0 5868 template <class U> void f() {}
d8c4447d
MM
5869 template S<int>;
5870 template void f<double>();
5871
5872 Here, the ARGS for the instantiation of will be {int,
5873 double}. But, we only need as many ARGS as there are
5874 levels of template parameters in CODE_PATTERN. We are
5875 careful not to get fooled into reducing the ARGS in
5876 situations like:
5877
5878 template <class T> struct S { template <class U> void f(U); }
5879 template <class T> template <> void S<T>::f(int) {}
5880
5881 which we can spot because the pattern will be a
5882 specialization in this case. */
5883 args_depth = TMPL_ARGS_DEPTH (args);
5884 parms_depth =
5885 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
5886 if (args_depth > parms_depth
5887 && !DECL_TEMPLATE_SPECIALIZATION (t))
f9a7ae04 5888 args = get_innermost_template_args (args, parms_depth);
36a117a5
MM
5889 }
5890 else
5891 {
5892 /* This special case arises when we have something like this:
5893
5894 template <class T> struct S {
5895 friend void f<int>(int, double);
5896 };
5897
5898 Here, the DECL_TI_TEMPLATE for the friend declaration
10b1d5e7
MM
5899 will be an IDENTIFIER_NODE. We are being called from
5900 tsubst_friend_function, and we want only to create a
5901 new decl (R) with appropriate types so that we can call
5902 determine_specialization. */
36a117a5
MM
5903 gen_tmpl = NULL_TREE;
5904 }
5905
6eb3bb27 5906 if (DECL_CLASS_SCOPE_P (t))
8d08fdba 5907 {
5566b478
MS
5908 if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
5909 member = 2;
5910 else
5911 member = 1;
4f1c5b7d 5912 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
8c6ab2db 5913 complain, t, /*entering_scope=*/1);
5566b478
MS
5914 }
5915 else
5916 {
5917 member = 0;
4f1c5b7d 5918 ctx = DECL_CONTEXT (t);
5566b478 5919 }
c2ea3a40 5920 type = tsubst (type, args, complain, in_decl);
b3da7bb1
MM
5921 if (type == error_mark_node)
5922 return error_mark_node;
8d08fdba 5923
5566b478
MS
5924 /* We do NOT check for matching decls pushed separately at this
5925 point, as they may not represent instantiations of this
5926 template, and in any case are considered separate under the
0a7394bc 5927 discrete model. */
0acf7199 5928 r = copy_decl (t);
e1467ff2 5929 DECL_USE_TEMPLATE (r) = 0;
5566b478 5930 TREE_TYPE (r) = type;
92643fea
MM
5931 /* Clear out the mangled name and RTL for the instantiation. */
5932 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
5933 SET_DECL_RTL (r, NULL_RTX);
5566b478 5934
4f1c5b7d 5935 DECL_CONTEXT (r) = ctx;
5566b478 5936
1f6e1acc 5937 if (member && DECL_CONV_FN_P (r))
1f84ec23
MM
5938 /* Type-conversion operator. Reconstruct the name, in
5939 case it's the name of one of the template's parameters. */
5940 DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
5566b478 5941
4393e105 5942 DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
c2ea3a40 5943 complain, t);
477f6664 5944 DECL_RESULT (r) = NULL_TREE;
711734a9
JM
5945
5946 TREE_STATIC (r) = 0;
5947 TREE_PUBLIC (r) = TREE_PUBLIC (t);
5948 DECL_EXTERNAL (r) = 1;
5949 DECL_INTERFACE_KNOWN (r) = 0;
5950 DECL_DEFER_OUTPUT (r) = 0;
5951 TREE_CHAIN (r) = NULL_TREE;
5952 DECL_PENDING_INLINE_INFO (r) = 0;
59026e79 5953 DECL_PENDING_INLINE_P (r) = 0;
655dc6ee 5954 DECL_SAVED_TREE (r) = NULL_TREE;
711734a9 5955 TREE_USED (r) = 0;
db9b2174
MM
5956 if (DECL_CLONED_FUNCTION (r))
5957 {
5958 DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
c2ea3a40 5959 args, complain, t);
db9b2174
MM
5960 TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
5961 TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
5962 }
711734a9 5963
92643fea
MM
5964 /* Set up the DECL_TEMPLATE_INFO for R. There's no need to do
5965 this in the special friend case mentioned above where
5966 GEN_TMPL is NULL. */
36a117a5 5967 if (gen_tmpl)
386b8a85 5968 {
36a117a5 5969 DECL_TEMPLATE_INFO (r)
e1b3e07d 5970 = tree_cons (gen_tmpl, argvec, NULL_TREE);
36a117a5
MM
5971 SET_DECL_IMPLICIT_INSTANTIATION (r);
5972 register_specialization (r, gen_tmpl, argvec);
5973
9188c363
MM
5974 /* We're not supposed to instantiate default arguments
5975 until they are called, for a template. But, for a
5976 declaration like:
5977
5978 template <class T> void f ()
5979 { extern void g(int i = T()); }
5980
5981 we should do the substitution when the template is
5982 instantiated. We handle the member function case in
5983 instantiate_class_template since the default arguments
5984 might refer to other members of the class. */
5985 if (!member
5986 && !PRIMARY_TEMPLATE_P (gen_tmpl)
5987 && !uses_template_parms (argvec))
5988 tsubst_default_arguments (r);
386b8a85 5989 }
f181d4ae 5990
cf38f48a
MM
5991 /* Copy the list of befriending classes. */
5992 for (friends = &DECL_BEFRIENDING_CLASSES (r);
5993 *friends;
5994 friends = &TREE_CHAIN (*friends))
5995 {
5996 *friends = copy_node (*friends);
5997 TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
c2ea3a40 5998 args, complain,
cf38f48a
MM
5999 in_decl);
6000 }
6001
212e7048 6002 if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
f181d4ae
MM
6003 {
6004 maybe_retrofit_in_chrg (r);
212e7048
MM
6005 if (DECL_CONSTRUCTOR_P (r))
6006 grok_ctor_properties (ctx, r);
2be678ff
JM
6007 /* If this is an instantiation of a member template, clone it.
6008 If it isn't, that'll be handled by
6009 clone_constructors_and_destructors. */
5e818b93 6010 if (PRIMARY_TEMPLATE_P (gen_tmpl))
271e6f02 6011 clone_function_decl (r, /*update_method_vec_p=*/0);
f181d4ae 6012 }
596ea4e5 6013 else if (IDENTIFIER_OPNAME_P (DECL_NAME (r)))
4b0d3cbe
MM
6014 grok_op_properties (r, DECL_FRIEND_P (r),
6015 (complain & tf_error) != 0);
8d08fdba 6016 }
ae58fa02 6017 break;
8d08fdba
MS
6018
6019 case PARM_DECL:
6020 {
ae58fa02 6021 r = copy_node (t);
833aa4c4
NS
6022 if (DECL_TEMPLATE_PARM_P (t))
6023 SET_DECL_TEMPLATE_PARM_P (r);
8e51619a 6024
5566b478 6025 TREE_TYPE (r) = type;
89d684bb 6026 c_apply_type_quals_to_decl (cp_type_quals (type), r);
1b8899d1 6027
560ad596
MM
6028 if (DECL_INITIAL (r))
6029 {
6030 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
6031 DECL_INITIAL (r) = TREE_TYPE (r);
6032 else
6033 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
6034 complain, in_decl);
6035 }
db2767b6 6036
5566b478 6037 DECL_CONTEXT (r) = NULL_TREE;
8e51619a
JM
6038
6039 if (!DECL_TEMPLATE_PARM_P (r))
6040 DECL_ARG_TYPE (r) = type_passed_as (type);
8d08fdba 6041 if (TREE_CHAIN (t))
4393e105 6042 TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
c2ea3a40 6043 complain, TREE_CHAIN (t));
8d08fdba 6044 }
ae58fa02 6045 break;
8d08fdba 6046
5566b478
MS
6047 case FIELD_DECL:
6048 {
0acf7199 6049 r = copy_decl (t);
1b8899d1 6050 TREE_TYPE (r) = type;
89d684bb 6051 c_apply_type_quals_to_decl (cp_type_quals (type), r);
1b8899d1
MM
6052
6053 /* We don't have to set DECL_CONTEXT here; it is set by
6054 finish_member_declaration. */
4393e105 6055 DECL_INITIAL (r) = tsubst_expr (DECL_INITIAL (t), args,
c2ea3a40 6056 complain, in_decl);
5566b478 6057 TREE_CHAIN (r) = NULL_TREE;
dfbb4f34
NS
6058 if (VOID_TYPE_P (type))
6059 cp_error_at ("instantiation of `%D' as type `%T'", r, type);
5566b478 6060 }
ae58fa02 6061 break;
5566b478
MS
6062
6063 case USING_DECL:
6064 {
ae58fa02 6065 r = copy_node (t);
fd9aef9d
NS
6066 /* It is not a dependent using decl any more. */
6067 TREE_TYPE (r) = void_type_node;
5566b478 6068 DECL_INITIAL (r)
c2ea3a40 6069 = tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
5566b478 6070 TREE_CHAIN (r) = NULL_TREE;
5566b478 6071 }
ae58fa02 6072 break;
5566b478 6073
9188c363 6074 case TYPE_DECL:
88e1b92a
JM
6075 if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
6076 || t == TYPE_MAIN_DECL (TREE_TYPE (t)))
9188c363 6077 {
88e1b92a
JM
6078 /* If this is the canonical decl, we don't have to mess with
6079 instantiations, and often we can't (for typename, template
6080 type parms and such). Note that TYPE_NAME is not correct for
6081 the above test if we've copied the type for a typedef. */
b9f39201 6082 r = TYPE_NAME (type);
9188c363
MM
6083 break;
6084 }
6085
6086 /* Fall through. */
6087
5566b478
MS
6088 case VAR_DECL:
6089 {
1cea0434
KG
6090 tree argvec = NULL_TREE;
6091 tree gen_tmpl = NULL_TREE;
36a117a5 6092 tree spec;
1cea0434 6093 tree tmpl = NULL_TREE;
9188c363 6094 tree ctx;
6dfbb909 6095 int local_p;
9188c363 6096
6dfbb909
MM
6097 /* Assume this is a non-local variable. */
6098 local_p = 0;
5566b478 6099
de96bf57 6100 if (TYPE_P (CP_DECL_CONTEXT (t)))
9188c363 6101 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
c2ea3a40 6102 complain,
9188c363 6103 in_decl, /*entering_scope=*/1);
2ba9c47e
MM
6104 else if (DECL_NAMESPACE_SCOPE_P (t))
6105 ctx = DECL_CONTEXT (t);
9188c363 6106 else
6dfbb909
MM
6107 {
6108 /* Subsequent calls to pushdecl will fill this in. */
6109 ctx = NULL_TREE;
2ba9c47e 6110 local_p = 1;
6dfbb909 6111 }
9188c363 6112
36a117a5 6113 /* Check to see if we already have this specialization. */
6dfbb909
MM
6114 if (!local_p)
6115 {
6116 tmpl = DECL_TI_TEMPLATE (t);
6117 gen_tmpl = most_general_template (tmpl);
c2ea3a40 6118 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
6dfbb909
MM
6119 spec = retrieve_specialization (gen_tmpl, argvec);
6120 }
9188c363 6121 else
6dfbb909 6122 spec = retrieve_local_specialization (t);
9188c363 6123
36a117a5 6124 if (spec)
ae58fa02
MM
6125 {
6126 r = spec;
6127 break;
6128 }
5566b478 6129
0acf7199 6130 r = copy_decl (t);
edebf865 6131 if (TREE_CODE (r) == VAR_DECL)
39703eb9
MM
6132 {
6133 type = complete_type (type);
6134 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
6135 = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
6136 }
a3d87771
MM
6137 else if (DECL_SELF_REFERENCE_P (t))
6138 SET_DECL_SELF_REFERENCE_P (r);
01f4137f 6139 TREE_TYPE (r) = type;
89d684bb 6140 c_apply_type_quals_to_decl (cp_type_quals (type), r);
5566b478 6141 DECL_CONTEXT (r) = ctx;
92643fea
MM
6142 /* Clear out the mangled name and RTL for the instantiation. */
6143 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
6144 SET_DECL_RTL (r, NULL_RTX);
d11ad92e
MS
6145
6146 /* Don't try to expand the initializer until someone tries to use
6147 this variable; otherwise we run into circular dependencies. */
6148 DECL_INITIAL (r) = NULL_TREE;
19e7881c 6149 SET_DECL_RTL (r, NULL_RTX);
06ceef4e 6150 DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
5566b478 6151
e0942dcd
MM
6152 /* Even if the original location is out of scope, the newly
6153 substituted one is not. */
6154 if (TREE_CODE (r) == VAR_DECL)
17bbb839
MM
6155 {
6156 DECL_DEAD_FOR_LOCAL (r) = 0;
6157 DECL_INITIALIZED_P (r) = 0;
6158 }
e0942dcd 6159
6dfbb909
MM
6160 if (!local_p)
6161 {
6162 /* A static data member declaration is always marked
6163 external when it is declared in-class, even if an
6164 initializer is present. We mimic the non-template
6165 processing here. */
6166 DECL_EXTERNAL (r) = 1;
fa8d6e85 6167
6dfbb909
MM
6168 register_specialization (r, gen_tmpl, argvec);
6169 DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
6170 SET_DECL_IMPLICIT_INSTANTIATION (r);
6171 }
9188c363 6172 else
6dfbb909 6173 register_local_specialization (r, t);
5566b478 6174
5566b478 6175 TREE_CHAIN (r) = NULL_TREE;
dfbb4f34
NS
6176 if (TREE_CODE (r) == VAR_DECL && VOID_TYPE_P (type))
6177 cp_error_at ("instantiation of `%D' as type `%T'", r, type);
edebf865
MM
6178 /* Compute the size, alignment, etc. of R. */
6179 layout_decl (r, 0);
5566b478 6180 }
ae58fa02 6181 break;
5566b478 6182
ae58fa02 6183 default:
a98facb0 6184 abort ();
ae58fa02
MM
6185 }
6186
6187 /* Restore the file and line information. */
82a98427 6188 input_location = saved_loc;
ae58fa02
MM
6189
6190 return r;
6191}
6192
34cd5ae7 6193/* Substitute into the ARG_TYPES of a function type. */
cabc336a 6194
e9659ab0 6195static tree
3a978d72
NN
6196tsubst_arg_types (tree arg_types,
6197 tree args,
6198 tsubst_flags_t complain,
6199 tree in_decl)
cabc336a
MM
6200{
6201 tree remaining_arg_types;
cabc336a
MM
6202 tree type;
6203
6204 if (!arg_types || arg_types == void_list_node)
6205 return arg_types;
6206
6207 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
4393e105
MM
6208 args, complain, in_decl);
6209 if (remaining_arg_types == error_mark_node)
6210 return error_mark_node;
6211
6212 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
6213 if (type == error_mark_node)
6214 return error_mark_node;
4b2811e9
NS
6215 if (VOID_TYPE_P (type))
6216 {
c2ea3a40 6217 if (complain & tf_error)
4b2811e9 6218 {
33bd39a2 6219 error ("invalid parameter type `%T'", type);
4b2811e9
NS
6220 if (in_decl)
6221 cp_error_at ("in declaration `%D'", in_decl);
6222 }
6223 return error_mark_node;
6224 }
cabc336a 6225
4393e105
MM
6226 /* Do array-to-pointer, function-to-pointer conversion, and ignore
6227 top-level qualifiers as required. */
6228 type = TYPE_MAIN_VARIANT (type_decays_to (type));
cabc336a
MM
6229
6230 /* Note that we do not substitute into default arguments here. The
6231 standard mandates that they be instantiated only when needed,
6232 which is done in build_over_call. */
51632249
JM
6233 return hash_tree_cons (TREE_PURPOSE (arg_types), type,
6234 remaining_arg_types);
cabc336a
MM
6235
6236}
6237
4393e105
MM
6238/* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
6239 *not* handle the exception-specification for FNTYPE, because the
6240 initial substitution of explicitly provided template parameters
6241 during argument deduction forbids substitution into the
6242 exception-specification:
6243
6244 [temp.deduct]
6245
6246 All references in the function type of the function template to the
6247 corresponding template parameters are replaced by the specified tem-
6248 plate argument values. If a substitution in a template parameter or
6249 in the function type of the function template results in an invalid
6250 type, type deduction fails. [Note: The equivalent substitution in
6251 exception specifications is done only when the function is instanti-
6252 ated, at which point a program is ill-formed if the substitution
6253 results in an invalid type.] */
6254
6255static tree
3a978d72
NN
6256tsubst_function_type (tree t,
6257 tree args,
6258 tsubst_flags_t complain,
6259 tree in_decl)
4393e105
MM
6260{
6261 tree return_type;
6262 tree arg_types;
6263 tree fntype;
6264
8dd3f57a 6265 /* The TYPE_CONTEXT is not used for function/method types. */
4393e105
MM
6266 my_friendly_assert (TYPE_CONTEXT (t) == NULL_TREE, 0);
6267
46c895ac 6268 /* Substitute the return type. */
4393e105
MM
6269 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6270 if (return_type == error_mark_node)
6271 return error_mark_node;
6272
34cd5ae7 6273 /* Substitute the argument types. */
4393e105
MM
6274 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
6275 complain, in_decl);
6276 if (arg_types == error_mark_node)
6277 return error_mark_node;
6278
6279 /* Construct a new type node and return it. */
6280 if (TREE_CODE (t) == FUNCTION_TYPE)
6281 fntype = build_function_type (return_type, arg_types);
6282 else
6283 {
6284 tree r = TREE_TYPE (TREE_VALUE (arg_types));
6285 if (! IS_AGGR_TYPE (r))
6286 {
6287 /* [temp.deduct]
6288
6289 Type deduction may fail for any of the following
6290 reasons:
6291
6292 -- Attempting to create "pointer to member of T" when T
6293 is not a class type. */
c2ea3a40 6294 if (complain & tf_error)
33bd39a2 6295 error ("creating pointer to member function of non-class type `%T'",
4393e105
MM
6296 r);
6297 return error_mark_node;
6298 }
6299
43dc123f
MM
6300 fntype = build_method_type_directly (r, return_type,
6301 TREE_CHAIN (arg_types));
4393e105 6302 }
c2ea3a40 6303 fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
ada846eb 6304 fntype = build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
4393e105
MM
6305
6306 return fntype;
6307}
6308
297e73d8
MM
6309/* Substitute into the PARMS of a call-declarator. */
6310
e9659ab0 6311static tree
3a978d72
NN
6312tsubst_call_declarator_parms (tree parms,
6313 tree args,
6314 tsubst_flags_t complain,
6315 tree in_decl)
297e73d8
MM
6316{
6317 tree new_parms;
6318 tree type;
6319 tree defarg;
6320
6321 if (!parms || parms == void_list_node)
6322 return parms;
6323
6324 new_parms = tsubst_call_declarator_parms (TREE_CHAIN (parms),
4393e105 6325 args, complain, in_decl);
297e73d8
MM
6326
6327 /* Figure out the type of this parameter. */
4393e105 6328 type = tsubst (TREE_VALUE (parms), args, complain, in_decl);
297e73d8
MM
6329
6330 /* Figure out the default argument as well. Note that we use
4393e105
MM
6331 tsubst_expr since the default argument is really an expression. */
6332 defarg = tsubst_expr (TREE_PURPOSE (parms), args, complain, in_decl);
297e73d8
MM
6333
6334 /* Chain this parameter on to the front of those we have already
6335 processed. We don't use hash_tree_cons because that function
6336 doesn't check TREE_PARMLIST. */
6337 new_parms = tree_cons (defarg, type, new_parms);
6338
6339 /* And note that these are parameters. */
6340 TREE_PARMLIST (new_parms) = 1;
6341
6342 return new_parms;
6343}
6344
4393e105
MM
6345/* Take the tree structure T and replace template parameters used
6346 therein with the argument vector ARGS. IN_DECL is an associated
6347 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
c2ea3a40
NS
6348 Issue error and warning messages under control of COMPLAIN. Note
6349 that we must be relatively non-tolerant of extensions here, in
6350 order to preserve conformance; if we allow substitutions that
6351 should not be allowed, we may allow argument deductions that should
6352 not succeed, and therefore report ambiguous overload situations
6353 where there are none. In theory, we could allow the substitution,
6354 but indicate that it should have failed, and allow our caller to
6355 make sure that the right thing happens, but we don't try to do this
6356 yet.
4393e105
MM
6357
6358 This function is used for dealing with types, decls and the like;
6359 for expressions, use tsubst_expr or tsubst_copy. */
ae58fa02 6360
14d22dd6 6361static tree
3a978d72 6362tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
ae58fa02 6363{
0ecfe0b4 6364 tree type, r;
ae58fa02
MM
6365
6366 if (t == NULL_TREE || t == error_mark_node
6367 || t == integer_type_node
6368 || t == void_type_node
6369 || t == char_type_node
6370 || TREE_CODE (t) == NAMESPACE_DECL)
6371 return t;
6372
6373 if (TREE_CODE (t) == IDENTIFIER_NODE)
6374 type = IDENTIFIER_TYPE_VALUE (t);
6375 else
6376 type = TREE_TYPE (t);
399dedb9 6377
fd9aef9d 6378 my_friendly_assert (type != unknown_type_node, 20030716);
ae58fa02
MM
6379
6380 if (type && TREE_CODE (t) != FUNCTION_DECL
6381 && TREE_CODE (t) != TYPENAME_TYPE
6382 && TREE_CODE (t) != TEMPLATE_DECL
4393e105
MM
6383 && TREE_CODE (t) != IDENTIFIER_NODE
6384 && TREE_CODE (t) != FUNCTION_TYPE
6385 && TREE_CODE (t) != METHOD_TYPE)
6386 type = tsubst (type, args, complain, in_decl);
6387 if (type == error_mark_node)
6388 return error_mark_node;
ae58fa02 6389
2f939d94 6390 if (DECL_P (t))
c2ea3a40 6391 return tsubst_decl (t, args, type, complain);
ae58fa02
MM
6392
6393 switch (TREE_CODE (t))
6394 {
6395 case RECORD_TYPE:
6396 case UNION_TYPE:
6397 case ENUMERAL_TYPE:
4393e105
MM
6398 return tsubst_aggr_type (t, args, complain, in_decl,
6399 /*entering_scope=*/0);
ae58fa02
MM
6400
6401 case ERROR_MARK:
6402 case IDENTIFIER_NODE:
ae58fa02
MM
6403 case VOID_TYPE:
6404 case REAL_TYPE:
6405 case COMPLEX_TYPE:
c00996a3 6406 case VECTOR_TYPE:
ae58fa02
MM
6407 case BOOLEAN_TYPE:
6408 case INTEGER_CST:
6409 case REAL_CST:
6410 case STRING_CST:
6411 return t;
6412
6413 case INTEGER_TYPE:
6414 if (t == integer_type_node)
6415 return t;
6416
6417 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
6418 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
6419 return t;
d2e5ee5c 6420
5566b478 6421 {
ddce3528 6422 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
7ddedda4 6423
a91db711
NS
6424 /* The array dimension behaves like a non-type template arg,
6425 in that we want to fold it as much as possible. */
6426 max = tsubst_template_arg (omax, args, complain, in_decl);
fc611ce0 6427 if (!processing_template_decl)
8dd3f57a
MM
6428 max = decl_constant_value (max);
6429
856216bb
MM
6430 if (processing_template_decl
6431 /* When providing explicit arguments to a template
6432 function, but leaving some arguments for subsequent
6433 deduction, MAX may be template-dependent even if we're
c95cd22e
JM
6434 not PROCESSING_TEMPLATE_DECL. We still need to check for
6435 template parms, though; MAX won't be an INTEGER_CST for
6436 dynamic arrays, either. */
6437 || (TREE_CODE (max) != INTEGER_CST
6438 && uses_template_parms (max)))
ae58fa02 6439 {
8dd3f57a
MM
6440 tree itype = make_node (INTEGER_TYPE);
6441 TYPE_MIN_VALUE (itype) = size_zero_node;
6442 TYPE_MAX_VALUE (itype) = build_min (MINUS_EXPR, sizetype, max,
6443 integer_one_node);
6444 return itype;
ae58fa02
MM
6445 }
6446
ddce3528
JM
6447 if (integer_zerop (omax))
6448 {
6449 /* Still allow an explicit array of size zero. */
6450 if (pedantic)
6451 pedwarn ("creating array with size zero");
6452 }
07c88314
MM
6453 else if (integer_zerop (max)
6454 || (TREE_CODE (max) == INTEGER_CST
6455 && INT_CST_LT (max, integer_zero_node)))
0ecfe0b4 6456 {
4393e105
MM
6457 /* [temp.deduct]
6458
6459 Type deduction may fail for any of the following
6460 reasons:
6461
bf8f3f93
MM
6462 Attempting to create an array with a size that is
6463 zero or negative. */
c2ea3a40 6464 if (complain & tf_error)
33bd39a2 6465 error ("creating array with size zero (`%E')", max);
4393e105
MM
6466
6467 return error_mark_node;
0ecfe0b4
JM
6468 }
6469
c95cd22e 6470 return compute_array_index_type (NULL_TREE, max);
ae58fa02
MM
6471 }
6472
6473 case TEMPLATE_TYPE_PARM:
6474 case TEMPLATE_TEMPLATE_PARM:
a1281f45 6475 case BOUND_TEMPLATE_TEMPLATE_PARM:
ae58fa02
MM
6476 case TEMPLATE_PARM_INDEX:
6477 {
6478 int idx;
6479 int level;
6480 int levels;
0ecfe0b4
JM
6481
6482 r = NULL_TREE;
ae58fa02
MM
6483
6484 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
a1281f45
KL
6485 || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
6486 || TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
ae58fa02
MM
6487 {
6488 idx = TEMPLATE_TYPE_IDX (t);
6489 level = TEMPLATE_TYPE_LEVEL (t);
6490 }
6491 else
6492 {
6493 idx = TEMPLATE_PARM_IDX (t);
6494 level = TEMPLATE_PARM_LEVEL (t);
6495 }
6496
6497 if (TREE_VEC_LENGTH (args) > 0)
6498 {
6499 tree arg = NULL_TREE;
6500
6501 levels = TMPL_ARGS_DEPTH (args);
6502 if (level <= levels)
6503 arg = TMPL_ARG (args, level, idx);
6504
8b5b8b7c
MM
6505 if (arg == error_mark_node)
6506 return error_mark_node;
6507 else if (arg != NULL_TREE)
ae58fa02
MM
6508 {
6509 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
6510 {
2f939d94 6511 my_friendly_assert (TYPE_P (arg), 0);
adecb3f4 6512 return cp_build_qualified_type_real
89d684bb 6513 (arg, cp_type_quals (arg) | cp_type_quals (t),
4f2b0fb2 6514 complain | tf_ignore_bad_quals);
ae58fa02 6515 }
a1281f45 6516 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
ae58fa02 6517 {
a1281f45
KL
6518 /* We are processing a type constructed from
6519 a template template parameter */
6520 tree argvec = tsubst (TYPE_TI_ARGS (t),
6521 args, complain, in_decl);
6522 if (argvec == error_mark_node)
6523 return error_mark_node;
4393e105 6524
a1281f45
KL
6525 /* We can get a TEMPLATE_TEMPLATE_PARM here when
6526 we are resolving nested-types in the signature of
6527 a member function templates.
6528 Otherwise ARG is a TEMPLATE_DECL and is the real
6529 template to be instantiated. */
6530 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
6531 arg = TYPE_NAME (arg);
6532
6533 r = lookup_template_class (arg,
6534 argvec, in_decl,
6535 DECL_CONTEXT (arg),
f9c244b8
NS
6536 /*entering_scope=*/0,
6537 complain);
c2ea3a40
NS
6538 return cp_build_qualified_type_real
6539 (r, TYPE_QUALS (t), complain);
ae58fa02
MM
6540 }
6541 else
a1281f45 6542 /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX. */
ae58fa02
MM
6543 return arg;
6544 }
6545 }
51924768 6546 else
a98facb0 6547 abort ();
ae58fa02
MM
6548
6549 if (level == 1)
6550 /* This can happen during the attempted tsubst'ing in
6551 unify. This means that we don't yet have any information
6552 about the template parameter in question. */
6553 return t;
6554
6555 /* If we get here, we must have been looking at a parm for a
6556 more deeply nested template. Make a new version of this
6557 template parameter, but with a lower level. */
6558 switch (TREE_CODE (t))
6559 {
6560 case TEMPLATE_TYPE_PARM:
6561 case TEMPLATE_TEMPLATE_PARM:
a1281f45 6562 case BOUND_TEMPLATE_TEMPLATE_PARM:
89d684bb 6563 if (cp_type_quals (t))
ae58fa02 6564 {
9ccf6541 6565 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
4f2b0fb2
NS
6566 r = cp_build_qualified_type_real
6567 (r, cp_type_quals (t),
6568 complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
6569 ? tf_ignore_bad_quals : 0));
9ccf6541
MM
6570 }
6571 else
6572 {
11e74ea6 6573 r = copy_type (t);
9ccf6541
MM
6574 TEMPLATE_TYPE_PARM_INDEX (r)
6575 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
6576 r, levels);
6577 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
6578 TYPE_MAIN_VARIANT (r) = r;
6579 TYPE_POINTER_TO (r) = NULL_TREE;
6580 TYPE_REFERENCE_TO (r) = NULL_TREE;
6581
a1281f45 6582 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
9ccf6541
MM
6583 {
6584 tree argvec = tsubst (TYPE_TI_ARGS (t), args,
6585 complain, in_decl);
6586 if (argvec == error_mark_node)
6587 return error_mark_node;
4393e105 6588
9ccf6541
MM
6589 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
6590 = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
6591 }
ae58fa02
MM
6592 }
6593 break;
6594
6595 case TEMPLATE_PARM_INDEX:
6596 r = reduce_template_parm_level (t, type, levels);
6597 break;
6598
6599 default:
a98facb0 6600 abort ();
ae58fa02
MM
6601 }
6602
5566b478 6603 return r;
ae58fa02 6604 }
5566b478 6605
8d08fdba
MS
6606 case TREE_LIST:
6607 {
6608 tree purpose, value, chain, result;
8d08fdba
MS
6609
6610 if (t == void_list_node)
6611 return t;
6612
8d08fdba
MS
6613 purpose = TREE_PURPOSE (t);
6614 if (purpose)
4393e105
MM
6615 {
6616 purpose = tsubst (purpose, args, complain, in_decl);
6617 if (purpose == error_mark_node)
6618 return error_mark_node;
6619 }
8d08fdba
MS
6620 value = TREE_VALUE (t);
6621 if (value)
4393e105
MM
6622 {
6623 value = tsubst (value, args, complain, in_decl);
6624 if (value == error_mark_node)
6625 return error_mark_node;
6626 }
8d08fdba
MS
6627 chain = TREE_CHAIN (t);
6628 if (chain && chain != void_type_node)
4393e105
MM
6629 {
6630 chain = tsubst (chain, args, complain, in_decl);
6631 if (chain == error_mark_node)
6632 return error_mark_node;
6633 }
8d08fdba
MS
6634 if (purpose == TREE_PURPOSE (t)
6635 && value == TREE_VALUE (t)
6636 && chain == TREE_CHAIN (t))
6637 return t;
cbd5937a
MM
6638 if (TREE_PARMLIST (t))
6639 {
6640 result = tree_cons (purpose, value, chain);
6641 TREE_PARMLIST (result) = 1;
6642 }
6643 else
6644 result = hash_tree_cons (purpose, value, chain);
8d08fdba
MS
6645 return result;
6646 }
6647 case TREE_VEC:
5566b478
MS
6648 if (type != NULL_TREE)
6649 {
1ceaad38
JM
6650 /* A binfo node. We always need to make a copy, of the node
6651 itself and of its BINFO_BASETYPES. */
85b71cf2 6652
5566b478
MS
6653 t = copy_node (t);
6654
c7449f2b
JM
6655 /* Make sure type isn't a typedef copy. */
6656 type = BINFO_TYPE (TYPE_BINFO (type));
6657
5566b478 6658 TREE_TYPE (t) = complete_type (type);
6633d636
MS
6659 if (IS_AGGR_TYPE (type))
6660 {
6661 BINFO_VTABLE (t) = TYPE_BINFO_VTABLE (type);
6662 BINFO_VIRTUALS (t) = TYPE_BINFO_VIRTUALS (type);
6663 if (TYPE_BINFO_BASETYPES (type) != NULL_TREE)
6664 BINFO_BASETYPES (t) = copy_node (TYPE_BINFO_BASETYPES (type));
6665 }
5566b478
MS
6666 return t;
6667 }
85b71cf2
JM
6668
6669 /* Otherwise, a vector of template arguments. */
a91db711 6670 return tsubst_template_args (t, args, complain, in_decl);
8d08fdba 6671
8d08fdba
MS
6672 case POINTER_TYPE:
6673 case REFERENCE_TYPE:
6674 {
8d08fdba 6675 enum tree_code code;
79a7c7fa 6676
46c895ac 6677 if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
8d08fdba
MS
6678 return t;
6679
6680 code = TREE_CODE (t);
4393e105
MM
6681
6682
6683 /* [temp.deduct]
6684
6685 Type deduction may fail for any of the following
6686 reasons:
6687
6688 -- Attempting to create a pointer to reference type.
6689 -- Attempting to create a reference to a reference type or
6690 a reference to void. */
0ecfe0b4
JM
6691 if (TREE_CODE (type) == REFERENCE_TYPE
6692 || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
79a7c7fa 6693 {
82a98427 6694 static location_t last_loc;
79a7c7fa
JM
6695
6696 /* We keep track of the last time we issued this error
6697 message to avoid spewing a ton of messages during a
6698 single bad template instantiation. */
c2ea3a40 6699 if (complain & tf_error
82a98427
NS
6700 && (last_loc.line != input_line
6701 || last_loc.file != input_filename))
79a7c7fa 6702 {
0ecfe0b4 6703 if (TREE_CODE (type) == VOID_TYPE)
33bd39a2 6704 error ("forming reference to void");
0ecfe0b4 6705 else
33bd39a2 6706 error ("forming %s to reference type `%T'",
0ecfe0b4
JM
6707 (code == POINTER_TYPE) ? "pointer" : "reference",
6708 type);
82a98427 6709 last_loc = input_location;
79a7c7fa
JM
6710 }
6711
4393e105 6712 return error_mark_node;
79a7c7fa
JM
6713 }
6714 else if (code == POINTER_TYPE)
46c895ac
NS
6715 {
6716 r = build_pointer_type (type);
6717 if (TREE_CODE (type) == METHOD_TYPE)
6718 r = build_ptrmemfunc_type (r);
6719 }
8d08fdba
MS
6720 else
6721 r = build_reference_type (type);
adecb3f4 6722 r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
79a7c7fa 6723
a5f1c5f8
NS
6724 if (r != error_mark_node)
6725 /* Will this ever be needed for TYPE_..._TO values? */
6726 layout_type (r);
6727
8d08fdba
MS
6728 return r;
6729 }
a4443a08 6730 case OFFSET_TYPE:
0ecfe0b4 6731 {
4393e105
MM
6732 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
6733 if (r == error_mark_node || !IS_AGGR_TYPE (r))
6734 {
6735 /* [temp.deduct]
6736
6737 Type deduction may fail for any of the following
6738 reasons:
6739
6740 -- Attempting to create "pointer to member of T" when T
6741 is not a class type. */
c2ea3a40
NS
6742 if (complain & tf_error)
6743 error ("creating pointer to member of non-class type `%T'", r);
4393e105
MM
6744 return error_mark_node;
6745 }
46c895ac
NS
6746 if (TREE_CODE (type) == REFERENCE_TYPE)
6747 {
4f09be91 6748 if (complain & tf_error)
46c895ac
NS
6749 error ("creating pointer to member reference type `%T'", type);
6750
6751 return error_mark_node;
6752 }
6753 my_friendly_assert (TREE_CODE (type) != METHOD_TYPE, 20011231);
6754 if (TREE_CODE (type) == FUNCTION_TYPE)
a5ac359a
MM
6755 {
6756 /* This is really a method type. The cv qualifiers of the
6757 this pointer should _not_ be determined by the cv
6758 qualifiers of the class type. They should be held
6759 somewhere in the FUNCTION_TYPE, but we don't do that at
6760 the moment. Consider
6761 typedef void (Func) () const;
6762
6763 template <typename T1> void Foo (Func T1::*);
6764
6765 */
6766 tree method_type;
6767
43dc123f
MM
6768 method_type = build_method_type_directly (TYPE_MAIN_VARIANT (r),
6769 TREE_TYPE (type),
6770 TYPE_ARG_TYPES (type));
a5ac359a
MM
6771 return build_ptrmemfunc_type (build_pointer_type (method_type));
6772 }
46c895ac 6773 else
b7a78333
MM
6774 return cp_build_qualified_type_real (build_ptrmem_type (r, type),
6775 TYPE_QUALS (t),
6776 complain);
0ecfe0b4 6777 }
8d08fdba
MS
6778 case FUNCTION_TYPE:
6779 case METHOD_TYPE:
6780 {
c11b6f21 6781 tree fntype;
4393e105 6782 tree raises;
8d08fdba 6783
4393e105
MM
6784 fntype = tsubst_function_type (t, args, complain, in_decl);
6785 if (fntype == error_mark_node)
6786 return error_mark_node;
cabc336a 6787
34cd5ae7 6788 /* Substitute the exception specification. */
cabc336a 6789 raises = TYPE_RAISES_EXCEPTIONS (t);
c11b6f21
MS
6790 if (raises)
6791 {
4cc1d462
NS
6792 tree list = NULL_TREE;
6793
6794 if (! TREE_VALUE (raises))
6795 list = raises;
6796 else
6797 for (; raises != NULL_TREE; raises = TREE_CHAIN (raises))
6798 {
6799 tree spec = TREE_VALUE (raises);
6800
6801 spec = tsubst (spec, args, complain, in_decl);
6802 if (spec == error_mark_node)
6803 return spec;
6804 list = add_exception_specifier (list, spec, complain);
6805 }
6806 fntype = build_exception_variant (fntype, list);
c11b6f21
MS
6807 }
6808 return fntype;
8d08fdba
MS
6809 }
6810 case ARRAY_TYPE:
6811 {
4393e105
MM
6812 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
6813 if (domain == error_mark_node)
6814 return error_mark_node;
6815
6816 /* As an optimization, we avoid regenerating the array type if
6817 it will obviously be the same as T. */
8d08fdba
MS
6818 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
6819 return t;
0ecfe0b4 6820
4393e105
MM
6821 /* These checks should match the ones in grokdeclarator.
6822
6823 [temp.deduct]
6824
6825 The deduction may fail for any of the following reasons:
6826
6827 -- Attempting to create an array with an element type that
6828 is void, a function type, or a reference type. */
6829 if (TREE_CODE (type) == VOID_TYPE
6830 || TREE_CODE (type) == FUNCTION_TYPE
6831 || TREE_CODE (type) == REFERENCE_TYPE)
0ecfe0b4 6832 {
c2ea3a40 6833 if (complain & tf_error)
33bd39a2 6834 error ("creating array of `%T'", type);
4393e105 6835 return error_mark_node;
0ecfe0b4
JM
6836 }
6837
8d08fdba
MS
6838 r = build_cplus_array_type (type, domain);
6839 return r;
6840 }
6841
8d08fdba 6842 case PLUS_EXPR:
5566b478 6843 case MINUS_EXPR:
4393e105 6844 {
c2ea3a40
NS
6845 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
6846 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
4393e105
MM
6847
6848 if (e1 == error_mark_node || e2 == error_mark_node)
6849 return error_mark_node;
6850
6851 return fold (build (TREE_CODE (t), TREE_TYPE (t), e1, e2));
6852 }
8d08fdba
MS
6853
6854 case NEGATE_EXPR:
6855 case NOP_EXPR:
4393e105 6856 {
c2ea3a40 6857 tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
4393e105
MM
6858 if (e == error_mark_node)
6859 return error_mark_node;
6860
6861 return fold (build (TREE_CODE (t), TREE_TYPE (t), e));
6862 }
8d08fdba 6863
5566b478
MS
6864 case TYPENAME_TYPE:
6865 {
4393e105
MM
6866 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
6867 in_decl, /*entering_scope=*/1);
6868 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
6869 complain, in_decl);
6870
6871 if (ctx == error_mark_node || f == error_mark_node)
6872 return error_mark_node;
ae58fa02 6873
bf8f3f93
MM
6874 if (!IS_AGGR_TYPE (ctx))
6875 {
c2ea3a40 6876 if (complain & tf_error)
33bd39a2 6877 error ("`%T' is not a class, struct, or union type",
bf8f3f93
MM
6878 ctx);
6879 return error_mark_node;
6880 }
6881 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
6882 {
6883 /* Normally, make_typename_type does not require that the CTX
6884 have complete type in order to allow things like:
ae58fa02 6885
bf8f3f93 6886 template <class T> struct S { typename S<T>::X Y; };
ae58fa02 6887
bf8f3f93
MM
6888 But, such constructs have already been resolved by this
6889 point, so here CTX really should have complete type, unless
6890 it's a partial instantiation. */
4393e105 6891 ctx = complete_type (ctx);
d0f062fb 6892 if (!COMPLETE_TYPE_P (ctx))
4393e105 6893 {
c2ea3a40 6894 if (complain & tf_error)
7a228918 6895 cxx_incomplete_type_error (NULL_TREE, ctx);
4393e105
MM
6896 return error_mark_node;
6897 }
6898 }
ae58fa02 6899
4f2b0fb2
NS
6900 f = make_typename_type (ctx, f,
6901 (complain & tf_error) | tf_keep_type_decl);
f0bcd168
MM
6902 if (f == error_mark_node)
6903 return f;
4f2b0fb2
NS
6904 if (TREE_CODE (f) == TYPE_DECL)
6905 {
6906 complain |= tf_ignore_bad_quals;
6907 f = TREE_TYPE (f);
6908 }
6909
6910 return cp_build_qualified_type_real
6911 (f, cp_type_quals (f) | cp_type_quals (t), complain);
5566b478 6912 }
c2ea3a40 6913
b8c6534b
KL
6914 case UNBOUND_CLASS_TEMPLATE:
6915 {
6916 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
6917 in_decl, /*entering_scope=*/1);
6918 tree name = TYPE_IDENTIFIER (t);
6919
6920 if (ctx == error_mark_node || name == error_mark_node)
6921 return error_mark_node;
6922
6923 return make_unbound_class_template (ctx, name, complain);
6924 }
6925
5566b478 6926 case INDIRECT_REF:
4393e105 6927 {
c2ea3a40 6928 tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
4393e105
MM
6929 if (e == error_mark_node)
6930 return error_mark_node;
6931 return make_pointer_declarator (type, e);
6932 }
6933
5566b478 6934 case ADDR_EXPR:
4393e105 6935 {
c2ea3a40 6936 tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
4393e105
MM
6937 if (e == error_mark_node)
6938 return error_mark_node;
6939 return make_reference_declarator (type, e);
6940 }
5566b478
MS
6941
6942 case ARRAY_REF:
4393e105 6943 {
c2ea3a40
NS
6944 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
6945 tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl);
4393e105
MM
6946 if (e1 == error_mark_node || e2 == error_mark_node)
6947 return error_mark_node;
6948
718b8ea5 6949 return build_nt (ARRAY_REF, e1, e2, tsubst_expr);
4393e105 6950 }
5566b478
MS
6951
6952 case CALL_EXPR:
4393e105 6953 {
c2ea3a40 6954 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
43f887f9
MM
6955 tree e2 = (tsubst_call_declarator_parms
6956 (CALL_DECLARATOR_PARMS (t), args, complain, in_decl));
6957 tree e3 = tsubst (CALL_DECLARATOR_EXCEPTION_SPEC (t), args,
6958 complain, in_decl);
4393e105
MM
6959
6960 if (e1 == error_mark_node || e2 == error_mark_node
6961 || e3 == error_mark_node)
6962 return error_mark_node;
6963
43f887f9 6964 return make_call_declarator (e1, e2, CALL_DECLARATOR_QUALS (t), e3);
4393e105 6965 }
5566b478 6966
fc378698 6967 case SCOPE_REF:
4393e105 6968 {
c2ea3a40 6969 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
4393e105
MM
6970 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
6971 if (e1 == error_mark_node || e2 == error_mark_node)
6972 return error_mark_node;
6973
718b8ea5 6974 return build_nt (TREE_CODE (t), e1, e2);
4393e105 6975 }
fc378698 6976
b894fc05 6977 case TYPEOF_TYPE:
4393e105 6978 {
c2ea3a40 6979 tree e1 = tsubst_expr (TYPE_FIELDS (t), args, complain, in_decl);
4393e105
MM
6980 if (e1 == error_mark_node)
6981 return error_mark_node;
6982
dce50630
MM
6983 return cp_build_qualified_type_real (TREE_TYPE (e1),
6984 cp_type_quals (t)
6985 | cp_type_quals (TREE_TYPE (e1)),
6986 complain);
4393e105 6987 }
b894fc05 6988
8d08fdba 6989 default:
5566b478 6990 sorry ("use of `%s' in template",
8d08fdba
MS
6991 tree_code_name [(int) TREE_CODE (t)]);
6992 return error_mark_node;
6993 }
6994}
6995
ee76b931
MM
6996/* Like tsubst_expr for a BASELINK. OBJECT_TYPE, if non-NULL, is the
6997 type of the expression on the left-hand side of the "." or "->"
6998 operator. */
6999
7000static tree
7001tsubst_baselink (tree baselink, tree object_type,
7002 tree args, tsubst_flags_t complain, tree in_decl)
7003{
7004 tree name;
7005 tree qualifying_scope;
7006 tree fns;
7007 tree template_args = 0;
7008 bool template_id_p = false;
7009
7010 /* A baselink indicates a function from a base class. The
7011 BASELINK_ACCESS_BINFO and BASELINK_BINFO are going to have
7012 non-dependent types; otherwise, the lookup could not have
7013 succeeded. However, they may indicate bases of the template
7014 class, rather than the instantiated class.
7015
7016 In addition, lookups that were not ambiguous before may be
7017 ambiguous now. Therefore, we perform the lookup again. */
7018 qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
7019 fns = BASELINK_FUNCTIONS (baselink);
7020 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7021 {
7022 template_id_p = true;
7023 template_args = TREE_OPERAND (fns, 1);
7024 fns = TREE_OPERAND (fns, 0);
bf12d54d
NS
7025 if (template_args)
7026 template_args = tsubst_template_args (template_args, args,
7027 complain, in_decl);
ee76b931
MM
7028 }
7029 name = DECL_NAME (get_first_fn (fns));
7030 baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
7031 if (BASELINK_P (baselink) && template_id_p)
7032 BASELINK_FUNCTIONS (baselink)
7033 = build_nt (TEMPLATE_ID_EXPR,
7034 BASELINK_FUNCTIONS (baselink),
7035 template_args);
7036 if (!object_type)
7037 object_type = current_class_type;
7038 return adjust_result_of_qualified_name_lookup (baselink,
7039 qualifying_scope,
7040 object_type);
7041}
7042
7043/* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID. DONE is
7044 true if the qualified-id will be a postfix-expression in-and-of
7045 itself; false if more of the postfix-expression follows the
7046 QUALIFIED_ID. ADDRESS_P is true if the qualified-id is the operand
7047 of "&". */
7048
7049static tree
7050tsubst_qualified_id (tree qualified_id, tree args,
7051 tsubst_flags_t complain, tree in_decl,
7052 bool done, bool address_p)
7053{
7054 tree expr;
7055 tree scope;
7056 tree name;
7057 bool is_template;
7058 tree template_args;
7059
7060 my_friendly_assert (TREE_CODE (qualified_id) == SCOPE_REF, 20030706);
7061
ee76b931
MM
7062 /* Figure out what name to look up. */
7063 name = TREE_OPERAND (qualified_id, 1);
7064 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
7065 {
7066 is_template = true;
bf12d54d
NS
7067 template_args = TREE_OPERAND (name, 1);
7068 if (template_args)
7069 template_args = tsubst_template_args (template_args, args,
7070 complain, in_decl);
ee76b931
MM
7071 name = TREE_OPERAND (name, 0);
7072 }
7073 else
7074 {
7075 is_template = false;
7076 template_args = NULL_TREE;
7077 }
7078
6eeba0cc
MM
7079 /* Substitute into the qualifying scope. When there are no ARGS, we
7080 are just trying to simplify a non-dependent expression. In that
7081 case the qualifying scope may be dependent, and, in any case,
7082 substituting will not help. */
7083 scope = TREE_OPERAND (qualified_id, 0);
7084 if (args)
7085 {
7086 scope = tsubst (scope, args, complain, in_decl);
7087 expr = tsubst_copy (name, args, complain, in_decl);
7088 }
7089 else
7090 expr = name;
10b1d5e7 7091
fb5ce3c9
NS
7092 my_friendly_assert (!dependent_type_p (scope), 20030729);
7093
5e08432e 7094 if (!BASELINK_P (name) && !DECL_P (expr))
12483c9f
NS
7095 {
7096 expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
7097 if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
7098 ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
7099 {
7100 if (complain & tf_error)
7101 error ("`%E' names a type, but a non-type is expected",
7102 qualified_id);
7103 return error_mark_node;
7104 }
7105 }
fb5ce3c9 7106
279b8466 7107 if (DECL_P (expr))
fb5ce3c9 7108 check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
279b8466 7109 scope);
6eeba0cc 7110
ee76b931
MM
7111 /* Remember that there was a reference to this entity. */
7112 if (DECL_P (expr))
6eeba0cc
MM
7113 {
7114 mark_used (expr);
7115 if (!args && TREE_CODE (expr) == VAR_DECL)
7116 expr = DECL_INITIAL (expr);
7117 }
ee76b931
MM
7118
7119 if (is_template)
10b1d5e7 7120 expr = lookup_template_function (expr, template_args);
ee76b931 7121
22038b2c
NS
7122 if (expr == error_mark_node && complain & tf_error)
7123 qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1));
7124 else if (TYPE_P (scope))
ee76b931
MM
7125 {
7126 expr = (adjust_result_of_qualified_name_lookup
7127 (expr, scope, current_class_type));
7128 expr = finish_qualified_id_expr (scope, expr, done, address_p);
7129 }
7130
7131 return expr;
7132}
7133
00d3396f
JM
7134/* Like tsubst, but deals with expressions. This function just replaces
7135 template parms; to finish processing the resultant expression, use
7136 tsubst_expr. */
7137
14d22dd6 7138static tree
3a978d72 7139tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
5566b478
MS
7140{
7141 enum tree_code code;
8452b1d3 7142 tree r;
8d08fdba 7143
5566b478
MS
7144 if (t == NULL_TREE || t == error_mark_node)
7145 return t;
7146
7147 code = TREE_CODE (t);
b7484fbe 7148
5566b478
MS
7149 switch (code)
7150 {
7151 case PARM_DECL:
a723baf1
MM
7152 r = retrieve_local_specialization (t);
7153 my_friendly_assert (r != NULL, 20020903);
7154 return r;
5566b478
MS
7155
7156 case CONST_DECL:
ed44da02
MM
7157 {
7158 tree enum_type;
7159 tree v;
7160
a723baf1
MM
7161 if (DECL_TEMPLATE_PARM_P (t))
7162 return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
7b6d72fc
MM
7163 /* There is no need to substitute into namespace-scope
7164 enumerators. */
7165 if (DECL_NAMESPACE_SCOPE_P (t))
ed44da02
MM
7166 return t;
7167
7168 /* Unfortunately, we cannot just call lookup_name here.
9188c363
MM
7169 Consider:
7170
7171 template <int I> int f() {
7172 enum E { a = I };
7173 struct S { void g() { E e = a; } };
7174 };
7175
7176 When we instantiate f<7>::S::g(), say, lookup_name is not
7177 clever enough to find f<7>::a. */
ed44da02 7178 enum_type
4393e105 7179 = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
ed44da02
MM
7180 /*entering_scope=*/0);
7181
7182 for (v = TYPE_VALUES (enum_type);
7183 v != NULL_TREE;
7184 v = TREE_CHAIN (v))
7185 if (TREE_PURPOSE (v) == DECL_NAME (t))
7186 return TREE_VALUE (v);
7187
7188 /* We didn't find the name. That should never happen; if
7189 name-lookup found it during preliminary parsing, we
7190 should find it again here during instantiation. */
a98facb0 7191 abort ();
ed44da02 7192 }
db04386f 7193 return t;
ed44da02 7194
5566b478
MS
7195 case FIELD_DECL:
7196 if (DECL_CONTEXT (t))
7197 {
0978790f 7198 tree ctx;
0978790f 7199
4393e105 7200 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
36a117a5 7201 /*entering_scope=*/1);
0978790f 7202 if (ctx != DECL_CONTEXT (t))
86ac0575 7203 return lookup_field (ctx, DECL_NAME (t), 0, false);
5566b478
MS
7204 }
7205 return t;
7206
7207 case VAR_DECL:
7208 case FUNCTION_DECL:
a723baf1
MM
7209 if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
7210 || local_variable_p (t))
4393e105 7211 t = tsubst (t, args, complain, in_decl);
5566b478
MS
7212 mark_used (t);
7213 return t;
7214
a723baf1 7215 case BASELINK:
ee76b931 7216 return tsubst_baselink (t, current_class_type, args, complain, in_decl);
a723baf1 7217
98c1c668 7218 case TEMPLATE_DECL:
a723baf1
MM
7219 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7220 return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
7221 args, complain, in_decl);
7222 else if (is_member_template (t))
4393e105 7223 return tsubst (t, args, complain, in_decl);
fcea7401
KL
7224 else if (DECL_CLASS_SCOPE_P (t)
7225 && uses_template_parms (DECL_CONTEXT (t)))
7226 {
7227 /* Template template argument like the following example need
7228 special treatment:
7229
7230 template <template <class> class TT> struct C {};
7231 template <class T> struct D {
7232 template <class U> struct E {};
7233 C<E> c; // #1
7234 };
7235 D<int> d; // #2
7236
7237 We are processing the template argument `E' in #1 for
7238 the template instantiation #2. Originally, `E' is a
7239 TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT. Now we
7240 have to substitute this with one having context `D<int>'. */
7241
7242 tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
7243 return lookup_field (context, DECL_NAME(t), 0, false);
7244 }
98c1c668 7245 else
fcea7401 7246 /* Ordinary template template argument. */
98c1c668
JM
7247 return t;
7248
5566b478
MS
7249 case CAST_EXPR:
7250 case REINTERPRET_CAST_EXPR:
e92cc029
MS
7251 case CONST_CAST_EXPR:
7252 case STATIC_CAST_EXPR:
7253 case DYNAMIC_CAST_EXPR:
51924768 7254 case NOP_EXPR:
5566b478 7255 return build1
4393e105
MM
7256 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7257 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
5566b478
MS
7258
7259 case INDIRECT_REF:
5566b478
MS
7260 case NEGATE_EXPR:
7261 case TRUTH_NOT_EXPR:
b87692e5 7262 case BIT_NOT_EXPR:
5566b478
MS
7263 case ADDR_EXPR:
7264 case CONVERT_EXPR: /* Unary + */
7265 case SIZEOF_EXPR:
abff8e06 7266 case ALIGNOF_EXPR:
5566b478 7267 case ARROW_EXPR:
fc378698 7268 case THROW_EXPR:
5156628f 7269 case TYPEID_EXPR:
f5733617
SS
7270 case REALPART_EXPR:
7271 case IMAGPART_EXPR:
5566b478 7272 return build1
6a629cac 7273 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
4393e105 7274 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
5566b478 7275
a723baf1
MM
7276 case COMPONENT_REF:
7277 {
7278 tree object;
7279 tree name;
7280
7281 object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
7282 name = TREE_OPERAND (t, 1);
7283 if (TREE_CODE (name) == BIT_NOT_EXPR)
7284 {
7285 name = tsubst_copy (TREE_OPERAND (name, 0), args,
7286 complain, in_decl);
7287 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7288 }
7289 else if (TREE_CODE (name) == SCOPE_REF
7290 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
7291 {
7292 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
7293 complain, in_decl);
7294 name = TREE_OPERAND (name, 1);
7295 name = tsubst_copy (TREE_OPERAND (name, 0), args,
7296 complain, in_decl);
7297 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7298 name = build_nt (SCOPE_REF, base, name);
7299 }
ee76b931
MM
7300 else if (TREE_CODE (name) == BASELINK)
7301 name = tsubst_baselink (name,
7302 non_reference (TREE_TYPE (object)),
7303 args, complain,
7304 in_decl);
a723baf1 7305 else
ee76b931 7306 name = tsubst_copy (name, args, complain, in_decl);
a723baf1
MM
7307 return build_nt (COMPONENT_REF, object, name);
7308 }
7309
5566b478
MS
7310 case PLUS_EXPR:
7311 case MINUS_EXPR:
7312 case MULT_EXPR:
7313 case TRUNC_DIV_EXPR:
7314 case CEIL_DIV_EXPR:
7315 case FLOOR_DIV_EXPR:
7316 case ROUND_DIV_EXPR:
7317 case EXACT_DIV_EXPR:
7318 case BIT_AND_EXPR:
5566b478
MS
7319 case BIT_IOR_EXPR:
7320 case BIT_XOR_EXPR:
7321 case TRUNC_MOD_EXPR:
7322 case FLOOR_MOD_EXPR:
7323 case TRUTH_ANDIF_EXPR:
7324 case TRUTH_ORIF_EXPR:
7325 case TRUTH_AND_EXPR:
7326 case TRUTH_OR_EXPR:
7327 case RSHIFT_EXPR:
7328 case LSHIFT_EXPR:
7329 case RROTATE_EXPR:
7330 case LROTATE_EXPR:
7331 case EQ_EXPR:
7332 case NE_EXPR:
7333 case MAX_EXPR:
7334 case MIN_EXPR:
7335 case LE_EXPR:
7336 case GE_EXPR:
7337 case LT_EXPR:
7338 case GT_EXPR:
5566b478
MS
7339 case ARRAY_REF:
7340 case COMPOUND_EXPR:
7341 case SCOPE_REF:
7342 case DOTSTAR_EXPR:
7343 case MEMBER_REF:
519c9806
MM
7344 case PREDECREMENT_EXPR:
7345 case PREINCREMENT_EXPR:
7346 case POSTDECREMENT_EXPR:
7347 case POSTINCREMENT_EXPR:
5566b478 7348 return build_nt
4393e105
MM
7349 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7350 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
5566b478
MS
7351
7352 case CALL_EXPR:
a723baf1
MM
7353 return build_nt (code,
7354 tsubst_copy (TREE_OPERAND (t, 0), args,
7355 complain, in_decl),
7356 tsubst_copy (TREE_OPERAND (t, 1), args, complain,
7357 in_decl),
7358 NULL_TREE);
5566b478 7359
558475f0 7360 case STMT_EXPR:
cc23546e 7361 /* This processing should really occur in tsubst_expr. However,
558475f0 7362 tsubst_expr does not recurse into expressions, since it
cc23546e
JO
7363 assumes that there aren't any statements inside them. So, we
7364 need to expand the STMT_EXPR here. */
558475f0
MM
7365 if (!processing_template_decl)
7366 {
b5ac18ea 7367 tree stmt_expr = begin_stmt_expr ();
a5bcc582
NS
7368
7369 tsubst_expr (STMT_EXPR_STMT (t), args,
7370 complain | tf_stmt_expr_cmpd, in_decl);
303b7406 7371 return finish_stmt_expr (stmt_expr, false);
558475f0 7372 }
9d9169de
MM
7373
7374 return t;
558475f0 7375
5566b478
MS
7376 case COND_EXPR:
7377 case MODOP_EXPR:
40242ccf 7378 case PSEUDO_DTOR_EXPR:
67da3287 7379 {
8452b1d3 7380 r = build_nt
4393e105
MM
7381 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7382 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7383 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
67da3287
MM
7384 return r;
7385 }
5566b478
MS
7386
7387 case NEW_EXPR:
7388 {
8452b1d3 7389 r = build_nt
4393e105
MM
7390 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7391 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7392 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
5566b478
MS
7393 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
7394 return r;
7395 }
7396
7397 case DELETE_EXPR:
7398 {
8452b1d3 7399 r = build_nt
4393e105
MM
7400 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7401 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
5566b478
MS
7402 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
7403 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
7404 return r;
7405 }
7406
386b8a85
JM
7407 case TEMPLATE_ID_EXPR:
7408 {
00d3396f 7409 /* Substituted template arguments */
a91db711
NS
7410 tree fn = TREE_OPERAND (t, 0);
7411 tree targs = TREE_OPERAND (t, 1);
856216bb 7412
a91db711 7413 fn = tsubst_copy (fn, args, complain, in_decl);
bf12d54d
NS
7414 if (targs)
7415 targs = tsubst_template_args (targs, args, complain, in_decl);
a91db711
NS
7416
7417 return lookup_template_function (fn, targs);
386b8a85
JM
7418 }
7419
5566b478
MS
7420 case TREE_LIST:
7421 {
7422 tree purpose, value, chain;
7423
7424 if (t == void_list_node)
7425 return t;
7426
7427 purpose = TREE_PURPOSE (t);
7428 if (purpose)
4393e105 7429 purpose = tsubst_copy (purpose, args, complain, in_decl);
5566b478
MS
7430 value = TREE_VALUE (t);
7431 if (value)
4393e105 7432 value = tsubst_copy (value, args, complain, in_decl);
5566b478
MS
7433 chain = TREE_CHAIN (t);
7434 if (chain && chain != void_type_node)
4393e105 7435 chain = tsubst_copy (chain, args, complain, in_decl);
5566b478
MS
7436 if (purpose == TREE_PURPOSE (t)
7437 && value == TREE_VALUE (t)
7438 && chain == TREE_CHAIN (t))
7439 return t;
7440 return tree_cons (purpose, value, chain);
7441 }
7442
7443 case RECORD_TYPE:
7444 case UNION_TYPE:
7445 case ENUMERAL_TYPE:
7446 case INTEGER_TYPE:
7447 case TEMPLATE_TYPE_PARM:
73b0fce8 7448 case TEMPLATE_TEMPLATE_PARM:
a1281f45 7449 case BOUND_TEMPLATE_TEMPLATE_PARM:
f84b4be9 7450 case TEMPLATE_PARM_INDEX:
5566b478
MS
7451 case POINTER_TYPE:
7452 case REFERENCE_TYPE:
7453 case OFFSET_TYPE:
7454 case FUNCTION_TYPE:
7455 case METHOD_TYPE:
7456 case ARRAY_TYPE:
7457 case TYPENAME_TYPE:
b8c6534b 7458 case UNBOUND_CLASS_TEMPLATE:
2a2b1d56 7459 case TYPEOF_TYPE:
f84b4be9 7460 case TYPE_DECL:
4393e105 7461 return tsubst (t, args, complain, in_decl);
5566b478 7462
e92cc029 7463 case IDENTIFIER_NODE:
421844e7 7464 if (IDENTIFIER_TYPENAME_P (t))
1f6e1acc
AS
7465 {
7466 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
1f84ec23 7467 return mangle_conv_op_name_for_type (new_type);
1f6e1acc 7468 }
e92cc029
MS
7469 else
7470 return t;
7471
5156628f 7472 case CONSTRUCTOR:
8452b1d3 7473 {
dcf92453
ZW
7474 r = build_constructor
7475 (tsubst (TREE_TYPE (t), args, complain, in_decl),
7476 tsubst_copy (CONSTRUCTOR_ELTS (t), args, complain, in_decl));
8452b1d3
JM
7477 TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
7478 return r;
7479 }
5156628f 7480
371534a9 7481 case VA_ARG_EXPR:
ea333e1c 7482 return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
c2ea3a40
NS
7483 in_decl),
7484 tsubst (TREE_TYPE (t), args, complain, in_decl));
f9817201 7485
5566b478
MS
7486 default:
7487 return t;
7488 }
7489}
7490
cc23546e
JO
7491/* Like tsubst_copy for expressions, etc. but also does semantic
7492 processing. */
00d3396f 7493
14d22dd6 7494static tree
3a978d72 7495tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
5566b478 7496{
fd10dd09 7497 tree stmt, tmp;
a5bcc582
NS
7498 tsubst_flags_t stmt_expr
7499 = complain & (tf_stmt_expr_cmpd | tf_stmt_expr_body);
558475f0 7500
a5bcc582 7501 complain ^= stmt_expr;
5566b478
MS
7502 if (t == NULL_TREE || t == error_mark_node)
7503 return t;
7504
5156628f 7505 if (processing_template_decl)
4393e105 7506 return tsubst_copy (t, args, complain, in_decl);
5566b478 7507
009ed910 7508 if (!STATEMENT_CODE_P (TREE_CODE (t)))
b3445994
MM
7509 return tsubst_copy_and_build (t, args, complain, in_decl,
7510 /*function_p=*/false);
fd10dd09 7511
5566b478 7512 switch (TREE_CODE (t))
8d08fdba 7513 {
558475f0 7514 case CTOR_INITIALIZER:
2282d28d
MM
7515 prep_stmt (t);
7516 finish_mem_initializers (tsubst_initializer_list
7517 (TREE_OPERAND (t, 0), args));
7518 break;
558475f0 7519
5566b478 7520 case RETURN_STMT:
a7e4cfa0 7521 prep_stmt (t);
d65b1d77 7522 finish_return_stmt (tsubst_expr (RETURN_STMT_EXPR (t),
4393e105 7523 args, complain, in_decl));
5566b478
MS
7524 break;
7525
7526 case EXPR_STMT:
a5bcc582
NS
7527 {
7528 tree r;
7529
7530 prep_stmt (t);
7531
7532 r = tsubst_expr (EXPR_STMT_EXPR (t), args, complain, in_decl);
7533 if (stmt_expr & tf_stmt_expr_body && !TREE_CHAIN (t))
7534 finish_stmt_expr_expr (r);
7535 else
7536 finish_expr_stmt (r);
7537 break;
7538 }
5566b478 7539
9da99f7d
NS
7540 case USING_STMT:
7541 prep_stmt (t);
7542 do_using_directive (tsubst_expr (USING_STMT_NAMESPACE (t),
7543 args, complain, in_decl));
7544 break;
7545
5566b478
MS
7546 case DECL_STMT:
7547 {
e0942dcd
MM
7548 tree decl;
7549 tree init;
5566b478 7550
a7e4cfa0 7551 prep_stmt (t);
e0942dcd 7552 decl = DECL_STMT_DECL (t);
acef433b
MM
7553 if (TREE_CODE (decl) == LABEL_DECL)
7554 finish_label_decl (DECL_NAME (decl));
fbfe8c9e
NS
7555 else if (TREE_CODE (decl) == USING_DECL)
7556 {
7557 tree scope = DECL_INITIAL (decl);
7558 tree name = DECL_NAME (decl);
22038b2c 7559 tree decl;
fbfe8c9e
NS
7560
7561 scope = tsubst_expr (scope, args, complain, in_decl);
22038b2c 7562 decl = lookup_qualified_name (scope, name,
12483c9f
NS
7563 /*is_type_p=*/false,
7564 /*complain=*/false);
22038b2c
NS
7565 if (decl == error_mark_node)
7566 qualified_name_lookup_error (scope, name);
7567 else
7568 do_local_using_decl (decl);
fbfe8c9e 7569 }
acef433b
MM
7570 else
7571 {
7572 init = DECL_INITIAL (decl);
7573 decl = tsubst (decl, args, complain, in_decl);
ce2e5191
NS
7574 if (decl != error_mark_node)
7575 {
7576 if (init)
7577 DECL_INITIAL (decl) = error_mark_node;
7578 /* By marking the declaration as instantiated, we avoid
7579 trying to instantiate it. Since instantiate_decl can't
7580 handle local variables, and since we've already done
7581 all that needs to be done, that's the right thing to
7582 do. */
7583 if (TREE_CODE (decl) == VAR_DECL)
7584 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
edebf865
MM
7585 if (TREE_CODE (decl) == VAR_DECL
7586 && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
7587 /* Anonymous aggregates are a special case. */
7588 finish_anon_union (decl);
7589 else
ed2fa432 7590 {
edebf865 7591 maybe_push_decl (decl);
39703eb9
MM
7592 if (TREE_CODE (decl) == VAR_DECL
7593 && DECL_PRETTY_FUNCTION_P (decl))
edebf865
MM
7594 {
7595 /* For __PRETTY_FUNCTION__ we have to adjust the
7596 initializer. */
7597 const char *const name
7598 = cxx_printable_name (current_function_decl, 2);
7599 init = cp_fname_init (name);
7600 TREE_TYPE (decl) = TREE_TYPE (init);
7601 }
7602 else
7603 init = tsubst_expr (init, args, complain, in_decl);
7604 cp_finish_decl (decl, init, NULL_TREE, 0);
ed2fa432 7605 }
ce2e5191 7606 }
acef433b 7607 }
fd10dd09
JM
7608
7609 /* A DECL_STMT can also be used as an expression, in the condition
27631dae 7610 clause of an if/for/while construct. If we aren't followed by
fd10dd09
JM
7611 another statement, return our decl. */
7612 if (TREE_CHAIN (t) == NULL_TREE)
7613 return decl;
5566b478 7614 }
fd10dd09 7615 break;
8d08fdba 7616
5566b478
MS
7617 case FOR_STMT:
7618 {
a7e4cfa0 7619 prep_stmt (t);
5566b478 7620
558475f0 7621 stmt = begin_for_stmt ();
fd10dd09 7622 tsubst_expr (FOR_INIT_STMT (t), args, complain, in_decl);
558475f0 7623 finish_for_init_stmt (stmt);
c2ea3a40
NS
7624 finish_for_cond (tsubst_expr (FOR_COND (t),
7625 args, complain, in_decl),
558475f0 7626 stmt);
4393e105 7627 tmp = tsubst_expr (FOR_EXPR (t), args, complain, in_decl);
558475f0 7628 finish_for_expr (tmp, stmt);
4393e105 7629 tsubst_expr (FOR_BODY (t), args, complain, in_decl);
35b1567d 7630 finish_for_stmt (stmt);
5566b478
MS
7631 }
7632 break;
8d08fdba 7633
5566b478
MS
7634 case WHILE_STMT:
7635 {
a7e4cfa0 7636 prep_stmt (t);
558475f0 7637 stmt = begin_while_stmt ();
ad321293 7638 finish_while_stmt_cond (tsubst_expr (WHILE_COND (t),
4393e105 7639 args, complain, in_decl),
558475f0 7640 stmt);
4393e105 7641 tsubst_expr (WHILE_BODY (t), args, complain, in_decl);
558475f0 7642 finish_while_stmt (stmt);
5566b478
MS
7643 }
7644 break;
8d08fdba 7645
5566b478
MS
7646 case DO_STMT:
7647 {
a7e4cfa0 7648 prep_stmt (t);
558475f0 7649 stmt = begin_do_stmt ();
4393e105 7650 tsubst_expr (DO_BODY (t), args, complain, in_decl);
558475f0 7651 finish_do_body (stmt);
c2ea3a40
NS
7652 finish_do_stmt (tsubst_expr (DO_COND (t),
7653 args, complain, in_decl),
558475f0 7654 stmt);
5566b478
MS
7655 }
7656 break;
a0a33927 7657
5566b478 7658 case IF_STMT:
8d08fdba 7659 {
a7e4cfa0 7660 prep_stmt (t);
558475f0 7661 stmt = begin_if_stmt ();
ad321293 7662 finish_if_stmt_cond (tsubst_expr (IF_COND (t),
4393e105 7663 args, complain, in_decl),
558475f0 7664 stmt);
db5ae43f 7665
ad321293 7666 if (tmp = THEN_CLAUSE (t), tmp)
db5ae43f 7667 {
4393e105 7668 tsubst_expr (tmp, args, complain, in_decl);
558475f0 7669 finish_then_clause (stmt);
db5ae43f
MS
7670 }
7671
ad321293
MM
7672 if (tmp = ELSE_CLAUSE (t), tmp)
7673 {
7674 begin_else_clause ();
4393e105 7675 tsubst_expr (tmp, args, complain, in_decl);
558475f0 7676 finish_else_clause (stmt);
ad321293 7677 }
8d08fdba 7678
ad321293 7679 finish_if_stmt ();
8d08fdba 7680 }
5566b478 7681 break;
8d08fdba 7682
5566b478
MS
7683 case COMPOUND_STMT:
7684 {
a7e4cfa0 7685 prep_stmt (t);
ade3dc07
JM
7686 if (COMPOUND_STMT_BODY_BLOCK (t))
7687 stmt = begin_function_body ();
7688 else
7689 stmt = begin_compound_stmt (COMPOUND_STMT_NO_SCOPE (t));
7690
a5bcc582
NS
7691 tsubst_expr (COMPOUND_BODY (t), args,
7692 complain | ((stmt_expr & tf_stmt_expr_cmpd) << 1),
7693 in_decl);
ade3dc07
JM
7694
7695 if (COMPOUND_STMT_BODY_BLOCK (t))
7696 finish_function_body (stmt);
7697 else
7a3397c7 7698 finish_compound_stmt (stmt);
5566b478
MS
7699 }
7700 break;
8d08fdba 7701
5566b478 7702 case BREAK_STMT:
a7e4cfa0 7703 prep_stmt (t);
ad321293 7704 finish_break_stmt ();
5566b478 7705 break;
8d08fdba 7706
6467930b 7707 case CONTINUE_STMT:
a7e4cfa0 7708 prep_stmt (t);
ad321293 7709 finish_continue_stmt ();
6467930b
MS
7710 break;
7711
5566b478
MS
7712 case SWITCH_STMT:
7713 {
558475f0 7714 tree val;
5566b478 7715
a7e4cfa0 7716 prep_stmt (t);
527f0080 7717 stmt = begin_switch_stmt ();
4393e105 7718 val = tsubst_expr (SWITCH_COND (t), args, complain, in_decl);
527f0080 7719 finish_switch_cond (val, stmt);
558475f0 7720 tsubst_expr (SWITCH_BODY (t), args, complain, in_decl);
35b1567d 7721 finish_switch_stmt (stmt);
5566b478
MS
7722 }
7723 break;
7724
7725 case CASE_LABEL:
a7e4cfa0 7726 prep_stmt (t);
4393e105 7727 finish_case_label (tsubst_expr (CASE_LOW (t), args, complain, in_decl),
56cb9733
MM
7728 tsubst_expr (CASE_HIGH (t), args, complain,
7729 in_decl));
5566b478
MS
7730 break;
7731
acef433b 7732 case LABEL_STMT:
d479d37f 7733 input_line = STMT_LINENO (t);
acef433b 7734 finish_label_stmt (DECL_NAME (LABEL_STMT_LABEL (t)));
5566b478
MS
7735 break;
7736
aa16c0fa
KL
7737 case FILE_STMT:
7738 input_filename = FILE_STMT_FILENAME (t);
7739 add_stmt (build_nt (FILE_STMT, FILE_STMT_FILENAME_NODE (t)));
7740 break;
7741
5566b478 7742 case GOTO_STMT:
a7e4cfa0 7743 prep_stmt (t);
fd10dd09
JM
7744 tmp = GOTO_DESTINATION (t);
7745 if (TREE_CODE (tmp) != LABEL_DECL)
aa09da44
MM
7746 /* Computed goto's must be tsubst'd into. On the other hand,
7747 non-computed gotos must not be; the identifier in question
7748 will have no binding. */
fd10dd09 7749 tmp = tsubst_expr (tmp, args, complain, in_decl);
3fa56191 7750 else
fd10dd09
JM
7751 tmp = DECL_NAME (tmp);
7752 finish_goto_stmt (tmp);
ad321293
MM
7753 break;
7754
7755 case ASM_STMT:
a7e4cfa0 7756 prep_stmt (t);
c87978aa
JM
7757 tmp = finish_asm_stmt
7758 (ASM_CV_QUAL (t),
7759 tsubst_expr (ASM_STRING (t), args, complain, in_decl),
7760 tsubst_expr (ASM_OUTPUTS (t), args, complain, in_decl),
7761 tsubst_expr (ASM_INPUTS (t), args, complain, in_decl),
7762 tsubst_expr (ASM_CLOBBERS (t), args, complain, in_decl));
7763 ASM_INPUT_P (tmp) = ASM_INPUT_P (t);
5566b478 7764 break;
faf5394a
MS
7765
7766 case TRY_BLOCK:
a7e4cfa0 7767 prep_stmt (t);
f1dedc31 7768 if (CLEANUP_P (t))
62409b39 7769 {
57b52417 7770 stmt = begin_try_block ();
62409b39
MM
7771 tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
7772 finish_cleanup_try_block (stmt);
7773 finish_cleanup (tsubst_expr (TRY_HANDLERS (t), args,
7774 complain, in_decl),
7775 stmt);
7776 }
f1dedc31
MM
7777 else
7778 {
62409b39
MM
7779 if (FN_TRY_BLOCK_P (t))
7780 stmt = begin_function_try_block ();
7781 else
7782 stmt = begin_try_block ();
7783
7784 tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
7785
7786 if (FN_TRY_BLOCK_P (t))
7787 finish_function_try_block (stmt);
7788 else
7789 finish_try_block (stmt);
7790
fd10dd09 7791 tsubst_expr (TRY_HANDLERS (t), args, complain, in_decl);
84df082b
MM
7792 if (FN_TRY_BLOCK_P (t))
7793 finish_function_handler_sequence (stmt);
7794 else
7795 finish_handler_sequence (stmt);
f1dedc31 7796 }
faf5394a 7797 break;
b35d4555 7798
faf5394a 7799 case HANDLER:
b35d4555
MM
7800 {
7801 tree decl;
b35d4555
MM
7802
7803 prep_stmt (t);
7804 stmt = begin_handler ();
7805 if (HANDLER_PARMS (t))
7806 {
7807 decl = DECL_STMT_DECL (HANDLER_PARMS (t));
7808 decl = tsubst (decl, args, complain, in_decl);
f8191e64
MM
7809 /* Prevent instantiate_decl from trying to instantiate
7810 this variable. We've already done all that needs to be
7811 done. */
7812 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
b35d4555
MM
7813 }
7814 else
7815 decl = NULL_TREE;
1a6025b4 7816 finish_handler_parms (decl, stmt);
b35d4555 7817 tsubst_expr (HANDLER_BODY (t), args, complain, in_decl);
1a6025b4 7818 finish_handler (stmt);
b35d4555 7819 }
faf5394a
MS
7820 break;
7821
b87692e5 7822 case TAG_DEFN:
a7e4cfa0 7823 prep_stmt (t);
fd10dd09 7824 tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
b87692e5
MS
7825 break;
7826
5566b478 7827 default:
fd10dd09 7828 abort ();
5566b478 7829 }
fd10dd09 7830
a5bcc582 7831 return tsubst_expr (TREE_CHAIN (t), args, complain | stmt_expr, in_decl);
8d08fdba
MS
7832}
7833
b3445994
MM
7834/* T is a postfix-expression that is not being used in a function
7835 call. Return the substituted version of T. */
7836
7837static tree
7838tsubst_non_call_postfix_expression (tree t, tree args,
7839 tsubst_flags_t complain,
7840 tree in_decl)
7841{
7842 if (TREE_CODE (t) == SCOPE_REF)
7843 t = tsubst_qualified_id (t, args, complain, in_decl,
7844 /*done=*/false, /*address_p=*/false);
7845 else
7846 t = tsubst_copy_and_build (t, args, complain, in_decl,
7847 /*function_p=*/false);
7848
7849 return t;
7850}
7851
cc23546e 7852/* Like tsubst but deals with expressions and performs semantic
b3445994 7853 analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
cc23546e 7854
ee76b931 7855tree
3a978d72
NN
7856tsubst_copy_and_build (tree t,
7857 tree args,
7858 tsubst_flags_t complain,
b3445994
MM
7859 tree in_decl,
7860 bool function_p)
cc23546e 7861{
b3445994
MM
7862#define RECUR(NODE) \
7863 tsubst_copy_and_build (NODE, args, complain, in_decl, /*function_p=*/false)
7864
ee76b931
MM
7865 tree op1;
7866
cc23546e
JO
7867 if (t == NULL_TREE || t == error_mark_node)
7868 return t;
7869
7870 switch (TREE_CODE (t))
7871 {
399dedb9
NS
7872 case USING_DECL:
7873 t = DECL_NAME (t);
7874 /* Fallthrough. */
b3445994 7875 case IDENTIFIER_NODE:
cc23546e 7876 {
b3445994 7877 tree decl;
b3445994
MM
7878 cp_id_kind idk;
7879 tree qualifying_class;
7880 bool non_constant_expression_p;
7881 const char *error_msg;
7882
b3445994 7883 if (IDENTIFIER_TYPENAME_P (t))
cc23546e 7884 {
b3445994
MM
7885 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7886 t = mangle_conv_op_name_for_type (new_type);
cc23546e 7887 }
b3445994
MM
7888
7889 /* Look up the name. */
10b1d5e7 7890 decl = lookup_name (t, 0);
b3445994
MM
7891
7892 /* By convention, expressions use ERROR_MARK_NODE to indicate
7893 failure, not NULL_TREE. */
7894 if (decl == NULL_TREE)
7895 decl = error_mark_node;
7896
10b1d5e7 7897 decl = finish_id_expression (t, decl, NULL_TREE,
b3445994
MM
7898 &idk,
7899 &qualifying_class,
7900 /*constant_expression_p=*/false,
7901 /*allow_non_constant_expression_p=*/false,
7902 &non_constant_expression_p,
7903 &error_msg);
7904 if (error_msg)
7905 error (error_msg);
7906 if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
7907 decl = unqualified_name_lookup_error (decl);
7908 return decl;
cc23546e
JO
7909 }
7910
7911 case TEMPLATE_ID_EXPR:
7912 {
7913 tree object;
b3445994 7914 tree template = RECUR (TREE_OPERAND (t, 0));
bf12d54d
NS
7915 tree targs = TREE_OPERAND (t, 1);
7916
7917 if (targs)
7918 targs = tsubst_template_args (targs, args, complain, in_decl);
cc23546e
JO
7919
7920 if (TREE_CODE (template) == COMPONENT_REF)
7921 {
7922 object = TREE_OPERAND (template, 0);
7923 template = TREE_OPERAND (template, 1);
7924 }
7925 else
7926 object = NULL_TREE;
bd83b409 7927 template = lookup_template_function (template, targs);
cc23546e
JO
7928
7929 if (object)
7930 return build (COMPONENT_REF, TREE_TYPE (template),
7931 object, template);
7932 else
7933 return template;
7934 }
7935
7936 case INDIRECT_REF:
b3445994 7937 return build_x_indirect_ref (RECUR (TREE_OPERAND (t, 0)), "unary *");
cc23546e
JO
7938
7939 case CAST_EXPR:
7940 return build_functional_cast
7941 (tsubst (TREE_TYPE (t), args, complain, in_decl),
b3445994 7942 RECUR (TREE_OPERAND (t, 0)));
cc23546e
JO
7943
7944 case REINTERPRET_CAST_EXPR:
7945 return build_reinterpret_cast
7946 (tsubst (TREE_TYPE (t), args, complain, in_decl),
b3445994 7947 RECUR (TREE_OPERAND (t, 0)));
cc23546e
JO
7948
7949 case CONST_CAST_EXPR:
7950 return build_const_cast
7951 (tsubst (TREE_TYPE (t), args, complain, in_decl),
b3445994 7952 RECUR (TREE_OPERAND (t, 0)));
cc23546e
JO
7953
7954 case DYNAMIC_CAST_EXPR:
7955 return build_dynamic_cast
7956 (tsubst (TREE_TYPE (t), args, complain, in_decl),
b3445994 7957 RECUR (TREE_OPERAND (t, 0)));
cc23546e
JO
7958
7959 case STATIC_CAST_EXPR:
7960 return build_static_cast
7961 (tsubst (TREE_TYPE (t), args, complain, in_decl),
b3445994 7962 RECUR (TREE_OPERAND (t, 0)));
cc23546e 7963
cc23546e
JO
7964 case POSTDECREMENT_EXPR:
7965 case POSTINCREMENT_EXPR:
b3445994
MM
7966 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
7967 args, complain, in_decl);
ee76b931
MM
7968 return build_x_unary_op (TREE_CODE (t), op1);
7969
7970 case PREDECREMENT_EXPR:
7971 case PREINCREMENT_EXPR:
cc23546e
JO
7972 case NEGATE_EXPR:
7973 case BIT_NOT_EXPR:
cc23546e 7974 case ABS_EXPR:
d17811fd
MM
7975 case TRUTH_NOT_EXPR:
7976 case CONVERT_EXPR: /* Unary + */
7977 case REALPART_EXPR:
7978 case IMAGPART_EXPR:
b3445994 7979 return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
cc23546e 7980
cc23546e 7981 case ADDR_EXPR:
ee76b931
MM
7982 op1 = TREE_OPERAND (t, 0);
7983 if (TREE_CODE (op1) == SCOPE_REF)
7984 op1 = tsubst_qualified_id (op1, args, complain, in_decl,
7985 /*done=*/true, /*address_p=*/true);
7986 else
b3445994
MM
7987 op1 = tsubst_non_call_postfix_expression (op1, args, complain,
7988 in_decl);
fc2b8477
MM
7989 if (TREE_CODE (op1) == LABEL_DECL)
7990 return finish_label_address_expr (DECL_NAME (op1));
ee76b931
MM
7991 return build_x_unary_op (ADDR_EXPR, op1);
7992
cc23546e
JO
7993 case PLUS_EXPR:
7994 case MINUS_EXPR:
7995 case MULT_EXPR:
7996 case TRUNC_DIV_EXPR:
7997 case CEIL_DIV_EXPR:
7998 case FLOOR_DIV_EXPR:
7999 case ROUND_DIV_EXPR:
8000 case EXACT_DIV_EXPR:
8001 case BIT_AND_EXPR:
cc23546e
JO
8002 case BIT_IOR_EXPR:
8003 case BIT_XOR_EXPR:
8004 case TRUNC_MOD_EXPR:
8005 case FLOOR_MOD_EXPR:
8006 case TRUTH_ANDIF_EXPR:
8007 case TRUTH_ORIF_EXPR:
8008 case TRUTH_AND_EXPR:
8009 case TRUTH_OR_EXPR:
8010 case RSHIFT_EXPR:
8011 case LSHIFT_EXPR:
8012 case RROTATE_EXPR:
8013 case LROTATE_EXPR:
8014 case EQ_EXPR:
8015 case NE_EXPR:
8016 case MAX_EXPR:
8017 case MIN_EXPR:
8018 case LE_EXPR:
8019 case GE_EXPR:
8020 case LT_EXPR:
8021 case GT_EXPR:
8022 case MEMBER_REF:
b3445994 8023 case DOTSTAR_EXPR:
cc23546e
JO
8024 return build_x_binary_op
8025 (TREE_CODE (t),
b3445994
MM
8026 RECUR (TREE_OPERAND (t, 0)),
8027 RECUR (TREE_OPERAND (t, 1)));
cc23546e
JO
8028
8029 case SCOPE_REF:
ee76b931
MM
8030 return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
8031 /*address_p=*/false);
cc23546e
JO
8032
8033 case ARRAY_REF:
ee76b931
MM
8034 if (tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl)
8035 == NULL_TREE)
8036 /* new-type-id */
b3445994 8037 return build_nt (ARRAY_REF, NULL_TREE, RECUR (TREE_OPERAND (t, 1)));
ee76b931 8038
b3445994
MM
8039 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8040 args, complain, in_decl);
ee76b931
MM
8041 /* Remember that there was a reference to this entity. */
8042 if (DECL_P (op1))
8043 mark_used (op1);
b3445994 8044 return grok_array_decl (op1, RECUR (TREE_OPERAND (t, 1)));
cc23546e
JO
8045
8046 case SIZEOF_EXPR:
8047 case ALIGNOF_EXPR:
d17811fd
MM
8048 op1 = TREE_OPERAND (t, 0);
8049 if (!args)
8050 {
8051 /* When there are no ARGS, we are trying to evaluate a
8052 non-dependent expression from the parser. Trying to do
8053 the substitutions may not work. */
8054 if (!TYPE_P (op1))
8055 op1 = TREE_TYPE (op1);
8056 }
8057 else
8058 {
8059 ++skip_evaluation;
b3445994 8060 op1 = RECUR (op1);
d17811fd
MM
8061 --skip_evaluation;
8062 }
7a18b933
NS
8063 if (TYPE_P (op1))
8064 return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
d17811fd 8065 else
7a18b933 8066 return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
cc23546e
JO
8067
8068 case MODOP_EXPR:
8069 return build_x_modify_expr
b3445994 8070 (RECUR (TREE_OPERAND (t, 0)),
cc23546e 8071 TREE_CODE (TREE_OPERAND (t, 1)),
b3445994 8072 RECUR (TREE_OPERAND (t, 2)));
cc23546e
JO
8073
8074 case ARROW_EXPR:
b3445994
MM
8075 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8076 args, complain, in_decl);
ee76b931
MM
8077 /* Remember that there was a reference to this entity. */
8078 if (DECL_P (op1))
8079 mark_used (op1);
8080 return build_x_arrow (op1);
cc23546e
JO
8081
8082 case NEW_EXPR:
8083 return build_new
b3445994
MM
8084 (RECUR (TREE_OPERAND (t, 0)),
8085 RECUR (TREE_OPERAND (t, 1)),
8086 RECUR (TREE_OPERAND (t, 2)),
cc23546e
JO
8087 NEW_EXPR_USE_GLOBAL (t));
8088
8089 case DELETE_EXPR:
8090 return delete_sanity
b3445994
MM
8091 (RECUR (TREE_OPERAND (t, 0)),
8092 RECUR (TREE_OPERAND (t, 1)),
cc23546e
JO
8093 DELETE_EXPR_USE_VEC (t),
8094 DELETE_EXPR_USE_GLOBAL (t));
8095
8096 case COMPOUND_EXPR:
b3445994
MM
8097 return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
8098 RECUR (TREE_OPERAND (t, 1)));
cc23546e 8099
ee76b931 8100 case CALL_EXPR:
cc23546e 8101 {
ee76b931
MM
8102 tree function;
8103 tree call_args;
ee76b931 8104 bool qualified_p;
ee935db4 8105 bool koenig_p;
ee76b931
MM
8106
8107 function = TREE_OPERAND (t, 0);
6d80c4b9
MM
8108 /* When we parsed the expression, we determined whether or
8109 not Koenig lookup should be performed. */
8110 koenig_p = KOENIG_LOOKUP_P (t);
ee76b931 8111 if (TREE_CODE (function) == SCOPE_REF)
cc23546e 8112 {
ee76b931
MM
8113 qualified_p = true;
8114 function = tsubst_qualified_id (function, args, complain, in_decl,
8115 /*done=*/false,
8116 /*address_p=*/false);
cc23546e 8117 }
ee76b931 8118 else
cc23546e 8119 {
ee76b931
MM
8120 qualified_p = (TREE_CODE (function) == COMPONENT_REF
8121 && (TREE_CODE (TREE_OPERAND (function, 1))
8122 == SCOPE_REF));
8123 function = tsubst_copy_and_build (function, args, complain,
b3445994
MM
8124 in_decl,
8125 !qualified_p);
6d80c4b9
MM
8126 if (BASELINK_P (function))
8127 qualified_p = true;
cc23546e 8128 }
cc23546e 8129
b3445994 8130 call_args = RECUR (TREE_OPERAND (t, 1));
bbaab916 8131
ee935db4 8132 if (koenig_p
b3445994
MM
8133 && (is_overloaded_fn (function)
8134 || DECL_P (function)
8135 || TREE_CODE (function) == IDENTIFIER_NODE))
6d80c4b9
MM
8136 function = perform_koenig_lookup (function, call_args);
8137
8138 if (TREE_CODE (function) == IDENTIFIER_NODE)
b3445994 8139 {
6d80c4b9
MM
8140 unqualified_name_lookup_error (function);
8141 return error_mark_node;
b3445994
MM
8142 }
8143
8144 /* Remember that there was a reference to this entity. */
8145 if (DECL_P (function))
8146 mark_used (function);
8147
8148 function = convert_from_reference (function);
d17811fd
MM
8149
8150 if (TREE_CODE (function) == OFFSET_REF)
8151 return build_offset_ref_call_from_tree (function, call_args);
8152 if (TREE_CODE (function) == COMPONENT_REF)
8153 return (build_new_method_call
8154 (TREE_OPERAND (function, 0),
8155 TREE_OPERAND (function, 1),
8156 call_args, NULL_TREE,
8157 qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL));
8158 return finish_call_expr (function, call_args,
6d80c4b9
MM
8159 /*disallow_virtual=*/qualified_p,
8160 koenig_p);
cc23546e
JO
8161 }
8162
8163 case COND_EXPR:
8164 return build_x_conditional_expr
b3445994
MM
8165 (RECUR (TREE_OPERAND (t, 0)),
8166 RECUR (TREE_OPERAND (t, 1)),
8167 RECUR (TREE_OPERAND (t, 2)));
cc23546e
JO
8168
8169 case PSEUDO_DTOR_EXPR:
8170 return finish_pseudo_destructor_expr
b3445994
MM
8171 (RECUR (TREE_OPERAND (t, 0)),
8172 RECUR (TREE_OPERAND (t, 1)),
8173 RECUR (TREE_OPERAND (t, 2)));
cc23546e
JO
8174
8175 case TREE_LIST:
8176 {
8177 tree purpose, value, chain;
8178
8179 if (t == void_list_node)
8180 return t;
8181
8182 purpose = TREE_PURPOSE (t);
8183 if (purpose)
b3445994 8184 purpose = RECUR (purpose);
cc23546e
JO
8185 value = TREE_VALUE (t);
8186 if (value)
b3445994 8187 value = RECUR (value);
cc23546e
JO
8188 chain = TREE_CHAIN (t);
8189 if (chain && chain != void_type_node)
b3445994 8190 chain = RECUR (chain);
cc23546e
JO
8191 if (purpose == TREE_PURPOSE (t)
8192 && value == TREE_VALUE (t)
8193 && chain == TREE_CHAIN (t))
8194 return t;
8195 return tree_cons (purpose, value, chain);
8196 }
8197
8198 case COMPONENT_REF:
8199 {
ee76b931
MM
8200 tree object;
8201 tree member;
8202
b3445994
MM
8203 object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8204 args, complain, in_decl);
ee76b931
MM
8205 /* Remember that there was a reference to this entity. */
8206 if (DECL_P (object))
8207 mark_used (object);
8208
8209 member = TREE_OPERAND (t, 1);
8210 if (BASELINK_P (member))
8211 member = tsubst_baselink (member,
8212 non_reference (TREE_TYPE (object)),
8213 args, complain, in_decl);
8214 else
8215 member = tsubst_copy (member, args, complain, in_decl);
cc23546e
JO
8216
8217 if (!CLASS_TYPE_P (TREE_TYPE (object)))
8218 {
8219 if (TREE_CODE (member) == BIT_NOT_EXPR)
8220 return finish_pseudo_destructor_expr (object,
8221 NULL_TREE,
8222 TREE_TYPE (object));
8223 else if (TREE_CODE (member) == SCOPE_REF
8224 && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
8225 return finish_pseudo_destructor_expr (object,
8226 object,
8227 TREE_TYPE (object));
8228 }
8229 else if (TREE_CODE (member) == SCOPE_REF
8230 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
8231 {
8232 tree tmpl;
8233 tree args;
8234
8235 /* Lookup the template functions now that we know what the
8236 scope is. */
8237 tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
8238 args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
22038b2c 8239 member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
12483c9f
NS
8240 /*is_type_p=*/false,
8241 /*complain=*/false);
cc23546e
JO
8242 if (BASELINK_P (member))
8243 BASELINK_FUNCTIONS (member)
8244 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
8245 args);
8246 else
8247 {
22038b2c 8248 qualified_name_lookup_error (TREE_TYPE (object), tmpl);
cc23546e
JO
8249 return error_mark_node;
8250 }
8251 }
a3f10e50
NS
8252 else if (TREE_CODE (member) == FIELD_DECL)
8253 return finish_non_static_data_member (member, object, NULL_TREE);
cc23546e
JO
8254
8255 return finish_class_member_access_expr (object, member);
8256 }
8257
8258 case THROW_EXPR:
8259 return build_throw
b3445994 8260 (RECUR (TREE_OPERAND (t, 0)));
cc23546e
JO
8261
8262 case CONSTRUCTOR:
8263 {
8264 tree r;
8265 tree elts;
8266 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8267 bool purpose_p;
8268
8269 /* digest_init will do the wrong thing if we let it. */
8270 if (type && TYPE_PTRMEMFUNC_P (type))
8271 return t;
8272
8273 r = NULL_TREE;
8274 /* We do not want to process the purpose of aggregate
8275 initializers as they are identifier nodes which will be
8276 looked up by digest_init. */
8277 purpose_p = !(type && IS_AGGR_TYPE (type));
db77ef4c 8278 for (elts = CONSTRUCTOR_ELTS (t);
cc23546e
JO
8279 elts;
8280 elts = TREE_CHAIN (elts))
8281 {
8282 tree purpose = TREE_PURPOSE (elts);
8283 tree value = TREE_VALUE (elts);
8284
8285 if (purpose && purpose_p)
b3445994
MM
8286 purpose = RECUR (purpose);
8287 value = RECUR (value);
cc23546e
JO
8288 r = tree_cons (purpose, value, r);
8289 }
8290
dcf92453 8291 r = build_constructor (NULL_TREE, nreverse (r));
cc23546e
JO
8292 TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
8293
8294 if (type)
8295 return digest_init (type, r, 0);
8296 return r;
8297 }
8298
8299 case TYPEID_EXPR:
8300 {
b3445994 8301 tree operand_0 = RECUR (TREE_OPERAND (t, 0));
cc23546e
JO
8302 if (TYPE_P (operand_0))
8303 return get_typeid (operand_0);
8304 return build_typeid (operand_0);
8305 }
8306
8307 case PARM_DECL:
8308 return convert_from_reference (tsubst_copy (t, args, complain, in_decl));
8309
8310 case VAR_DECL:
ee76b931
MM
8311 if (args)
8312 t = tsubst_copy (t, args, complain, in_decl);
d17811fd
MM
8313 else
8314 /* If there are no ARGS, then we are evaluating a
8315 non-dependent expression. If the expression is
8316 non-dependent, the variable must be a constant. */
8317 t = DECL_INITIAL (t);
ee76b931 8318 return convert_from_reference (t);
cc23546e
JO
8319
8320 case VA_ARG_EXPR:
b3445994
MM
8321 return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
8322 tsubst_copy (TREE_TYPE (t), args, complain,
8323 in_decl));
cc23546e
JO
8324
8325 default:
8326 return tsubst_copy (t, args, complain, in_decl);
8327 }
b3445994
MM
8328
8329#undef RECUR
cc23546e
JO
8330}
8331
3e4a3562
NS
8332/* Verify that the instantiated ARGS are valid. For type arguments,
8333 make sure that the type's linkage is ok. For non-type arguments,
34cd5ae7 8334 make sure they are constants if they are integral or enumerations.
9bcb9aae 8335 Emit an error under control of COMPLAIN, and return TRUE on error. */
3e4a3562
NS
8336
8337static bool
3a978d72 8338check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
3e4a3562
NS
8339{
8340 int ix, len = DECL_NTPARMS (tmpl);
8341 bool result = false;
8342
8343 for (ix = 0; ix != len; ix++)
8344 {
8345 tree t = TREE_VEC_ELT (args, ix);
8346
8347 if (TYPE_P (t))
8348 {
8349 /* [basic.link]: A name with no linkage (notably, the name
8350 of a class or enumeration declared in a local scope)
8351 shall not be used to declare an entity with linkage.
8352 This implies that names with no linkage cannot be used as
8353 template arguments. */
8354 tree nt = no_linkage_check (t);
8355
8356 if (nt)
8357 {
8358 if (!(complain & tf_error))
8359 /*OK*/;
8360 else if (TYPE_ANONYMOUS_P (nt))
8361 error ("`%T' uses anonymous type", t);
8362 else
8363 error ("`%T' uses local type `%T'", t, nt);
8364 result = true;
8365 }
8366 /* In order to avoid all sorts of complications, we do not
8367 allow variably-modified types as template arguments. */
8368 else if (variably_modified_type_p (t))
8369 {
8370 if (complain & tf_error)
8371 error ("`%T' is a variably modified type", t);
8372 result = true;
8373 }
8374 }
8375 /* A non-type argument of integral or enumerated type must be a
8376 constant. */
8377 else if (TREE_TYPE (t)
8378 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
8379 && !TREE_CONSTANT (t))
8380 {
8381 if (complain & tf_error)
8382 error ("integral expression `%E' is not constant", t);
8383 result = true;
8384 }
8385 }
8386 if (result && complain & tf_error)
8387 error (" trying to instantiate `%D'", tmpl);
8388 return result;
8389}
8390
6ba89f8e 8391/* Instantiate the indicated variable or function template TMPL with
36a117a5
MM
8392 the template arguments in TARG_PTR. */
8393
5566b478 8394tree
3a978d72 8395instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
8d08fdba 8396{
5566b478 8397 tree fndecl;
36a117a5
MM
8398 tree gen_tmpl;
8399 tree spec;
5566b478 8400
27fafc8d
JM
8401 if (tmpl == error_mark_node)
8402 return error_mark_node;
8403
386b8a85
JM
8404 my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 283);
8405
db9b2174
MM
8406 /* If this function is a clone, handle it specially. */
8407 if (DECL_CLONED_FUNCTION_P (tmpl))
3ad97789 8408 {
3e4a3562
NS
8409 tree spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
8410 complain);
3ad97789
NS
8411 tree clone;
8412
c6002625 8413 /* Look for the clone. */
3ad97789
NS
8414 for (clone = TREE_CHAIN (spec);
8415 clone && DECL_CLONED_FUNCTION_P (clone);
8416 clone = TREE_CHAIN (clone))
8417 if (DECL_NAME (clone) == DECL_NAME (tmpl))
8418 return clone;
8419 /* We should always have found the clone by now. */
a98facb0 8420 abort ();
3ad97789
NS
8421 return NULL_TREE;
8422 }
8423
36a117a5
MM
8424 /* Check to see if we already have this specialization. */
8425 spec = retrieve_specialization (tmpl, targ_ptr);
8426 if (spec != NULL_TREE)
8427 return spec;
8428
f9a7ae04
MM
8429 gen_tmpl = most_general_template (tmpl);
8430 if (tmpl != gen_tmpl)
386b8a85 8431 {
36a117a5
MM
8432 /* The TMPL is a partial instantiation. To get a full set of
8433 arguments we must add the arguments used to perform the
8434 partial instantiation. */
8435 targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
8436 targ_ptr);
36a117a5
MM
8437
8438 /* Check to see if we already have this specialization. */
8439 spec = retrieve_specialization (gen_tmpl, targ_ptr);
75650646
MM
8440 if (spec != NULL_TREE)
8441 return spec;
386b8a85
JM
8442 }
8443
3e4a3562
NS
8444 if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
8445 complain))
8446 return error_mark_node;
8447
2b907f5c
KL
8448 /* We are building a FUNCTION_DECL, during which the access of its
8449 parameters and return types have to be checked. However this
8450 FUNCTION_DECL which is the desired context for access checking
8451 is not built yet. We solve this chicken-and-egg problem by
8452 deferring all checks until we have the FUNCTION_DECL. */
8453 push_deferring_access_checks (dk_deferred);
5c74d5b0 8454
5566b478 8455 /* substitute template parameters */
17aec3eb 8456 fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
3e4a3562 8457 targ_ptr, complain, gen_tmpl);
5c74d5b0 8458
2b907f5c
KL
8459 /* Now we know the specialization, compute access previously
8460 deferred. */
8461 push_access_scope (fndecl);
8462 perform_deferred_access_checks ();
8463 pop_access_scope (fndecl);
8464 pop_deferring_access_checks ();
5c74d5b0 8465
36a117a5
MM
8466 /* The DECL_TI_TEMPLATE should always be the immediate parent
8467 template, not the most general template. */
8468 DECL_TI_TEMPLATE (fndecl) = tmpl;
8d08fdba 8469
824b9a4c
MS
8470 if (flag_external_templates)
8471 add_pending_template (fndecl);
8472
94350948 8473 /* If we've just instantiated the main entry point for a function,
3ad97789
NS
8474 instantiate all the alternate entry points as well. We do this
8475 by cloning the instantiation of the main entry point, not by
8476 instantiating the template clones. */
8477 if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
8478 clone_function_decl (fndecl, /*update_method_vec_p=*/0);
94350948 8479
5566b478 8480 return fndecl;
8d08fdba 8481}
5566b478 8482
4393e105
MM
8483/* The FN is a TEMPLATE_DECL for a function. The ARGS are the
8484 arguments that are being used when calling it. TARGS is a vector
8485 into which the deduced template arguments are placed.
8d08fdba
MS
8486
8487 Return zero for success, 2 for an incomplete match that doesn't resolve
8488 all the types, and 1 for complete failure. An error message will be
8489 printed only for an incomplete match.
8490
e5214479
JM
8491 If FN is a conversion operator, or we are trying to produce a specific
8492 specialization, RETURN_TYPE is the return type desired.
9f54c803
MM
8493
8494 The EXPLICIT_TARGS are explicit template arguments provided via a
8495 template-id.
6467930b 8496
830bfa74
MM
8497 The parameter STRICT is one of:
8498
8499 DEDUCE_CALL:
8500 We are deducing arguments for a function call, as in
8501 [temp.deduct.call].
8502
8503 DEDUCE_CONV:
8504 We are deducing arguments for a conversion function, as in
8505 [temp.deduct.conv].
8506
8507 DEDUCE_EXACT:
62e4a758
NS
8508 We are deducing arguments when doing an explicit instantiation
8509 as in [temp.explicit], when determining an explicit specialization
8510 as in [temp.expl.spec], or when taking the address of a function
8511 template, as in [temp.deduct.funcaddr].
8512
8513 DEDUCE_ORDER:
830bfa74
MM
8514 We are deducing arguments when calculating the partial
8515 ordering between specializations of function or class
62e4a758 8516 templates, as in [temp.func.order] and [temp.class.order].
4393e105 8517
e5214479
JM
8518 LEN is the number of parms to consider before returning success, or -1
8519 for all. This is used in partial ordering to avoid comparing parms for
8520 which no actual argument was passed, since they are not considered in
8521 overload resolution (and are explicitly excluded from consideration in
8522 partial ordering in [temp.func.order]/6). */
8d08fdba
MS
8523
8524int
3a978d72
NN
8525fn_type_unification (tree fn,
8526 tree explicit_targs,
8527 tree targs,
8528 tree args,
8529 tree return_type,
8530 unification_kind_t strict,
8531 int len)
386b8a85 8532{
4393e105
MM
8533 tree parms;
8534 tree fntype;
adecb3f4 8535 int result;
386b8a85 8536
4393e105 8537 my_friendly_assert (TREE_CODE (fn) == TEMPLATE_DECL, 0);
2b59fc25 8538
4393e105
MM
8539 fntype = TREE_TYPE (fn);
8540 if (explicit_targs)
75650646 8541 {
4393e105
MM
8542 /* [temp.deduct]
8543
8544 The specified template arguments must match the template
8545 parameters in kind (i.e., type, nontype, template), and there
8546 must not be more arguments than there are parameters;
8547 otherwise type deduction fails.
8548
8549 Nontype arguments must match the types of the corresponding
8550 nontype template parameters, or must be convertible to the
8551 types of the corresponding nontype parameters as specified in
8552 _temp.arg.nontype_, otherwise type deduction fails.
8553
8554 All references in the function type of the function template
8555 to the corresponding template parameters are replaced by the
8556 specified template argument values. If a substitution in a
8557 template parameter or in the function type of the function
8558 template results in an invalid type, type deduction fails. */
8559 int i;
8560 tree converted_args;
ffd49b19 8561 bool incomplete;
75650646 8562
4393e105
MM
8563 converted_args
8564 = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
c2ea3a40 8565 explicit_targs, NULL_TREE, tf_none,
4393e105
MM
8566 /*require_all_arguments=*/0));
8567 if (converted_args == error_mark_node)
75650646 8568 return 1;
386b8a85 8569
ffd49b19
NS
8570 /* Substitute the explicit args into the function type. This is
8571 necessary so that, for instance, explicitly declared function
8572 arguments can match null pointed constants. If we were given
8573 an incomplete set of explicit args, we must not do semantic
8574 processing during substitution as we could create partial
8575 instantiations. */
8576 incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
8577 processing_template_decl += incomplete;
c2ea3a40 8578 fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
ffd49b19
NS
8579 processing_template_decl -= incomplete;
8580
4393e105
MM
8581 if (fntype == error_mark_node)
8582 return 1;
050367a3 8583
4393e105 8584 /* Place the explicitly specified arguments in TARGS. */
ffd49b19 8585 for (i = NUM_TMPL_ARGS (converted_args); i--;)
4393e105 8586 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
75650646 8587 }
4393e105
MM
8588
8589 parms = TYPE_ARG_TYPES (fntype);
e5214479
JM
8590 /* Never do unification on the 'this' parameter. */
8591 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
8592 parms = TREE_CHAIN (parms);
8d3631f8
NS
8593
8594 if (return_type)
8595 {
8596 /* We've been given a return type to match, prepend it. */
8597 parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
8598 args = tree_cons (NULL_TREE, return_type, args);
16e42e7c
JM
8599 if (len >= 0)
8600 ++len;
4393e105
MM
8601 }
8602
4393e105
MM
8603 /* We allow incomplete unification without an error message here
8604 because the standard doesn't seem to explicitly prohibit it. Our
8605 callers must be ready to deal with unification failures in any
8606 event. */
adecb3f4
MM
8607 result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
8608 targs, parms, args, /*subr=*/0,
e5214479 8609 strict, /*allow_incomplete*/1, len);
adecb3f4
MM
8610
8611 if (result == 0)
8612 /* All is well so far. Now, check:
8613
8614 [temp.deduct]
8615
8616 When all template arguments have been deduced, all uses of
8617 template parameters in nondeduced contexts are replaced with
8618 the corresponding deduced argument values. If the
8619 substitution results in an invalid type, as described above,
8620 type deduction fails. */
c2ea3a40 8621 if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
adecb3f4
MM
8622 == error_mark_node)
8623 return 1;
8624
8625 return result;
830bfa74
MM
8626}
8627
8628/* Adjust types before performing type deduction, as described in
8629 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
4c7d0dff
MM
8630 sections are symmetric. PARM is the type of a function parameter
8631 or the return type of the conversion function. ARG is the type of
8632 the argument passed to the call, or the type of the value
dc957d14 8633 initialized with the result of the conversion function. */
386b8a85 8634
62e4a758 8635static int
3a978d72
NN
8636maybe_adjust_types_for_deduction (unification_kind_t strict,
8637 tree* parm,
8638 tree* arg)
830bfa74 8639{
62e4a758
NS
8640 int result = 0;
8641
830bfa74
MM
8642 switch (strict)
8643 {
8644 case DEDUCE_CALL:
8645 break;
8646
8647 case DEDUCE_CONV:
8648 {
4c7d0dff
MM
8649 /* Swap PARM and ARG throughout the remainder of this
8650 function; the handling is precisely symmetric since PARM
8651 will initialize ARG rather than vice versa. */
830bfa74
MM
8652 tree* temp = parm;
8653 parm = arg;
8654 arg = temp;
8655 break;
8656 }
8657
8658 case DEDUCE_EXACT:
8659 /* There is nothing to do in this case. */
62e4a758 8660 return 0;
830bfa74 8661
62e4a758
NS
8662 case DEDUCE_ORDER:
8663 /* DR 214. [temp.func.order] is underspecified, and leads to no
8664 ordering between things like `T *' and `T const &' for `U *'.
8665 The former has T=U and the latter T=U*. The former looks more
8666 specialized and John Spicer considers it well-formed (the EDG
8667 compiler accepts it).
8668
8669 John also confirms that deduction should proceed as in a function
996065b4 8670 call. Which implies the usual ARG and PARM conversions as DEDUCE_CALL.
62e4a758
NS
8671 However, in ordering, ARG can have REFERENCE_TYPE, but no argument
8672 to an actual call can have such a type.
8673
996065b4
NS
8674 If both ARG and PARM are REFERENCE_TYPE, we change neither.
8675 If only ARG is a REFERENCE_TYPE, we look through that and then
8676 proceed as with DEDUCE_CALL (which could further convert it). */
62e4a758
NS
8677 if (TREE_CODE (*arg) == REFERENCE_TYPE)
8678 {
8679 if (TREE_CODE (*parm) == REFERENCE_TYPE)
8680 return 0;
8681 *arg = TREE_TYPE (*arg);
62e4a758
NS
8682 }
8683 break;
830bfa74 8684 default:
a98facb0 8685 abort ();
830bfa74
MM
8686 }
8687
8688 if (TREE_CODE (*parm) != REFERENCE_TYPE)
8689 {
8690 /* [temp.deduct.call]
8691
8692 If P is not a reference type:
8693
8694 --If A is an array type, the pointer type produced by the
8695 array-to-pointer standard conversion (_conv.array_) is
8696 used in place of A for type deduction; otherwise,
8697
8698 --If A is a function type, the pointer type produced by
8699 the function-to-pointer standard conversion
8700 (_conv.func_) is used in place of A for type deduction;
8701 otherwise,
8702
8703 --If A is a cv-qualified type, the top level
8704 cv-qualifiers of A's type are ignored for type
8705 deduction. */
8706 if (TREE_CODE (*arg) == ARRAY_TYPE)
8707 *arg = build_pointer_type (TREE_TYPE (*arg));
d8f8dca1 8708 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
830bfa74
MM
8709 *arg = build_pointer_type (*arg);
8710 else
8711 *arg = TYPE_MAIN_VARIANT (*arg);
8712 }
8713
8714 /* [temp.deduct.call]
8715
8716 If P is a cv-qualified type, the top level cv-qualifiers
8717 of P's type are ignored for type deduction. If P is a
8718 reference type, the type referred to by P is used for
8719 type deduction. */
8720 *parm = TYPE_MAIN_VARIANT (*parm);
8721 if (TREE_CODE (*parm) == REFERENCE_TYPE)
62e4a758
NS
8722 {
8723 *parm = TREE_TYPE (*parm);
8724 result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
8725 }
1c82cc90
NS
8726
8727 /* DR 322. For conversion deduction, remove a reference type on parm
8728 too (which has been swapped into ARG). */
8729 if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
8730 *arg = TREE_TYPE (*arg);
8731
62e4a758 8732 return result;
386b8a85
JM
8733}
8734
e5214479 8735/* Most parms like fn_type_unification.
9f54c803
MM
8736
8737 If SUBR is 1, we're being called recursively (to unify the
8738 arguments of a function or method parameter of a function
8739 template). */
386b8a85 8740
4966381a 8741static int
3a978d72
NN
8742type_unification_real (tree tparms,
8743 tree targs,
8744 tree xparms,
8745 tree xargs,
8746 int subr,
8747 unification_kind_t strict,
8748 int allow_incomplete,
8749 int xlen)
8d08fdba
MS
8750{
8751 tree parm, arg;
8752 int i;
8753 int ntparms = TREE_VEC_LENGTH (tparms);
830bfa74 8754 int sub_strict;
bd0d5d4a
JM
8755 int saw_undeduced = 0;
8756 tree parms, args;
8757 int len;
8d08fdba
MS
8758
8759 my_friendly_assert (TREE_CODE (tparms) == TREE_VEC, 289);
bd0d5d4a
JM
8760 my_friendly_assert (xparms == NULL_TREE
8761 || TREE_CODE (xparms) == TREE_LIST, 290);
ee3071ef 8762 my_friendly_assert (!xargs || TREE_CODE (xargs) == TREE_LIST, 291);
8d08fdba
MS
8763 my_friendly_assert (ntparms > 0, 292);
8764
830bfa74
MM
8765 switch (strict)
8766 {
8767 case DEDUCE_CALL:
028d1f20
NS
8768 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
8769 | UNIFY_ALLOW_DERIVED);
830bfa74
MM
8770 break;
8771
8772 case DEDUCE_CONV:
8773 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
8774 break;
8775
8776 case DEDUCE_EXACT:
8777 sub_strict = UNIFY_ALLOW_NONE;
8778 break;
62e4a758
NS
8779
8780 case DEDUCE_ORDER:
8781 sub_strict = UNIFY_ALLOW_NONE;
8782 break;
830bfa74
MM
8783
8784 default:
a98facb0 8785 abort ();
830bfa74
MM
8786 }
8787
bd0d5d4a 8788 if (xlen == 0)
e5214479
JM
8789 return 0;
8790
bd0d5d4a
JM
8791 again:
8792 parms = xparms;
8793 args = xargs;
8794 len = xlen;
8795
8d08fdba
MS
8796 while (parms
8797 && parms != void_list_node
8798 && args
8799 && args != void_list_node)
8800 {
8801 parm = TREE_VALUE (parms);
8802 parms = TREE_CHAIN (parms);
8803 arg = TREE_VALUE (args);
8804 args = TREE_CHAIN (args);
8805
8806 if (arg == error_mark_node)
8807 return 1;
8808 if (arg == unknown_type_node)
34016c81
JM
8809 /* We can't deduce anything from this, but we might get all the
8810 template args from other function args. */
8811 continue;
b7484fbe 8812
03e70705
JM
8813 /* Conversions will be performed on a function argument that
8814 corresponds with a function parameter that contains only
8815 non-deducible template parameters and explicitly specified
8816 template parameters. */
8817 if (! uses_template_parms (parm))
b7484fbe 8818 {
03e70705
JM
8819 tree type;
8820
2f939d94 8821 if (!TYPE_P (arg))
03e70705
JM
8822 type = TREE_TYPE (arg);
8823 else
8824 {
8825 type = arg;
8826 arg = NULL_TREE;
8827 }
8828
62e4a758 8829 if (strict == DEDUCE_EXACT || strict == DEDUCE_ORDER)
03e70705 8830 {
3bfdc719 8831 if (same_type_p (parm, type))
03e70705
JM
8832 continue;
8833 }
03e70705 8834 else
343c89cd
JM
8835 /* It might work; we shouldn't check now, because we might
8836 get into infinite recursion. Overload resolution will
8837 handle it. */
8838 continue;
03e70705 8839
b7484fbe
MS
8840 return 1;
8841 }
8842
2f939d94 8843 if (!TYPE_P (arg))
8d08fdba
MS
8844 {
8845 my_friendly_assert (TREE_TYPE (arg) != NULL_TREE, 293);
34016c81 8846 if (type_unknown_p (arg))
28cbf42c 8847 {
34016c81
JM
8848 /* [temp.deduct.type] A template-argument can be deduced from
8849 a pointer to function or pointer to member function
8850 argument if the set of overloaded functions does not
8851 contain function templates and at most one of a set of
8852 overloaded functions provides a unique match. */
8853
8854 if (resolve_overloaded_unification
4393e105 8855 (tparms, targs, parm, arg, strict, sub_strict)
34016c81
JM
8856 != 0)
8857 return 1;
8858 continue;
28cbf42c 8859 }
8d08fdba 8860 arg = TREE_TYPE (arg);
08476342
NS
8861 if (arg == error_mark_node)
8862 return 1;
8d08fdba 8863 }
62e4a758
NS
8864
8865 {
8866 int arg_strict = sub_strict;
8867
8868 if (!subr)
8869 arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
4393e105 8870
62e4a758
NS
8871 if (unify (tparms, targs, parm, arg, arg_strict))
8872 return 1;
8873 }
e5214479
JM
8874
8875 /* Are we done with the interesting parms? */
8876 if (--len == 0)
bd0d5d4a 8877 goto done;
8d08fdba
MS
8878 }
8879 /* Fail if we've reached the end of the parm list, and more args
8880 are present, and the parm list isn't variadic. */
8881 if (args && args != void_list_node && parms == void_list_node)
8882 return 1;
8883 /* Fail if parms are left and they don't have default values. */
8884 if (parms
8885 && parms != void_list_node
8886 && TREE_PURPOSE (parms) == NULL_TREE)
8887 return 1;
bd0d5d4a
JM
8888
8889 done:
8d08fdba
MS
8890 if (!subr)
8891 for (i = 0; i < ntparms; i++)
050367a3 8892 if (TREE_VEC_ELT (targs, i) == NULL_TREE)
8d08fdba 8893 {
bd0d5d4a
JM
8894 tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
8895
8896 /* If this is an undeduced nontype parameter that depends on
8897 a type parameter, try another pass; its type may have been
8898 deduced from a later argument than the one from which
8899 this parameter can be deduced. */
8900 if (TREE_CODE (tparm) == PARM_DECL
8901 && uses_template_parms (TREE_TYPE (tparm))
8902 && !saw_undeduced++)
8903 goto again;
8904
386b8a85 8905 if (!allow_incomplete)
8251199e 8906 error ("incomplete type unification");
8d08fdba
MS
8907 return 2;
8908 }
8909 return 0;
8910}
8911
34016c81
JM
8912/* Subroutine of type_unification_real. Args are like the variables at the
8913 call site. ARG is an overloaded function (or template-id); we try
8914 deducing template args from each of the overloads, and if only one
8915 succeeds, we go with that. Modifies TARGS and returns 0 on success. */
8916
8917static int
3a978d72
NN
8918resolve_overloaded_unification (tree tparms,
8919 tree targs,
8920 tree parm,
8921 tree arg,
8922 unification_kind_t strict,
8923 int sub_strict)
34016c81
JM
8924{
8925 tree tempargs = copy_node (targs);
8926 int good = 0;
f23fb7f5 8927 bool addr_p;
34016c81
JM
8928
8929 if (TREE_CODE (arg) == ADDR_EXPR)
f23fb7f5
MM
8930 {
8931 arg = TREE_OPERAND (arg, 0);
8932 addr_p = true;
8933 }
8934 else
8935 addr_p = false;
9f3d9e46 8936
d8f8dca1
MM
8937 if (TREE_CODE (arg) == COMPONENT_REF)
8938 /* Handle `&x' where `x' is some static or non-static member
8939 function name. */
8940 arg = TREE_OPERAND (arg, 1);
8941
05e0b2f4
JM
8942 if (TREE_CODE (arg) == OFFSET_REF)
8943 arg = TREE_OPERAND (arg, 1);
8944
9f3d9e46 8945 /* Strip baselink information. */
50ad9642
MM
8946 if (BASELINK_P (arg))
8947 arg = BASELINK_FUNCTIONS (arg);
9f3d9e46 8948
34016c81
JM
8949 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
8950 {
8951 /* If we got some explicit template args, we need to plug them into
8952 the affected templates before we try to unify, in case the
8953 explicit args will completely resolve the templates in question. */
8954
8955 tree expl_subargs = TREE_OPERAND (arg, 1);
8956 arg = TREE_OPERAND (arg, 0);
8957
8958 for (; arg; arg = OVL_NEXT (arg))
8959 {
8960 tree fn = OVL_CURRENT (arg);
8961 tree subargs, elem;
8962
8963 if (TREE_CODE (fn) != TEMPLATE_DECL)
8964 continue;
8965
17aec3eb
RK
8966 subargs = get_bindings_overload (fn, DECL_TEMPLATE_RESULT (fn),
8967 expl_subargs);
34016c81
JM
8968 if (subargs)
8969 {
c2ea3a40 8970 elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
f23fb7f5
MM
8971 good += try_one_overload (tparms, targs, tempargs, parm,
8972 elem, strict, sub_strict, addr_p);
34016c81
JM
8973 }
8974 }
8975 }
db0f613d
KL
8976 else if (TREE_CODE (arg) == OVERLOAD
8977 || TREE_CODE (arg) == FUNCTION_DECL)
34016c81
JM
8978 {
8979 for (; arg; arg = OVL_NEXT (arg))
f23fb7f5
MM
8980 good += try_one_overload (tparms, targs, tempargs, parm,
8981 TREE_TYPE (OVL_CURRENT (arg)),
8982 strict, sub_strict, addr_p);
34016c81
JM
8983 }
8984 else
a98facb0 8985 abort ();
34016c81
JM
8986
8987 /* [temp.deduct.type] A template-argument can be deduced from a pointer
8988 to function or pointer to member function argument if the set of
8989 overloaded functions does not contain function templates and at most
8990 one of a set of overloaded functions provides a unique match.
8991
8992 So if we found multiple possibilities, we return success but don't
8993 deduce anything. */
8994
8995 if (good == 1)
8996 {
8997 int i = TREE_VEC_LENGTH (targs);
8998 for (; i--; )
8999 if (TREE_VEC_ELT (tempargs, i))
9000 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
9001 }
9002 if (good)
9003 return 0;
9004
9005 return 1;
9006}
9007
9008/* Subroutine of resolve_overloaded_unification; does deduction for a single
9009 overload. Fills TARGS with any deduced arguments, or error_mark_node if
9010 different overloads deduce different arguments for a given parm.
f23fb7f5
MM
9011 ADDR_P is true if the expression for which deduction is being
9012 performed was of the form "& fn" rather than simply "fn".
9013
34016c81
JM
9014 Returns 1 on success. */
9015
9016static int
3a978d72
NN
9017try_one_overload (tree tparms,
9018 tree orig_targs,
9019 tree targs,
9020 tree parm,
9021 tree arg,
9022 unification_kind_t strict,
f23fb7f5
MM
9023 int sub_strict,
9024 bool addr_p)
34016c81
JM
9025{
9026 int nargs;
9027 tree tempargs;
9028 int i;
9029
9030 /* [temp.deduct.type] A template-argument can be deduced from a pointer
9031 to function or pointer to member function argument if the set of
9032 overloaded functions does not contain function templates and at most
9033 one of a set of overloaded functions provides a unique match.
9034
9035 So if this is a template, just return success. */
9036
9037 if (uses_template_parms (arg))
9038 return 1;
9039
f23fb7f5
MM
9040 if (TREE_CODE (arg) == METHOD_TYPE)
9041 arg = build_ptrmemfunc_type (build_pointer_type (arg));
9042 else if (addr_p)
9043 arg = build_pointer_type (arg);
9044
62e4a758 9045 sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
34016c81
JM
9046
9047 /* We don't copy orig_targs for this because if we have already deduced
9048 some template args from previous args, unify would complain when we
9049 try to deduce a template parameter for the same argument, even though
9050 there isn't really a conflict. */
9051 nargs = TREE_VEC_LENGTH (targs);
f31c0a32 9052 tempargs = make_tree_vec (nargs);
34016c81 9053
4393e105 9054 if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
34016c81
JM
9055 return 0;
9056
9057 /* First make sure we didn't deduce anything that conflicts with
e97e5263 9058 explicitly specified args. */
34016c81
JM
9059 for (i = nargs; i--; )
9060 {
9061 tree elt = TREE_VEC_ELT (tempargs, i);
e97e5263 9062 tree oldelt = TREE_VEC_ELT (orig_targs, i);
34016c81
JM
9063
9064 if (elt == NULL_TREE)
9065 continue;
9066 else if (uses_template_parms (elt))
9067 {
9068 /* Since we're unifying against ourselves, we will fill in template
9069 args used in the function parm list with our own template parms.
9070 Discard them. */
9071 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
9072 continue;
9073 }
9074 else if (oldelt && ! template_args_equal (oldelt, elt))
9075 return 0;
9076 }
9077
9078 for (i = nargs; i--; )
9079 {
9080 tree elt = TREE_VEC_ELT (tempargs, i);
9081
9082 if (elt)
9083 TREE_VEC_ELT (targs, i) = elt;
9084 }
9085
9086 return 1;
9087}
9088
74601d7c
KL
9089/* Verify that nondeduce template argument agrees with the type
9090 obtained from argument deduction. Return nonzero if the
9091 verification fails.
9092
9093 For example:
9094
9095 struct A { typedef int X; };
9096 template <class T, class U> struct C {};
9097 template <class T> struct C<T, typename T::X> {};
9098
9099 Then with the instantiation `C<A, int>', we can deduce that
9100 `T' is `A' but unify () does not check whether `typename T::X'
9101 is `int'. This function ensure that they agree.
9102
9103 TARGS, PARMS are the same as the arguments of unify.
9104 ARGS contains template arguments from all levels. */
9105
9106static int
3a978d72 9107verify_class_unification (tree targs, tree parms, tree args)
74601d7c 9108{
e2005c8d
KL
9109 parms = tsubst (parms, add_outermost_template_args (args, targs),
9110 tf_none, NULL_TREE);
9111 if (parms == error_mark_node)
74601d7c
KL
9112 return 1;
9113
e2005c8d 9114 return !comp_template_args (parms, INNERMOST_TEMPLATE_ARGS (args));
74601d7c
KL
9115}
9116
4393e105
MM
9117/* PARM is a template class (perhaps with unbound template
9118 parameters). ARG is a fully instantiated type. If ARG can be
9119 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
9120 TARGS are as for unify. */
fcfb9f96
MM
9121
9122static tree
3a978d72 9123try_class_unification (tree tparms, tree targs, tree parm, tree arg)
4393e105 9124{
4393e105
MM
9125 tree copy_of_targs;
9126
9127 if (!CLASSTYPE_TEMPLATE_INFO (arg)
68361a03
MM
9128 || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
9129 != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
4393e105
MM
9130 return NULL_TREE;
9131
9132 /* We need to make a new template argument vector for the call to
9133 unify. If we used TARGS, we'd clutter it up with the result of
9134 the attempted unification, even if this class didn't work out.
9135 We also don't want to commit ourselves to all the unifications
9136 we've already done, since unification is supposed to be done on
9137 an argument-by-argument basis. In other words, consider the
9138 following pathological case:
9139
9140 template <int I, int J, int K>
9141 struct S {};
9142
9143 template <int I, int J>
9144 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
9145
9146 template <int I, int J, int K>
9147 void f(S<I, J, K>, S<I, I, I>);
9148
9149 void g() {
9150 S<0, 0, 0> s0;
9151 S<0, 1, 2> s2;
9152
9153 f(s0, s2);
9154 }
9155
9156 Now, by the time we consider the unification involving `s2', we
9157 already know that we must have `f<0, 0, 0>'. But, even though
0e339752 9158 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
4393e105
MM
9159 because there are two ways to unify base classes of S<0, 1, 2>
9160 with S<I, I, I>. If we kept the already deduced knowledge, we
9161 would reject the possibility I=1. */
f31c0a32 9162 copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
4393e105
MM
9163
9164 /* If unification failed, we're done. */
74601d7c
KL
9165 if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
9166 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
4393e105 9167 return NULL_TREE;
74601d7c
KL
9168
9169 return arg;
4393e105
MM
9170}
9171
9172/* Subroutine of get_template_base. RVAL, if non-NULL, is a base we
dc957d14 9173 have already discovered to be satisfactory. ARG_BINFO is the binfo
4393e105
MM
9174 for the base class of ARG that we are currently examining. */
9175
9176static tree
3a978d72
NN
9177get_template_base_recursive (tree tparms,
9178 tree targs,
9179 tree parm,
9180 tree arg_binfo,
9181 tree rval,
9182 int flags)
fcfb9f96
MM
9183{
9184 tree binfos;
9185 int i, n_baselinks;
4393e105 9186 tree arg = BINFO_TYPE (arg_binfo);
fcfb9f96 9187
4393e105 9188 if (!(flags & GTB_IGNORE_TYPE))
fcfb9f96 9189 {
4393e105
MM
9190 tree r = try_class_unification (tparms, targs,
9191 parm, arg);
fcfb9f96 9192
4393e105 9193 /* If there is more than one satisfactory baseclass, then:
fcfb9f96 9194
4393e105
MM
9195 [temp.deduct.call]
9196
9197 If they yield more than one possible deduced A, the type
9198 deduction fails.
9199
9200 applies. */
9201 if (r && rval && !same_type_p (r, rval))
9202 return error_mark_node;
9203 else if (r)
9204 rval = r;
fcfb9f96
MM
9205 }
9206
4393e105 9207 binfos = BINFO_BASETYPES (arg_binfo);
fcfb9f96
MM
9208 n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
9209
9210 /* Process base types. */
9211 for (i = 0; i < n_baselinks; i++)
9212 {
9213 tree base_binfo = TREE_VEC_ELT (binfos, i);
4393e105 9214 int this_virtual;
fcfb9f96 9215
4393e105
MM
9216 /* Skip this base, if we've already seen it. */
9217 if (BINFO_MARKED (base_binfo))
9218 continue;
9219
9220 this_virtual =
9221 (flags & GTB_VIA_VIRTUAL) || TREE_VIA_VIRTUAL (base_binfo);
9222
9223 /* When searching for a non-virtual, we cannot mark virtually
9224 found binfos. */
9225 if (! this_virtual)
dbbf88d1 9226 BINFO_MARKED (base_binfo) = 1;
4393e105
MM
9227
9228 rval = get_template_base_recursive (tparms, targs,
9229 parm,
9230 base_binfo,
9231 rval,
9232 GTB_VIA_VIRTUAL * this_virtual);
9233
9234 /* If we discovered more than one matching base class, we can
9235 stop now. */
9236 if (rval == error_mark_node)
9237 return error_mark_node;
fcfb9f96
MM
9238 }
9239
9240 return rval;
9241}
9242
4393e105
MM
9243/* Given a template type PARM and a class type ARG, find the unique
9244 base type in ARG that is an instance of PARM. We do not examine
9245 ARG itself; only its base-classes. If there is no appropriate base
9246 class, return NULL_TREE. If there is more than one, return
9247 error_mark_node. PARM may be the type of a partial specialization,
9248 as well as a plain template type. Used by unify. */
fcfb9f96
MM
9249
9250static tree
3a978d72 9251get_template_base (tree tparms, tree targs, tree parm, tree arg)
fcfb9f96 9252{
4393e105
MM
9253 tree rval;
9254 tree arg_binfo;
fcfb9f96 9255
4393e105
MM
9256 my_friendly_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)), 92);
9257
9258 arg_binfo = TYPE_BINFO (complete_type (arg));
9259 rval = get_template_base_recursive (tparms, targs,
9260 parm, arg_binfo,
9261 NULL_TREE,
9262 GTB_IGNORE_TYPE);
fcfb9f96 9263
4393e105
MM
9264 /* Since get_template_base_recursive marks the bases classes, we
9265 must unmark them here. */
d6479fe7 9266 dfs_walk (arg_binfo, dfs_unmark, markedp, 0);
fcfb9f96
MM
9267
9268 return rval;
9269}
9270
db2767b6
MM
9271/* Returns the level of DECL, which declares a template parameter. */
9272
e9659ab0 9273static int
3a978d72 9274template_decl_level (tree decl)
db2767b6
MM
9275{
9276 switch (TREE_CODE (decl))
9277 {
9278 case TYPE_DECL:
9279 case TEMPLATE_DECL:
9280 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
9281
9282 case PARM_DECL:
9283 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
9284
9285 default:
a98facb0 9286 abort ();
5ffe581d 9287 return 0;
db2767b6
MM
9288 }
9289}
9290
830bfa74
MM
9291/* Decide whether ARG can be unified with PARM, considering only the
9292 cv-qualifiers of each type, given STRICT as documented for unify.
838dfd8a 9293 Returns nonzero iff the unification is OK on that basis.*/
e92cc029 9294
e9659ab0 9295static int
3a978d72 9296check_cv_quals_for_unify (int strict, tree arg, tree parm)
830bfa74 9297{
4f2b0fb2
NS
9298 int arg_quals = cp_type_quals (arg);
9299 int parm_quals = cp_type_quals (parm);
9300
9301 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM)
9302 {
9303 /* If the cvr quals of parm will not unify with ARG, they'll be
9304 ignored in instantiation, so we have to do the same here. */
171d2f50 9305 if (TREE_CODE (arg) == REFERENCE_TYPE)
4f2b0fb2
NS
9306 parm_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
9307 if (!POINTER_TYPE_P (arg) &&
9308 TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
9309 parm_quals &= ~TYPE_QUAL_RESTRICT;
9310 }
9311
62e4a758 9312 if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
4f2b0fb2 9313 && (arg_quals & parm_quals) != parm_quals)
ef637255
MM
9314 return 0;
9315
62e4a758 9316 if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
4f2b0fb2 9317 && (parm_quals & arg_quals) != arg_quals)
ef637255
MM
9318 return 0;
9319
ef637255 9320 return 1;
830bfa74
MM
9321}
9322
9323/* Takes parameters as for type_unification. Returns 0 if the
dc957d14 9324 type deduction succeeds, 1 otherwise. The parameter STRICT is a
830bfa74
MM
9325 bitwise or of the following flags:
9326
9327 UNIFY_ALLOW_NONE:
9328 Require an exact match between PARM and ARG.
9329 UNIFY_ALLOW_MORE_CV_QUAL:
028d1f20
NS
9330 Allow the deduced ARG to be more cv-qualified (by qualification
9331 conversion) than ARG.
830bfa74
MM
9332 UNIFY_ALLOW_LESS_CV_QUAL:
9333 Allow the deduced ARG to be less cv-qualified than ARG.
9334 UNIFY_ALLOW_DERIVED:
9335 Allow the deduced ARG to be a template base class of ARG,
9336 or a pointer to a template base class of the type pointed to by
161c12b0
JM
9337 ARG.
9338 UNIFY_ALLOW_INTEGER:
9339 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
028d1f20
NS
9340 case for more information.
9341 UNIFY_ALLOW_OUTER_LEVEL:
9342 This is the outermost level of a deduction. Used to determine validity
9343 of qualification conversions. A valid qualification conversion must
9344 have const qualified pointers leading up to the inner type which
9345 requires additional CV quals, except at the outer level, where const
9346 is not required [conv.qual]. It would be normal to set this flag in
62e4a758
NS
9347 addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
9348 UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
9349 This is the outermost level of a deduction, and PARM can be more CV
9350 qualified at this point.
9351 UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
9352 This is the outermost level of a deduction, and PARM can be less CV
d9f818d9
RS
9353 qualified at this point.
9354 UNIFY_ALLOW_MAX_CORRECTION:
9355 This is an INTEGER_TYPE's maximum value. Used if the range may
9356 have been derived from a size specification, such as an array size.
9357 If the size was given by a nontype template parameter N, the maximum
9358 value will have the form N-1. The flag says that we can (and indeed
9359 must) unify N with (ARG + 1), an exception to the normal rules on
9360 folding PARM. */
830bfa74 9361
e9659ab0 9362static int
3a978d72 9363unify (tree tparms, tree targs, tree parm, tree arg, int strict)
8d08fdba
MS
9364{
9365 int idx;
050367a3 9366 tree targ;
db2767b6 9367 tree tparm;
028d1f20 9368 int strict_in = strict;
8d08fdba
MS
9369
9370 /* I don't think this will do the right thing with respect to types.
9371 But the only case I've seen it in so far has been array bounds, where
9372 signedness is the only information lost, and I think that will be
9373 okay. */
9374 while (TREE_CODE (parm) == NOP_EXPR)
9375 parm = TREE_OPERAND (parm, 0);
9376
9377 if (arg == error_mark_node)
9378 return 1;
9379 if (arg == unknown_type_node)
34016c81
JM
9380 /* We can't deduce anything from this, but we might get all the
9381 template args from other function args. */
9382 return 0;
9383
db2767b6 9384 /* If PARM uses template parameters, then we can't bail out here,
6bdb985f 9385 even if ARG == PARM, since we won't record unifications for the
db2767b6
MM
9386 template parameters. We might need them if we're trying to
9387 figure out which of two things is more specialized. */
9388 if (arg == parm && !uses_template_parms (parm))
8d08fdba
MS
9389 return 0;
9390
830bfa74
MM
9391 /* Immediately reject some pairs that won't unify because of
9392 cv-qualification mismatches. */
9393 if (TREE_CODE (arg) == TREE_CODE (parm)
2f939d94 9394 && TYPE_P (arg)
d0ab7624
NS
9395 /* It is the elements of the array which hold the cv quals of an array
9396 type, and the elements might be template type parms. We'll check
9397 when we recurse. */
9398 && TREE_CODE (arg) != ARRAY_TYPE
830bfa74
MM
9399 /* We check the cv-qualifiers when unifying with template type
9400 parameters below. We want to allow ARG `const T' to unify with
9401 PARM `T' for example, when computing which of two templates
9402 is more specialized, for example. */
9403 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
028d1f20 9404 && !check_cv_quals_for_unify (strict_in, arg, parm))
49432171
JM
9405 return 1;
9406
028d1f20 9407 if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
3ea099f1 9408 && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
028d1f20
NS
9409 strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
9410 strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
9411 strict &= ~UNIFY_ALLOW_DERIVED;
62e4a758
NS
9412 strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9413 strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
d9f818d9 9414 strict &= ~UNIFY_ALLOW_MAX_CORRECTION;
028d1f20 9415
8d08fdba
MS
9416 switch (TREE_CODE (parm))
9417 {
2ca340ae 9418 case TYPENAME_TYPE:
fccef71e 9419 case SCOPE_REF:
b8c6534b 9420 case UNBOUND_CLASS_TEMPLATE:
2ca340ae
JM
9421 /* In a type which contains a nested-name-specifier, template
9422 argument values cannot be deduced for template parameters used
9423 within the nested-name-specifier. */
9424 return 0;
9425
8d08fdba 9426 case TEMPLATE_TYPE_PARM:
73b0fce8 9427 case TEMPLATE_TEMPLATE_PARM:
a1281f45 9428 case BOUND_TEMPLATE_TEMPLATE_PARM:
db2767b6
MM
9429 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
9430
9431 if (TEMPLATE_TYPE_LEVEL (parm)
9432 != template_decl_level (tparm))
9433 /* The PARM is not one we're trying to unify. Just check
9434 to see if it matches ARG. */
9435 return (TREE_CODE (arg) == TREE_CODE (parm)
3bfdc719 9436 && same_type_p (parm, arg)) ? 0 : 1;
73b0fce8 9437 idx = TEMPLATE_TYPE_IDX (parm);
050367a3 9438 targ = TREE_VEC_ELT (targs, idx);
db2767b6 9439 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
050367a3 9440
73b0fce8 9441 /* Check for mixed types and values. */
db2767b6
MM
9442 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
9443 && TREE_CODE (tparm) != TYPE_DECL)
9444 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
9445 && TREE_CODE (tparm) != TEMPLATE_DECL))
73b0fce8
KL
9446 return 1;
9447
a1281f45 9448 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
73b0fce8 9449 {
b429fdf0
KL
9450 /* ARG must be constructed from a template class or a template
9451 template parameter. */
9452 if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
9453 && (TREE_CODE (arg) != RECORD_TYPE || !CLASSTYPE_TEMPLATE_INFO (arg)))
a1281f45 9454 return 1;
73b0fce8 9455
a1281f45
KL
9456 {
9457 tree parmtmpl = TYPE_TI_TEMPLATE (parm);
9458 tree parmvec = TYPE_TI_ARGS (parm);
b429fdf0 9459 tree argvec = TYPE_TI_ARGS (arg);
a1281f45 9460 tree argtmplvec
b429fdf0 9461 = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
a1281f45 9462 int i;
73b0fce8 9463
a1281f45
KL
9464 /* The parameter and argument roles have to be switched here
9465 in order to handle default arguments properly. For example,
9466 template<template <class> class TT> void f(TT<int>)
9467 should be able to accept vector<int> which comes from
9468 template <class T, class Allocator = allocator>
9469 class vector. */
9470
ee3071ef
NS
9471 if (coerce_template_parms (argtmplvec, parmvec, parmtmpl, 0, 1)
9472 == error_mark_node)
a1281f45 9473 return 1;
73b0fce8 9474
a1281f45
KL
9475 /* Deduce arguments T, i from TT<T> or TT<i>.
9476 We check each element of PARMVEC and ARGVEC individually
9477 rather than the whole TREE_VEC since they can have
9478 different number of elements. */
6b9b6b15 9479
a1281f45
KL
9480 for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
9481 {
9482 tree t = TREE_VEC_ELT (parmvec, i);
73b0fce8 9483
a1281f45
KL
9484 if (unify (tparms, targs, t,
9485 TREE_VEC_ELT (argvec, i),
9486 UNIFY_ALLOW_NONE))
9487 return 1;
73b0fce8 9488 }
a1281f45 9489 }
b429fdf0 9490 arg = TYPE_TI_TEMPLATE (arg);
a1281f45
KL
9491
9492 /* Fall through to deduce template name. */
9493 }
9494
9495 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
9496 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
9497 {
9498 /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>. */
9499
9500 /* Simple cases: Value already set, does match or doesn't. */
9501 if (targ != NULL_TREE && template_args_equal (targ, arg))
9502 return 0;
9503 else if (targ)
9504 return 1;
db2767b6
MM
9505 }
9506 else
9507 {
830bfa74
MM
9508 /* If PARM is `const T' and ARG is only `int', we don't have
9509 a match unless we are allowing additional qualification.
9510 If ARG is `const int' and PARM is just `T' that's OK;
9511 that binds `const int' to `T'. */
028d1f20 9512 if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
830bfa74 9513 arg, parm))
db2767b6
MM
9514 return 1;
9515
830bfa74
MM
9516 /* Consider the case where ARG is `const volatile int' and
9517 PARM is `const T'. Then, T should be `volatile int'. */
c2ea3a40
NS
9518 arg = cp_build_qualified_type_real
9519 (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
adecb3f4
MM
9520 if (arg == error_mark_node)
9521 return 1;
73b0fce8 9522
a1281f45
KL
9523 /* Simple cases: Value already set, does match or doesn't. */
9524 if (targ != NULL_TREE && same_type_p (targ, arg))
9525 return 0;
9526 else if (targ)
9527 return 1;
61cd552e 9528
94fc547c
MM
9529 /* Make sure that ARG is not a variable-sized array. (Note
9530 that were talking about variable-sized arrays (like
9531 `int[n]'), rather than arrays of unknown size (like
9532 `int[]').) We'll get very confused by such a type since
9533 the bound of the array will not be computable in an
9534 instantiation. Besides, such types are not allowed in
9535 ISO C++, so we can do as we please here. */
9536 if (variably_modified_type_p (arg))
9537 return 1;
9538 }
61cd552e 9539
050367a3 9540 TREE_VEC_ELT (targs, idx) = arg;
73b0fce8
KL
9541 return 0;
9542
f84b4be9 9543 case TEMPLATE_PARM_INDEX:
db2767b6
MM
9544 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
9545
9546 if (TEMPLATE_PARM_LEVEL (parm)
9547 != template_decl_level (tparm))
9548 /* The PARM is not one we're trying to unify. Just check
9549 to see if it matches ARG. */
c8a209ca
NS
9550 return !(TREE_CODE (arg) == TREE_CODE (parm)
9551 && cp_tree_equal (parm, arg));
db2767b6 9552
f84b4be9 9553 idx = TEMPLATE_PARM_IDX (parm);
050367a3 9554 targ = TREE_VEC_ELT (targs, idx);
db2767b6 9555
050367a3 9556 if (targ)
c8a209ca 9557 return !cp_tree_equal (targ, arg);
8d08fdba 9558
161c12b0
JM
9559 /* [temp.deduct.type] If, in the declaration of a function template
9560 with a non-type template-parameter, the non-type
9561 template-parameter is used in an expression in the function
9562 parameter-list and, if the corresponding template-argument is
9563 deduced, the template-argument type shall match the type of the
9564 template-parameter exactly, except that a template-argument
d7c4edd0
NS
9565 deduced from an array bound may be of any integral type.
9566 The non-type parameter might use already deduced type parameters. */
bd0d5d4a 9567 tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
e2005c8d
KL
9568 if (!TREE_TYPE (arg))
9569 /* Template-parameter dependent expression. Just accept it for now.
9570 It will later be processed in convert_template_argument. */
9571 ;
9572 else if (same_type_p (TREE_TYPE (arg), tparm))
9573 /* OK */;
161c12b0 9574 else if ((strict & UNIFY_ALLOW_INTEGER)
bd0d5d4a
JM
9575 && (TREE_CODE (tparm) == INTEGER_TYPE
9576 || TREE_CODE (tparm) == BOOLEAN_TYPE))
161c12b0 9577 /* OK */;
bd0d5d4a
JM
9578 else if (uses_template_parms (tparm))
9579 /* We haven't deduced the type of this parameter yet. Try again
9580 later. */
9581 return 0;
161c12b0
JM
9582 else
9583 return 1;
9584
2a1e9fdd 9585 TREE_VEC_ELT (targs, idx) = arg;
8d08fdba
MS
9586 return 0;
9587
9588 case POINTER_TYPE:
830bfa74 9589 {
830bfa74
MM
9590 if (TREE_CODE (arg) != POINTER_TYPE)
9591 return 1;
9592
9593 /* [temp.deduct.call]
9594
9595 A can be another pointer or pointer to member type that can
9596 be converted to the deduced A via a qualification
9597 conversion (_conv.qual_).
9598
9599 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
9600 This will allow for additional cv-qualification of the
028d1f20 9601 pointed-to types if appropriate. */
830bfa74 9602
028d1f20 9603 if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
830bfa74
MM
9604 /* The derived-to-base conversion only persists through one
9605 level of pointers. */
028d1f20 9606 strict |= (strict_in & UNIFY_ALLOW_DERIVED);
830bfa74 9607
a7a64a77 9608 return unify (tparms, targs, TREE_TYPE (parm),
028d1f20 9609 TREE_TYPE (arg), strict);
830bfa74 9610 }
8d08fdba
MS
9611
9612 case REFERENCE_TYPE:
830bfa74
MM
9613 if (TREE_CODE (arg) != REFERENCE_TYPE)
9614 return 1;
9615 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
028d1f20 9616 strict & UNIFY_ALLOW_MORE_CV_QUAL);
8d08fdba
MS
9617
9618 case ARRAY_TYPE:
9619 if (TREE_CODE (arg) != ARRAY_TYPE)
9620 return 1;
3042d5be
MM
9621 if ((TYPE_DOMAIN (parm) == NULL_TREE)
9622 != (TYPE_DOMAIN (arg) == NULL_TREE))
9623 return 1;
9624 if (TYPE_DOMAIN (parm) != NULL_TREE
830bfa74 9625 && unify (tparms, targs, TYPE_DOMAIN (parm),
4393e105 9626 TYPE_DOMAIN (arg), UNIFY_ALLOW_NONE) != 0)
8d08fdba 9627 return 1;
830bfa74 9628 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
712467a4 9629 strict & UNIFY_ALLOW_MORE_CV_QUAL);
8d08fdba
MS
9630
9631 case REAL_TYPE:
37c46b43 9632 case COMPLEX_TYPE:
c00996a3 9633 case VECTOR_TYPE:
8d08fdba 9634 case INTEGER_TYPE:
42976354 9635 case BOOLEAN_TYPE:
5ad5a526 9636 case VOID_TYPE:
f376e137
MS
9637 if (TREE_CODE (arg) != TREE_CODE (parm))
9638 return 1;
9639
514a1f18
JM
9640 if (TREE_CODE (parm) == INTEGER_TYPE
9641 && TREE_CODE (TYPE_MAX_VALUE (parm)) != INTEGER_CST)
8d08fdba
MS
9642 {
9643 if (TYPE_MIN_VALUE (parm) && TYPE_MIN_VALUE (arg)
830bfa74 9644 && unify (tparms, targs, TYPE_MIN_VALUE (parm),
4393e105 9645 TYPE_MIN_VALUE (arg), UNIFY_ALLOW_INTEGER))
8d08fdba
MS
9646 return 1;
9647 if (TYPE_MAX_VALUE (parm) && TYPE_MAX_VALUE (arg)
830bfa74 9648 && unify (tparms, targs, TYPE_MAX_VALUE (parm),
d9f818d9
RS
9649 TYPE_MAX_VALUE (arg),
9650 UNIFY_ALLOW_INTEGER | UNIFY_ALLOW_MAX_CORRECTION))
8d08fdba
MS
9651 return 1;
9652 }
9edc3913 9653 /* We have already checked cv-qualification at the top of the
514a1f18 9654 function. */
9edc3913 9655 else if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
ca79f85d
JM
9656 return 1;
9657
8d08fdba
MS
9658 /* As far as unification is concerned, this wins. Later checks
9659 will invalidate it if necessary. */
9660 return 0;
9661
9662 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
bd6dd845 9663 /* Type INTEGER_CST can come from ordinary constant template args. */
8d08fdba 9664 case INTEGER_CST:
bd6dd845
MS
9665 while (TREE_CODE (arg) == NOP_EXPR)
9666 arg = TREE_OPERAND (arg, 0);
9667
8d08fdba
MS
9668 if (TREE_CODE (arg) != INTEGER_CST)
9669 return 1;
9670 return !tree_int_cst_equal (parm, arg);
9671
8d08fdba
MS
9672 case TREE_VEC:
9673 {
9674 int i;
9675 if (TREE_CODE (arg) != TREE_VEC)
9676 return 1;
9677 if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
9678 return 1;
0dc09a61 9679 for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
830bfa74 9680 if (unify (tparms, targs,
8d08fdba 9681 TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
4393e105 9682 UNIFY_ALLOW_NONE))
8d08fdba
MS
9683 return 1;
9684 return 0;
9685 }
9686
8d08fdba 9687 case RECORD_TYPE:
f181d4ae 9688 case UNION_TYPE:
f181d4ae 9689 if (TREE_CODE (arg) != TREE_CODE (parm))
a4443a08 9690 return 1;
830bfa74 9691
a7a64a77
MM
9692 if (TYPE_PTRMEMFUNC_P (parm))
9693 {
9694 if (!TYPE_PTRMEMFUNC_P (arg))
9695 return 1;
9696
9697 return unify (tparms, targs,
9698 TYPE_PTRMEMFUNC_FN_TYPE (parm),
9699 TYPE_PTRMEMFUNC_FN_TYPE (arg),
9700 strict);
9701 }
9702
5db698f6 9703 if (CLASSTYPE_TEMPLATE_INFO (parm))
5566b478 9704 {
6467930b 9705 tree t = NULL_TREE;
4393e105 9706
028d1f20 9707 if (strict_in & UNIFY_ALLOW_DERIVED)
4393e105
MM
9708 {
9709 /* First, we try to unify the PARM and ARG directly. */
9710 t = try_class_unification (tparms, targs,
9711 parm, arg);
9712
9713 if (!t)
9714 {
9715 /* Fallback to the special case allowed in
9716 [temp.deduct.call]:
9717
9718 If P is a class, and P has the form
9719 template-id, then A can be a derived class of
9720 the deduced A. Likewise, if P is a pointer to
9721 a class of the form template-id, A can be a
9722 pointer to a derived class pointed to by the
9723 deduced A. */
9724 t = get_template_base (tparms, targs,
9725 parm, arg);
9726
9727 if (! t || t == error_mark_node)
9728 return 1;
9729 }
9730 }
6df47b06 9731 else if (CLASSTYPE_TEMPLATE_INFO (arg)
9fbf56f7
MM
9732 && (CLASSTYPE_TI_TEMPLATE (parm)
9733 == CLASSTYPE_TI_TEMPLATE (arg)))
6df47b06
MM
9734 /* Perhaps PARM is something like S<U> and ARG is S<int>.
9735 Then, we should unify `int' and `U'. */
6467930b 9736 t = arg;
4393e105 9737 else
dc957d14 9738 /* There's no chance of unification succeeding. */
5566b478 9739 return 1;
6467930b 9740
830bfa74 9741 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
4393e105 9742 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
5566b478 9743 }
9edc3913 9744 else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
5566b478 9745 return 1;
a4443a08 9746 return 0;
8d08fdba
MS
9747
9748 case METHOD_TYPE:
8d08fdba 9749 case FUNCTION_TYPE:
830bfa74 9750 if (TREE_CODE (arg) != TREE_CODE (parm))
8d08fdba 9751 return 1;
830bfa74
MM
9752
9753 if (unify (tparms, targs, TREE_TYPE (parm),
4393e105 9754 TREE_TYPE (arg), UNIFY_ALLOW_NONE))
28cbf42c 9755 return 1;
386b8a85 9756 return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
3b3ba9f0 9757 TYPE_ARG_TYPES (arg), 1,
e5214479 9758 DEDUCE_EXACT, 0, -1);
a4443a08
MS
9759
9760 case OFFSET_TYPE:
9761 if (TREE_CODE (arg) != OFFSET_TYPE)
9762 return 1;
830bfa74 9763 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
4393e105 9764 TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
a4443a08 9765 return 1;
830bfa74 9766 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
4393e105 9767 strict);
a4443a08 9768
f62dbf03 9769 case CONST_DECL:
a723baf1
MM
9770 if (DECL_TEMPLATE_PARM_P (parm))
9771 return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
830bfa74 9772 if (arg != decl_constant_value (parm))
f62dbf03
JM
9773 return 1;
9774 return 0;
9775
027905b4
KL
9776 case TEMPLATE_DECL:
9777 /* Matched cases are handled by the ARG == PARM test above. */
9778 return 1;
9779
53929c47 9780 case MINUS_EXPR:
d9f818d9
RS
9781 if (tree_int_cst_equal (TREE_OPERAND (parm, 1), integer_one_node)
9782 && (strict_in & UNIFY_ALLOW_MAX_CORRECTION))
53929c47
JM
9783 {
9784 /* We handle this case specially, since it comes up with
9785 arrays. In particular, something like:
9786
9787 template <int N> void f(int (&x)[N]);
9788
9789 Here, we are trying to unify the range type, which
9790 looks like [0 ... (N - 1)]. */
9791 tree t, t1, t2;
9792 t1 = TREE_OPERAND (parm, 0);
9793 t2 = TREE_OPERAND (parm, 1);
9794
24e2e58e 9795 t = fold (build (PLUS_EXPR, integer_type_node, arg, t2));
53929c47 9796
4393e105 9797 return unify (tparms, targs, t1, t, strict);
53929c47
JM
9798 }
9799 /* else fall through */
9800
8d08fdba 9801 default:
050367a3 9802 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (parm))))
74601d7c
KL
9803 {
9804
9805 /* We're looking at an expression. This can happen with
9806 something like:
4393e105 9807
74601d7c
KL
9808 template <int I>
9809 void foo(S<I>, S<I + 2>);
050367a3 9810
74601d7c 9811 This is a "nondeduced context":
050367a3 9812
74601d7c 9813 [deduct.type]
4393e105 9814
74601d7c 9815 The nondeduced contexts are:
050367a3 9816
74601d7c
KL
9817 --A type that is a template-id in which one or more of
9818 the template-arguments is an expression that references
9819 a template-parameter.
050367a3 9820
74601d7c
KL
9821 In these cases, we assume deduction succeeded, but don't
9822 actually infer any unifications. */
9823
9824 if (!uses_template_parms (parm)
9825 && !template_args_equal (parm, arg))
9826 return 1;
9827 else
9828 return 0;
9829 }
050367a3 9830 else
b4c4a9ec
MM
9831 sorry ("use of `%s' in template type unification",
9832 tree_code_name [(int) TREE_CODE (parm)]);
050367a3 9833
8d08fdba
MS
9834 return 1;
9835 }
9836}
8d08fdba 9837\f
03d0f4af
MM
9838/* Called if RESULT is explicitly instantiated, or is a member of an
9839 explicitly instantiated class, or if using -frepo and the
9840 instantiation of RESULT has been assigned to this file. */
9841
faae18ab 9842void
3a978d72 9843mark_decl_instantiated (tree result, int extern_p)
faae18ab 9844{
3ae18eaf
JM
9845 /* We used to set this unconditionally; we moved that to
9846 do_decl_instantiation so it wouldn't get set on members of
9847 explicit class template instantiations. But we still need to set
9848 it here for the 'extern template' case in order to suppress
9849 implicit instantiations. */
9850 if (extern_p)
9851 SET_DECL_EXPLICIT_INSTANTIATION (result);
9852
1f6f0cb6
MM
9853 /* If this entity has already been written out, it's too late to
9854 make any modifications. */
9855 if (TREE_ASM_WRITTEN (result))
9856 return;
9857
9858 if (TREE_CODE (result) != FUNCTION_DECL)
9859 /* The TREE_PUBLIC flag for function declarations will have been
9860 set correctly by tsubst. */
9861 TREE_PUBLIC (result) = 1;
9862
346eeb15
JM
9863 /* This might have been set by an earlier implicit instantiation. */
9864 DECL_COMDAT (result) = 0;
9865
faae18ab
MS
9866 if (! extern_p)
9867 {
9868 DECL_INTERFACE_KNOWN (result) = 1;
9869 DECL_NOT_REALLY_EXTERN (result) = 1;
a7d87521 9870
1a408d07
JM
9871 /* Always make artificials weak. */
9872 if (DECL_ARTIFICIAL (result) && flag_weak)
9873 comdat_linkage (result);
a7d87521
JM
9874 /* For WIN32 we also want to put explicit instantiations in
9875 linkonce sections. */
1a408d07 9876 else if (TREE_PUBLIC (result))
b385c841 9877 maybe_make_one_only (result);
faae18ab 9878 }
1f6f0cb6
MM
9879
9880 if (TREE_CODE (result) == FUNCTION_DECL)
56e770bf 9881 defer_fn (result);
faae18ab
MS
9882}
9883
e5214479 9884/* Given two function templates PAT1 and PAT2, return:
6467930b 9885
62e4a758
NS
9886 DEDUCE should be DEDUCE_EXACT or DEDUCE_ORDER.
9887
6467930b
MS
9888 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
9889 -1 if PAT2 is more specialized than PAT1.
e5214479
JM
9890 0 if neither is more specialized.
9891
9892 LEN is passed through to fn_type_unification. */
6467930b
MS
9893
9894int
3a978d72 9895more_specialized (tree pat1, tree pat2, int deduce, int len)
6467930b 9896{
98c1c668 9897 tree targs;
73aad9b9 9898 int winner = 0;
6467930b 9899
35c18a20
MM
9900 /* If template argument deduction succeeds, we substitute the
9901 resulting arguments into non-deduced contexts. While doing that,
9902 we must be aware that we may encounter dependent types. */
9903 ++processing_template_decl;
62e4a758
NS
9904 targs = get_bindings_real (pat1, DECL_TEMPLATE_RESULT (pat2),
9905 NULL_TREE, 0, deduce, len);
73aad9b9 9906 if (targs)
36a117a5 9907 --winner;
6467930b 9908
62e4a758
NS
9909 targs = get_bindings_real (pat2, DECL_TEMPLATE_RESULT (pat1),
9910 NULL_TREE, 0, deduce, len);
73aad9b9 9911 if (targs)
36a117a5 9912 ++winner;
35c18a20 9913 --processing_template_decl;
6467930b 9914
73aad9b9
JM
9915 return winner;
9916}
6467930b 9917
73aad9b9 9918/* Given two class template specialization list nodes PAT1 and PAT2, return:
6467930b 9919
73aad9b9
JM
9920 1 if PAT1 is more specialized than PAT2 as described in [temp.class.order].
9921 -1 if PAT2 is more specialized than PAT1.
55ece1b3
KL
9922 0 if neither is more specialized.
9923
9924 FULL_ARGS is the full set of template arguments that triggers this
9925 partial ordering. */
73aad9b9
JM
9926
9927int
55ece1b3 9928more_specialized_class (tree pat1, tree pat2, tree full_args)
73aad9b9
JM
9929{
9930 tree targs;
9931 int winner = 0;
9932
36a117a5 9933 targs = get_class_bindings (TREE_VALUE (pat1), TREE_PURPOSE (pat1),
55ece1b3 9934 add_outermost_template_args (full_args, TREE_PURPOSE (pat2)));
73aad9b9
JM
9935 if (targs)
9936 --winner;
9937
36a117a5 9938 targs = get_class_bindings (TREE_VALUE (pat2), TREE_PURPOSE (pat2),
55ece1b3 9939 add_outermost_template_args (full_args, TREE_PURPOSE (pat1)));
73aad9b9 9940 if (targs)
6467930b
MS
9941 ++winner;
9942
9943 return winner;
9944}
73aad9b9
JM
9945
9946/* Return the template arguments that will produce the function signature
e1467ff2 9947 DECL from the function template FN, with the explicit template
76b9a14d 9948 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is 1, the return type must
4393e105 9949 also match. Return NULL_TREE if no satisfactory arguments could be
62e4a758 9950 found. DEDUCE and LEN are passed through to fn_type_unification. */
e5214479 9951
76b9a14d 9952static tree
3a978d72
NN
9953get_bindings_real (tree fn,
9954 tree decl,
9955 tree explicit_args,
9956 int check_rettype,
9957 int deduce,
9958 int len)
73aad9b9 9959{
98c1c668 9960 int ntparms = DECL_NTPARMS (fn);
f31c0a32 9961 tree targs = make_tree_vec (ntparms);
4393e105 9962 tree decl_type;
03017874 9963 tree decl_arg_types;
98c1c668
JM
9964 int i;
9965
4393e105
MM
9966 /* Substitute the explicit template arguments into the type of DECL.
9967 The call to fn_type_unification will handle substitution into the
9968 FN. */
9969 decl_type = TREE_TYPE (decl);
9970 if (explicit_args && uses_template_parms (decl_type))
9971 {
9972 tree tmpl;
9973 tree converted_args;
9974
9975 if (DECL_TEMPLATE_INFO (decl))
9976 tmpl = DECL_TI_TEMPLATE (decl);
9977 else
0e339752 9978 /* We can get here for some invalid specializations. */
4393e105
MM
9979 return NULL_TREE;
9980
9981 converted_args
9982 = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
9983 explicit_args, NULL_TREE,
c2ea3a40 9984 tf_none, /*require_all_arguments=*/0));
4393e105
MM
9985 if (converted_args == error_mark_node)
9986 return NULL_TREE;
9987
c2ea3a40 9988 decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
4393e105
MM
9989 if (decl_type == error_mark_node)
9990 return NULL_TREE;
9991 }
9992
9993 decl_arg_types = TYPE_ARG_TYPES (decl_type);
e5214479
JM
9994 /* Never do unification on the 'this' parameter. */
9995 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
03017874 9996 decl_arg_types = TREE_CHAIN (decl_arg_types);
d7684f2d 9997
e1467ff2 9998 i = fn_type_unification (fn, explicit_args, targs,
03017874 9999 decl_arg_types,
8d3631f8
NS
10000 (check_rettype || DECL_CONV_FN_P (fn)
10001 ? TREE_TYPE (decl_type) : NULL_TREE),
62e4a758 10002 deduce, len);
98c1c668 10003
76b9a14d
JM
10004 if (i != 0)
10005 return NULL_TREE;
10006
76b9a14d
JM
10007 return targs;
10008}
10009
10010/* For most uses, we want to check the return type. */
10011
eb1dfbb2 10012static tree
3a978d72 10013get_bindings (tree fn, tree decl, tree explicit_args)
76b9a14d 10014{
62e4a758 10015 return get_bindings_real (fn, decl, explicit_args, 1, DEDUCE_EXACT, -1);
76b9a14d
JM
10016}
10017
e5214479
JM
10018/* But for resolve_overloaded_unification, we only care about the parameter
10019 types. */
76b9a14d
JM
10020
10021static tree
3a978d72 10022get_bindings_overload (tree fn, tree decl, tree explicit_args)
76b9a14d 10023{
62e4a758 10024 return get_bindings_real (fn, decl, explicit_args, 0, DEDUCE_EXACT, -1);
73aad9b9
JM
10025}
10026
36a117a5
MM
10027/* Return the innermost template arguments that, when applied to a
10028 template specialization whose innermost template parameters are
9471d3e2 10029 TPARMS, and whose specialization arguments are PARMS, yield the
36a117a5
MM
10030 ARGS.
10031
10032 For example, suppose we have:
10033
10034 template <class T, class U> struct S {};
10035 template <class T> struct S<T*, int> {};
10036
10037 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
10038 {T}, the PARMS will be {T*, int} and the ARGS will be {double*,
10039 int}. The resulting vector will be {double}, indicating that `T'
10040 is bound to `double'. */
10041
bd6dd845 10042static tree
3a978d72 10043get_class_bindings (tree tparms, tree parms, tree args)
73aad9b9 10044{
3b3ba9f0 10045 int i, ntparms = TREE_VEC_LENGTH (tparms);
f31c0a32 10046 tree vec = make_tree_vec (ntparms);
73aad9b9 10047
74601d7c
KL
10048 if (unify (tparms, vec, parms, INNERMOST_TEMPLATE_ARGS (args),
10049 UNIFY_ALLOW_NONE))
fcfb9f96 10050 return NULL_TREE;
73aad9b9
JM
10051
10052 for (i = 0; i < ntparms; ++i)
10053 if (! TREE_VEC_ELT (vec, i))
10054 return NULL_TREE;
10055
74601d7c
KL
10056 if (verify_class_unification (vec, parms, args))
10057 return NULL_TREE;
10058
73aad9b9
JM
10059 return vec;
10060}
10061
104bf76a
MM
10062/* In INSTANTIATIONS is a list of <INSTANTIATION, TEMPLATE> pairs.
10063 Pick the most specialized template, and return the corresponding
10064 instantiation, or if there is no corresponding instantiation, the
e5214479
JM
10065 template itself. If there is no most specialized template,
10066 error_mark_node is returned. If there are no templates at all,
10067 NULL_TREE is returned. */
73aad9b9
JM
10068
10069tree
3a978d72 10070most_specialized_instantiation (tree instantiations)
73aad9b9 10071{
104bf76a 10072 tree fn, champ;
73aad9b9
JM
10073 int fate;
10074
104bf76a 10075 if (!instantiations)
73aad9b9
JM
10076 return NULL_TREE;
10077
104bf76a
MM
10078 champ = instantiations;
10079 for (fn = TREE_CHAIN (instantiations); fn; fn = TREE_CHAIN (fn))
73aad9b9 10080 {
62e4a758
NS
10081 fate = more_specialized (TREE_VALUE (champ), TREE_VALUE (fn),
10082 DEDUCE_EXACT, -1);
73aad9b9
JM
10083 if (fate == 1)
10084 ;
10085 else
10086 {
10087 if (fate == 0)
10088 {
10089 fn = TREE_CHAIN (fn);
10090 if (! fn)
10091 return error_mark_node;
10092 }
104bf76a 10093 champ = fn;
73aad9b9
JM
10094 }
10095 }
10096
104bf76a 10097 for (fn = instantiations; fn && fn != champ; fn = TREE_CHAIN (fn))
73aad9b9 10098 {
62e4a758
NS
10099 fate = more_specialized (TREE_VALUE (champ), TREE_VALUE (fn),
10100 DEDUCE_EXACT, -1);
73aad9b9
JM
10101 if (fate != 1)
10102 return error_mark_node;
10103 }
10104
104bf76a
MM
10105 return TREE_PURPOSE (champ) ? TREE_PURPOSE (champ) : TREE_VALUE (champ);
10106}
10107
10108/* Return the most specialized of the list of templates in FNS that can
10109 produce an instantiation matching DECL, given the explicit template
10110 arguments EXPLICIT_ARGS. */
10111
e9659ab0 10112static tree
3a978d72 10113most_specialized (tree fns, tree decl, tree explicit_args)
104bf76a
MM
10114{
10115 tree candidates = NULL_TREE;
10116 tree fn, args;
10117
10118 for (fn = fns; fn; fn = TREE_CHAIN (fn))
10119 {
10120 tree candidate = TREE_VALUE (fn);
10121
10122 args = get_bindings (candidate, decl, explicit_args);
10123 if (args)
e1b3e07d 10124 candidates = tree_cons (NULL_TREE, candidate, candidates);
104bf76a
MM
10125 }
10126
e5214479 10127 return most_specialized_instantiation (candidates);
73aad9b9
JM
10128}
10129
36a117a5 10130/* If DECL is a specialization of some template, return the most
f9a7ae04
MM
10131 general such template. Otherwise, returns NULL_TREE.
10132
10133 For example, given:
36a117a5
MM
10134
10135 template <class T> struct S { template <class U> void f(U); };
10136
10137 if TMPL is `template <class U> void S<int>::f(U)' this will return
10138 the full template. This function will not trace past partial
10139 specializations, however. For example, given in addition:
10140
10141 template <class T> struct S<T*> { template <class U> void f(U); };
10142
10143 if TMPL is `template <class U> void S<int*>::f(U)' this will return
10144 `template <class T> template <class U> S<T*>::f(U)'. */
73aad9b9 10145
612c671a 10146tree
3a978d72 10147most_general_template (tree decl)
73aad9b9 10148{
f9a7ae04
MM
10149 /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
10150 an immediate specialization. */
10151 if (TREE_CODE (decl) == FUNCTION_DECL)
10152 {
10153 if (DECL_TEMPLATE_INFO (decl)) {
10154 decl = DECL_TI_TEMPLATE (decl);
10155
10156 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
10157 template friend. */
10158 if (TREE_CODE (decl) != TEMPLATE_DECL)
10159 return NULL_TREE;
10160 } else
10161 return NULL_TREE;
10162 }
10163
10164 /* Look for more and more general templates. */
10165 while (DECL_TEMPLATE_INFO (decl))
10166 {
10b1d5e7
MM
10167 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
10168 (See cp-tree.h for details.) */
f9a7ae04
MM
10169 if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
10170 break;
10171
6e049fcd
KL
10172 if (CLASS_TYPE_P (TREE_TYPE (decl))
10173 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
10174 break;
10175
f9a7ae04
MM
10176 /* Stop if we run into an explicitly specialized class template. */
10177 if (!DECL_NAMESPACE_SCOPE_P (decl)
10178 && DECL_CONTEXT (decl)
10179 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
10180 break;
10181
10182 decl = DECL_TI_TEMPLATE (decl);
10183 }
36a117a5
MM
10184
10185 return decl;
10186}
10187
10188/* Return the most specialized of the class template specializations
10189 of TMPL which can produce an instantiation matching ARGS, or
10190 error_mark_node if the choice is ambiguous. */
10191
e9659ab0 10192static tree
3a978d72 10193most_specialized_class (tree tmpl, tree args)
36a117a5
MM
10194{
10195 tree list = NULL_TREE;
10196 tree t;
10197 tree champ;
73aad9b9
JM
10198 int fate;
10199
36a117a5
MM
10200 tmpl = most_general_template (tmpl);
10201 for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
73aad9b9 10202 {
36a117a5
MM
10203 tree spec_args
10204 = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args);
10205 if (spec_args)
73aad9b9 10206 {
1f8f4a0b 10207 list = tree_cons (TREE_PURPOSE (t), TREE_VALUE (t), list);
73aad9b9
JM
10208 TREE_TYPE (list) = TREE_TYPE (t);
10209 }
10210 }
10211
10212 if (! list)
10213 return NULL_TREE;
10214
10215 t = list;
10216 champ = t;
10217 t = TREE_CHAIN (t);
10218 for (; t; t = TREE_CHAIN (t))
10219 {
55ece1b3 10220 fate = more_specialized_class (champ, t, args);
73aad9b9
JM
10221 if (fate == 1)
10222 ;
10223 else
10224 {
10225 if (fate == 0)
10226 {
10227 t = TREE_CHAIN (t);
10228 if (! t)
10229 return error_mark_node;
10230 }
10231 champ = t;
10232 }
10233 }
10234
10235 for (t = list; t && t != champ; t = TREE_CHAIN (t))
10236 {
55ece1b3 10237 fate = more_specialized_class (champ, t, args);
73aad9b9
JM
10238 if (fate != 1)
10239 return error_mark_node;
10240 }
10241
10242 return champ;
10243}
10244
eb8845be 10245/* Explicitly instantiate DECL. */
e92cc029 10246
8d08fdba 10247void
eb8845be 10248do_decl_instantiation (tree decl, tree storage)
8d08fdba 10249{
8d08fdba 10250 tree result = NULL_TREE;
faae18ab 10251 int extern_p = 0;
e8abc66f 10252
3fa56191 10253 if (!decl)
dc957d14 10254 /* An error occurred, for which grokdeclarator has already issued
3fa56191
MM
10255 an appropriate message. */
10256 return;
10257 else if (! DECL_LANG_SPECIFIC (decl))
ec255269 10258 {
33bd39a2 10259 error ("explicit instantiation of non-template `%#D'", decl);
ec255269
MS
10260 return;
10261 }
03d0f4af 10262 else if (TREE_CODE (decl) == VAR_DECL)
6633d636 10263 {
03d0f4af
MM
10264 /* There is an asymmetry here in the way VAR_DECLs and
10265 FUNCTION_DECLs are handled by grokdeclarator. In the case of
10266 the latter, the DECL we get back will be marked as a
10267 template instantiation, and the appropriate
10268 DECL_TEMPLATE_INFO will be set up. This does not happen for
10269 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
10270 should handle VAR_DECLs as it currently handles
10271 FUNCTION_DECLs. */
86ac0575 10272 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
e0860732 10273 if (!result || TREE_CODE (result) != VAR_DECL)
03d0f4af 10274 {
e0860732 10275 error ("no matching template for `%D' found", decl);
03d0f4af
MM
10276 return;
10277 }
6633d636
MS
10278 }
10279 else if (TREE_CODE (decl) != FUNCTION_DECL)
10280 {
33bd39a2 10281 error ("explicit instantiation of `%#D'", decl);
6633d636
MS
10282 return;
10283 }
03d0f4af
MM
10284 else
10285 result = decl;
672476cb 10286
03d0f4af 10287 /* Check for various error cases. Note that if the explicit
0e339752 10288 instantiation is valid the RESULT will currently be marked as an
03d0f4af
MM
10289 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
10290 until we get here. */
10291
10292 if (DECL_TEMPLATE_SPECIALIZATION (result))
672476cb 10293 {
07782718
KL
10294 /* DR 259 [temp.spec].
10295
10296 Both an explicit instantiation and a declaration of an explicit
10297 specialization shall not appear in a program unless the explicit
10298 instantiation follows a declaration of the explicit specialization.
03d0f4af 10299
07782718
KL
10300 For a given set of template parameters, if an explicit
10301 instantiation of a template appears after a declaration of an
10302 explicit specialization for that template, the explicit
10303 instantiation has no effect. */
672476cb
MM
10304 return;
10305 }
03d0f4af
MM
10306 else if (DECL_EXPLICIT_INSTANTIATION (result))
10307 {
10308 /* [temp.spec]
98c1c668 10309
03d0f4af
MM
10310 No program shall explicitly instantiate any template more
10311 than once.
10312
2aaf816d
JM
10313 We check DECL_INTERFACE_KNOWN so as not to complain when the first
10314 instantiation was `extern' and the second is not, and EXTERN_P for
10315 the opposite case. If -frepo, chances are we already got marked
dc957d14 10316 as an explicit instantiation because of the repo file. */
2aaf816d 10317 if (DECL_INTERFACE_KNOWN (result) && !extern_p && !flag_use_repository)
33bd39a2 10318 pedwarn ("duplicate explicit instantiation of `%#D'", result);
03d0f4af
MM
10319
10320 /* If we've already instantiated the template, just return now. */
10321 if (DECL_INTERFACE_KNOWN (result))
10322 return;
10323 }
10324 else if (!DECL_IMPLICIT_INSTANTIATION (result))
faae18ab 10325 {
33bd39a2 10326 error ("no matching template for `%D' found", result);
faae18ab
MS
10327 return;
10328 }
03d0f4af 10329 else if (!DECL_TEMPLATE_INFO (result))
6633d636 10330 {
33bd39a2 10331 pedwarn ("explicit instantiation of non-template `%#D'", result);
6633d636
MS
10332 return;
10333 }
10334
a0a33927
MS
10335 if (flag_external_templates)
10336 return;
10337
f0e01782 10338 if (storage == NULL_TREE)
00595019 10339 ;
faae18ab 10340 else if (storage == ridpointers[(int) RID_EXTERN])
03d0f4af 10341 {
c02f5e29 10342 if (pedantic && !in_system_header)
33bd39a2 10343 pedwarn ("ISO C++ forbids the use of `extern' on explicit instantiations");
03d0f4af
MM
10344 extern_p = 1;
10345 }
f0e01782 10346 else
33bd39a2 10347 error ("storage class `%D' applied to template instantiation",
f0e01782 10348 storage);
5566b478 10349
03d0f4af 10350 SET_DECL_EXPLICIT_INSTANTIATION (result);
5566b478 10351 mark_decl_instantiated (result, extern_p);
44a8d0b3 10352 repo_template_instantiated (result, extern_p);
c91a56d2 10353 if (! extern_p)
16d53b64 10354 instantiate_decl (result, /*defer_ok=*/1);
7177d104
MS
10355}
10356
faae18ab 10357void
3a978d72 10358mark_class_instantiated (tree t, int extern_p)
faae18ab
MS
10359{
10360 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
eb773359
JM
10361 SET_CLASSTYPE_INTERFACE_KNOWN (t);
10362 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
faae18ab
MS
10363 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
10364 if (! extern_p)
10365 {
10366 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
10367 rest_of_type_compilation (t, 1);
10368 }
10369}
e8abc66f 10370
5e0c54e5 10371/* Called from do_type_instantiation through binding_table_foreach to
9bcb9aae 10372 do recursive instantiation for the type bound in ENTRY. */
5e0c54e5
GDR
10373static void
10374bt_instantiate_type_proc (binding_entry entry, void *data)
10375{
10376 tree storage = *(tree *) data;
10377
10378 if (IS_AGGR_TYPE (entry->type)
10379 && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
10380 do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
10381}
10382
a1bcc528
JM
10383/* Perform an explicit instantiation of template class T. STORAGE, if
10384 non-null, is the RID for extern, inline or static. COMPLAIN is
838dfd8a 10385 nonzero if this is called from the parser, zero if called recursively,
a1bcc528
JM
10386 since the standard is unclear (as detailed below). */
10387
7177d104 10388void
3a978d72 10389do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
7177d104 10390{
e8abc66f
MS
10391 int extern_p = 0;
10392 int nomem_p = 0;
5566b478
MS
10393 int static_p = 0;
10394
ca79f85d
JM
10395 if (TREE_CODE (t) == TYPE_DECL)
10396 t = TREE_TYPE (t);
10397
7ddedda4 10398 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
ca79f85d 10399 {
33bd39a2 10400 error ("explicit instantiation of non-template type `%T'", t);
ca79f85d
JM
10401 return;
10402 }
10403
5566b478 10404 complete_type (t);
7177d104 10405
a292b002
MS
10406 /* With -fexternal-templates, explicit instantiations are treated the same
10407 as implicit ones. */
a0a33927
MS
10408 if (flag_external_templates)
10409 return;
10410
d0f062fb 10411 if (!COMPLETE_TYPE_P (t))
f0e01782 10412 {
c2ea3a40 10413 if (complain & tf_error)
33bd39a2 10414 error ("explicit instantiation of `%#T' before definition of template",
a1bcc528 10415 t);
f0e01782
MS
10416 return;
10417 }
10418
03d0f4af 10419 if (storage != NULL_TREE)
f0e01782 10420 {
c02f5e29 10421 if (pedantic && !in_system_header)
33bd39a2 10422 pedwarn("ISO C++ forbids the use of `%s' on explicit instantiations",
8251199e 10423 IDENTIFIER_POINTER (storage));
03d0f4af
MM
10424
10425 if (storage == ridpointers[(int) RID_INLINE])
10426 nomem_p = 1;
10427 else if (storage == ridpointers[(int) RID_EXTERN])
10428 extern_p = 1;
10429 else if (storage == ridpointers[(int) RID_STATIC])
10430 static_p = 1;
10431 else
10432 {
33bd39a2 10433 error ("storage class `%D' applied to template instantiation",
03d0f4af
MM
10434 storage);
10435 extern_p = 0;
10436 }
f0e01782
MS
10437 }
10438
370af2d5 10439 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
03d0f4af 10440 {
07782718 10441 /* DR 259 [temp.spec].
a292b002 10442
07782718
KL
10443 Both an explicit instantiation and a declaration of an explicit
10444 specialization shall not appear in a program unless the explicit
10445 instantiation follows a declaration of the explicit specialization.
10446
10447 For a given set of template parameters, if an explicit
10448 instantiation of a template appears after a declaration of an
10449 explicit specialization for that template, the explicit
10450 instantiation has no effect. */
03d0f4af
MM
10451 return;
10452 }
10453 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
44a8d0b3 10454 {
03d0f4af
MM
10455 /* [temp.spec]
10456
10457 No program shall explicitly instantiate any template more
10458 than once.
10459
2aaf816d
JM
10460 If CLASSTYPE_INTERFACE_ONLY, then the first explicit instantiation
10461 was `extern'. If EXTERN_P then the second is. If -frepo, chances
aba649ba 10462 are we already got marked as an explicit instantiation because of the
2aaf816d 10463 repo file. All these cases are OK. */
a1bcc528 10464 if (!CLASSTYPE_INTERFACE_ONLY (t) && !extern_p && !flag_use_repository
c2ea3a40 10465 && (complain & tf_error))
33bd39a2 10466 pedwarn ("duplicate explicit instantiation of `%#T'", t);
03d0f4af
MM
10467
10468 /* If we've already instantiated the template, just return now. */
10469 if (!CLASSTYPE_INTERFACE_ONLY (t))
10470 return;
44a8d0b3 10471 }
e8abc66f 10472
03d0f4af
MM
10473 mark_class_instantiated (t, extern_p);
10474 repo_template_instantiated (t, extern_p);
10475
e8abc66f
MS
10476 if (nomem_p)
10477 return;
10478
7177d104 10479 {
db5ae43f 10480 tree tmp;
5566b478 10481
03d0f4af
MM
10482 /* In contrast to implicit instantiation, where only the
10483 declarations, and not the definitions, of members are
10484 instantiated, we have here:
10485
10486 [temp.explicit]
10487
10488 The explicit instantiation of a class template specialization
10489 implies the instantiation of all of its members not
10490 previously explicitly specialized in the translation unit
10491 containing the explicit instantiation.
10492
10493 Of course, we can't instantiate member template classes, since
10494 we don't have any arguments for them. Note that the standard
dc957d14 10495 is unclear on whether the instantiation of the members are
03d0f4af
MM
10496 *explicit* instantiations or not. We choose to be generous,
10497 and not set DECL_EXPLICIT_INSTANTIATION. Therefore, we allow
10498 the explicit instantiation of a class where some of the members
10499 have no definition in the current translation unit. */
10500
5566b478
MS
10501 if (! static_p)
10502 for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
a7d87521 10503 if (TREE_CODE (tmp) == FUNCTION_DECL
1f109f0f 10504 && DECL_TEMPLATE_INSTANTIATION (tmp))
5566b478
MS
10505 {
10506 mark_decl_instantiated (tmp, extern_p);
10507 repo_template_instantiated (tmp, extern_p);
10508 if (! extern_p)
16d53b64 10509 instantiate_decl (tmp, /*defer_ok=*/1);
5566b478
MS
10510 }
10511
10512 for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
10513 if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
863adfc0 10514 {
5566b478 10515 mark_decl_instantiated (tmp, extern_p);
863adfc0 10516 repo_template_instantiated (tmp, extern_p);
5566b478 10517 if (! extern_p)
16d53b64 10518 instantiate_decl (tmp, /*defer_ok=*/1);
863adfc0 10519 }
7177d104 10520
5e0c54e5
GDR
10521 if (CLASSTYPE_NESTED_UTDS (t))
10522 binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
10523 bt_instantiate_type_proc, &storage);
a292b002 10524 }
8d08fdba 10525}
a28e3c7f 10526
36a117a5
MM
10527/* Given a function DECL, which is a specialization of TMPL, modify
10528 DECL to be a re-instantiation of TMPL with the same template
10529 arguments. TMPL should be the template into which tsubst'ing
10530 should occur for DECL, not the most general template.
830bfa74
MM
10531
10532 One reason for doing this is a scenario like this:
10533
10534 template <class T>
10535 void f(const T&, int i);
10536
10537 void g() { f(3, 7); }
10538
10539 template <class T>
10540 void f(const T& t, const int i) { }
10541
10542 Note that when the template is first instantiated, with
10543 instantiate_template, the resulting DECL will have no name for the
10544 first parameter, and the wrong type for the second. So, when we go
10545 to instantiate the DECL, we regenerate it. */
10546
e9659ab0 10547static void
3a978d72 10548regenerate_decl_from_template (tree decl, tree tmpl)
830bfa74 10549{
f9a7ae04
MM
10550 /* The most general version of TMPL. */
10551 tree gen_tmpl;
10552 /* The arguments used to instantiate DECL, from the most general
10553 template. */
830bfa74 10554 tree args;
830bfa74
MM
10555 tree code_pattern;
10556 tree new_decl;
b3445994 10557 bool unregistered;
830bfa74
MM
10558
10559 args = DECL_TI_ARGS (decl);
10560 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
10561
8251199e
JM
10562 /* Unregister the specialization so that when we tsubst we will not
10563 just return DECL. We don't have to unregister DECL from TMPL
10564 because if would only be registered there if it were a partial
10565 instantiation of a specialization, which it isn't: it's a full
10566 instantiation. */
36a117a5 10567 gen_tmpl = most_general_template (tmpl);
b3445994
MM
10568 unregistered = reregister_specialization (decl, gen_tmpl,
10569 /*new_spec=*/NULL_TREE);
36a117a5
MM
10570
10571 /* If the DECL was not unregistered then something peculiar is
10572 happening: we created a specialization but did not call
10573 register_specialization for it. */
10574 my_friendly_assert (unregistered, 0);
10575
2b907f5c
KL
10576 /* Make sure that we can see identifiers, and compute access
10577 correctly. */
10578 push_access_scope (decl);
10579
d8c4447d 10580 /* Do the substitution to get the new declaration. */
c2ea3a40 10581 new_decl = tsubst (code_pattern, args, tf_error, NULL_TREE);
830bfa74
MM
10582
10583 if (TREE_CODE (decl) == VAR_DECL)
10584 {
10585 /* Set up DECL_INITIAL, since tsubst doesn't. */
17bbb839
MM
10586 if (!DECL_INITIALIZED_IN_CLASS_P (decl))
10587 DECL_INITIAL (new_decl) =
10588 tsubst_expr (DECL_INITIAL (code_pattern), args,
10589 tf_error, DECL_TI_TEMPLATE (decl));
830bfa74 10590 }
2b0a63a3 10591 else if (TREE_CODE (decl) == FUNCTION_DECL)
fbf1c34b
MM
10592 {
10593 /* Convince duplicate_decls to use the DECL_ARGUMENTS from the
10594 new decl. */
10595 DECL_INITIAL (new_decl) = error_mark_node;
10596 /* And don't complain about a duplicate definition. */
10597 DECL_INITIAL (decl) = NULL_TREE;
10598 }
36a117a5 10599
2b59fc25 10600 pop_access_scope (decl);
0e902d98 10601
36a117a5
MM
10602 /* The immediate parent of the new template is still whatever it was
10603 before, even though tsubst sets DECL_TI_TEMPLATE up as the most
10604 general template. We also reset the DECL_ASSEMBLER_NAME since
10605 tsubst always calculates the name as if the function in question
10606 were really a template instance, and sometimes, with friend
10607 functions, this is not so. See tsubst_friend_function for
10608 details. */
10609 DECL_TI_TEMPLATE (new_decl) = DECL_TI_TEMPLATE (decl);
92643fea 10610 COPY_DECL_ASSEMBLER_NAME (decl, new_decl);
19e7881c 10611 COPY_DECL_RTL (decl, new_decl);
459c43ad 10612 DECL_USE_TEMPLATE (new_decl) = DECL_USE_TEMPLATE (decl);
36a117a5
MM
10613
10614 /* Call duplicate decls to merge the old and new declarations. */
830bfa74
MM
10615 duplicate_decls (new_decl, decl);
10616
36a117a5
MM
10617 /* Now, re-register the specialization. */
10618 register_specialization (decl, gen_tmpl, args);
830bfa74
MM
10619}
10620
a723baf1
MM
10621/* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
10622 substituted to get DECL. */
10623
d58b7c2d 10624tree
a723baf1
MM
10625template_for_substitution (tree decl)
10626{
10627 tree tmpl = DECL_TI_TEMPLATE (decl);
10628
10629 /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
10630 for the instantiation. This is not always the most general
10631 template. Consider, for example:
10632
10633 template <class T>
10634 struct S { template <class U> void f();
10635 template <> void f<int>(); };
10636
10637 and an instantiation of S<double>::f<int>. We want TD to be the
10638 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
10639 while (/* An instantiation cannot have a definition, so we need a
10640 more general template. */
10641 DECL_TEMPLATE_INSTANTIATION (tmpl)
10642 /* We must also deal with friend templates. Given:
10643
10644 template <class T> struct S {
10645 template <class U> friend void f() {};
10646 };
10647
10648 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
10649 so far as the language is concerned, but that's still
10650 where we get the pattern for the instantiation from. On
10651 other hand, if the definition comes outside the class, say:
10652
10653 template <class T> struct S {
10654 template <class U> friend void f();
10655 };
10656 template <class U> friend void f() {}
10657
10658 we don't need to look any further. That's what the check for
10659 DECL_INITIAL is for. */
10660 || (TREE_CODE (decl) == FUNCTION_DECL
10661 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
10662 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
10663 {
10664 /* The present template, TD, should not be a definition. If it
10665 were a definition, we should be using it! Note that we
10666 cannot restructure the loop to just keep going until we find
10667 a template with a definition, since that might go too far if
10668 a specialization was declared, but not defined. */
10669 my_friendly_assert (!(TREE_CODE (decl) == VAR_DECL
10670 && !DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl))),
10671 0);
10672
10673 /* Fetch the more general template. */
10674 tmpl = DECL_TI_TEMPLATE (tmpl);
10675 }
10676
10677 return tmpl;
10678}
10679
16d53b64 10680/* Produce the definition of D, a _DECL generated from a template. If
838dfd8a 10681 DEFER_OK is nonzero, then we don't have to actually do the
16d53b64 10682 instantiation now; we just have to do it sometime. */
f84b4be9 10683
a28e3c7f 10684tree
3a978d72 10685instantiate_decl (tree d, int defer_ok)
a28e3c7f 10686{
36a117a5 10687 tree tmpl = DECL_TI_TEMPLATE (d);
65f8b0fb
MM
10688 tree gen_args;
10689 tree args;
830bfa74 10690 tree td;
36a117a5
MM
10691 tree code_pattern;
10692 tree spec;
10693 tree gen_tmpl;
5566b478 10694 int pattern_defined;
31a714f6 10695 int need_push;
82a98427
NS
10696 location_t saved_loc = input_location;
10697
36a117a5
MM
10698 /* This function should only be used to instantiate templates for
10699 functions and static member variables. */
10700 my_friendly_assert (TREE_CODE (d) == FUNCTION_DECL
10701 || TREE_CODE (d) == VAR_DECL, 0);
10702
cec24319
MM
10703 /* Variables are never deferred; if instantiation is required, they
10704 are instantiated right away. That allows for better code in the
10705 case that an expression refers to the value of the variable --
10706 if the variable has a constant value the referring expression can
10707 take advantage of that fact. */
10708 if (TREE_CODE (d) == VAR_DECL)
10709 defer_ok = 0;
10710
db9b2174
MM
10711 /* Don't instantiate cloned functions. Instead, instantiate the
10712 functions they cloned. */
10713 if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
10714 d = DECL_CLONED_FUNCTION (d);
10715
fbf1c34b 10716 if (DECL_TEMPLATE_INSTANTIATED (d))
03d0f4af 10717 /* D has already been instantiated. It might seem reasonable to
dc957d14 10718 check whether or not D is an explicit instantiation, and, if so,
03d0f4af
MM
10719 stop here. But when an explicit instantiation is deferred
10720 until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
10721 is set, even though we still need to do the instantiation. */
36a117a5
MM
10722 return d;
10723
10724 /* If we already have a specialization of this declaration, then
10725 there's no reason to instantiate it. Note that
10726 retrieve_specialization gives us both instantiations and
10727 specializations, so we must explicitly check
10728 DECL_TEMPLATE_SPECIALIZATION. */
10729 gen_tmpl = most_general_template (tmpl);
65f8b0fb
MM
10730 gen_args = DECL_TI_ARGS (d);
10731 spec = retrieve_specialization (gen_tmpl, gen_args);
36a117a5
MM
10732 if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
10733 return spec;
10734
10735 /* This needs to happen before any tsubsting. */
10736 if (! push_tinst_level (d))
10737 return d;
10738
297a5329
JM
10739 timevar_push (TV_PARSE);
10740
c1f927e8 10741 /* We may be in the middle of deferred access check. Disable it now. */
7d021397
KL
10742 push_deferring_access_checks (dk_no_deferred);
10743
c1f927e8
RH
10744 /* Our caller does not expect collection to happen, which it might if
10745 we decide to compile the function to rtl now. Arrange for a new
10746 gc context to be created if so. */
10747 function_depth++;
10748
4d85e00e 10749 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
a723baf1
MM
10750 for the instantiation. */
10751 td = template_for_substitution (d);
fee23f54 10752 code_pattern = DECL_TEMPLATE_RESULT (td);
27bb8339 10753
76d3baad
KL
10754 if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
10755 || DECL_TEMPLATE_SPECIALIZATION (td))
649fc72d
NS
10756 /* In the case of a friend template whose definition is provided
10757 outside the class, we may have too many arguments. Drop the
76d3baad 10758 ones we don't need. The same is true for specializations. */
649fc72d
NS
10759 args = get_innermost_template_args
10760 (gen_args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td)));
10761 else
10762 args = gen_args;
65f8b0fb 10763
5566b478 10764 if (TREE_CODE (d) == FUNCTION_DECL)
39c76b4f 10765 pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
5566b478 10766 else
36a117a5 10767 pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
de22184b 10768
82a98427 10769 input_location = DECL_SOURCE_LOCATION (d);
de22184b 10770
de22184b 10771 if (pattern_defined)
5566b478 10772 {
7e9abee9
MM
10773 /* Let the repository code that this template definition is
10774 available.
10775
10776 The repository doesn't need to know about cloned functions
10777 because they never actually show up in the object file. It
10778 does need to know about the clones; those are the symbols
10779 that the linker will be emitting error messages about. */
10780 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (d)
10781 || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (d))
10782 {
10783 tree t;
10784
10785 for (t = TREE_CHAIN (d);
10786 t && DECL_CLONED_FUNCTION_P (t);
10787 t = TREE_CHAIN (t))
10788 repo_template_used (t);
10789 }
10790 else
10791 repo_template_used (d);
5566b478
MS
10792
10793 if (flag_external_templates && ! DECL_INTERFACE_KNOWN (d))
10794 {
10795 if (flag_alt_external_templates)
10796 {
10797 if (interface_unknown)
10798 warn_if_unknown_interface (d);
10799 }
fee23f54 10800 else if (DECL_INTERFACE_KNOWN (code_pattern))
5566b478
MS
10801 {
10802 DECL_INTERFACE_KNOWN (d) = 1;
fee23f54 10803 DECL_NOT_REALLY_EXTERN (d) = ! DECL_EXTERNAL (code_pattern);
5566b478
MS
10804 }
10805 else
fee23f54 10806 warn_if_unknown_interface (code_pattern);
5566b478
MS
10807 }
10808
e92cc029 10809 if (at_eof)
5566b478
MS
10810 import_export_decl (d);
10811 }
10812
4f2b0fb2
NS
10813 if (!defer_ok)
10814 {
10815 /* Recheck the substitutions to obtain any warning messages
10816 about ignoring cv qualifiers. */
10817 tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
10818 tree type = TREE_TYPE (gen);
10819
0e902d98 10820 /* Make sure that we can see identifiers, and compute access
2b59fc25
KL
10821 correctly. D is already the target FUNCTION_DECL with the
10822 right context. */
10823 push_access_scope (d);
0e902d98 10824
4f2b0fb2
NS
10825 if (TREE_CODE (gen) == FUNCTION_DECL)
10826 {
65f8b0fb
MM
10827 tsubst (DECL_ARGUMENTS (gen), gen_args, tf_error | tf_warning, d);
10828 tsubst (TYPE_RAISES_EXCEPTIONS (type), gen_args,
4f2b0fb2
NS
10829 tf_error | tf_warning, d);
10830 /* Don't simply tsubst the function type, as that will give
10831 duplicate warnings about poor parameter qualifications.
10832 The function arguments are the same as the decl_arguments
c6002625 10833 without the top level cv qualifiers. */
4f2b0fb2
NS
10834 type = TREE_TYPE (type);
10835 }
65f8b0fb 10836 tsubst (type, gen_args, tf_error | tf_warning, d);
0e902d98 10837
2b59fc25 10838 pop_access_scope (d);
4f2b0fb2
NS
10839 }
10840
46ccf50a
JM
10841 if (TREE_CODE (d) == VAR_DECL && DECL_INITIALIZED_IN_CLASS_P (d)
10842 && DECL_INITIAL (d) == NULL_TREE)
10843 /* We should have set up DECL_INITIAL in instantiate_class_template. */
10844 abort ();
930cd796
MM
10845 /* Reject all external templates except inline functions. */
10846 else if (DECL_INTERFACE_KNOWN (d)
10847 && ! DECL_NOT_REALLY_EXTERN (d)
4f8e1232
MM
10848 && ! (TREE_CODE (d) == FUNCTION_DECL
10849 && DECL_INLINE (d)))
930cd796 10850 goto out;
16d53b64
MM
10851 /* Defer all other templates, unless we have been explicitly
10852 forbidden from doing so. We restore the source position here
10853 because it's used by add_pending_template. */
10854 else if (! pattern_defined || defer_ok)
10855 {
82a98427 10856 input_location = saved_loc;
c27be9b9 10857
03d0f4af
MM
10858 if (at_eof && !pattern_defined
10859 && DECL_EXPLICIT_INSTANTIATION (d))
10860 /* [temp.explicit]
10861
10862 The definition of a non-exported function template, a
10863 non-exported member function template, or a non-exported
10864 member function or static data member of a class template
10865 shall be present in every translation unit in which it is
10866 explicitly instantiated. */
33bd39a2 10867 pedwarn
46ccf50a 10868 ("explicit instantiation of `%D' but no definition available", d);
03d0f4af 10869
5566b478 10870 add_pending_template (d);
de22184b 10871 goto out;
5566b478
MS
10872 }
10873
31a714f6
MM
10874 need_push = !global_bindings_p ();
10875 if (need_push)
10876 push_to_top_level ();
414ea4aa 10877
2b0a63a3
MM
10878 /* Regenerate the declaration in case the template has been modified
10879 by a subsequent redeclaration. */
10880 regenerate_decl_from_template (d, td);
1d62c33e 10881
120722ac 10882 /* We already set the file and line above. Reset them now in case
82a98427
NS
10883 they changed as a result of calling
10884 regenerate_decl_from_template. */
10885 input_location = DECL_SOURCE_LOCATION (d);
5156628f 10886
5566b478
MS
10887 if (TREE_CODE (d) == VAR_DECL)
10888 {
1d62c33e
MM
10889 /* Clear out DECL_RTL; whatever was there before may not be right
10890 since we've reset the type of the declaration. */
10891 SET_DECL_RTL (d, NULL_RTX);
10892
5566b478 10893 DECL_IN_AGGR_P (d) = 0;
b2dd096b
MM
10894 import_export_decl (d);
10895 DECL_EXTERNAL (d) = ! DECL_NOT_REALLY_EXTERN (d);
ea56c40c
MM
10896
10897 if (DECL_EXTERNAL (d))
10898 {
10899 /* The fact that this code is executing indicates that:
10900
10901 (1) D is a template static data member, for which a
10902 definition is available.
10903
34cd5ae7 10904 (2) An implicit or explicit instantiation has occurred.
ea56c40c
MM
10905
10906 (3) We are not going to emit a definition of the static
10907 data member at this time.
10908
10909 This situation is peculiar, but it occurs on platforms
10910 without weak symbols when performing an implicit
10911 instantiation. There, we cannot implicitly instantiate a
10912 defined static data member in more than one translation
10913 unit, so import_export_decl marks the declaration as
10914 external; we must rely on explicit instantiation. */
10915 }
10916 else
10917 {
10918 /* Mark D as instantiated so that recursive calls to
10919 instantiate_decl do not try to instantiate it again. */
10920 DECL_TEMPLATE_INSTANTIATED (d) = 1;
10921 cp_finish_decl (d,
10922 (!DECL_INITIALIZED_IN_CLASS_P (d)
10923 ? DECL_INITIAL (d) : NULL_TREE),
10924 NULL_TREE, 0);
10925 }
5566b478
MS
10926 }
10927 else if (TREE_CODE (d) == FUNCTION_DECL)
10928 {
6bbf1598 10929 htab_t saved_local_specializations;
a723baf1
MM
10930 tree subst_decl;
10931 tree tmpl_parm;
10932 tree spec_parm;
6bbf1598 10933
ea56c40c
MM
10934 /* Mark D as instantiated so that recursive calls to
10935 instantiate_decl do not try to instantiate it again. */
10936 DECL_TEMPLATE_INSTANTIATED (d) = 1;
10937
6bbf1598
MM
10938 /* Save away the current list, in case we are instantiating one
10939 template from within the body of another. */
10940 saved_local_specializations = local_specializations;
10941
6dfbb909 10942 /* Set up the list of local specializations. */
6dfbb909 10943 local_specializations = htab_create (37,
69f794a7 10944 hash_local_specialization,
a723baf1 10945 eq_local_specializations,
6dfbb909
MM
10946 NULL);
10947
558475f0 10948 /* Set up context. */
0b50d7f1 10949 import_export_decl (d);
a8f73d4b 10950 start_function (NULL_TREE, d, NULL_TREE, SF_PRE_PARSED);
5566b478 10951
a723baf1
MM
10952 /* Create substitution entries for the parameters. */
10953 subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
10954 tmpl_parm = DECL_ARGUMENTS (subst_decl);
10955 spec_parm = DECL_ARGUMENTS (d);
10956 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
10957 {
10958 register_local_specialization (spec_parm, tmpl_parm);
10959 spec_parm = skip_artificial_parms_for (d, spec_parm);
10960 tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
10961 }
10962 while (tmpl_parm)
10963 {
10964 register_local_specialization (spec_parm, tmpl_parm);
10965 tmpl_parm = TREE_CHAIN (tmpl_parm);
10966 spec_parm = TREE_CHAIN (spec_parm);
10967 }
10968 my_friendly_assert (!spec_parm, 20020813);
10969
558475f0
MM
10970 /* Substitute into the body of the function. */
10971 tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
c2ea3a40 10972 tf_error | tf_warning, tmpl);
558475f0 10973
6dfbb909
MM
10974 /* We don't need the local specializations any more. */
10975 htab_delete (local_specializations);
6bbf1598 10976 local_specializations = saved_local_specializations;
6dfbb909 10977
4d6abc1c 10978 /* Finish the function. */
b2dd096b 10979 d = finish_function (0);
8cd2462c 10980 expand_or_defer_fn (d);
5566b478
MS
10981 }
10982
971cbc14
MM
10983 /* We're not deferring instantiation any more. */
10984 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
10985
31a714f6
MM
10986 if (need_push)
10987 pop_from_top_level ();
414ea4aa 10988
de22184b 10989out:
82a98427 10990 input_location = saved_loc;
7d021397 10991 pop_deferring_access_checks ();
5566b478 10992 pop_tinst_level ();
c1f927e8 10993 function_depth--;
a28e3c7f 10994
297a5329
JM
10995 timevar_pop (TV_PARSE);
10996
a28e3c7f
MS
10997 return d;
10998}
5566b478 10999
0aafb128
MM
11000/* Run through the list of templates that we wish we could
11001 instantiate, and instantiate any we can. */
11002
11003int
3a978d72 11004instantiate_pending_templates (void)
0aafb128
MM
11005{
11006 tree *t;
46ccf50a 11007 tree last = NULL_TREE;
0aafb128
MM
11008 int instantiated_something = 0;
11009 int reconsider;
11010
11011 do
11012 {
11013 reconsider = 0;
11014
11015 t = &pending_templates;
11016 while (*t)
11017 {
0aafb128
MM
11018 tree instantiation = TREE_VALUE (*t);
11019
3ae18eaf 11020 reopen_tinst_level (TREE_PURPOSE (*t));
0aafb128 11021
2f939d94 11022 if (TYPE_P (instantiation))
0aafb128
MM
11023 {
11024 tree fn;
11025
d0f062fb 11026 if (!COMPLETE_TYPE_P (instantiation))
0aafb128
MM
11027 {
11028 instantiate_class_template (instantiation);
11029 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
11030 for (fn = TYPE_METHODS (instantiation);
11031 fn;
11032 fn = TREE_CHAIN (fn))
11033 if (! DECL_ARTIFICIAL (fn))
16d53b64 11034 instantiate_decl (fn, /*defer_ok=*/0);
d0f062fb 11035 if (COMPLETE_TYPE_P (instantiation))
0aafb128
MM
11036 {
11037 instantiated_something = 1;
11038 reconsider = 1;
11039 }
11040 }
11041
d0f062fb 11042 if (COMPLETE_TYPE_P (instantiation))
0aafb128
MM
11043 /* If INSTANTIATION has been instantiated, then we don't
11044 need to consider it again in the future. */
11045 *t = TREE_CHAIN (*t);
46ccf50a
JM
11046 else
11047 {
11048 last = *t;
11049 t = &TREE_CHAIN (*t);
11050 }
0aafb128
MM
11051 }
11052 else
11053 {
16d53b64 11054 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
0aafb128
MM
11055 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
11056 {
16d53b64
MM
11057 instantiation = instantiate_decl (instantiation,
11058 /*defer_ok=*/0);
0aafb128
MM
11059 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
11060 {
11061 instantiated_something = 1;
11062 reconsider = 1;
11063 }
11064 }
11065
16d53b64 11066 if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
0aafb128
MM
11067 || DECL_TEMPLATE_INSTANTIATED (instantiation))
11068 /* If INSTANTIATION has been instantiated, then we don't
11069 need to consider it again in the future. */
11070 *t = TREE_CHAIN (*t);
46ccf50a
JM
11071 else
11072 {
11073 last = *t;
11074 t = &TREE_CHAIN (*t);
11075 }
0aafb128 11076 }
84e5ca0f
NS
11077 tinst_depth = 0;
11078 current_tinst_level = NULL_TREE;
0aafb128 11079 }
46ccf50a 11080 last_pending_template = last;
0aafb128
MM
11081 }
11082 while (reconsider);
11083
11084 return instantiated_something;
11085}
11086
fd74ca0b
MM
11087/* Substitute ARGVEC into T, which is a list of initializers for
11088 either base class or a non-static data member. The TREE_PURPOSEs
11089 are DECLs, and the TREE_VALUEs are the initializer values. Used by
11090 instantiate_decl. */
4393e105 11091
824b9a4c 11092static tree
3a978d72 11093tsubst_initializer_list (tree t, tree argvec)
5566b478 11094{
2282d28d 11095 tree inits = NULL_TREE;
5566b478
MS
11096
11097 for (; t; t = TREE_CHAIN (t))
11098 {
fd74ca0b
MM
11099 tree decl;
11100 tree init;
11101 tree val;
11102
c2ea3a40 11103 decl = tsubst_copy (TREE_PURPOSE (t), argvec, tf_error | tf_warning,
fd74ca0b 11104 NULL_TREE);
1f5a253a
NS
11105 decl = expand_member_init (decl);
11106 if (decl && !DECL_P (decl))
11107 in_base_initializer = 1;
11108
c2ea3a40 11109 init = tsubst_expr (TREE_VALUE (t), argvec, tf_error | tf_warning,
fd74ca0b 11110 NULL_TREE);
fd74ca0b
MM
11111 if (!init)
11112 ;
11113 else if (TREE_CODE (init) == TREE_LIST)
11114 for (val = init; val; val = TREE_CHAIN (val))
11115 TREE_VALUE (val) = convert_from_reference (TREE_VALUE (val));
2282d28d 11116 else if (init != void_type_node)
fd74ca0b
MM
11117 init = convert_from_reference (init);
11118
1f5a253a
NS
11119 in_base_initializer = 0;
11120
11121 if (decl)
2282d28d 11122 {
1f5a253a 11123 init = build_tree_list (decl, init);
2282d28d
MM
11124 TREE_CHAIN (init) = inits;
11125 inits = init;
11126 }
5566b478 11127 }
2282d28d 11128 return inits;
5566b478
MS
11129}
11130
61a127b3
MM
11131/* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
11132
11133static void
3a978d72 11134set_current_access_from_decl (tree decl)
61a127b3
MM
11135{
11136 if (TREE_PRIVATE (decl))
11137 current_access_specifier = access_private_node;
11138 else if (TREE_PROTECTED (decl))
11139 current_access_specifier = access_protected_node;
11140 else
11141 current_access_specifier = access_public_node;
11142}
11143
dbfe2124
MM
11144/* Instantiate an enumerated type. TAG is the template type, NEWTAG
11145 is the instantiation (which should have been created with
11146 start_enum) and ARGS are the template arguments to use. */
b87692e5 11147
dbfe2124 11148static void
3a978d72 11149tsubst_enum (tree tag, tree newtag, tree args)
b87692e5 11150{
dbfe2124 11151 tree e;
b87692e5
MS
11152
11153 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
11154 {
61a127b3 11155 tree value;
7b6d72fc
MM
11156 tree decl;
11157
11158 decl = TREE_VALUE (e);
61a127b3
MM
11159 /* Note that in a template enum, the TREE_VALUE is the
11160 CONST_DECL, not the corresponding INTEGER_CST. */
7b6d72fc 11161 value = tsubst_expr (DECL_INITIAL (decl),
c2ea3a40 11162 args, tf_error | tf_warning,
4393e105 11163 NULL_TREE);
61a127b3
MM
11164
11165 /* Give this enumeration constant the correct access. */
7b6d72fc 11166 set_current_access_from_decl (decl);
61a127b3
MM
11167
11168 /* Actually build the enumerator itself. */
7b6d72fc 11169 build_enumerator (DECL_NAME (decl), value, newtag);
dbfe2124 11170 }
b3d5a58b 11171
219670f1 11172 finish_enum (newtag);
3e72ec9a
GDR
11173 DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
11174 = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
b87692e5 11175}
36a117a5 11176
1f6e1acc
AS
11177/* DECL is a FUNCTION_DECL that is a template specialization. Return
11178 its type -- but without substituting the innermost set of template
11179 arguments. So, innermost set of template parameters will appear in
5c74d5b0 11180 the type. */
1f6e1acc
AS
11181
11182tree
3a978d72 11183get_mostly_instantiated_function_type (tree decl)
1f6e1acc 11184{
1f6e1acc
AS
11185 tree fn_type;
11186 tree tmpl;
11187 tree targs;
11188 tree tparms;
11189 int parm_depth;
11190
11191 tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11192 targs = DECL_TI_ARGS (decl);
11193 tparms = DECL_TEMPLATE_PARMS (tmpl);
11194 parm_depth = TMPL_PARMS_DEPTH (tparms);
11195
11196 /* There should be as many levels of arguments as there are levels
11197 of parameters. */
11198 my_friendly_assert (parm_depth == TMPL_ARGS_DEPTH (targs), 0);
11199
11200 fn_type = TREE_TYPE (tmpl);
1f6e1acc
AS
11201
11202 if (parm_depth == 1)
11203 /* No substitution is necessary. */
11204 ;
11205 else
11206 {
11207 int i;
11208 tree partial_args;
11209
11210 /* Replace the innermost level of the TARGS with NULL_TREEs to
dc957d14 11211 let tsubst know not to substitute for those parameters. */
1f6e1acc
AS
11212 partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
11213 for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
11214 SET_TMPL_ARGS_LEVEL (partial_args, i,
11215 TMPL_ARGS_LEVEL (targs, i));
11216 SET_TMPL_ARGS_LEVEL (partial_args,
11217 TMPL_ARGS_DEPTH (targs),
11218 make_tree_vec (DECL_NTPARMS (tmpl)));
11219
5c74d5b0
KL
11220 /* Make sure that we can see identifiers, and compute access
11221 correctly. We can just use the context of DECL for the
11222 partial substitution here. It depends only on outer template
11223 parameters, regardless of whether the innermost level is
11224 specialized or not. */
2b59fc25 11225 push_access_scope (decl);
5c74d5b0 11226
1f6e1acc
AS
11227 /* Now, do the (partial) substitution to figure out the
11228 appropriate function type. */
c2ea3a40 11229 fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
1f6e1acc
AS
11230
11231 /* Substitute into the template parameters to obtain the real
11232 innermost set of parameters. This step is important if the
11233 innermost set of template parameters contains value
11234 parameters whose types depend on outer template parameters. */
11235 TREE_VEC_LENGTH (partial_args)--;
c2ea3a40 11236 tparms = tsubst_template_parms (tparms, partial_args, tf_error);
1f6e1acc 11237
2b59fc25 11238 pop_access_scope (decl);
5c74d5b0 11239 }
1f6e1acc
AS
11240
11241 return fn_type;
11242}
669ec2b4 11243
cb753e49 11244/* Return truthvalue if we're processing a template different from
dc957d14 11245 the last one involved in diagnostics. */
cb753e49 11246int
3a978d72 11247problematic_instantiation_changed (void)
cb753e49
GDR
11248{
11249 return last_template_error_tick != tinst_level_tick;
11250}
11251
11252/* Remember current template involved in diagnostics. */
11253void
3a978d72 11254record_last_problematic_instantiation (void)
cb753e49
GDR
11255{
11256 last_template_error_tick = tinst_level_tick;
11257}
11258
11259tree
3a978d72 11260current_instantiation (void)
cb753e49
GDR
11261{
11262 return current_tinst_level;
11263}
db3f4e4e
NS
11264
11265/* [temp.param] Check that template non-type parm TYPE is of an allowable
838dfd8a 11266 type. Return zero for ok, nonzero for disallowed. Issue error and
c2ea3a40 11267 warning messages under control of COMPLAIN. */
db3f4e4e
NS
11268
11269static int
3a978d72 11270invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
db3f4e4e
NS
11271{
11272 if (INTEGRAL_TYPE_P (type))
11273 return 0;
11274 else if (POINTER_TYPE_P (type))
11275 return 0;
a5ac359a 11276 else if (TYPE_PTR_TO_MEMBER_P (type))
db3f4e4e 11277 return 0;
db3f4e4e
NS
11278 else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11279 return 0;
11280 else if (TREE_CODE (type) == TYPENAME_TYPE)
11281 return 0;
11282
c2ea3a40 11283 if (complain & tf_error)
33bd39a2 11284 error ("`%#T' is not a valid type for a template constant parameter",
db3f4e4e
NS
11285 type);
11286 return 1;
11287}
e2500fed 11288
5552b43c
MM
11289/* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
11290 Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
1fb3244a 11291
5552b43c
MM
11292static bool
11293dependent_type_p_r (tree type)
1fb3244a
MM
11294{
11295 tree scope;
11296
1fb3244a
MM
11297 /* [temp.dep.type]
11298
11299 A type is dependent if it is:
11300
11301 -- a template parameter. */
11302 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11303 return true;
11304 /* -- a qualified-id with a nested-name-specifier which contains a
11305 class-name that names a dependent type or whose unqualified-id
11306 names a dependent type. */
11307 if (TREE_CODE (type) == TYPENAME_TYPE)
11308 return true;
11309 /* -- a cv-qualified type where the cv-unqualified type is
11310 dependent. */
11311 type = TYPE_MAIN_VARIANT (type);
11312 /* -- a compound type constructed from any dependent type. */
a5ac359a 11313 if (TYPE_PTR_TO_MEMBER_P (type))
1fb3244a
MM
11314 return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
11315 || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
11316 (type)));
11317 else if (TREE_CODE (type) == POINTER_TYPE
11318 || TREE_CODE (type) == REFERENCE_TYPE)
11319 return dependent_type_p (TREE_TYPE (type));
11320 else if (TREE_CODE (type) == FUNCTION_TYPE
11321 || TREE_CODE (type) == METHOD_TYPE)
11322 {
11323 tree arg_type;
11324
11325 if (dependent_type_p (TREE_TYPE (type)))
11326 return true;
11327 for (arg_type = TYPE_ARG_TYPES (type);
11328 arg_type;
11329 arg_type = TREE_CHAIN (arg_type))
11330 if (dependent_type_p (TREE_VALUE (arg_type)))
11331 return true;
11332 return false;
11333 }
11334 /* -- an array type constructed from any dependent type or whose
11335 size is specified by a constant expression that is
11336 value-dependent. */
11337 if (TREE_CODE (type) == ARRAY_TYPE)
11338 {
11339 if (TYPE_DOMAIN (type)
11340 && ((value_dependent_expression_p
11341 (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
11342 || (type_dependent_expression_p
11343 (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
11344 return true;
11345 return dependent_type_p (TREE_TYPE (type));
11346 }
86306a6b 11347
1fb3244a 11348 /* -- a template-id in which either the template name is a template
86306a6b
NS
11349 parameter ... */
11350 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
1fb3244a 11351 return true;
86306a6b
NS
11352 /* ... or any of the template arguments is a dependent type or
11353 an expression that is type-dependent or value-dependent. */
11354 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
7e99327d
MM
11355 && (any_dependent_template_arguments_p
11356 (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
1fb3244a 11357 return true;
86306a6b 11358
1fb3244a
MM
11359 /* All TYPEOF_TYPEs are dependent; if the argument of the `typeof'
11360 expression is not type-dependent, then it should already been
11361 have resolved. */
11362 if (TREE_CODE (type) == TYPEOF_TYPE)
11363 return true;
86306a6b 11364
1fb3244a
MM
11365 /* The standard does not specifically mention types that are local
11366 to template functions or local classes, but they should be
11367 considered dependent too. For example:
11368
11369 template <int I> void f() {
11370 enum E { a = I };
11371 S<sizeof (E)> s;
11372 }
11373
11374 The size of `E' cannot be known until the value of `I' has been
11375 determined. Therefore, `E' must be considered dependent. */
11376 scope = TYPE_CONTEXT (type);
11377 if (scope && TYPE_P (scope))
11378 return dependent_type_p (scope);
11379 else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
11380 return type_dependent_expression_p (scope);
11381
11382 /* Other types are non-dependent. */
11383 return false;
11384}
11385
5552b43c
MM
11386/* Returns TRUE if TYPE is dependent, in the sense of
11387 [temp.dep.type]. */
11388
11389bool
11390dependent_type_p (tree type)
11391{
11392 /* If there are no template parameters in scope, then there can't be
11393 any dependent types. */
11394 if (!processing_template_decl)
11395 return false;
11396
11397 /* If the type is NULL, we have not computed a type for the entity
11398 in question; in that case, the type is dependent. */
11399 if (!type)
11400 return true;
11401
11402 /* Erroneous types can be considered non-dependent. */
11403 if (type == error_mark_node)
11404 return false;
11405
11406 /* If we have not already computed the appropriate value for TYPE,
11407 do so now. */
11408 if (!TYPE_DEPENDENT_P_VALID (type))
11409 {
11410 TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
11411 TYPE_DEPENDENT_P_VALID (type) = 1;
11412 }
11413
11414 return TYPE_DEPENDENT_P (type);
11415}
11416
8d83f792
MM
11417/* Returns TRUE if EXPRESSION is dependent, according to CRITERION. */
11418
11419static bool
11420dependent_scope_ref_p (tree expression, bool criterion (tree))
11421{
11422 tree scope;
11423 tree name;
11424
11425 my_friendly_assert (TREE_CODE (expression) == SCOPE_REF, 20030714);
11426
11427 if (!TYPE_P (TREE_OPERAND (expression, 0)))
11428 return true;
11429
11430 scope = TREE_OPERAND (expression, 0);
11431 name = TREE_OPERAND (expression, 1);
11432
11433 /* [temp.dep.expr]
11434
11435 An id-expression is type-dependent if it contains a
11436 nested-name-specifier that contains a class-name that names a
11437 dependent type. */
11438 /* The suggested resolution to Core Issue 2 implies that if the
11439 qualifying type is the current class, then we must peek
11440 inside it. */
11441 if (DECL_P (name)
11442 && currently_open_class (scope)
11443 && !criterion (name))
11444 return false;
11445 if (dependent_type_p (scope))
11446 return true;
11447
11448 return false;
11449}
11450
20929c7f
GB
11451/* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
11452 [temp.dep.constexpr] */
1fb3244a 11453
14d22dd6 11454bool
1fb3244a
MM
11455value_dependent_expression_p (tree expression)
11456{
11457 if (!processing_template_decl)
11458 return false;
11459
11460 /* A name declared with a dependent type. */
10b1d5e7 11461 if (TREE_CODE (expression) == IDENTIFIER_NODE
00cf3e31
MM
11462 || (DECL_P (expression)
11463 && type_dependent_expression_p (expression)))
1fb3244a
MM
11464 return true;
11465 /* A non-type template parameter. */
11466 if ((TREE_CODE (expression) == CONST_DECL
11467 && DECL_TEMPLATE_PARM_P (expression))
11468 || TREE_CODE (expression) == TEMPLATE_PARM_INDEX)
11469 return true;
11470 /* A constant with integral or enumeration type and is initialized
11471 with an expression that is value-dependent. */
11472 if (TREE_CODE (expression) == VAR_DECL
11473 && DECL_INITIAL (expression)
d17811fd 11474 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
1fb3244a
MM
11475 && value_dependent_expression_p (DECL_INITIAL (expression)))
11476 return true;
11477 /* These expressions are value-dependent if the type to which the
20929c7f
GB
11478 cast occurs is dependent or the expression being casted is
11479 value-dependent. */
d17811fd
MM
11480 if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
11481 || TREE_CODE (expression) == STATIC_CAST_EXPR
11482 || TREE_CODE (expression) == CONST_CAST_EXPR
11483 || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
11484 || TREE_CODE (expression) == CAST_EXPR)
11485 {
11486 if (dependent_type_p (TREE_TYPE (expression)))
11487 return true;
11488 /* A functional cast has a list of operands. */
11489 expression = TREE_OPERAND (expression, 0);
11490 if (TREE_CODE (expression) == TREE_LIST)
11491 {
11492 do
11493 {
11494 if (value_dependent_expression_p (TREE_VALUE (expression)))
11495 return true;
11496 expression = TREE_CHAIN (expression);
11497 }
11498 while (expression);
11499 return false;
11500 }
11501 else
11502 return value_dependent_expression_p (expression);
11503 }
11504 /* A `sizeof' expression is value-dependent if the operand is
11505 type-dependent. */
11506 if (TREE_CODE (expression) == SIZEOF_EXPR
11507 || TREE_CODE (expression) == ALIGNOF_EXPR)
11508 {
11509 expression = TREE_OPERAND (expression, 0);
11510 if (TYPE_P (expression))
11511 return dependent_type_p (expression);
11512 return type_dependent_expression_p (expression);
11513 }
8d83f792
MM
11514 if (TREE_CODE (expression) == SCOPE_REF)
11515 return dependent_scope_ref_p (expression, value_dependent_expression_p);
1fb3244a
MM
11516 /* A constant expression is value-dependent if any subexpression is
11517 value-dependent. */
11518 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (expression))))
11519 {
11520 switch (TREE_CODE_CLASS (TREE_CODE (expression)))
11521 {
11522 case '1':
11523 return (value_dependent_expression_p
11524 (TREE_OPERAND (expression, 0)));
11525 case '<':
11526 case '2':
11527 return ((value_dependent_expression_p
11528 (TREE_OPERAND (expression, 0)))
11529 || (value_dependent_expression_p
11530 (TREE_OPERAND (expression, 1))));
11531 case 'e':
11532 {
11533 int i;
14d22dd6
MM
11534 for (i = 0; i < first_rtl_op (TREE_CODE (expression)); ++i)
11535 /* In some cases, some of the operands may be missing.
11536 (For example, in the case of PREDECREMENT_EXPR, the
11537 amount to increment by may be missing.) That doesn't
11538 make the expression dependent. */
11539 if (TREE_OPERAND (expression, i)
11540 && (value_dependent_expression_p
11541 (TREE_OPERAND (expression, i))))
1fb3244a
MM
11542 return true;
11543 return false;
11544 }
11545 }
11546 }
11547
11548 /* The expression is not value-dependent. */
11549 return false;
11550}
11551
11552/* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
11553 [temp.dep.expr]. */
11554
11555bool
3a978d72 11556type_dependent_expression_p (tree expression)
1fb3244a
MM
11557{
11558 if (!processing_template_decl)
11559 return false;
11560
7efa3e22
NS
11561 if (expression == error_mark_node)
11562 return false;
10b1d5e7
MM
11563
11564 /* An unresolved name is always dependent. */
11565 if (TREE_CODE (expression) == IDENTIFIER_NODE)
11566 return true;
7efa3e22 11567
1fb3244a
MM
11568 /* Some expression forms are never type-dependent. */
11569 if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
11570 || TREE_CODE (expression) == SIZEOF_EXPR
11571 || TREE_CODE (expression) == ALIGNOF_EXPR
11572 || TREE_CODE (expression) == TYPEID_EXPR
11573 || TREE_CODE (expression) == DELETE_EXPR
11574 || TREE_CODE (expression) == VEC_DELETE_EXPR
11575 || TREE_CODE (expression) == THROW_EXPR)
11576 return false;
11577
11578 /* The types of these expressions depends only on the type to which
11579 the cast occurs. */
11580 if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
11581 || TREE_CODE (expression) == STATIC_CAST_EXPR
11582 || TREE_CODE (expression) == CONST_CAST_EXPR
11583 || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
11584 || TREE_CODE (expression) == CAST_EXPR)
11585 return dependent_type_p (TREE_TYPE (expression));
d17811fd 11586
1fb3244a
MM
11587 /* The types of these expressions depends only on the type created
11588 by the expression. */
d17811fd
MM
11589 if (TREE_CODE (expression) == NEW_EXPR
11590 || TREE_CODE (expression) == VEC_NEW_EXPR)
09d2f85f
KL
11591 {
11592 /* For NEW_EXPR tree nodes created inside a template, either
11593 the object type itself or a TREE_LIST may appear as the
11594 operand 1. */
11595 tree type = TREE_OPERAND (expression, 1);
11596 if (TREE_CODE (type) == TREE_LIST)
11597 /* This is an array type. We need to check array dimensions
11598 as well. */
11599 return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
11600 || value_dependent_expression_p
11601 (TREE_OPERAND (TREE_VALUE (type), 1));
11602 else
11603 return dependent_type_p (type);
11604 }
1fb3244a 11605
6eeba0cc 11606 if (TREE_CODE (expression) == SCOPE_REF
8d83f792
MM
11607 && dependent_scope_ref_p (expression,
11608 type_dependent_expression_p))
11609 return true;
6eeba0cc 11610
1fb3244a
MM
11611 if (TREE_CODE (expression) == FUNCTION_DECL
11612 && DECL_LANG_SPECIFIC (expression)
11613 && DECL_TEMPLATE_INFO (expression)
86306a6b
NS
11614 && (any_dependent_template_arguments_p
11615 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
1fb3244a
MM
11616 return true;
11617
d17811fd
MM
11618 if (TREE_TYPE (expression) == unknown_type_node)
11619 {
11620 if (TREE_CODE (expression) == ADDR_EXPR)
11621 return type_dependent_expression_p (TREE_OPERAND (expression, 0));
6cb89308
NS
11622 if (TREE_CODE (expression) == COMPONENT_REF)
11623 {
11624 if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
11625 return true;
11626 expression = TREE_OPERAND (expression, 1);
11627 if (TREE_CODE (expression) == IDENTIFIER_NODE)
11628 return false;
11629 }
11630
d17811fd
MM
11631 if (TREE_CODE (expression) == BASELINK)
11632 expression = BASELINK_FUNCTIONS (expression);
11633 if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
11634 {
ee3071ef
NS
11635 if (any_dependent_template_arguments_p
11636 (TREE_OPERAND (expression, 1)))
d17811fd
MM
11637 return true;
11638 expression = TREE_OPERAND (expression, 0);
11639 }
11640 if (TREE_CODE (expression) == OVERLOAD)
11641 {
11642 while (expression)
11643 {
11644 if (type_dependent_expression_p (OVL_CURRENT (expression)))
11645 return true;
11646 expression = OVL_NEXT (expression);
11647 }
11648 return false;
11649 }
11650 abort ();
11651 }
11652
1fb3244a
MM
11653 return (dependent_type_p (TREE_TYPE (expression)));
11654}
11655
d17811fd
MM
11656/* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
11657 contains a type-dependent expression. */
1fb3244a
MM
11658
11659bool
d17811fd
MM
11660any_type_dependent_arguments_p (tree args)
11661{
11662 while (args)
11663 {
7efa3e22
NS
11664 tree arg = TREE_VALUE (args);
11665
11666 if (type_dependent_expression_p (arg))
d17811fd
MM
11667 return true;
11668 args = TREE_CHAIN (args);
11669 }
11670 return false;
11671}
11672
11673/* Returns TRUE if the ARG (a template argument) is dependent. */
11674
11675static bool
1fb3244a
MM
11676dependent_template_arg_p (tree arg)
11677{
11678 if (!processing_template_decl)
11679 return false;
11680
11681 if (TREE_CODE (arg) == TEMPLATE_DECL
11682 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11683 return dependent_template_p (arg);
11684 else if (TYPE_P (arg))
11685 return dependent_type_p (arg);
11686 else
11687 return (type_dependent_expression_p (arg)
11688 || value_dependent_expression_p (arg));
11689}
11690
d17811fd
MM
11691/* Returns true if ARGS (a collection of template arguments) contains
11692 any dependent arguments. */
1fb3244a 11693
d17811fd
MM
11694bool
11695any_dependent_template_arguments_p (tree args)
1fb3244a 11696{
bf12d54d
NS
11697 int i;
11698
d17811fd
MM
11699 if (!args)
11700 return false;
11701
bf12d54d
NS
11702 for (i = 0; i < TREE_VEC_LENGTH (args); ++i)
11703 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
11704 return true;
1fb3244a 11705
1fb3244a
MM
11706 return false;
11707}
11708
11709/* Returns TRUE if the template TMPL is dependent. */
11710
11711bool
11712dependent_template_p (tree tmpl)
11713{
11714 /* Template template parameters are dependent. */
11715 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
11716 || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
11717 return true;
d17811fd
MM
11718 /* So are qualified names that have not been looked up. */
11719 if (TREE_CODE (tmpl) == SCOPE_REF)
11720 return true;
1fb3244a
MM
11721 /* So are member templates of dependent classes. */
11722 if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
11723 return dependent_type_p (DECL_CONTEXT (tmpl));
11724 return false;
11725}
11726
d17811fd
MM
11727/* Returns TRUE if the specialization TMPL<ARGS> is dependent. */
11728
11729bool
11730dependent_template_id_p (tree tmpl, tree args)
11731{
11732 return (dependent_template_p (tmpl)
11733 || any_dependent_template_arguments_p (args));
11734}
11735
14d22dd6
MM
11736/* TYPE is a TYPENAME_TYPE. Returns the ordinary TYPE to which the
11737 TYPENAME_TYPE corresponds. Returns ERROR_MARK_NODE if no such TYPE
11738 can be found. Note that this function peers inside uninstantiated
11739 templates and therefore should be used only in extremely limited
11740 situations. */
11741
11742tree
11743resolve_typename_type (tree type, bool only_current_p)
11744{
11745 tree scope;
11746 tree name;
11747 tree decl;
11748 int quals;
11749
11750 my_friendly_assert (TREE_CODE (type) == TYPENAME_TYPE,
11751 20010702);
11752
11753 scope = TYPE_CONTEXT (type);
11754 name = TYPE_IDENTIFIER (type);
11755
11756 /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
11757 it first before we can figure out what NAME refers to. */
11758 if (TREE_CODE (scope) == TYPENAME_TYPE)
11759 scope = resolve_typename_type (scope, only_current_p);
11760 /* If we don't know what SCOPE refers to, then we cannot resolve the
11761 TYPENAME_TYPE. */
11762 if (scope == error_mark_node || TREE_CODE (scope) == TYPENAME_TYPE)
11763 return error_mark_node;
11764 /* If the SCOPE is a template type parameter, we have no way of
11765 resolving the name. */
11766 if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
11767 return type;
11768 /* If the SCOPE is not the current instantiation, there's no reason
11769 to look inside it. */
11770 if (only_current_p && !currently_open_class (scope))
11771 return error_mark_node;
ca099ac8
MM
11772 /* If SCOPE is a partial instantiation, it will not have a valid
11773 TYPE_FIELDS list, so use the original template. */
353b4fc0 11774 scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
14d22dd6
MM
11775 /* Enter the SCOPE so that name lookup will be resolved as if we
11776 were in the class definition. In particular, SCOPE will no
11777 longer be considered a dependent type. */
11778 push_scope (scope);
11779 /* Look up the declaration. */
86ac0575 11780 decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
14d22dd6
MM
11781 /* Obtain the set of qualifiers applied to the TYPE. */
11782 quals = cp_type_quals (type);
11783 /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
11784 find a TEMPLATE_DECL. Otherwise, we want to find a TYPE_DECL. */
11785 if (!decl)
11786 type = error_mark_node;
11787 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
11788 && TREE_CODE (decl) == TYPE_DECL)
11789 type = TREE_TYPE (decl);
11790 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
11791 && DECL_CLASS_TEMPLATE_P (decl))
11792 {
11793 tree tmpl;
11794 tree args;
11795 /* Obtain the template and the arguments. */
11796 tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
11797 args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
11798 /* Instantiate the template. */
11799 type = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
42eaed49 11800 /*entering_scope=*/0, tf_error | tf_user);
14d22dd6
MM
11801 }
11802 else
11803 type = error_mark_node;
11804 /* Qualify the resulting type. */
11805 if (type != error_mark_node && quals)
11806 type = cp_build_qualified_type (type, quals);
11807 /* Leave the SCOPE. */
11808 pop_scope (scope);
11809
11810 return type;
11811}
11812
d17811fd
MM
11813/* EXPR is an expression which is not type-dependent. Return a proxy
11814 for EXPR that can be used to compute the types of larger
11815 expressions containing EXPR. */
11816
11817tree
11818build_non_dependent_expr (tree expr)
11819{
11820 /* Preserve null pointer constants so that the type of things like
11821 "p == 0" where "p" is a pointer can be determined. */
11822 if (null_ptr_cst_p (expr))
11823 return expr;
11824 /* Preserve OVERLOADs; the functions must be available to resolve
11825 types. */
11826 if (TREE_CODE (expr) == OVERLOAD)
11827 return expr;
7433e6d4
MM
11828 /* Preserve string constants; conversions from string constants to
11829 "char *" are allowed, even though normally a "const char *"
11830 cannot be used to initialize a "char *". */
11831 if (TREE_CODE (expr) == STRING_CST)
11832 return expr;
47d4c811
NS
11833
11834 if (TREE_CODE (expr) == COND_EXPR)
11835 return build (COND_EXPR,
11836 TREE_TYPE (expr),
11837 TREE_OPERAND (expr, 0),
11838 build_non_dependent_expr (TREE_OPERAND (expr, 1)),
11839 build_non_dependent_expr (TREE_OPERAND (expr, 2)));
8e1daa34
NS
11840 if (TREE_CODE (expr) == COMPOUND_EXPR
11841 && !COMPOUND_EXPR_OVERLOADED (expr))
47d4c811
NS
11842 return build (COMPOUND_EXPR,
11843 TREE_TYPE (expr),
11844 TREE_OPERAND (expr, 0),
11845 build_non_dependent_expr (TREE_OPERAND (expr, 1)));
11846
d17811fd
MM
11847 /* Otherwise, build a NON_DEPENDENT_EXPR.
11848
11849 REFERENCE_TYPEs are not stripped for expressions in templates
11850 because doing so would play havoc with mangling. Consider, for
11851 example:
11852
11853 template <typename T> void f<T& g>() { g(); }
11854
11855 In the body of "f", the expression for "g" will have
11856 REFERENCE_TYPE, even though the standard says that it should
11857 not. The reason is that we must preserve the syntactic form of
11858 the expression so that mangling (say) "f<g>" inside the body of
11859 "f" works out correctly. Therefore, the REFERENCE_TYPE is
11860 stripped here. */
018a5803 11861 return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
d17811fd
MM
11862}
11863
11864/* ARGS is a TREE_LIST of expressions as arguments to a function call.
11865 Return a new TREE_LIST with the various arguments replaced with
11866 equivalent non-dependent expressions. */
11867
11868tree
11869build_non_dependent_args (tree args)
11870{
11871 tree a;
11872 tree new_args;
11873
11874 new_args = NULL_TREE;
11875 for (a = args; a; a = TREE_CHAIN (a))
11876 new_args = tree_cons (NULL_TREE,
11877 build_non_dependent_expr (TREE_VALUE (a)),
11878 new_args);
11879 return nreverse (new_args);
11880}
11881
e2500fed 11882#include "gt-cp-pt.h"