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