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