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