]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/pt.c
name-lookup.c (ambiguous_decl): Fix case when new->value is hidden.
[gcc.git] / gcc / cp / pt.c
CommitLineData
8d08fdba 1/* Handle parameterized types (templates) for GNU C++.
3febd123 2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4514aa8c 3 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
8d08fdba 4 Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
fc378698 5 Rewritten by Jason Merrill (jason@cygnus.com).
8d08fdba 6
f5adbb8d 7This file is part of GCC.
8d08fdba 8
f5adbb8d 9GCC is free software; you can redistribute it and/or modify
8d08fdba
MS
10it under the terms of the GNU General Public License as published by
11the Free Software Foundation; either version 2, or (at your option)
12any later version.
13
f5adbb8d 14GCC is distributed in the hope that it will be useful,
8d08fdba
MS
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License
f5adbb8d 20along with GCC; see the file COPYING. If not, write to
1788952f
KC
21the Free Software Foundation, 51 Franklin Street, Fifth Floor,
22Boston, MA 02110-1301, USA. */
8d08fdba
MS
23
24/* Known bugs or deficiencies include:
e92cc029 25
e92cc029
MS
26 all methods must be provided in header files; can't use a source
27 file that contains only the method templates and "just win". */
8d08fdba
MS
28
29#include "config.h"
8d052bc7 30#include "system.h"
4977bab6
ZW
31#include "coretypes.h"
32#include "tm.h"
8d08fdba 33#include "obstack.h"
8d08fdba 34#include "tree.h"
0c58f841 35#include "pointer-set.h"
8d08fdba 36#include "flags.h"
e58a9aa1 37#include "c-common.h"
8d08fdba 38#include "cp-tree.h"
e58a9aa1 39#include "cp-objcp-common.h"
25af8512 40#include "tree-inline.h"
8d08fdba 41#include "decl.h"
e8abc66f 42#include "output.h"
49c249e1 43#include "except.h"
54f92bfb 44#include "toplev.h"
3dcaad8b 45#include "rtl.h"
297a5329 46#include "timevar.h"
325c3691 47#include "tree-iterator.h"
53824026 48#include "vecprim.h"
49c249e1 49
050367a3
MM
50/* The type of functions taking a tree, and some additional data, and
51 returning an int. */
3a978d72 52typedef int (*tree_fn_t) (tree, void*);
050367a3 53
0aafb128
MM
54/* The PENDING_TEMPLATES is a TREE_LIST of templates whose
55 instantiations have been deferred, either because their definitions
d78e771d
ZW
56 were not yet available, or because we were putting off doing the work.
57 The TREE_PURPOSE of each entry is either a DECL (for a function or
58 static data member), or a TYPE (for a class) indicating what we are
59 hoping to instantiate. The TREE_VALUE is not used. */
e2500fed 60static GTY(()) tree pending_templates;
13e73b29 61static GTY(()) tree last_pending_template;
73aad9b9 62
67ffc812 63int processing_template_parmlist;
386b8a85
JM
64static int template_header_count;
65
e2500fed 66static GTY(()) tree saved_trees;
53824026 67static VEC(int,heap) *inline_parm_levels;
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
410cf6e6 83/* Contains canonical template parameter types. The vector is indexed by
06d40de8
DG
84 the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
85 TREE_LIST, whose TREE_VALUEs contain the canonical template
86 parameters of various types and levels. */
87static GTY(()) VEC(tree,gc) *canonical_template_parms;
88
830bfa74
MM
89#define UNIFY_ALLOW_NONE 0
90#define UNIFY_ALLOW_MORE_CV_QUAL 1
91#define UNIFY_ALLOW_LESS_CV_QUAL 2
92#define UNIFY_ALLOW_DERIVED 4
161c12b0 93#define UNIFY_ALLOW_INTEGER 8
028d1f20 94#define UNIFY_ALLOW_OUTER_LEVEL 16
62e4a758
NS
95#define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
96#define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
830bfa74 97
3a978d72
NN
98static void push_access_scope (tree);
99static void pop_access_scope (tree);
100static int resolve_overloaded_unification (tree, tree, tree, tree,
101 unification_kind_t, int);
102static int try_one_overload (tree, tree, tree, tree, tree,
f23fb7f5 103 unification_kind_t, int, bool);
3a978d72
NN
104static int unify (tree, tree, tree, tree, int);
105static void add_pending_template (tree);
aa9d8196
VR
106static int push_tinst_level (tree);
107static void pop_tinst_level (void);
3a978d72 108static void reopen_tinst_level (tree);
3a978d72 109static tree tsubst_initializer_list (tree, tree);
3a978d72 110static tree get_class_bindings (tree, tree, tree);
3db45ab5 111static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
e7e93965 112 bool, bool);
3a978d72
NN
113static void tsubst_enum (tree, tree, tree);
114static tree add_to_template_args (tree, tree);
115static tree add_outermost_template_args (tree, tree);
116static bool check_instantiated_args (tree, tree, tsubst_flags_t);
8af2fec4
RY
117static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
118 tree);
3a978d72 119static int type_unification_real (tree, tree, tree, tree,
30f86ec3 120 int, unification_kind_t, int);
3a978d72 121static void note_template_header (int);
b6ab6892 122static tree convert_nontype_argument_function (tree, tree);
3a978d72
NN
123static tree convert_nontype_argument (tree, tree);
124static tree convert_template_argument (tree, tree, tree,
125 tsubst_flags_t, int, tree);
0c58f841
MA
126static int for_each_template_parm (tree, tree_fn_t, void*,
127 struct pointer_set_t*);
5d80a306 128static tree expand_template_argument_pack (tree);
3a978d72
NN
129static tree build_template_parm_index (int, int, int, tree, tree);
130static int inline_needs_template_parms (tree);
131static void push_inline_template_parms_recursive (tree, int);
3a978d72 132static tree retrieve_local_specialization (tree);
3a978d72 133static void register_local_specialization (tree, tree);
3a978d72 134static tree reduce_template_parm_level (tree, tree, int);
3a978d72
NN
135static int mark_template_parm (tree, void *);
136static int template_parm_this_level_p (tree, void *);
137static tree tsubst_friend_function (tree, tree);
138static tree tsubst_friend_class (tree, tree);
139static int can_complete_type_without_circularity (tree);
a34d3336 140static tree get_bindings (tree, tree, tree, bool);
3a978d72
NN
141static int template_decl_level (tree);
142static int check_cv_quals_for_unify (int, tree, tree);
5d80a306
DG
143static void template_parm_level_and_index (tree, int*, int*);
144static int unify_pack_expansion (tree, tree, tree, tree, int, bool, bool);
a91db711
NS
145static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
146static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
3a978d72
NN
147static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
148static void regenerate_decl_from_template (tree, tree);
3a978d72 149static tree most_specialized_class (tree, tree);
3a978d72 150static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
3a978d72
NN
151static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
152static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
9b910171 153static bool check_specialization_scope (void);
3a978d72
NN
154static tree process_partial_specialization (tree);
155static void set_current_access_from_decl (tree);
3a978d72 156static tree get_template_base (tree, tree, tree, tree);
3a978d72
NN
157static tree try_class_unification (tree, tree, tree, tree);
158static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
159 tree, tree);
3a978d72
NN
160static int template_args_equal (tree, tree);
161static void tsubst_default_arguments (tree);
162static tree for_each_template_parm_r (tree *, int *, void *);
163static tree copy_default_args_to_explicit_spec_1 (tree, tree);
164static void copy_default_args_to_explicit_spec (tree);
165static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
a723baf1 166static int eq_local_specializations (const void *, const void *);
5d80a306 167static bool dependent_template_arg_p (tree);
06d40de8 168static bool any_template_arguments_need_structural_equality_p (tree);
5552b43c 169static bool dependent_type_p_r (tree);
14d22dd6 170static tree tsubst (tree, tree, tsubst_flags_t, tree);
015c2c66 171static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
14d22dd6 172static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
5d80a306 173static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
36a117a5 174
2b59fc25
KL
175/* Make the current scope suitable for access checking when we are
176 processing T. T can be FUNCTION_DECL for instantiated function
2b907f5c
KL
177 template, or VAR_DECL for static member variable (need by
178 instantiate_decl). */
2b59fc25 179
8ce33230 180static void
2b907f5c 181push_access_scope (tree t)
2b59fc25 182{
50bc768d
NS
183 gcc_assert (TREE_CODE (t) == FUNCTION_DECL
184 || TREE_CODE (t) == VAR_DECL);
2b59fc25 185
23ff7e2d
KL
186 if (DECL_FRIEND_CONTEXT (t))
187 push_nested_class (DECL_FRIEND_CONTEXT (t));
188 else if (DECL_CLASS_SCOPE_P (t))
2b907f5c 189 push_nested_class (DECL_CONTEXT (t));
0f399e5f
KL
190 else
191 push_to_top_level ();
c8094d83 192
2b907f5c 193 if (TREE_CODE (t) == FUNCTION_DECL)
0f399e5f
KL
194 {
195 saved_access_scope = tree_cons
196 (NULL_TREE, current_function_decl, saved_access_scope);
197 current_function_decl = t;
198 }
2b59fc25
KL
199}
200
2b59fc25
KL
201/* Restore the scope set up by push_access_scope. T is the node we
202 are processing. */
203
8ce33230 204static void
3a978d72 205pop_access_scope (tree t)
2b59fc25 206{
2b907f5c 207 if (TREE_CODE (t) == FUNCTION_DECL)
2b59fc25
KL
208 {
209 current_function_decl = TREE_VALUE (saved_access_scope);
210 saved_access_scope = TREE_CHAIN (saved_access_scope);
211 }
0f399e5f 212
23ff7e2d 213 if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
0f399e5f
KL
214 pop_nested_class ();
215 else
216 pop_from_top_level ();
2b59fc25
KL
217}
218
a723baf1
MM
219/* Do any processing required when DECL (a member template
220 declaration) is finished. Returns the TEMPLATE_DECL corresponding
221 to DECL, unless it is a specialization, in which case the DECL
222 itself is returned. */
e1467ff2
MM
223
224tree
3a978d72 225finish_member_template_decl (tree decl)
e1467ff2 226{
a723baf1
MM
227 if (decl == error_mark_node)
228 return error_mark_node;
229
50bc768d 230 gcc_assert (DECL_P (decl));
a723baf1
MM
231
232 if (TREE_CODE (decl) == TYPE_DECL)
93cdc044 233 {
a723baf1
MM
234 tree type;
235
236 type = TREE_TYPE (decl);
c8094d83 237 if (IS_AGGR_TYPE (type)
a723baf1
MM
238 && CLASSTYPE_TEMPLATE_INFO (type)
239 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
93cdc044 240 {
a723baf1 241 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
93cdc044
JM
242 check_member_template (tmpl);
243 return tmpl;
244 }
8d019cef 245 return NULL_TREE;
93cdc044 246 }
07c88314 247 else if (TREE_CODE (decl) == FIELD_DECL)
0f51ccfc 248 error ("data member %qD cannot be a member template", decl);
a1da6cba 249 else if (DECL_TEMPLATE_INFO (decl))
e1467ff2 250 {
a1da6cba
MM
251 if (!DECL_TEMPLATE_SPECIALIZATION (decl))
252 {
253 check_member_template (DECL_TI_TEMPLATE (decl));
254 return DECL_TI_TEMPLATE (decl);
255 }
256 else
257 return decl;
c8094d83 258 }
a1da6cba 259 else
0f51ccfc 260 error ("invalid member template declaration %qD", decl);
e1467ff2 261
a1da6cba 262 return error_mark_node;
f84b4be9 263}
e1467ff2 264
f84b4be9 265/* Returns the template nesting level of the indicated class TYPE.
c8094d83 266
f84b4be9
JM
267 For example, in:
268 template <class T>
269 struct A
270 {
271 template <class U>
272 struct B {};
273 };
274
c8094d83 275 A<T>::B<U> has depth two, while A<T> has depth one.
39c01e4c 276 Both A<T>::B<int> and A<int>::B<U> have depth one, if
260cd73f 277 they are instantiations, not specializations.
39c01e4c
MM
278
279 This function is guaranteed to return 0 if passed NULL_TREE so
280 that, for example, `template_class_depth (current_class_type)' is
281 always safe. */
f84b4be9 282
260cd73f
VR
283int
284template_class_depth (tree type)
f84b4be9 285{
93cdc044 286 int depth;
f84b4be9 287
c8094d83 288 for (depth = 0;
ed44da02 289 type && TREE_CODE (type) != NAMESPACE_DECL;
c8094d83 290 type = (TREE_CODE (type) == FUNCTION_DECL)
4f1c5b7d 291 ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
ed44da02
MM
292 {
293 if (TREE_CODE (type) != FUNCTION_DECL)
294 {
295 if (CLASSTYPE_TEMPLATE_INFO (type)
296 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type))
260cd73f 297 && uses_template_parms (CLASSTYPE_TI_ARGS (type)))
ed44da02
MM
298 ++depth;
299 }
c8094d83 300 else
ed44da02
MM
301 {
302 if (DECL_TEMPLATE_INFO (type)
303 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (type))
260cd73f 304 && uses_template_parms (DECL_TI_ARGS (type)))
ed44da02
MM
305 ++depth;
306 }
307 }
f84b4be9
JM
308
309 return depth;
e1467ff2 310}
98c1c668 311
cae40af6
JM
312/* Returns 1 if processing DECL as part of do_pending_inlines
313 needs us to push template parms. */
314
315static int
3a978d72 316inline_needs_template_parms (tree decl)
cae40af6
JM
317{
318 if (! DECL_TEMPLATE_INFO (decl))
319 return 0;
f84b4be9 320
36a117a5 321 return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
cae40af6
JM
322 > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
323}
324
325/* Subroutine of maybe_begin_member_template_processing.
326 Push the template parms in PARMS, starting from LEVELS steps into the
327 chain, and ending at the beginning, since template parms are listed
328 innermost first. */
329
330static void
3a978d72 331push_inline_template_parms_recursive (tree parmlist, int levels)
cae40af6
JM
332{
333 tree parms = TREE_VALUE (parmlist);
334 int i;
335
336 if (levels > 1)
337 push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
786b5245 338
98c1c668 339 ++processing_template_decl;
cae40af6 340 current_template_parms
4890c2f4 341 = tree_cons (size_int (processing_template_decl),
98c1c668 342 parms, current_template_parms);
cae40af6
JM
343 TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
344
ac20c67a 345 begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
0cbd7506 346 NULL);
c8094d83 347 for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
98c1c668 348 {
0f67a82f 349 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
42b304f1 350
0f67a82f
LM
351 if (parm == error_mark_node)
352 continue;
42b304f1 353
50bc768d 354 gcc_assert (DECL_P (parm));
cae40af6 355
98c1c668
JM
356 switch (TREE_CODE (parm))
357 {
786b5245 358 case TYPE_DECL:
73b0fce8 359 case TEMPLATE_DECL:
98c1c668
JM
360 pushdecl (parm);
361 break;
786b5245
MM
362
363 case PARM_DECL:
364 {
fc03edb3
MM
365 /* Make a CONST_DECL as is done in process_template_parm.
366 It is ugly that we recreate this here; the original
367 version built in process_template_parm is no longer
368 available. */
786b5245
MM
369 tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
370 TREE_TYPE (parm));
c727aa5e 371 DECL_ARTIFICIAL (decl) = 1;
6de9cd9a
DN
372 TREE_CONSTANT (decl) = 1;
373 TREE_INVARIANT (decl) = 1;
374 TREE_READONLY (decl) = 1;
786b5245 375 DECL_INITIAL (decl) = DECL_INITIAL (parm);
cd9f6678 376 SET_DECL_TEMPLATE_PARM_P (decl);
786b5245
MM
377 pushdecl (decl);
378 }
cae40af6 379 break;
786b5245 380
98c1c668 381 default:
315fb5db 382 gcc_unreachable ();
98c1c668
JM
383 }
384 }
385}
386
cae40af6
JM
387/* Restore the template parameter context for a member template or
388 a friend template defined in a class definition. */
389
390void
3a978d72 391maybe_begin_member_template_processing (tree decl)
cae40af6
JM
392{
393 tree parms;
3dcaad8b 394 int levels = 0;
cae40af6 395
3dcaad8b
MM
396 if (inline_needs_template_parms (decl))
397 {
398 parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
399 levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
cae40af6 400
3dcaad8b
MM
401 if (DECL_TEMPLATE_SPECIALIZATION (decl))
402 {
403 --levels;
404 parms = TREE_CHAIN (parms);
405 }
cae40af6 406
3dcaad8b 407 push_inline_template_parms_recursive (parms, levels);
cae40af6
JM
408 }
409
3dcaad8b
MM
410 /* Remember how many levels of template parameters we pushed so that
411 we can pop them later. */
53824026 412 VEC_safe_push (int, heap, inline_parm_levels, levels);
cae40af6
JM
413}
414
1875c2b7 415/* Undo the effects of maybe_begin_member_template_processing. */
98c1c668 416
c8094d83 417void
3a978d72 418maybe_end_member_template_processing (void)
98c1c668 419{
3dcaad8b 420 int i;
53824026 421 int last;
3dcaad8b 422
53824026 423 if (VEC_length (int, inline_parm_levels) == 0)
98c1c668
JM
424 return;
425
53824026
KH
426 last = VEC_pop (int, inline_parm_levels);
427 for (i = 0; i < last; ++i)
cae40af6
JM
428 {
429 --processing_template_decl;
430 current_template_parms = TREE_CHAIN (current_template_parms);
431 poplevel (0, 0, 0);
432 }
98c1c668
JM
433}
434
36a117a5 435/* Return a new template argument vector which contains all of ARGS,
f9a7ae04 436 but has as its innermost set of arguments the EXTRA_ARGS. */
e6f1275f
JM
437
438static tree
3a978d72 439add_to_template_args (tree args, tree extra_args)
e6f1275f 440{
36a117a5
MM
441 tree new_args;
442 int extra_depth;
443 int i;
444 int j;
e6f1275f 445
36a117a5 446 extra_depth = TMPL_ARGS_DEPTH (extra_args);
f31c0a32 447 new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
e6f1275f 448
36a117a5
MM
449 for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
450 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
e6f1275f 451
36a117a5
MM
452 for (j = 1; j <= extra_depth; ++j, ++i)
453 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
c8094d83 454
e6f1275f
JM
455 return new_args;
456}
457
36a117a5
MM
458/* Like add_to_template_args, but only the outermost ARGS are added to
459 the EXTRA_ARGS. In particular, all but TMPL_ARGS_DEPTH
460 (EXTRA_ARGS) levels are added. This function is used to combine
461 the template arguments from a partial instantiation with the
462 template arguments used to attain the full instantiation from the
463 partial instantiation. */
98c1c668 464
4966381a 465static tree
3a978d72 466add_outermost_template_args (tree args, tree extra_args)
98c1c668
JM
467{
468 tree new_args;
469
e4a84209
MM
470 /* If there are more levels of EXTRA_ARGS than there are ARGS,
471 something very fishy is going on. */
50bc768d 472 gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
e4a84209
MM
473
474 /* If *all* the new arguments will be the EXTRA_ARGS, just return
475 them. */
476 if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
477 return extra_args;
478
36a117a5
MM
479 /* For the moment, we make ARGS look like it contains fewer levels. */
480 TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
c8094d83 481
36a117a5 482 new_args = add_to_template_args (args, extra_args);
98c1c668 483
36a117a5
MM
484 /* Now, we restore ARGS to its full dimensions. */
485 TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
98c1c668
JM
486
487 return new_args;
488}
5566b478 489
f9a7ae04
MM
490/* Return the N levels of innermost template arguments from the ARGS. */
491
492tree
3a978d72 493get_innermost_template_args (tree args, int n)
f9a7ae04
MM
494{
495 tree new_args;
496 int extra_levels;
497 int i;
498
50bc768d 499 gcc_assert (n >= 0);
f9a7ae04
MM
500
501 /* If N is 1, just return the innermost set of template arguments. */
502 if (n == 1)
503 return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
c8094d83 504
f9a7ae04
MM
505 /* If we're not removing anything, just return the arguments we were
506 given. */
507 extra_levels = TMPL_ARGS_DEPTH (args) - n;
50bc768d 508 gcc_assert (extra_levels >= 0);
f9a7ae04
MM
509 if (extra_levels == 0)
510 return args;
511
512 /* Make a new set of arguments, not containing the outer arguments. */
513 new_args = make_tree_vec (n);
514 for (i = 1; i <= n; ++i)
c8094d83 515 SET_TMPL_ARGS_LEVEL (new_args, i,
f9a7ae04
MM
516 TMPL_ARGS_LEVEL (args, i + extra_levels));
517
518 return new_args;
519}
520
5566b478
MS
521/* We've got a template header coming up; push to a new level for storing
522 the parms. */
8d08fdba 523
8d08fdba 524void
3a978d72 525begin_template_parm_list (void)
8d08fdba 526{
6757edfe
MM
527 /* We use a non-tag-transparent scope here, which causes pushtag to
528 put tags in this scope, rather than in the enclosing class or
529 namespace scope. This is the right thing, since we want
530 TEMPLATE_DECLS, and not TYPE_DECLS for template classes. For a
531 global template class, push_template_decl handles putting the
532 TEMPLATE_DECL into top-level scope. For a nested template class,
533 e.g.:
534
535 template <class T> struct S1 {
0cbd7506 536 template <class T> struct S2 {};
6757edfe
MM
537 };
538
539 pushtag contains special code to call pushdecl_with_scope on the
540 TEMPLATE_DECL for S2. */
ac20c67a 541 begin_scope (sk_template_parms, NULL);
5156628f 542 ++processing_template_decl;
67ffc812 543 ++processing_template_parmlist;
386b8a85
JM
544 note_template_header (0);
545}
546
6c30752f 547/* This routine is called when a specialization is declared. If it is
9b910171
LM
548 invalid to declare a specialization here, an error is reported and
549 false is returned, otherwise this routine will return true. */
6c30752f 550
9b910171 551static bool
3a978d72 552check_specialization_scope (void)
6c30752f
MM
553{
554 tree scope = current_scope ();
3ddfb0e6 555
c8094d83
MS
556 /* [temp.expl.spec]
557
6c30752f
MM
558 An explicit specialization shall be declared in the namespace of
559 which the template is a member, or, for member templates, in the
560 namespace of which the enclosing class or enclosing class
561 template is a member. An explicit specialization of a member
562 function, member class or static data member of a class template
563 shall be declared in the namespace of which the class template
564 is a member. */
565 if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
9b910171
LM
566 {
567 error ("explicit specialization in non-namespace scope %qD", scope);
568 return false;
569 }
3ddfb0e6 570
c8094d83 571 /* [temp.expl.spec]
6c30752f
MM
572
573 In an explicit specialization declaration for a member of a class
574 template or a member template that appears in namespace scope,
575 the member template and some of its enclosing class templates may
576 remain unspecialized, except that the declaration shall not
577 explicitly specialize a class member template if its enclosing
578 class templates are not explicitly specialized as well. */
c8094d83 579 if (current_template_parms)
9b910171
LM
580 {
581 error ("enclosing class templates are not explicitly specialized");
582 return false;
583 }
584
585 return true;
6c30752f
MM
586}
587
c6002625 588/* We've just seen template <>. */
386b8a85 589
9b910171 590bool
3a978d72 591begin_specialization (void)
386b8a85 592{
ac20c67a 593 begin_scope (sk_template_spec, NULL);
386b8a85 594 note_template_header (1);
9b910171 595 return check_specialization_scope ();
386b8a85
JM
596}
597
dc957d14 598/* Called at then end of processing a declaration preceded by
386b8a85
JM
599 template<>. */
600
c8094d83 601void
3a978d72 602end_specialization (void)
386b8a85 603{
74b846e0 604 finish_scope ();
386b8a85
JM
605 reset_specialization ();
606}
607
386b8a85 608/* Any template <>'s that we have seen thus far are not referring to a
c6002625 609 function specialization. */
386b8a85
JM
610
611void
3a978d72 612reset_specialization (void)
386b8a85
JM
613{
614 processing_specialization = 0;
615 template_header_count = 0;
616}
617
838dfd8a 618/* We've just seen a template header. If SPECIALIZATION is nonzero,
386b8a85
JM
619 it was of the form template <>. */
620
c8094d83 621static void
3a978d72 622note_template_header (int specialization)
386b8a85
JM
623{
624 processing_specialization = specialization;
625 template_header_count++;
626}
627
75650646 628/* We're beginning an explicit instantiation. */
386b8a85 629
75650646 630void
3a978d72 631begin_explicit_instantiation (void)
386b8a85 632{
50bc768d 633 gcc_assert (!processing_explicit_instantiation);
a723baf1 634 processing_explicit_instantiation = true;
75650646 635}
386b8a85 636
386b8a85 637
75650646 638void
3a978d72 639end_explicit_instantiation (void)
75650646 640{
50bc768d 641 gcc_assert (processing_explicit_instantiation);
a723baf1 642 processing_explicit_instantiation = false;
75650646 643}
386b8a85 644
13a44ee0 645/* An explicit specialization or partial specialization TMPL is being
b1cc95ce
MM
646 declared. Check that the namespace in which the specialization is
647 occurring is permissible. Returns false iff it is invalid to
648 specialize TMPL in the current namespace. */
c8094d83 649
b1cc95ce
MM
650static bool
651check_specialization_namespace (tree tmpl)
652{
653 tree tpl_ns = decl_namespace_context (tmpl);
654
655 /* [tmpl.expl.spec]
c8094d83 656
b1cc95ce
MM
657 An explicit specialization shall be declared in the namespace of
658 which the template is a member, or, for member templates, in the
659 namespace of which the enclosing class or enclosing class
660 template is a member. An explicit specialization of a member
661 function, member class or static data member of a class template
662 shall be declared in the namespace of which the class template is
663 a member. */
664 if (is_associated_namespace (current_namespace, tpl_ns))
665 /* Same or super-using namespace. */
666 return true;
667 else
668 {
0f51ccfc 669 pedwarn ("specialization of %qD in different namespace", tmpl);
dee15844 670 pedwarn (" from definition of %q+#D", tmpl);
b1cc95ce
MM
671 return false;
672 }
673}
674
9c12301f
MM
675/* SPEC is an explicit instantiation. Check that it is valid to
676 perform this explicit instantiation in the current namespace. */
677
678static void
679check_explicit_instantiation_namespace (tree spec)
680{
681 tree ns;
682
683 /* DR 275: An explicit instantiation shall appear in an enclosing
3db45ab5 684 namespace of its template. */
9c12301f
MM
685 ns = decl_namespace_context (spec);
686 if (!is_ancestor (current_namespace, ns))
687 pedwarn ("explicit instantiation of %qD in namespace %qD "
312ea236 688 "(which does not enclose namespace %qD)",
9c12301f
MM
689 spec, current_namespace, ns);
690}
691
36a117a5
MM
692/* The TYPE is being declared. If it is a template type, that means it
693 is a partial specialization. Do appropriate error-checking. */
694
9ce387d9 695tree
3a978d72 696maybe_process_partial_specialization (tree type)
36a117a5 697{
c9043d03
VR
698 tree context;
699
700 if (type == error_mark_node)
9ce387d9
VR
701 return error_mark_node;
702
703 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
704 {
705 error ("name of class shadows template template parameter %qD",
706 TYPE_NAME (type));
707 return error_mark_node;
708 }
c9043d03
VR
709
710 context = TYPE_CONTEXT (type);
6e049fcd 711
a723baf1 712 if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
36a117a5 713 {
6e049fcd
KL
714 /* This is for ordinary explicit specialization and partial
715 specialization of a template class such as:
716
717 template <> class C<int>;
718
719 or:
720
721 template <class T> class C<T*>;
722
723 Make sure that `C<int>' and `C<T*>' are implicit instantiations. */
724
36a117a5 725 if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
d0f062fb 726 && !COMPLETE_TYPE_P (type))
36a117a5 727 {
b1cc95ce 728 check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
370af2d5 729 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
36a117a5
MM
730 if (processing_template_decl)
731 push_template_decl (TYPE_MAIN_DECL (type));
732 }
733 else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
0f51ccfc 734 error ("specialization of %qT after instantiation", type);
36a117a5 735 }
6e049fcd
KL
736 else if (CLASS_TYPE_P (type)
737 && !CLASSTYPE_USE_TEMPLATE (type)
738 && CLASSTYPE_TEMPLATE_INFO (type)
739 && context && CLASS_TYPE_P (context)
740 && CLASSTYPE_TEMPLATE_INFO (context))
741 {
742 /* This is for an explicit specialization of member class
743 template according to [temp.expl.spec/18]:
744
745 template <> template <class U> class C<int>::D;
746
747 The context `C<int>' must be an implicit instantiation.
748 Otherwise this is just a member class template declared
749 earlier like:
750
751 template <> class C<int> { template <class U> class D; };
752 template <> template <class U> class C<int>::D;
753
754 In the first case, `C<int>::D' is a specialization of `C<T>::D'
755 while in the second case, `C<int>::D' is a primary template
756 and `C<T>::D' may not exist. */
757
758 if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
759 && !COMPLETE_TYPE_P (type))
760 {
761 tree t;
762
763 if (current_namespace
764 != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
765 {
0f51ccfc 766 pedwarn ("specializing %q#T in different namespace", type);
dee15844
JM
767 pedwarn (" from definition of %q+#D",
768 CLASSTYPE_TI_TEMPLATE (type));
6e049fcd
KL
769 }
770
771 /* Check for invalid specialization after instantiation:
772
773 template <> template <> class C<int>::D<int>;
774 template <> template <class U> class C<int>::D; */
775
776 for (t = DECL_TEMPLATE_INSTANTIATIONS
777 (most_general_template (CLASSTYPE_TI_TEMPLATE (type)));
778 t; t = TREE_CHAIN (t))
779 if (TREE_VALUE (t) != type
780 && TYPE_CONTEXT (TREE_VALUE (t)) == context)
0f51ccfc 781 error ("specialization %qT after instantiation %qT",
6e049fcd
KL
782 type, TREE_VALUE (t));
783
784 /* Mark TYPE as a specialization. And as a result, we only
785 have one level of template argument for the innermost
786 class template. */
787 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
788 CLASSTYPE_TI_ARGS (type)
789 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
790 }
791 }
20496fa2 792 else if (processing_specialization)
9ce387d9
VR
793 {
794 error ("explicit specialization of non-template %qT", type);
795 return error_mark_node;
796 }
797
798 return type;
36a117a5
MM
799}
800
ee81147e 801/* Returns nonzero if we can optimize the retrieval of specializations
c7222c02
MM
802 for TMPL, a TEMPLATE_DECL. In particular, for such a template, we
803 do not use DECL_TEMPLATE_SPECIALIZATIONS at all. */
804
c8094d83 805static inline bool
c7222c02
MM
806optimize_specialization_lookup_p (tree tmpl)
807{
808 return (DECL_FUNCTION_TEMPLATE_P (tmpl)
809 && DECL_CLASS_SCOPE_P (tmpl)
810 /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
811 parameter. */
812 && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
1ca939e5
MM
813 /* The optimized lookup depends on the fact that the
814 template arguments for the member function template apply
815 purely to the containing class, which is not true if the
816 containing class is an explicit or partial
817 specialization. */
818 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
c7222c02
MM
819 && !DECL_MEMBER_TEMPLATE_P (tmpl)
820 && !DECL_CONV_FN_P (tmpl)
821 /* It is possible to have a template that is not a member
822 template and is not a member of a template class:
c8094d83
MS
823
824 template <typename T>
c7222c02 825 struct S { friend A::f(); };
c8094d83 826
c7222c02
MM
827 Here, the friend function is a template, but the context does
828 not have template information. The optimized lookup relies
829 on having ARGS be the template arguments for both the class
830 and the function template. */
831 && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
832}
833
75650646
MM
834/* Retrieve the specialization (in the sense of [temp.spec] - a
835 specialization is either an instantiation or an explicit
836 specialization) of TMPL for the given template ARGS. If there is
837 no such specialization, return NULL_TREE. The ARGS are a vector of
838 arguments, or a vector of vectors of arguments, in the case of
c8094d83 839 templates with more than one level of parameters.
c7222c02
MM
840
841 If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
842 then we search for a partial specialization matching ARGS. This
843 parameter is ignored if TMPL is not a class template. */
c8094d83 844
75650646 845static tree
c8094d83 846retrieve_specialization (tree tmpl, tree args,
c7222c02 847 bool class_specializations_p)
75650646 848{
2d8ba2c7
LM
849 if (args == error_mark_node)
850 return NULL_TREE;
851
50bc768d 852 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
75650646 853
36a117a5
MM
854 /* There should be as many levels of arguments as there are
855 levels of parameters. */
c8094d83 856 gcc_assert (TMPL_ARGS_DEPTH (args)
50bc768d 857 == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
c8094d83 858
c7222c02
MM
859 if (optimize_specialization_lookup_p (tmpl))
860 {
861 tree class_template;
862 tree class_specialization;
d4e6fecb 863 VEC(tree,gc) *methods;
c7222c02
MM
864 tree fns;
865 int idx;
866
867 /* The template arguments actually apply to the containing
868 class. Find the class specialization with those
869 arguments. */
870 class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
c8094d83 871 class_specialization
c7222c02
MM
872 = retrieve_specialization (class_template, args,
873 /*class_specializations_p=*/false);
874 if (!class_specialization)
875 return NULL_TREE;
876 /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
877 for the specialization. */
878 idx = class_method_index_for_fn (class_specialization, tmpl);
879 if (idx == -1)
880 return NULL_TREE;
881 /* Iterate through the methods with the indicated name, looking
882 for the one that has an instance of TMPL. */
883 methods = CLASSTYPE_METHOD_VEC (class_specialization);
884 for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
885 {
886 tree fn = OVL_CURRENT (fns);
887 if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl)
888 return fn;
889 }
890 return NULL_TREE;
891 }
892 else
893 {
894 tree *sp;
895 tree *head;
896
897 /* Class templates store their instantiations on the
898 DECL_TEMPLATE_INSTANTIATIONS list; other templates use the
899 DECL_TEMPLATE_SPECIALIZATIONS list. */
900 if (!class_specializations_p
901 && TREE_CODE (DECL_TEMPLATE_RESULT (tmpl)) == TYPE_DECL)
902 sp = &DECL_TEMPLATE_INSTANTIATIONS (tmpl);
903 else
904 sp = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
905 head = sp;
906 /* Iterate through the list until we find a matching template. */
907 while (*sp != NULL_TREE)
908 {
909 tree spec = *sp;
c8094d83 910
c7222c02
MM
911 if (comp_template_args (TREE_PURPOSE (spec), args))
912 {
913 /* Use the move-to-front heuristic to speed up future
c8094d83 914 searches. */
c7222c02
MM
915 if (spec != *head)
916 {
917 *sp = TREE_CHAIN (*sp);
918 TREE_CHAIN (spec) = *head;
919 *head = spec;
920 }
921 return TREE_VALUE (spec);
922 }
923 sp = &TREE_CHAIN (spec);
924 }
925 }
75650646
MM
926
927 return NULL_TREE;
386b8a85
JM
928}
929
dc957d14 930/* Like retrieve_specialization, but for local declarations. */
9188c363
MM
931
932static tree
3a978d72 933retrieve_local_specialization (tree tmpl)
9188c363 934{
67f5655f 935 tree spec = (tree) htab_find_with_hash (local_specializations, tmpl,
3db45ab5 936 htab_hash_pointer (tmpl));
a723baf1 937 return spec ? TREE_PURPOSE (spec) : NULL_TREE;
9188c363
MM
938}
939
838dfd8a 940/* Returns nonzero iff DECL is a specialization of TMPL. */
6757edfe
MM
941
942int
3a978d72 943is_specialization_of (tree decl, tree tmpl)
6757edfe
MM
944{
945 tree t;
946
947 if (TREE_CODE (decl) == FUNCTION_DECL)
948 {
c8094d83 949 for (t = decl;
6757edfe
MM
950 t != NULL_TREE;
951 t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
952 if (t == tmpl)
953 return 1;
954 }
c8094d83 955 else
6757edfe 956 {
50bc768d 957 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
6757edfe
MM
958
959 for (t = TREE_TYPE (decl);
960 t != NULL_TREE;
961 t = CLASSTYPE_USE_TEMPLATE (t)
962 ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
9edc3913 963 if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
6757edfe 964 return 1;
c8094d83 965 }
386b8a85 966
6757edfe
MM
967 return 0;
968}
75650646 969
d43f603d
KL
970/* Returns nonzero iff DECL is a specialization of friend declaration
971 FRIEND according to [temp.friend]. */
972
973bool
974is_specialization_of_friend (tree decl, tree friend)
975{
976 bool need_template = true;
977 int template_depth;
978
b939a023
KL
979 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
980 || TREE_CODE (decl) == TYPE_DECL);
d43f603d
KL
981
982 /* For [temp.friend/6] when FRIEND is an ordinary member function
983 of a template class, we want to check if DECL is a specialization
984 if this. */
985 if (TREE_CODE (friend) == FUNCTION_DECL
986 && DECL_TEMPLATE_INFO (friend)
987 && !DECL_USE_TEMPLATE (friend))
988 {
b939a023 989 /* We want a TEMPLATE_DECL for `is_specialization_of'. */
d43f603d
KL
990 friend = DECL_TI_TEMPLATE (friend);
991 need_template = false;
992 }
b939a023
KL
993 else if (TREE_CODE (friend) == TEMPLATE_DECL
994 && !PRIMARY_TEMPLATE_P (friend))
995 need_template = false;
d43f603d
KL
996
997 /* There is nothing to do if this is not a template friend. */
998 if (TREE_CODE (friend) != TEMPLATE_DECL)
b939a023 999 return false;
d43f603d
KL
1000
1001 if (is_specialization_of (decl, friend))
b939a023 1002 return true;
d43f603d
KL
1003
1004 /* [temp.friend/6]
1005 A member of a class template may be declared to be a friend of a
1006 non-template class. In this case, the corresponding member of
1007 every specialization of the class template is a friend of the
1008 class granting friendship.
c8094d83 1009
d43f603d
KL
1010 For example, given a template friend declaration
1011
1012 template <class T> friend void A<T>::f();
1013
1014 the member function below is considered a friend
1015
1016 template <> struct A<int> {
1017 void f();
1018 };
1019
1020 For this type of template friend, TEMPLATE_DEPTH below will be
5c425df5 1021 nonzero. To determine if DECL is a friend of FRIEND, we first
d43f603d
KL
1022 check if the enclosing class is a specialization of another. */
1023
1024 template_depth = template_class_depth (DECL_CONTEXT (friend));
1025 if (template_depth
1026 && DECL_CLASS_SCOPE_P (decl)
c8094d83 1027 && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
d43f603d
KL
1028 CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend))))
1029 {
1030 /* Next, we check the members themselves. In order to handle
b939a023 1031 a few tricky cases, such as when FRIEND's are
d43f603d
KL
1032
1033 template <class T> friend void A<T>::g(T t);
1034 template <class T> template <T t> friend void A<T>::h();
1035
b939a023
KL
1036 and DECL's are
1037
1038 void A<int>::g(int);
1039 template <int> void A<int>::h();
1040
1041 we need to figure out ARGS, the template arguments from
1042 the context of DECL. This is required for template substitution
1043 of `T' in the function parameter of `g' and template parameter
1044 of `h' in the above examples. Here ARGS corresponds to `int'. */
d43f603d
KL
1045
1046 tree context = DECL_CONTEXT (decl);
1047 tree args = NULL_TREE;
1048 int current_depth = 0;
b939a023 1049
d43f603d
KL
1050 while (current_depth < template_depth)
1051 {
1052 if (CLASSTYPE_TEMPLATE_INFO (context))
1053 {
1054 if (current_depth == 0)
1055 args = TYPE_TI_ARGS (context);
1056 else
1057 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1058 current_depth++;
1059 }
1060 context = TYPE_CONTEXT (context);
1061 }
1062
1063 if (TREE_CODE (decl) == FUNCTION_DECL)
1064 {
1065 bool is_template;
1066 tree friend_type;
1067 tree decl_type;
1068 tree friend_args_type;
1069 tree decl_args_type;
1070
1071 /* Make sure that both DECL and FRIEND are templates or
1072 non-templates. */
1073 is_template = DECL_TEMPLATE_INFO (decl)
1074 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1075 if (need_template ^ is_template)
b939a023 1076 return false;
d43f603d
KL
1077 else if (is_template)
1078 {
da1d7781 1079 /* If both are templates, check template parameter list. */
d43f603d
KL
1080 tree friend_parms
1081 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1082 args, tf_none);
1083 if (!comp_template_parms
1084 (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1085 friend_parms))
b939a023 1086 return false;
d43f603d
KL
1087
1088 decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1089 }
1090 else
1091 decl_type = TREE_TYPE (decl);
1092
1093 friend_type = tsubst_function_type (TREE_TYPE (friend), args,
1094 tf_none, NULL_TREE);
1095 if (friend_type == error_mark_node)
b939a023 1096 return false;
d43f603d
KL
1097
1098 /* Check if return types match. */
1099 if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
b939a023 1100 return false;
d43f603d
KL
1101
1102 /* Check if function parameter types match, ignoring the
1103 `this' parameter. */
1104 friend_args_type = TYPE_ARG_TYPES (friend_type);
1105 decl_args_type = TYPE_ARG_TYPES (decl_type);
1106 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend))
1107 friend_args_type = TREE_CHAIN (friend_args_type);
1108 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1109 decl_args_type = TREE_CHAIN (decl_args_type);
b939a023
KL
1110
1111 return compparms (decl_args_type, friend_args_type);
1112 }
1113 else
1114 {
1115 /* DECL is a TYPE_DECL */
1116 bool is_template;
1117 tree decl_type = TREE_TYPE (decl);
1118
1119 /* Make sure that both DECL and FRIEND are templates or
1120 non-templates. */
1121 is_template
1122 = CLASSTYPE_TEMPLATE_INFO (decl_type)
1123 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1124
1125 if (need_template ^ is_template)
1126 return false;
1127 else if (is_template)
1128 {
1129 tree friend_parms;
1130 /* If both are templates, check the name of the two
1131 TEMPLATE_DECL's first because is_friend didn't. */
1132 if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1133 != DECL_NAME (friend))
1134 return false;
1135
1136 /* Now check template parameter list. */
1137 friend_parms
1138 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1139 args, tf_none);
1140 return comp_template_parms
1141 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1142 friend_parms);
1143 }
1144 else
1145 return (DECL_NAME (decl)
1146 == DECL_NAME (friend));
d43f603d
KL
1147 }
1148 }
b939a023 1149 return false;
d43f603d
KL
1150}
1151
75650646 1152/* Register the specialization SPEC as a specialization of TMPL with
d63d5d0c
ILT
1153 the indicated ARGS. IS_FRIEND indicates whether the specialization
1154 is actually just a friend declaration. Returns SPEC, or an
1155 equivalent prior declaration, if available. */
75650646 1156
36a117a5 1157static tree
d63d5d0c 1158register_specialization (tree spec, tree tmpl, tree args, bool is_friend)
75650646 1159{
c7222c02 1160 tree fn;
75650646 1161
50bc768d 1162 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
75650646 1163
c8094d83 1164 if (TREE_CODE (spec) == FUNCTION_DECL
36a117a5
MM
1165 && uses_template_parms (DECL_TI_ARGS (spec)))
1166 /* This is the FUNCTION_DECL for a partial instantiation. Don't
1167 register it; we want the corresponding TEMPLATE_DECL instead.
1168 We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1169 the more obvious `uses_template_parms (spec)' to avoid problems
1170 with default function arguments. In particular, given
1171 something like this:
1172
0cbd7506 1173 template <class T> void f(T t1, T t = T())
36a117a5
MM
1174
1175 the default argument expression is not substituted for in an
1176 instantiation unless and until it is actually needed. */
1177 return spec;
28ba38e3 1178
c8094d83 1179 fn = retrieve_specialization (tmpl, args,
c7222c02
MM
1180 /*class_specializations_p=*/false);
1181 /* We can sometimes try to re-register a specialization that we've
1182 already got. In particular, regenerate_decl_from_template calls
1183 duplicate_decls which will update the specialization list. But,
1184 we'll still get called again here anyhow. It's more convenient
1185 to simply allow this than to try to prevent it. */
1186 if (fn == spec)
1187 return spec;
1188 else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
22e9174f 1189 {
c7222c02 1190 if (DECL_TEMPLATE_INSTANTIATION (fn))
22e9174f 1191 {
c8094d83 1192 if (TREE_USED (fn)
c7222c02 1193 || DECL_EXPLICIT_INSTANTIATION (fn))
22e9174f 1194 {
c7222c02
MM
1195 error ("specialization of %qD after instantiation",
1196 fn);
99f4234a 1197 return error_mark_node;
22e9174f 1198 }
c7222c02 1199 else
b1cc95ce 1200 {
a39041fa 1201 tree clone;
c7222c02
MM
1202 /* This situation should occur only if the first
1203 specialization is an implicit instantiation, the
1204 second is an explicit specialization, and the
1205 implicit instantiation has not yet been used. That
1206 situation can occur if we have implicitly
1207 instantiated a member function and then specialized
1208 it later.
c8094d83 1209
c7222c02
MM
1210 We can also wind up here if a friend declaration that
1211 looked like an instantiation turns out to be a
1212 specialization:
c8094d83 1213
c7222c02
MM
1214 template <class T> void foo(T);
1215 class S { friend void foo<>(int) };
c8094d83
MS
1216 template <> void foo(int);
1217
c7222c02
MM
1218 We transform the existing DECL in place so that any
1219 pointers to it become pointers to the updated
1220 declaration.
1221
1222 If there was a definition for the template, but not
1223 for the specialization, we want this to look as if
1224 there were no definition, and vice versa. */
1225 DECL_INITIAL (fn) = NULL_TREE;
d63d5d0c 1226 duplicate_decls (spec, fn, is_friend);
a39041fa 1227 /* The call to duplicate_decls will have applied
3db45ab5 1228 [temp.expl.spec]:
a39041fa 1229
3db45ab5 1230 An explicit specialization of a function template
a39041fa 1231 is inline only if it is explicitly declared to be,
bcf51da2 1232 and independently of whether its function template
a39041fa
MM
1233 is.
1234
1235 to the primary function; now copy the inline bits to
3db45ab5 1236 the various clones. */
a39041fa
MM
1237 FOR_EACH_CLONE (clone, fn)
1238 {
1239 DECL_DECLARED_INLINE_P (clone)
1240 = DECL_DECLARED_INLINE_P (fn);
1241 DECL_INLINE (clone)
1242 = DECL_INLINE (fn);
1243 }
9c12301f 1244 check_specialization_namespace (fn);
c8094d83 1245
b1cc95ce
MM
1246 return fn;
1247 }
22e9174f 1248 }
c7222c02
MM
1249 else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1250 {
d63d5d0c 1251 if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
c7222c02
MM
1252 /* Dup decl failed, but this is a new definition. Set the
1253 line number so any errors match this new
1254 definition. */
1255 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
c8094d83 1256
c7222c02
MM
1257 return fn;
1258 }
b1cc95ce
MM
1259 }
1260
1261 /* A specialization must be declared in the same namespace as the
1262 template it is specializing. */
1263 if (DECL_TEMPLATE_SPECIALIZATION (spec)
1264 && !check_specialization_namespace (tmpl))
74b0d490 1265 DECL_CONTEXT (spec) = FROB_CONTEXT (decl_namespace_context (tmpl));
75650646 1266
c7222c02
MM
1267 if (!optimize_specialization_lookup_p (tmpl))
1268 DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
1269 = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
36a117a5
MM
1270
1271 return spec;
1272}
1273
1274/* Unregister the specialization SPEC as a specialization of TMPL.
b3445994
MM
1275 Replace it with NEW_SPEC, if NEW_SPEC is non-NULL. Returns true
1276 if the SPEC was listed as a specialization of TMPL. */
36a117a5 1277
b3445994
MM
1278bool
1279reregister_specialization (tree spec, tree tmpl, tree new_spec)
36a117a5
MM
1280{
1281 tree* s;
1282
1283 for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
1284 *s != NULL_TREE;
1285 s = &TREE_CHAIN (*s))
1286 if (TREE_VALUE (*s) == spec)
1287 {
b3445994
MM
1288 if (!new_spec)
1289 *s = TREE_CHAIN (*s);
1290 else
a3d87771 1291 TREE_VALUE (*s) = new_spec;
36a117a5
MM
1292 return 1;
1293 }
1294
1295 return 0;
75650646
MM
1296}
1297
a723baf1
MM
1298/* Compare an entry in the local specializations hash table P1 (which
1299 is really a pointer to a TREE_LIST) with P2 (which is really a
1300 DECL). */
1301
1302static int
1303eq_local_specializations (const void *p1, const void *p2)
1304{
1305 return TREE_VALUE ((tree) p1) == (tree) p2;
1306}
1307
69f794a7
MM
1308/* Hash P1, an entry in the local specializations table. */
1309
1310static hashval_t
1311hash_local_specialization (const void* p1)
1312{
1313 return htab_hash_pointer (TREE_VALUE ((tree) p1));
1314}
1315
6dfbb909
MM
1316/* Like register_specialization, but for local declarations. We are
1317 registering SPEC, an instantiation of TMPL. */
9188c363 1318
414ea4aa 1319static void
3a978d72 1320register_local_specialization (tree spec, tree tmpl)
9188c363 1321{
6dfbb909
MM
1322 void **slot;
1323
c8094d83 1324 slot = htab_find_slot_with_hash (local_specializations, tmpl,
69f794a7 1325 htab_hash_pointer (tmpl), INSERT);
a723baf1 1326 *slot = build_tree_list (spec, tmpl);
9188c363
MM
1327}
1328
9ba7a2f2
MM
1329/* TYPE is a class type. Returns true if TYPE is an explicitly
1330 specialized class. */
1331
1332bool
1333explicit_class_specialization_p (tree type)
1334{
1335 if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1336 return false;
1337 return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1338}
1339
e1467ff2
MM
1340/* Print the list of candidate FNS in an error message. */
1341
104bf76a 1342void
3a978d72 1343print_candidates (tree fns)
e1467ff2
MM
1344{
1345 tree fn;
1346
d8e178a0 1347 const char *str = "candidates are:";
e1467ff2
MM
1348
1349 for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1350 {
d6479fe7
MM
1351 tree f;
1352
1353 for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
dee15844 1354 error ("%s %+#D", str, OVL_CURRENT (f));
e1467ff2
MM
1355 str = " ";
1356 }
1357}
1358
75650646 1359/* Returns the template (one of the functions given by TEMPLATE_ID)
e1467ff2 1360 which can be specialized to match the indicated DECL with the
03017874
MM
1361 explicit template args given in TEMPLATE_ID. The DECL may be
1362 NULL_TREE if none is available. In that case, the functions in
1363 TEMPLATE_ID are non-members.
1364
838dfd8a 1365 If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
03017874
MM
1366 specialization of a member template.
1367
5fe7b654
GB
1368 The TEMPLATE_COUNT is the number of references to qualifying
1369 template classes that appeared in the name of the function. See
1370 check_explicit_specialization for a more accurate description.
1371
29a1da1c
MM
1372 TSK indicates what kind of template declaration (if any) is being
1373 declared. TSK_TEMPLATE indicates that the declaration given by
1374 DECL, though a FUNCTION_DECL, has template parameters, and is
1375 therefore a template function.
1376
03017874
MM
1377 The template args (those explicitly specified and those deduced)
1378 are output in a newly created vector *TARGS_OUT.
1379
1380 If it is impossible to determine the result, an error message is
bf8f3f93 1381 issued. The error_mark_node is returned to indicate failure. */
75650646 1382
e9659ab0 1383static tree
c8094d83 1384determine_specialization (tree template_id,
0cbd7506
MS
1385 tree decl,
1386 tree* targs_out,
5fe7b654 1387 int need_member_template,
29a1da1c
MM
1388 int template_count,
1389 tmpl_spec_kind tsk)
386b8a85 1390{
03017874
MM
1391 tree fns;
1392 tree targs;
1393 tree explicit_targs;
1394 tree candidates = NULL_TREE;
7ca383e6
MM
1395 /* A TREE_LIST of templates of which DECL may be a specialization.
1396 The TREE_VALUE of each node is a TEMPLATE_DECL. The
1397 corresponding TREE_PURPOSE is the set of template arguments that,
1398 when used to instantiate the template, would produce a function
1399 with the signature of DECL. */
03017874 1400 tree templates = NULL_TREE;
5fe7b654
GB
1401 int header_count;
1402 struct cp_binding_level *b;
386b8a85 1403
e1467ff2
MM
1404 *targs_out = NULL_TREE;
1405
728da672 1406 if (template_id == error_mark_node || decl == error_mark_node)
f2e48b67
BK
1407 return error_mark_node;
1408
1409 fns = TREE_OPERAND (template_id, 0);
03017874 1410 explicit_targs = TREE_OPERAND (template_id, 1);
f2e48b67 1411
27fafc8d
JM
1412 if (fns == error_mark_node)
1413 return error_mark_node;
1414
c6002625 1415 /* Check for baselinks. */
91e490ab 1416 if (BASELINK_P (fns))
da15dae6 1417 fns = BASELINK_FUNCTIONS (fns);
386b8a85 1418
91e490ab
MM
1419 if (!is_overloaded_fn (fns))
1420 {
0f51ccfc 1421 error ("%qD is not a function template", fns);
91e490ab
MM
1422 return error_mark_node;
1423 }
1424
5fe7b654
GB
1425 /* Count the number of template headers specified for this
1426 specialization. */
1427 header_count = 0;
c8094d83 1428 for (b = current_binding_level;
98f99d7f 1429 b->kind == sk_template_parms;
5fe7b654
GB
1430 b = b->level_chain)
1431 ++header_count;
1432
2c73f9f5 1433 for (; fns; fns = OVL_NEXT (fns))
386b8a85 1434 {
9dfce8fd 1435 tree fn = OVL_CURRENT (fns);
03017874
MM
1436
1437 if (TREE_CODE (fn) == TEMPLATE_DECL)
d955f6ea
KL
1438 {
1439 tree decl_arg_types;
0da99d4e 1440 tree fn_arg_types;
d955f6ea 1441
5fe7b654
GB
1442 /* In case of explicit specialization, we need to check if
1443 the number of template headers appearing in the specialization
1444 is correct. This is usually done in check_explicit_specialization,
1445 but the check done there cannot be exhaustive when specializing
1446 member functions. Consider the following code:
1447
1448 template <> void A<int>::f(int);
1449 template <> template <> void A<int>::f(int);
1450
1451 Assuming that A<int> is not itself an explicit specialization
1452 already, the first line specializes "f" which is a non-template
1453 member function, whilst the second line specializes "f" which
1454 is a template member function. So both lines are syntactically
1455 correct, and check_explicit_specialization does not reject
1456 them.
c8094d83 1457
5fe7b654
GB
1458 Here, we can do better, as we are matching the specialization
1459 against the declarations. We count the number of template
1460 headers, and we check if they match TEMPLATE_COUNT + 1
1461 (TEMPLATE_COUNT is the number of qualifying template classes,
1462 plus there must be another header for the member template
1463 itself).
c8094d83 1464
5fe7b654
GB
1465 Notice that if header_count is zero, this is not a
1466 specialization but rather a template instantiation, so there
1467 is no check we can perform here. */
1468 if (header_count && header_count != template_count + 1)
1469 continue;
1470
98f99d7f
MM
1471 /* Check that the number of template arguments at the
1472 innermost level for DECL is the same as for FN. */
1473 if (current_binding_level->kind == sk_template_parms
1474 && !current_binding_level->explicit_spec_p
1475 && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
3db45ab5 1476 != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
916b63c3 1477 (current_template_parms))))
98f99d7f 1478 continue;
c8094d83 1479
ba139ba8
MM
1480 /* DECL might be a specialization of FN. */
1481 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1482 fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1483
1484 /* For a non-static member function, we need to make sure
1485 that the const qualification is the same. Since
1486 get_bindings does not try to merge the "this" parameter,
1487 we must do the comparison explicitly. */
1488 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1489 && !same_type_p (TREE_VALUE (fn_arg_types),
1490 TREE_VALUE (decl_arg_types)))
1491 continue;
1492
1493 /* Skip the "this" parameter and, for constructors of
1494 classes with virtual bases, the VTT parameter. A
1495 full specialization of a constructor will have a VTT
1496 parameter, but a template never will. */
1497 decl_arg_types
1498 = skip_artificial_parms_for (decl, decl_arg_types);
1499 fn_arg_types
1500 = skip_artificial_parms_for (fn, fn_arg_types);
1501
1502 /* Check that the number of function parameters matches.
1503 For example,
1504 template <class T> void f(int i = 0);
1505 template <> void f<int>();
1506 The specialization f<int> is invalid but is not caught
1507 by get_bindings below. */
1508 if (list_length (fn_arg_types) != list_length (decl_arg_types))
1509 continue;
1510
29a1da1c
MM
1511 /* Function templates cannot be specializations; there are
1512 no partial specializations of functions. Therefore, if
1513 the type of DECL does not match FN, there is no
1514 match. */
1515 if (tsk == tsk_template)
1516 {
ba139ba8 1517 if (compparms (fn_arg_types, decl_arg_types))
29a1da1c
MM
1518 candidates = tree_cons (NULL_TREE, fn, candidates);
1519 continue;
1520 }
1521
d955f6ea
KL
1522 /* See whether this function might be a specialization of this
1523 template. */
a34d3336 1524 targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
d955f6ea
KL
1525
1526 if (!targs)
1527 /* We cannot deduce template arguments that when used to
1528 specialize TMPL will produce DECL. */
1529 continue;
1530
1531 /* Save this template, and the arguments deduced. */
1532 templates = tree_cons (targs, fn, templates);
1533 }
03017874
MM
1534 else if (need_member_template)
1535 /* FN is an ordinary member function, and we need a
1536 specialization of a member template. */
d955f6ea 1537 ;
03017874
MM
1538 else if (TREE_CODE (fn) != FUNCTION_DECL)
1539 /* We can get IDENTIFIER_NODEs here in certain erroneous
1540 cases. */
d955f6ea 1541 ;
03017874
MM
1542 else if (!DECL_FUNCTION_MEMBER_P (fn))
1543 /* This is just an ordinary non-member function. Nothing can
1544 be a specialization of that. */
d955f6ea 1545 ;
3b82c249
KL
1546 else if (DECL_ARTIFICIAL (fn))
1547 /* Cannot specialize functions that are created implicitly. */
d955f6ea 1548 ;
75650646 1549 else
03017874
MM
1550 {
1551 tree decl_arg_types;
386b8a85 1552
03017874
MM
1553 /* This is an ordinary member function. However, since
1554 we're here, we can assume it's enclosing class is a
1555 template class. For example,
c8094d83 1556
03017874
MM
1557 template <typename T> struct S { void f(); };
1558 template <> void S<int>::f() {}
1559
1560 Here, S<int>::f is a non-template, but S<int> is a
1561 template class. If FN has the same type as DECL, we
1562 might be in business. */
f5d47abd
KL
1563
1564 if (!DECL_TEMPLATE_INFO (fn))
1565 /* Its enclosing class is an explicit specialization
1566 of a template class. This is not a candidate. */
1567 continue;
1568
03017874
MM
1569 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1570 TREE_TYPE (TREE_TYPE (fn))))
1571 /* The return types differ. */
1572 continue;
1573
1574 /* Adjust the type of DECL in case FN is a static member. */
1575 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
c8094d83 1576 if (DECL_STATIC_FUNCTION_P (fn)
03017874
MM
1577 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1578 decl_arg_types = TREE_CHAIN (decl_arg_types);
1579
c8094d83 1580 if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
03017874
MM
1581 decl_arg_types))
1582 /* They match! */
1583 candidates = tree_cons (NULL_TREE, fn, candidates);
03017874 1584 }
386b8a85 1585 }
03017874 1586
bf8f3f93 1587 if (templates && TREE_CHAIN (templates))
386b8a85 1588 {
03017874 1589 /* We have:
c8094d83 1590
03017874
MM
1591 [temp.expl.spec]
1592
1593 It is possible for a specialization with a given function
1594 signature to be instantiated from more than one function
1595 template. In such cases, explicit specification of the
1596 template arguments must be used to uniquely identify the
1597 function template specialization being specialized.
1598
1599 Note that here, there's no suggestion that we're supposed to
1600 determine which of the candidate templates is most
1601 specialized. However, we, also have:
1602
1603 [temp.func.order]
1604
1605 Partial ordering of overloaded function template
1606 declarations is used in the following contexts to select
1607 the function template to which a function template
c8094d83 1608 specialization refers:
03017874 1609
0cbd7506 1610 -- when an explicit specialization refers to a function
c8094d83 1611 template.
03017874
MM
1612
1613 So, we do use the partial ordering rules, at least for now.
0e339752 1614 This extension can only serve to make invalid programs valid,
03017874
MM
1615 so it's safe. And, there is strong anecdotal evidence that
1616 the committee intended the partial ordering rules to apply;
3b426391 1617 the EDG front end has that behavior, and John Spicer claims
03017874
MM
1618 that the committee simply forgot to delete the wording in
1619 [temp.expl.spec]. */
7ca383e6
MM
1620 tree tmpl = most_specialized_instantiation (templates);
1621 if (tmpl != error_mark_node)
1622 {
1623 templates = tmpl;
1624 TREE_CHAIN (templates) = NULL_TREE;
1625 }
e1467ff2
MM
1626 }
1627
03017874 1628 if (templates == NULL_TREE && candidates == NULL_TREE)
e1467ff2 1629 {
dee15844
JM
1630 error ("template-id %qD for %q+D does not match any template "
1631 "declaration", template_id, decl);
03017874 1632 return error_mark_node;
386b8a85 1633 }
03017874 1634 else if ((templates && TREE_CHAIN (templates))
bf8f3f93
MM
1635 || (candidates && TREE_CHAIN (candidates))
1636 || (templates && candidates))
386b8a85 1637 {
dee15844
JM
1638 error ("ambiguous template specialization %qD for %q+D",
1639 template_id, decl);
bf8f3f93
MM
1640 chainon (candidates, templates);
1641 print_candidates (candidates);
03017874 1642 return error_mark_node;
386b8a85
JM
1643 }
1644
c6002625 1645 /* We have one, and exactly one, match. */
03017874
MM
1646 if (candidates)
1647 {
29a1da1c
MM
1648 tree fn = TREE_VALUE (candidates);
1649 /* DECL is a re-declaration of a template function. */
1650 if (TREE_CODE (fn) == TEMPLATE_DECL)
1651 return fn;
03017874
MM
1652 /* It was a specialization of an ordinary member function in a
1653 template class. */
29a1da1c
MM
1654 *targs_out = copy_node (DECL_TI_ARGS (fn));
1655 return DECL_TI_TEMPLATE (fn);
03017874
MM
1656 }
1657
1658 /* It was a specialization of a template. */
17aec3eb 1659 targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
03017874
MM
1660 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1661 {
1662 *targs_out = copy_node (targs);
c8094d83 1663 SET_TMPL_ARGS_LEVEL (*targs_out,
03017874
MM
1664 TMPL_ARGS_DEPTH (*targs_out),
1665 TREE_PURPOSE (templates));
1666 }
1667 else
1668 *targs_out = TREE_PURPOSE (templates);
e1467ff2 1669 return TREE_VALUE (templates);
8d08fdba 1670}
8afa707f
MM
1671
1672/* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1673 but with the default argument values filled in from those in the
1674 TMPL_TYPES. */
c8094d83 1675
8afa707f 1676static tree
3a978d72
NN
1677copy_default_args_to_explicit_spec_1 (tree spec_types,
1678 tree tmpl_types)
8afa707f
MM
1679{
1680 tree new_spec_types;
1681
1682 if (!spec_types)
1683 return NULL_TREE;
1684
1685 if (spec_types == void_list_node)
1686 return void_list_node;
1687
1688 /* Substitute into the rest of the list. */
1689 new_spec_types =
1690 copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1691 TREE_CHAIN (tmpl_types));
c8094d83 1692
8afa707f
MM
1693 /* Add the default argument for this parameter. */
1694 return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1695 TREE_VALUE (spec_types),
1696 new_spec_types);
1697}
1698
1699/* DECL is an explicit specialization. Replicate default arguments
1700 from the template it specializes. (That way, code like:
1701
1702 template <class T> void f(T = 3);
1703 template <> void f(double);
c8094d83 1704 void g () { f (); }
8afa707f
MM
1705
1706 works, as required.) An alternative approach would be to look up
1707 the correct default arguments at the call-site, but this approach
1708 is consistent with how implicit instantiations are handled. */
1709
1710static void
3a978d72 1711copy_default_args_to_explicit_spec (tree decl)
8afa707f
MM
1712{
1713 tree tmpl;
1714 tree spec_types;
1715 tree tmpl_types;
1716 tree new_spec_types;
1717 tree old_type;
1718 tree new_type;
1719 tree t;
08c2df0f
NS
1720 tree object_type = NULL_TREE;
1721 tree in_charge = NULL_TREE;
e0fff4b3 1722 tree vtt = NULL_TREE;
8afa707f
MM
1723
1724 /* See if there's anything we need to do. */
1725 tmpl = DECL_TI_TEMPLATE (decl);
1726 tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1727 for (t = tmpl_types; t; t = TREE_CHAIN (t))
1728 if (TREE_PURPOSE (t))
1729 break;
1730 if (!t)
1731 return;
1732
1733 old_type = TREE_TYPE (decl);
1734 spec_types = TYPE_ARG_TYPES (old_type);
c8094d83 1735
8afa707f
MM
1736 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1737 {
08c2df0f 1738 /* Remove the this pointer, but remember the object's type for
0cbd7506 1739 CV quals. */
08c2df0f 1740 object_type = TREE_TYPE (TREE_VALUE (spec_types));
8afa707f
MM
1741 spec_types = TREE_CHAIN (spec_types);
1742 tmpl_types = TREE_CHAIN (tmpl_types);
c8094d83 1743
8afa707f 1744 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
0cbd7506
MS
1745 {
1746 /* DECL may contain more parameters than TMPL due to the extra
1747 in-charge parameter in constructors and destructors. */
1748 in_charge = spec_types;
08c2df0f
NS
1749 spec_types = TREE_CHAIN (spec_types);
1750 }
e0fff4b3
JM
1751 if (DECL_HAS_VTT_PARM_P (decl))
1752 {
1753 vtt = spec_types;
1754 spec_types = TREE_CHAIN (spec_types);
1755 }
8afa707f
MM
1756 }
1757
1758 /* Compute the merged default arguments. */
c8094d83 1759 new_spec_types =
8afa707f
MM
1760 copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1761
08c2df0f
NS
1762 /* Compute the new FUNCTION_TYPE. */
1763 if (object_type)
8afa707f 1764 {
e0fff4b3 1765 if (vtt)
0cbd7506
MS
1766 new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
1767 TREE_VALUE (vtt),
1768 new_spec_types);
e0fff4b3 1769
08c2df0f 1770 if (in_charge)
0cbd7506
MS
1771 /* Put the in-charge parameter back. */
1772 new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1773 TREE_VALUE (in_charge),
1774 new_spec_types);
08c2df0f 1775
43dc123f
MM
1776 new_type = build_method_type_directly (object_type,
1777 TREE_TYPE (old_type),
1778 new_spec_types);
8afa707f 1779 }
8afa707f
MM
1780 else
1781 new_type = build_function_type (TREE_TYPE (old_type),
08c2df0f 1782 new_spec_types);
e9525111
MM
1783 new_type = cp_build_type_attribute_variant (new_type,
1784 TYPE_ATTRIBUTES (old_type));
8afa707f
MM
1785 new_type = build_exception_variant (new_type,
1786 TYPE_RAISES_EXCEPTIONS (old_type));
1787 TREE_TYPE (decl) = new_type;
1788}
1789
386b8a85 1790/* Check to see if the function just declared, as indicated in
75650646
MM
1791 DECLARATOR, and in DECL, is a specialization of a function
1792 template. We may also discover that the declaration is an explicit
1793 instantiation at this point.
1794
e1467ff2 1795 Returns DECL, or an equivalent declaration that should be used
03017874
MM
1796 instead if all goes well. Issues an error message if something is
1797 amiss. Returns error_mark_node if the error is not easily
1798 recoverable.
c8094d83
MS
1799
1800 FLAGS is a bitmask consisting of the following flags:
75650646 1801
75650646
MM
1802 2: The function has a definition.
1803 4: The function is a friend.
75650646
MM
1804
1805 The TEMPLATE_COUNT is the number of references to qualifying
1806 template classes that appeared in the name of the function. For
1807 example, in
1808
1809 template <class T> struct S { void f(); };
1810 void S<int>::f();
c8094d83 1811
75650646
MM
1812 the TEMPLATE_COUNT would be 1. However, explicitly specialized
1813 classes are not counted in the TEMPLATE_COUNT, so that in
1814
1815 template <class T> struct S {};
1816 template <> struct S<int> { void f(); }
36a117a5 1817 template <> void S<int>::f();
75650646
MM
1818
1819 the TEMPLATE_COUNT would be 0. (Note that this declaration is
0e339752 1820 invalid; there should be no template <>.)
75650646
MM
1821
1822 If the function is a specialization, it is marked as such via
1823 DECL_TEMPLATE_SPECIALIZATION. Furthermore, its DECL_TEMPLATE_INFO
c8094d83 1824 is set up correctly, and it is added to the list of specializations
75650646 1825 for that template. */
386b8a85 1826
e1467ff2 1827tree
c8094d83 1828check_explicit_specialization (tree declarator,
0cbd7506
MS
1829 tree decl,
1830 int template_count,
1831 int flags)
386b8a85 1832{
75650646
MM
1833 int have_def = flags & 2;
1834 int is_friend = flags & 4;
1835 int specialization = 0;
e1467ff2 1836 int explicit_instantiation = 0;
fd4de5ff 1837 int member_specialization = 0;
75650646
MM
1838 tree ctype = DECL_CLASS_CONTEXT (decl);
1839 tree dname = DECL_NAME (decl);
74b846e0 1840 tmpl_spec_kind tsk;
386b8a85 1841
f65b7de3
GB
1842 if (is_friend)
1843 {
1844 if (!processing_specialization)
1845 tsk = tsk_none;
1846 else
1847 tsk = tsk_excessive_parms;
1848 }
1849 else
1850 tsk = current_tmpl_spec_kind (template_count);
75650646 1851
74b846e0
MM
1852 switch (tsk)
1853 {
1854 case tsk_none:
c8094d83 1855 if (processing_specialization)
75650646 1856 {
fd4de5ff
MM
1857 specialization = 1;
1858 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
75650646 1859 }
74b846e0 1860 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
386b8a85 1861 {
74b846e0
MM
1862 if (is_friend)
1863 /* This could be something like:
75650646 1864
74b846e0
MM
1865 template <class T> void f(T);
1866 class S { friend void f<>(int); } */
1867 specialization = 1;
1868 else
1869 {
1870 /* This case handles bogus declarations like template <>
1871 template <class T> void f<int>(); */
1872
0f51ccfc 1873 error ("template-id %qD in declaration of primary template",
0cbd7506 1874 declarator);
74b846e0
MM
1875 return decl;
1876 }
1877 }
1878 break;
1879
1880 case tsk_invalid_member_spec:
1881 /* The error has already been reported in
1882 check_specialization_scope. */
1883 return error_mark_node;
1884
1885 case tsk_invalid_expl_inst:
33bd39a2 1886 error ("template parameter list used in explicit instantiation");
74b846e0
MM
1887
1888 /* Fall through. */
1889
1890 case tsk_expl_inst:
fd4de5ff 1891 if (have_def)
33bd39a2 1892 error ("definition provided for explicit instantiation");
c8094d83 1893
fd4de5ff 1894 explicit_instantiation = 1;
74b846e0 1895 break;
fd4de5ff 1896
74b846e0 1897 case tsk_excessive_parms:
f03adc6b
GB
1898 case tsk_insufficient_parms:
1899 if (tsk == tsk_excessive_parms)
0cbd7506 1900 error ("too many template parameter lists in declaration of %qD",
f03adc6b
GB
1901 decl);
1902 else if (template_header_count)
0f51ccfc 1903 error("too few template parameter lists in declaration of %qD", decl);
f03adc6b 1904 else
0f51ccfc 1905 error("explicit specialization of %qD must be introduced by "
9e637a26 1906 "%<template <>%>", decl);
75650646 1907
74b846e0
MM
1908 /* Fall through. */
1909 case tsk_expl_spec:
1910 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1911 if (ctype)
1912 member_specialization = 1;
1913 else
1914 specialization = 1;
1915 break;
74b846e0
MM
1916
1917 case tsk_template:
1918 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
c6f2ed0d 1919 {
fd4de5ff
MM
1920 /* This case handles bogus declarations like template <>
1921 template <class T> void f<int>(); */
75650646 1922
655dc6ee 1923 if (uses_template_parms (declarator))
0f51ccfc 1924 error ("function template partial specialization %qD "
e1e93ad8 1925 "is not allowed", declarator);
655dc6ee 1926 else
0f51ccfc 1927 error ("template-id %qD in declaration of primary template",
0cbd7506 1928 declarator);
fd4de5ff 1929 return decl;
386b8a85 1930 }
74b846e0
MM
1931
1932 if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1933 /* This is a specialization of a member template, without
1934 specialization the containing class. Something like:
1935
1936 template <class T> struct S {
c8094d83 1937 template <class U> void f (U);
0cbd7506 1938 };
74b846e0 1939 template <> template <class U> void S<int>::f(U) {}
c8094d83 1940
74b846e0
MM
1941 That's a specialization -- but of the entire template. */
1942 specialization = 1;
1943 break;
1944
1945 default:
315fb5db 1946 gcc_unreachable ();
75650646 1947 }
386b8a85 1948
670960ac
JM
1949 if (specialization || member_specialization)
1950 {
1951 tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
1952 for (; t; t = TREE_CHAIN (t))
1953 if (TREE_PURPOSE (t))
1954 {
33bd39a2 1955 pedwarn
8251199e 1956 ("default argument specified in explicit specialization");
670960ac
JM
1957 break;
1958 }
1959 }
1960
e1467ff2 1961 if (specialization || member_specialization || explicit_instantiation)
75650646
MM
1962 {
1963 tree tmpl = NULL_TREE;
1964 tree targs = NULL_TREE;
75650646
MM
1965
1966 /* Make sure that the declarator is a TEMPLATE_ID_EXPR. */
386b8a85
JM
1967 if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
1968 {
1969 tree fns;
1970
50bc768d 1971 gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2f54a1db 1972 if (ctype)
386b8a85 1973 fns = dname;
2f54a1db
GB
1974 else
1975 {
1976 /* If there is no class context, the explicit instantiation
0cbd7506 1977 must be at namespace scope. */
50bc768d 1978 gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2f54a1db
GB
1979
1980 /* Find the namespace binding, using the declaration
0cbd7506 1981 context. */
ddf74938 1982 fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
664a90c0 1983 false, true);
4230cec2
NS
1984 if (!fns || !is_overloaded_fn (fns))
1985 {
1986 error ("%qD is not a template function", dname);
1987 fns = error_mark_node;
1988 }
664a90c0
JM
1989 else
1990 {
1991 tree fn = OVL_CURRENT (fns);
ddf74938 1992 if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
08d295c5
JM
1993 CP_DECL_CONTEXT (fn)))
1994 error ("%qD is not declared in %qD",
1995 decl, current_namespace);
664a90c0 1996 }
2f54a1db 1997 }
386b8a85 1998
2f54a1db 1999 declarator = lookup_template_function (fns, NULL_TREE);
386b8a85
JM
2000 }
2001
f2e48b67
BK
2002 if (declarator == error_mark_node)
2003 return error_mark_node;
2004
75650646
MM
2005 if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2006 {
8ec2ac34 2007 if (!explicit_instantiation)
0e339752 2008 /* A specialization in class scope. This is invalid,
6c30752f
MM
2009 but the error will already have been flagged by
2010 check_specialization_scope. */
2011 return error_mark_node;
8ec2ac34 2012 else
b370501f 2013 {
0e339752 2014 /* It's not valid to write an explicit instantiation in
b370501f 2015 class scope, e.g.:
8ec2ac34 2016
0cbd7506 2017 class C { template void f(); }
8ec2ac34 2018
b370501f
KG
2019 This case is caught by the parser. However, on
2020 something like:
c8094d83 2021
b370501f 2022 template class C { void f(); };
8ec2ac34 2023
0e339752 2024 (which is invalid) we can get here. The error will be
b370501f
KG
2025 issued later. */
2026 ;
2027 }
8ec2ac34 2028
e1467ff2 2029 return decl;
75650646 2030 }
c8094d83 2031 else if (ctype != NULL_TREE
75650646
MM
2032 && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2033 IDENTIFIER_NODE))
386b8a85 2034 {
75650646
MM
2035 /* Find the list of functions in ctype that have the same
2036 name as the declared function. */
2037 tree name = TREE_OPERAND (declarator, 0);
03017874
MM
2038 tree fns = NULL_TREE;
2039 int idx;
2040
8ba658ee 2041 if (constructor_name_p (name, ctype))
386b8a85 2042 {
75650646 2043 int is_constructor = DECL_CONSTRUCTOR_P (decl);
c8094d83 2044
75650646 2045 if (is_constructor ? !TYPE_HAS_CONSTRUCTOR (ctype)
9f4faeae 2046 : !CLASSTYPE_DESTRUCTORS (ctype))
75650646
MM
2047 {
2048 /* From [temp.expl.spec]:
c8094d83 2049
75650646
MM
2050 If such an explicit specialization for the member
2051 of a class template names an implicitly-declared
2052 special member function (clause _special_), the
c8094d83 2053 program is ill-formed.
e1467ff2
MM
2054
2055 Similar language is found in [temp.explicit]. */
33bd39a2 2056 error ("specialization of implicitly-declared special member function");
03017874 2057 return error_mark_node;
75650646 2058 }
386b8a85 2059
42da2fd8 2060 name = is_constructor ? ctor_identifier : dtor_identifier;
75650646 2061 }
42da2fd8 2062
421844e7 2063 if (!DECL_CONV_FN_P (decl))
03017874
MM
2064 {
2065 idx = lookup_fnfields_1 (ctype, name);
2066 if (idx >= 0)
aaaa46d2 2067 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
03017874
MM
2068 }
2069 else
2070 {
d4e6fecb 2071 VEC(tree,gc) *methods;
aaaa46d2 2072 tree ovl;
03017874
MM
2073
2074 /* For a type-conversion operator, we cannot do a
2075 name-based lookup. We might be looking for `operator
2076 int' which will be a specialization of `operator T'.
2077 So, we find *all* the conversion operators, and then
2078 select from them. */
2079 fns = NULL_TREE;
2080
2081 methods = CLASSTYPE_METHOD_VEC (ctype);
2082 if (methods)
5dd236e2 2083 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
9ba5ff0f 2084 VEC_iterate (tree, methods, idx, ovl);
aaaa46d2 2085 ++idx)
03017874 2086 {
aaaa46d2 2087 if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
03017874
MM
2088 /* There are no more conversion functions. */
2089 break;
2090
2091 /* Glue all these conversion functions together
2092 with those we already have. */
2093 for (; ovl; ovl = OVL_NEXT (ovl))
2094 fns = ovl_cons (OVL_CURRENT (ovl), fns);
2095 }
2096 }
c8094d83
MS
2097
2098 if (fns == NULL_TREE)
386b8a85 2099 {
0f51ccfc 2100 error ("no member function %qD declared in %qT", name, ctype);
03017874 2101 return error_mark_node;
386b8a85
JM
2102 }
2103 else
2104 TREE_OPERAND (declarator, 0) = fns;
2105 }
c8094d83 2106
e1467ff2
MM
2107 /* Figure out what exactly is being specialized at this point.
2108 Note that for an explicit instantiation, even one for a
38e01259 2109 member function, we cannot tell apriori whether the
e1467ff2 2110 instantiation is for a member template, or just a member
36a117a5
MM
2111 function of a template class. Even if a member template is
2112 being instantiated, the member template arguments may be
2113 elided if they can be deduced from the rest of the
2114 declaration. */
e1467ff2 2115 tmpl = determine_specialization (declarator, decl,
c8094d83 2116 &targs,
5fe7b654 2117 member_specialization,
29a1da1c
MM
2118 template_count,
2119 tsk);
c8094d83 2120
03017874
MM
2121 if (!tmpl || tmpl == error_mark_node)
2122 /* We couldn't figure out what this declaration was
2123 specializing. */
2124 return error_mark_node;
2125 else
386b8a85 2126 {
25aab5d0 2127 tree gen_tmpl = most_general_template (tmpl);
36a117a5 2128
e1467ff2
MM
2129 if (explicit_instantiation)
2130 {
03d0f4af 2131 /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
c8094d83 2132 is done by do_decl_instantiation later. */
25aab5d0
MM
2133
2134 int arg_depth = TMPL_ARGS_DEPTH (targs);
2135 int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2136
2137 if (arg_depth > parm_depth)
2138 {
2139 /* If TMPL is not the most general template (for
2140 example, if TMPL is a friend template that is
2141 injected into namespace scope), then there will
dc957d14 2142 be too many levels of TARGS. Remove some of them
25aab5d0
MM
2143 here. */
2144 int i;
2145 tree new_targs;
2146
f31c0a32 2147 new_targs = make_tree_vec (parm_depth);
25aab5d0
MM
2148 for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2149 TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2150 = TREE_VEC_ELT (targs, i);
2151 targs = new_targs;
2152 }
c8094d83 2153
3e4a3562 2154 return instantiate_template (tmpl, targs, tf_error);
e1467ff2 2155 }
74b846e0 2156
6c07f448
KL
2157 /* If we thought that the DECL was a member function, but it
2158 turns out to be specializing a static member function,
4546865e 2159 make DECL a static member function as well. */
6c07f448
KL
2160 if (DECL_STATIC_FUNCTION_P (tmpl)
2161 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
4546865e 2162 revert_static_member_fn (decl);
6c07f448 2163
f9a7ae04 2164 /* If this is a specialization of a member template of a
29a1da1c
MM
2165 template class, we want to return the TEMPLATE_DECL, not
2166 the specialization of it. */
74b846e0
MM
2167 if (tsk == tsk_template)
2168 {
2169 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
f9a7ae04 2170 DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
b190f239
NS
2171 if (have_def)
2172 {
f31686a3
RH
2173 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2174 DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl))
2175 = DECL_SOURCE_LOCATION (decl);
08167d1c
AO
2176 /* We want to use the argument list specified in the
2177 definition, not in the original declaration. */
2178 DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (tmpl))
2179 = DECL_ARGUMENTS (decl);
b190f239 2180 }
74b846e0
MM
2181 return tmpl;
2182 }
2183
36a117a5 2184 /* Set up the DECL_TEMPLATE_INFO for DECL. */
e1b3e07d 2185 DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
36a117a5 2186
8afa707f
MM
2187 /* Inherit default function arguments from the template
2188 DECL is specializing. */
2189 copy_default_args_to_explicit_spec (decl);
2190
c750255c
MM
2191 /* This specialization has the same protection as the
2192 template it specializes. */
2193 TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2194 TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
b9e75696 2195
736b8100
SB
2196 /* 7.1.1-1 [dcl.stc]
2197
2198 A storage-class-specifier shall not be specified in an
2199 explicit specialization...
2200
2201 The parser rejects these, so unless action is taken here,
2202 explicit function specializations will always appear with
2203 global linkage.
2204
2205 The action recommended by the C++ CWG in response to C++
2206 defect report 605 is to make the storage class and linkage
2207 of the explicit specialization match the templated function:
2208
2209 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2210 */
2211 if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2212 {
2213 tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2214 gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2215
2216 /* This specialization has the same linkage and visiblity as
2217 the function template it specializes. */
2218 TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2219 DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2220 if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2221 {
2222 DECL_VISIBILITY_SPECIFIED (decl) = 1;
2223 DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2224 }
2225 }
2226
9c12301f
MM
2227 /* If DECL is a friend declaration, declared using an
2228 unqualified name, the namespace associated with DECL may
2229 have been set incorrectly. For example, in:
3db45ab5
MS
2230
2231 template <typename T> void f(T);
2232 namespace N {
2233 struct S { friend void f<int>(int); }
2234 }
2235
2236 we will have set the DECL_CONTEXT for the friend
2237 declaration to N, rather than to the global namespace. */
9c12301f
MM
2238 if (DECL_NAMESPACE_SCOPE_P (decl))
2239 DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
8d039470 2240
386b8a85 2241 if (is_friend && !have_def)
36a117a5
MM
2242 /* This is not really a declaration of a specialization.
2243 It's just the name of an instantiation. But, it's not
2244 a request for an instantiation, either. */
fbf1c34b 2245 SET_DECL_IMPLICIT_INSTANTIATION (decl);
08511114
KL
2246 else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2247 /* This is indeed a specialization. In case of constructors
2248 and destructors, we need in-charge and not-in-charge
2249 versions in V3 ABI. */
2250 clone_function_decl (decl, /*update_method_vec_p=*/0);
75650646 2251
36a117a5
MM
2252 /* Register this specialization so that we can find it
2253 again. */
d63d5d0c 2254 decl = register_specialization (decl, gen_tmpl, targs, is_friend);
386b8a85
JM
2255 }
2256 }
c8094d83 2257
e1467ff2 2258 return decl;
386b8a85 2259}
75650646 2260
75650646
MM
2261/* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2262 parameters. These are represented in the same format used for
2263 DECL_TEMPLATE_PARMS. */
2264
50bc768d
NS
2265int
2266comp_template_parms (tree parms1, tree parms2)
75650646
MM
2267{
2268 tree p1;
2269 tree p2;
2270
2271 if (parms1 == parms2)
2272 return 1;
2273
c8094d83 2274 for (p1 = parms1, p2 = parms2;
75650646
MM
2275 p1 != NULL_TREE && p2 != NULL_TREE;
2276 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2277 {
2278 tree t1 = TREE_VALUE (p1);
2279 tree t2 = TREE_VALUE (p2);
2280 int i;
2281
50bc768d
NS
2282 gcc_assert (TREE_CODE (t1) == TREE_VEC);
2283 gcc_assert (TREE_CODE (t2) == TREE_VEC);
75650646
MM
2284
2285 if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2286 return 0;
2287
c8094d83 2288 for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
75650646 2289 {
0f67a82f
LM
2290 tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2291 tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
42b304f1 2292
0f67a82f
LM
2293 /* If either of the template parameters are invalid, assume
2294 they match for the sake of error recovery. */
2295 if (parm1 == error_mark_node || parm2 == error_mark_node)
2296 return 1;
75650646
MM
2297
2298 if (TREE_CODE (parm1) != TREE_CODE (parm2))
2299 return 0;
2300
5d80a306
DG
2301 if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2302 && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2303 == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
75650646 2304 continue;
3bfdc719 2305 else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
75650646
MM
2306 return 0;
2307 }
2308 }
2309
2310 if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2311 /* One set of parameters has more parameters lists than the
2312 other. */
2313 return 0;
2314
2315 return 1;
2316}
2317
5d80a306
DG
2318/* Determine whether PARM is a parameter pack. */
2319bool
2320template_parameter_pack_p (tree parm)
2321{
2322 /* Determine if we have a non-type template parameter pack. */
2323 if (TREE_CODE (parm) == PARM_DECL)
2324 return (DECL_TEMPLATE_PARM_P (parm)
2325 && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2326
2327 /* If this is a list of template parameters, we could get a
2328 TYPE_DECL or a TEMPLATE_DECL. */
2329 if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2330 parm = TREE_TYPE (parm);
2331
2332 return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2333 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2334 && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2335}
2336
2337/* Determine whether PARMS describes a variadic template parameter
2338 list, i.e., one that is terminated by a template parameter pack. */
2339bool
2340template_parms_variadic_p (tree parms)
2341{
2342 int nparms = TREE_VEC_LENGTH (parms);
2343 tree last_parm = TREE_VALUE (TREE_VEC_ELT (parms, nparms - 1));
2344
2345 return template_parameter_pack_p (last_parm);
2346}
2347
2348/* Determine whether ARGS describes a variadic template args list,
2349 i.e., one that is terminated by a template argument pack. */
2350static bool
2351template_args_variadic_p (tree args)
2352{
2353 int nargs;
2354 tree last_parm;
2355
2356 if (args == NULL_TREE)
2357 return false;
2358
2359 args = INNERMOST_TEMPLATE_ARGS (args);
2360 nargs = TREE_VEC_LENGTH (args);
2361
2362 if (nargs == 0)
2363 return false;
2364
2365 last_parm = TREE_VEC_ELT (args, nargs - 1);
2366
2367 return ARGUMENT_PACK_P (last_parm);
2368}
2369
2370/* Generate a new name for the parameter pack name NAME (an
2371 IDENTIFIER_NODE) that incorporates its */
2372static tree
2373make_ith_pack_parameter_name (tree name, int i)
2374{
2375 /* Munge the name to include the parameter index. */
2376 char numbuf[128];
2377 char* newname;
2378
2379 sprintf(numbuf, "%i", i);
2380 newname = (char*)alloca (IDENTIFIER_LENGTH (name) + strlen(numbuf) + 2);
2381 sprintf(newname, "%s#%i", IDENTIFIER_POINTER (name), i);
2382 return get_identifier (newname);
2383}
2384
2385/* Structure used to track the progress of find_parameter_pack_r. */
2386struct find_parameter_pack_data
2387{
2388 tree* parameter_packs;
2389 struct pointer_set_t *visited;
2390};
2391
2392/* Identifiers all of the argument packs that occur in a template
2393 argument and appends them to the TREE_LIST inside DATA, which is a
2394 find_parameter_pack_Data structure. This is a subroutine of
2395 make_pack_expansion and uses_parameter_packs. */
2396static tree
2397find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2398{
2399 tree t = *tp;
2400 struct find_parameter_pack_data* ppd =
2401 (struct find_parameter_pack_data*)data;
2402
2403 if (TYPE_P (t))
2404 {
2405 tree context = TYPE_CONTEXT (t);
2406 walk_tree (&context, &find_parameter_packs_r, ppd, ppd->visited);
2407 }
2408
2409 /* This switch statement will return immediately if we don't find a
2410 parameter pack. */
2411 switch (TREE_CODE (t))
2412 {
2413 case TEMPLATE_PARM_INDEX:
2414 if (TEMPLATE_PARM_PARAMETER_PACK (t))
2415 break;
2416 return NULL_TREE;
2417
2418 case BOUND_TEMPLATE_TEMPLATE_PARM:
2419 /* Check the template arguments. */
2420 walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd,
2421 ppd->visited);
2422
2423 /* Dig out the underlying TEMPLATE_TEMPLATE_PARM. */
2424 t = TYPE_TI_TEMPLATE (t);
2425 if (DECL_P (t) && TREE_TYPE (t))
2426 t = TREE_TYPE (t);
2427 *walk_subtrees = 0;
2428
2429 /* Fall through. */
2430
2431 case TEMPLATE_TYPE_PARM:
2432 case TEMPLATE_TEMPLATE_PARM:
2433 if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2434 break;
2435 return NULL_TREE;
2436
2437 case PARM_DECL:
2438 if (FUNCTION_PARAMETER_PACK_P (t))
2439 {
2440 /* We don't want to walk into the type of a PARM_DECL,
2441 because we don't want to see the type parameter pack.*/
2442 *walk_subtrees = 0;
2443 break;
2444 }
2445 return NULL_TREE;
2446
2447 case RECORD_TYPE:
2448 if (TYPE_PTRMEMFUNC_P (t))
2449 return NULL_TREE;
2450 /* Fall through. */
2451
2452 case UNION_TYPE:
2453 case ENUMERAL_TYPE:
2454 if (TYPE_TEMPLATE_INFO (t))
2455 {
2456 tree args = TREE_VALUE (TYPE_TEMPLATE_INFO (t));
2457 walk_tree (&args, &find_parameter_packs_r, ppd, ppd->visited);
2458 }
2459
2460 *walk_subtrees = 0;
2461 return NULL_TREE;
2462
2463 case TEMPLATE_DECL:
2464 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
2465 && TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (t)))
2466 break;
2467
2468 *walk_subtrees = 0;
2469 return NULL_TREE;
2470
2471 case TYPE_PACK_EXPANSION:
2472 case EXPR_PACK_EXPANSION:
2473 *walk_subtrees = 0;
2474 return NULL_TREE;
2475
d393153e
DG
2476 case INTEGER_TYPE:
2477 walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r,
2478 ppd, ppd->visited);
2479 *walk_subtrees = 0;
2480 return NULL_TREE;
2481
5d80a306
DG
2482 default:
2483 return NULL_TREE;
2484 }
2485
2486 /* Add this parameter pack to the list. */
2487 *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
2488
2489 return NULL_TREE;
2490}
2491
2492/* Determines if the expression or type T uses any parameter packs. */
2493bool
2494uses_parameter_packs (tree t)
2495{
2496 tree parameter_packs = NULL_TREE;
2497 struct find_parameter_pack_data ppd;
2498 ppd.parameter_packs = &parameter_packs;
2499 ppd.visited = pointer_set_create ();
2500 walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
30bcc028 2501 pointer_set_destroy (ppd.visited);
5d80a306
DG
2502 return parameter_packs != NULL_TREE;
2503}
2504
2505/* Turn ARG, which may be an expression, type, or a TREE_LIST
2506 representation a base-class initializer into a parameter pack
2507 expansion. If all goes well, the resulting node will be an
2508 EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
2509 respectively. */
2510tree
2511make_pack_expansion (tree arg)
2512{
2513 tree result;
2514 tree parameter_packs = NULL_TREE;
2515 bool for_types = false;
2516 struct find_parameter_pack_data ppd;
2517
2518 if (!arg || arg == error_mark_node)
2519 return arg;
2520
2521 if (TREE_CODE (arg) == TREE_LIST)
2522 {
2523 /* The only time we will see a TREE_LIST here is for a base
2524 class initializer. In this case, the TREE_PURPOSE will be a
2525 _TYPE node (representing the base class expansion we're
2526 initializing) and the TREE_VALUE will be a TREE_LIST
2527 containing the initialization arguments.
2528
2529 The resulting expansion looks somewhat different from most
2530 expansions. Rather than returning just one _EXPANSION, we
2531 return a TREE_LIST whose TREE_PURPOSE is a
2532 TYPE_PACK_EXPANSION containing the bases that will be
2533 initialized. The TREE_VALUE will be identical to the
2534 original TREE_VALUE, which is a list of arguments that will
2535 be passed to each base. We do not introduce any new pack
2536 expansion nodes into the TREE_VALUE (although it is possible
2537 that some already exist), because the TREE_PURPOSE and
2538 TREE_VALUE all need to be expanded together with the same
2539 _EXPANSION node. Note that the TYPE_PACK_EXPANSION in the
2540 resulting TREE_PURPOSE will mention the parameter packs in
2541 both the bases and the arguments to the bases. */
2542 tree purpose;
2543 tree value;
2544 tree parameter_packs = NULL_TREE;
2545
2546 /* Determine which parameter packs will be used by the base
2547 class expansion. */
2548 ppd.visited = pointer_set_create ();
2549 ppd.parameter_packs = &parameter_packs;
2550 walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r,
2551 &ppd, ppd.visited);
2552
2553 if (parameter_packs == NULL_TREE)
2554 {
2555 error ("base initializer expansion %<%T%> contains no parameter packs", arg);
30bcc028 2556 pointer_set_destroy (ppd.visited);
5d80a306
DG
2557 return error_mark_node;
2558 }
2559
2560 if (TREE_VALUE (arg) != void_type_node)
2561 {
2562 /* Collect the sets of parameter packs used in each of the
2563 initialization arguments. */
2564 for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
2565 {
2566 /* Determine which parameter packs will be expanded in this
2567 argument. */
2568 walk_tree (&TREE_VALUE (value), &find_parameter_packs_r,
2569 &ppd, ppd.visited);
2570 }
2571 }
2572
30bcc028
DG
2573 pointer_set_destroy (ppd.visited);
2574
5d80a306
DG
2575 /* Create the pack expansion type for the base type. */
2576 purpose = make_node (TYPE_PACK_EXPANSION);
2577 SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
2578 PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
2579
2580 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2581 they will rarely be compared to anything. */
2582 SET_TYPE_STRUCTURAL_EQUALITY (purpose);
2583
2584 return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
2585 }
2586
2587 if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
2588 for_types = true;
2589
2590 /* Build the PACK_EXPANSION_* node. */
2591 result = make_node (for_types ? TYPE_PACK_EXPANSION : EXPR_PACK_EXPANSION);
2592 SET_PACK_EXPANSION_PATTERN (result, arg);
2593 if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
2594 {
2595 /* Propagate type and const-expression information. */
2596 TREE_TYPE (result) = TREE_TYPE (arg);
2597 TREE_CONSTANT (result) = TREE_CONSTANT (arg);
2598 }
2599 else
2600 /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2601 they will rarely be compared to anything. */
2602 SET_TYPE_STRUCTURAL_EQUALITY (result);
2603
2604 /* Determine which parameter packs will be expanded. */
2605 ppd.parameter_packs = &parameter_packs;
2606 ppd.visited = pointer_set_create ();
2607 walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
30bcc028 2608 pointer_set_destroy (ppd.visited);
5d80a306
DG
2609
2610 /* Make sure we found some parameter packs. */
2611 if (parameter_packs == NULL_TREE)
2612 {
2613 if (TYPE_P (arg))
2614 error ("expansion pattern %<%T%> contains no argument packs", arg);
2615 else
2616 error ("expansion pattern %<%E%> contains no argument packs", arg);
2617 return error_mark_node;
2618 }
2619 PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
2620
2621 return result;
2622}
2623
2624/* Checks T for any "bare" parameter packs, which have not yet been
2625 expanded, and issues an error if any are found. This operation can
2626 only be done on full expressions or types (e.g., an expression
2627 statement, "if" condition, etc.), because we could have expressions like:
2628
2629 foo(f(g(h(args)))...)
2630
2631 where "args" is a parameter pack. check_for_bare_parameter_packs
2632 should not be called for the subexpressions args, h(args),
2633 g(h(args)), or f(g(h(args))), because we would produce erroneous
b1d7b1c0
DG
2634 error messages.
2635
2636 Returns TRUE if there were no bare parameter packs, returns FALSE
2637 (and emits an error) if there were bare parameter packs.*/
2638bool
5d80a306
DG
2639check_for_bare_parameter_packs (tree t)
2640{
2641 tree parameter_packs = NULL_TREE;
2642 struct find_parameter_pack_data ppd;
2643
2644 if (!processing_template_decl || !t || t == error_mark_node)
b1d7b1c0 2645 return true;
5d80a306
DG
2646
2647 if (TREE_CODE (t) == TYPE_DECL)
2648 t = TREE_TYPE (t);
2649
2650 ppd.parameter_packs = &parameter_packs;
2651 ppd.visited = pointer_set_create ();
2652 walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
30bcc028 2653 pointer_set_destroy (ppd.visited);
5d80a306 2654
b1d7b1c0
DG
2655 if (parameter_packs)
2656 {
2657 error ("parameter packs not expanded with `...':");
2658 while (parameter_packs)
2659 {
2660 tree pack = TREE_VALUE (parameter_packs);
2661 tree name = NULL_TREE;
2662
2663 if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
2664 || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
2665 name = TYPE_NAME (pack);
2666 else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
2667 name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
2668 else
2669 name = DECL_NAME (pack);
2670 inform (" %qD", name);
2671
2672 parameter_packs = TREE_CHAIN (parameter_packs);
2673 }
2674
2675 return false;
2676 }
2677
2678 return true;
5d80a306
DG
2679}
2680
2681/* Expand any parameter packs that occur in the template arguments in
2682 ARGS. */
2683tree
2684expand_template_argument_pack (tree args)
2685{
2686 tree result_args = NULL_TREE;
2687 int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
2688 int num_result_args = -1;
2689
2690 /* First, determine if we need to expand anything, and the number of
2691 slots we'll need. */
2692 for (in_arg = 0; in_arg < nargs; ++in_arg)
2693 {
2694 tree arg = TREE_VEC_ELT (args, in_arg);
2695 if (ARGUMENT_PACK_P (arg))
2696 {
2697 int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
2698 if (num_result_args < 0)
2699 num_result_args = in_arg + num_packed;
2700 else
2701 num_result_args += num_packed;
2702 }
2703 else
2704 {
2705 if (num_result_args >= 0)
2706 num_result_args++;
2707 }
2708 }
2709
2710 /* If no expansion is necessary, we're done. */
2711 if (num_result_args < 0)
2712 return args;
2713
2714 /* Expand arguments. */
2715 result_args = make_tree_vec (num_result_args);
2716 for (in_arg = 0; in_arg < nargs; ++in_arg)
2717 {
2718 tree arg = TREE_VEC_ELT (args, in_arg);
2719 if (ARGUMENT_PACK_P (arg))
2720 {
2721 tree packed = ARGUMENT_PACK_ARGS (arg);
2722 int i, num_packed = TREE_VEC_LENGTH (packed);
2723 for (i = 0; i < num_packed; ++i, ++out_arg)
2724 TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
2725 }
2726 else
2727 {
2728 TREE_VEC_ELT (result_args, out_arg) = arg;
2729 ++out_arg;
2730 }
2731 }
2732
2733 return result_args;
2734}
2735
f3400fe2
JM
2736/* Complain if DECL shadows a template parameter.
2737
2738 [temp.local]: A template-parameter shall not be redeclared within its
2739 scope (including nested scopes). */
2740
2741void
3a978d72 2742check_template_shadow (tree decl)
f3400fe2 2743{
8f032717
MM
2744 tree olddecl;
2745
b5d9b9ab
MM
2746 /* If we're not in a template, we can't possibly shadow a template
2747 parameter. */
2748 if (!current_template_parms)
2749 return;
2750
2751 /* Figure out what we're shadowing. */
8f032717
MM
2752 if (TREE_CODE (decl) == OVERLOAD)
2753 decl = OVL_CURRENT (decl);
90ea9897 2754 olddecl = innermost_non_namespace_value (DECL_NAME (decl));
f3400fe2 2755
b5d9b9ab
MM
2756 /* If there's no previous binding for this name, we're not shadowing
2757 anything, let alone a template parameter. */
2758 if (!olddecl)
2759 return;
2760
2761 /* If we're not shadowing a template parameter, we're done. Note
2762 that OLDDECL might be an OVERLOAD (or perhaps even an
2763 ERROR_MARK), so we can't just blithely assume it to be a _DECL
2764 node. */
2f939d94 2765 if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
b5d9b9ab
MM
2766 return;
2767
2768 /* We check for decl != olddecl to avoid bogus errors for using a
2769 name inside a class. We check TPFI to avoid duplicate errors for
2770 inline member templates. */
c8094d83 2771 if (decl == olddecl
b5d9b9ab
MM
2772 || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
2773 return;
2774
dee15844
JM
2775 error ("declaration of %q+#D", decl);
2776 error (" shadows template parm %q+#D", olddecl);
f3400fe2 2777}
22a7be53 2778
f3400fe2 2779/* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
f84b4be9
JM
2780 ORIG_LEVEL, DECL, and TYPE. */
2781
2782static tree
c8094d83 2783build_template_parm_index (int index,
0cbd7506
MS
2784 int level,
2785 int orig_level,
2786 tree decl,
2787 tree type)
f84b4be9
JM
2788{
2789 tree t = make_node (TEMPLATE_PARM_INDEX);
2790 TEMPLATE_PARM_IDX (t) = index;
2791 TEMPLATE_PARM_LEVEL (t) = level;
2792 TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
2793 TEMPLATE_PARM_DECL (t) = decl;
2794 TREE_TYPE (t) = type;
3e4a3562 2795 TREE_CONSTANT (t) = TREE_CONSTANT (decl);
6de9cd9a 2796 TREE_INVARIANT (t) = TREE_INVARIANT (decl);
3e4a3562 2797 TREE_READONLY (t) = TREE_READONLY (decl);
f84b4be9
JM
2798
2799 return t;
2800}
2801
06d40de8 2802/* Find the canonical type parameter for the given template type
c3e188fc
KH
2803 parameter. Returns the canonical type parameter, which may be TYPE
2804 if no such parameter existed. */
06d40de8
DG
2805static tree
2806canonical_type_parameter (tree type)
2807{
2808 tree list;
2809 int idx = TEMPLATE_TYPE_IDX (type);
2810 if (!canonical_template_parms)
2811 canonical_template_parms = VEC_alloc (tree, gc, idx+1);
2812
2813 while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
2814 VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
2815
2816 list = VEC_index (tree, canonical_template_parms, idx);
2817 while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
2818 list = TREE_CHAIN (list);
2819
2820 if (list)
2821 return TREE_VALUE (list);
2822 else
2823 {
2824 VEC_replace(tree, canonical_template_parms, idx,
2825 tree_cons (NULL_TREE, type,
2826 VEC_index (tree, canonical_template_parms, idx)));
2827 return type;
2828 }
2829}
2830
f84b4be9 2831/* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
93cdc044 2832 TEMPLATE_PARM_LEVEL has been decreased by LEVELS. If such a
f84b4be9
JM
2833 TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2834 new one is created. */
2835
c8094d83 2836static tree
3a978d72 2837reduce_template_parm_level (tree index, tree type, int levels)
f84b4be9
JM
2838{
2839 if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
2840 || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
93cdc044 2841 != TEMPLATE_PARM_LEVEL (index) - levels))
f84b4be9 2842 {
3e4a3562
NS
2843 tree orig_decl = TEMPLATE_PARM_DECL (index);
2844 tree decl, t;
c8094d83 2845
3e4a3562
NS
2846 decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
2847 TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
6de9cd9a 2848 TREE_INVARIANT (decl) = TREE_INVARIANT (orig_decl);
3e4a3562
NS
2849 TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2850 DECL_ARTIFICIAL (decl) = 1;
2851 SET_DECL_TEMPLATE_PARM_P (decl);
c8094d83 2852
3e4a3562 2853 t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
93cdc044 2854 TEMPLATE_PARM_LEVEL (index) - levels,
f84b4be9
JM
2855 TEMPLATE_PARM_ORIG_LEVEL (index),
2856 decl, type);
2857 TEMPLATE_PARM_DESCENDANTS (index) = t;
5d80a306
DG
2858 TEMPLATE_PARM_PARAMETER_PACK (t)
2859 = TEMPLATE_PARM_PARAMETER_PACK (index);
cae40af6 2860
820cc88f
DB
2861 /* Template template parameters need this. */
2862 if (TREE_CODE (decl) != CONST_DECL)
2863 DECL_TEMPLATE_PARMS (decl)
2864 = DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index));
f84b4be9
JM
2865 }
2866
2867 return TEMPLATE_PARM_DESCENDANTS (index);
2868}
2869
a14de1af 2870/* Process information from new template parameter PARM and append it to the
058b15c1 2871 LIST being built. This new parameter is a non-type parameter iff
5d80a306
DG
2872 IS_NON_TYPE is true. This new parameter is a parameter
2873 pack iff IS_PARAMETER_PACK is true. */
e92cc029 2874
8d08fdba 2875tree
5d80a306
DG
2876process_template_parm (tree list, tree parm, bool is_non_type,
2877 bool is_parameter_pack)
8d08fdba 2878{
8d08fdba 2879 tree decl = 0;
a292b002 2880 tree defval;
0f67a82f 2881 tree err_parm_list;
d47e3adf 2882 int idx = 0;
f84b4be9 2883
50bc768d 2884 gcc_assert (TREE_CODE (parm) == TREE_LIST);
a292b002 2885 defval = TREE_PURPOSE (parm);
5566b478
MS
2886
2887 if (list)
2888 {
d47e3adf
LM
2889 tree p = tree_last (list);
2890
0f67a82f 2891 if (p && TREE_VALUE (p) != error_mark_node)
d47e3adf
LM
2892 {
2893 p = TREE_VALUE (p);
2894 if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
2895 idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
2896 else
2897 idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
2898 }
5566b478 2899
5566b478
MS
2900 ++idx;
2901 }
2902 else
2903 idx = 0;
2904
058b15c1 2905 if (is_non_type)
8d08fdba 2906 {
058b15c1
MM
2907 parm = TREE_VALUE (parm);
2908
833aa4c4 2909 SET_DECL_TEMPLATE_PARM_P (parm);
d490621d 2910
620188c9 2911 if (TREE_TYPE (parm) == error_mark_node)
0f67a82f
LM
2912 {
2913 err_parm_list = build_tree_list (defval, parm);
2914 TREE_VALUE (err_parm_list) = error_mark_node;
2915 return chainon (list, err_parm_list);
2916 }
620188c9
VR
2917 else
2918 {
2919 /* [temp.param]
d490621d 2920
620188c9
VR
2921 The top-level cv-qualifiers on the template-parameter are
2922 ignored when determining its type. */
2923 TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
2924 if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
0f67a82f
LM
2925 {
2926 err_parm_list = build_tree_list (defval, parm);
2927 TREE_VALUE (err_parm_list) = error_mark_node;
2928 return chainon (list, err_parm_list);
2929 }
5d80a306
DG
2930
2931 if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
2932 {
2933 /* This template parameter is not a parameter pack, but it
2934 should be. Complain about "bare" parameter packs. */
2935 check_for_bare_parameter_packs (TREE_TYPE (parm));
2936
2937 /* Recover by calling this a parameter pack. */
2938 is_parameter_pack = true;
2939 }
620188c9 2940 }
d490621d 2941
8d08fdba 2942 /* A template parameter is not modifiable. */
6de9cd9a
DN
2943 TREE_CONSTANT (parm) = 1;
2944 TREE_INVARIANT (parm) = 1;
2945 TREE_READONLY (parm) = 1;
8d08fdba 2946 decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
6de9cd9a
DN
2947 TREE_CONSTANT (decl) = 1;
2948 TREE_INVARIANT (decl) = 1;
2949 TREE_READONLY (decl) = 1;
c8094d83 2950 DECL_INITIAL (parm) = DECL_INITIAL (decl)
f84b4be9
JM
2951 = build_template_parm_index (idx, processing_template_decl,
2952 processing_template_decl,
2953 decl, TREE_TYPE (parm));
5d80a306
DG
2954
2955 TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
2956 = is_parameter_pack;
8d08fdba
MS
2957 }
2958 else
2959 {
73b0fce8 2960 tree t;
058b15c1 2961 parm = TREE_VALUE (TREE_VALUE (parm));
c8094d83 2962
73b0fce8
KL
2963 if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
2964 {
33848bb0 2965 t = make_aggr_type (TEMPLATE_TEMPLATE_PARM);
c8094d83 2966 /* This is for distinguishing between real templates and template
73b0fce8
KL
2967 template parameters */
2968 TREE_TYPE (parm) = t;
2969 TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
2970 decl = parm;
2971 }
2972 else
2973 {
33848bb0 2974 t = make_aggr_type (TEMPLATE_TYPE_PARM);
f4f206f4 2975 /* parm is either IDENTIFIER_NODE or NULL_TREE. */
73b0fce8
KL
2976 decl = build_decl (TYPE_DECL, parm, t);
2977 }
c8094d83 2978
d2e5ee5c
MS
2979 TYPE_NAME (t) = decl;
2980 TYPE_STUB_DECL (t) = decl;
a292b002 2981 parm = decl;
f84b4be9 2982 TEMPLATE_TYPE_PARM_INDEX (t)
c8094d83 2983 = build_template_parm_index (idx, processing_template_decl,
f84b4be9
JM
2984 processing_template_decl,
2985 decl, TREE_TYPE (parm));
5d80a306 2986 TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
06d40de8 2987 TYPE_CANONICAL (t) = canonical_type_parameter (t);
8d08fdba 2988 }
c727aa5e 2989 DECL_ARTIFICIAL (decl) = 1;
cd9f6678 2990 SET_DECL_TEMPLATE_PARM_P (decl);
8d08fdba 2991 pushdecl (decl);
a292b002 2992 parm = build_tree_list (defval, parm);
8d08fdba
MS
2993 return chainon (list, parm);
2994}
2995
2996/* The end of a template parameter list has been reached. Process the
2997 tree list into a parameter vector, converting each parameter into a more
2998 useful form. Type parameters are saved as IDENTIFIER_NODEs, and others
2999 as PARM_DECLs. */
3000
3001tree
3a978d72 3002end_template_parm_list (tree parms)
8d08fdba 3003{
5566b478 3004 int nparms;
9471d3e2 3005 tree parm, next;
5566b478
MS
3006 tree saved_parmlist = make_tree_vec (list_length (parms));
3007
5566b478 3008 current_template_parms
4890c2f4 3009 = tree_cons (size_int (processing_template_decl),
5566b478 3010 saved_parmlist, current_template_parms);
8d08fdba 3011
9471d3e2
NS
3012 for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3013 {
3014 next = TREE_CHAIN (parm);
3015 TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3016 TREE_CHAIN (parm) = NULL_TREE;
3017 }
a292b002 3018
67ffc812
MM
3019 --processing_template_parmlist;
3020
8d08fdba
MS
3021 return saved_parmlist;
3022}
3023
5566b478
MS
3024/* end_template_decl is called after a template declaration is seen. */
3025
8d08fdba 3026void
3a978d72 3027end_template_decl (void)
8d08fdba 3028{
386b8a85
JM
3029 reset_specialization ();
3030
5156628f 3031 if (! processing_template_decl)
73aad9b9
JM
3032 return;
3033
5566b478 3034 /* This matches the pushlevel in begin_template_parm_list. */
74b846e0 3035 finish_scope ();
8d08fdba 3036
5566b478
MS
3037 --processing_template_decl;
3038 current_template_parms = TREE_CHAIN (current_template_parms);
5566b478 3039}
8d08fdba 3040
03c17ccd
MM
3041/* Within the declaration of a template, return all levels of template
3042 parameters that apply. The template parameters are represented as
3043 a TREE_VEC, in the form documented in cp-tree.h for template
3044 arguments. */
9a3b49ac 3045
b5791fdc 3046static tree
3a978d72 3047current_template_args (void)
5566b478 3048{
36a117a5 3049 tree header;
b370501f 3050 tree args = NULL_TREE;
36a117a5 3051 int length = TMPL_PARMS_DEPTH (current_template_parms);
98c1c668
JM
3052 int l = length;
3053
36a117a5
MM
3054 /* If there is only one level of template parameters, we do not
3055 create a TREE_VEC of TREE_VECs. Instead, we return a single
3056 TREE_VEC containing the arguments. */
3057 if (length > 1)
3058 args = make_tree_vec (length);
3059
3060 for (header = current_template_parms; header; header = TREE_CHAIN (header))
8d08fdba 3061 {
5566b478 3062 tree a = copy_node (TREE_VALUE (header));
36a117a5
MM
3063 int i;
3064
5566b478 3065 TREE_TYPE (a) = NULL_TREE;
36a117a5 3066 for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
5566b478 3067 {
98c1c668
JM
3068 tree t = TREE_VEC_ELT (a, i);
3069
36a117a5 3070 /* T will be a list if we are called from within a
98c1c668
JM
3071 begin/end_template_parm_list pair, but a vector directly
3072 if within a begin/end_member_template_processing pair. */
c8094d83 3073 if (TREE_CODE (t) == TREE_LIST)
98c1c668
JM
3074 {
3075 t = TREE_VALUE (t);
c8094d83 3076
0f67a82f
LM
3077 if (t != error_mark_node)
3078 {
3079 if (TREE_CODE (t) == TYPE_DECL
3080 || TREE_CODE (t) == TEMPLATE_DECL)
5d80a306
DG
3081 {
3082 t = TREE_TYPE (t);
3083
3084 if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3085 {
3086 /* Turn this argument into a TYPE_ARGUMENT_PACK
3087 with a single element, which expands T. */
3088 tree vec = make_tree_vec (1);
3089 TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3090
3091 t = make_node (TYPE_ARGUMENT_PACK);
3092 SET_ARGUMENT_PACK_ARGS (t, vec);
3093 }
3094 }
3095 else
3096 {
3097 t = DECL_INITIAL (t);
3098
3099 if (TEMPLATE_PARM_PARAMETER_PACK (t))
3100 {
3101 /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3102 with a single element, which expands T. */
3103 tree vec = make_tree_vec (1);
3104 tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3105 TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3106
3107 t = make_node (NONTYPE_ARGUMENT_PACK);
3108 SET_ARGUMENT_PACK_ARGS (t, vec);
3109 TREE_TYPE (t) = type;
3110 }
3111 }
3112 }
36a117a5 3113 TREE_VEC_ELT (a, i) = t;
98c1c668 3114 }
5566b478 3115 }
36a117a5
MM
3116
3117 if (length > 1)
3118 TREE_VEC_ELT (args, --l) = a;
3119 else
3120 args = a;
8d08fdba
MS
3121 }
3122
9a3b49ac
MS
3123 return args;
3124}
75650646 3125
e1467ff2 3126/* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
c7222c02 3127 template PARMS. If MEMBER_TEMPLATE_P is true, the new template is
ee81147e 3128 a member template. Used by push_template_decl below. */
e1467ff2 3129
75650646 3130static tree
c7222c02 3131build_template_decl (tree decl, tree parms, bool member_template_p)
75650646
MM
3132{
3133 tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
3134 DECL_TEMPLATE_PARMS (tmpl) = parms;
3135 DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
c7222c02 3136 DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
75650646
MM
3137 if (DECL_LANG_SPECIFIC (decl))
3138 {
8f032717
MM
3139 DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
3140 DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
c8460010 3141 DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
11f98788 3142 DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
1f6e1acc
AS
3143 DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
3144 if (DECL_OVERLOADED_OPERATOR_P (decl))
c8094d83 3145 SET_OVERLOADED_OPERATOR_CODE (tmpl,
1f6e1acc 3146 DECL_OVERLOADED_OPERATOR_P (decl));
75650646
MM
3147 }
3148
3149 return tmpl;
3150}
3151
050367a3
MM
3152struct template_parm_data
3153{
6c30752f
MM
3154 /* The level of the template parameters we are currently
3155 processing. */
050367a3 3156 int level;
6c30752f
MM
3157
3158 /* The index of the specialization argument we are currently
3159 processing. */
3160 int current_arg;
3161
3162 /* An array whose size is the number of template parameters. The
838dfd8a 3163 elements are nonzero if the parameter has been used in any one
6c30752f 3164 of the arguments processed so far. */
050367a3 3165 int* parms;
6c30752f
MM
3166
3167 /* An array whose size is the number of template arguments. The
838dfd8a 3168 elements are nonzero if the argument makes use of template
6c30752f
MM
3169 parameters of this level. */
3170 int* arg_uses_template_parms;
050367a3
MM
3171};
3172
3173/* Subroutine of push_template_decl used to see if each template
3174 parameter in a partial specialization is used in the explicit
3175 argument list. If T is of the LEVEL given in DATA (which is
3176 treated as a template_parm_data*), then DATA->PARMS is marked
3177 appropriately. */
3178
3179static int
3a978d72 3180mark_template_parm (tree t, void* data)
050367a3
MM
3181{
3182 int level;
3183 int idx;
3184 struct template_parm_data* tpd = (struct template_parm_data*) data;
3185
3186 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3187 {
3188 level = TEMPLATE_PARM_LEVEL (t);
3189 idx = TEMPLATE_PARM_IDX (t);
3190 }
3191 else
3192 {
3193 level = TEMPLATE_TYPE_LEVEL (t);
3194 idx = TEMPLATE_TYPE_IDX (t);
3195 }
3196
3197 if (level == tpd->level)
6c30752f
MM
3198 {
3199 tpd->parms[idx] = 1;
3200 tpd->arg_uses_template_parms[tpd->current_arg] = 1;
3201 }
050367a3
MM
3202
3203 /* Return zero so that for_each_template_parm will continue the
3204 traversal of the tree; we want to mark *every* template parm. */
3205 return 0;
3206}
3207
6c30752f
MM
3208/* Process the partial specialization DECL. */
3209
e9659ab0 3210static tree
3a978d72 3211process_partial_specialization (tree decl)
6c30752f
MM
3212{
3213 tree type = TREE_TYPE (decl);
3214 tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
3215 tree specargs = CLASSTYPE_TI_ARGS (type);
f9a7ae04 3216 tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
6c30752f
MM
3217 tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3218 tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
3219 int nargs = TREE_VEC_LENGTH (inner_args);
3220 int ntparms = TREE_VEC_LENGTH (inner_parms);
3221 int i;
3222 int did_error_intro = 0;
6c30752f
MM
3223 struct template_parm_data tpd;
3224 struct template_parm_data tpd2;
3225
6c30752f
MM
3226 /* We check that each of the template parameters given in the
3227 partial specialization is used in the argument list to the
3228 specialization. For example:
3229
3230 template <class T> struct S;
3231 template <class T> struct S<T*>;
3232
3233 The second declaration is OK because `T*' uses the template
3234 parameter T, whereas
3235
3236 template <class T> struct S<int>;
3237
3238 is no good. Even trickier is:
3239
3240 template <class T>
3241 struct S1
3242 {
3243 template <class U>
3244 struct S2;
3245 template <class U>
3246 struct S2<T>;
3247 };
3248
0e339752 3249 The S2<T> declaration is actually invalid; it is a
c8094d83 3250 full-specialization. Of course,
6c30752f
MM
3251
3252 template <class U>
3253 struct S2<T (*)(U)>;
3254
3255 or some such would have been OK. */
3256 tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
67f5655f 3257 tpd.parms = (int *) alloca (sizeof (int) * ntparms);
fad205ff 3258 memset (tpd.parms, 0, sizeof (int) * ntparms);
6c30752f 3259
67f5655f 3260 tpd.arg_uses_template_parms = (int *) alloca (sizeof (int) * nargs);
fad205ff 3261 memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
6c30752f
MM
3262 for (i = 0; i < nargs; ++i)
3263 {
3264 tpd.current_arg = i;
3265 for_each_template_parm (TREE_VEC_ELT (inner_args, i),
3266 &mark_template_parm,
4f2c9d7e
MM
3267 &tpd,
3268 NULL);
6c30752f
MM
3269 }
3270 for (i = 0; i < ntparms; ++i)
3271 if (tpd.parms[i] == 0)
3272 {
3273 /* One of the template parms was not used in the
f9a7ae04 3274 specialization. */
6c30752f
MM
3275 if (!did_error_intro)
3276 {
33bd39a2 3277 error ("template parameters not used in partial specialization:");
6c30752f
MM
3278 did_error_intro = 1;
3279 }
3280
0f51ccfc 3281 error (" %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
6c30752f
MM
3282 }
3283
3284 /* [temp.class.spec]
3285
3286 The argument list of the specialization shall not be identical to
3287 the implicit argument list of the primary template. */
c8094d83
MS
3288 if (comp_template_args
3289 (inner_args,
f9a7ae04
MM
3290 INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
3291 (maintmpl)))))
0f51ccfc 3292 error ("partial specialization %qT does not specialize any template arguments", type);
6c30752f
MM
3293
3294 /* [temp.class.spec]
3295
3296 A partially specialized non-type argument expression shall not
3297 involve template parameters of the partial specialization except
3298 when the argument expression is a simple identifier.
3299
3300 The type of a template parameter corresponding to a specialized
3301 non-type argument shall not be dependent on a parameter of the
5d80a306
DG
3302 specialization.
3303
3304 Also, we verify that pack expansions only occur at the
3305 end of the argument list. */
50bc768d 3306 gcc_assert (nargs == DECL_NTPARMS (maintmpl));
6c30752f
MM
3307 tpd2.parms = 0;
3308 for (i = 0; i < nargs; ++i)
3309 {
5d80a306 3310 tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
6c30752f 3311 tree arg = TREE_VEC_ELT (inner_args, i);
5d80a306
DG
3312 tree packed_args = NULL_TREE;
3313 int j, len = 1;
6c30752f 3314
5d80a306
DG
3315 if (ARGUMENT_PACK_P (arg))
3316 {
3317 /* Extract the arguments from the argument pack. We'll be
3318 iterating over these in the following loop. */
3319 packed_args = ARGUMENT_PACK_ARGS (arg);
3320 len = TREE_VEC_LENGTH (packed_args);
3321 }
3322
3323 for (j = 0; j < len; j++)
3324 {
3325 if (packed_args)
3326 /* Get the Jth argument in the parameter pack. */
3327 arg = TREE_VEC_ELT (packed_args, j);
3328
3329 if (PACK_EXPANSION_P (arg))
3330 {
3331 /* Pack expansions must come at the end of the
3332 argument list. */
3333 if ((packed_args && j < len - 1)
3334 || (!packed_args && i < nargs - 1))
3335 {
3336 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3337 error ("parameter pack argument %qE must be at the end of the template argument list", arg);
3338 else
3339 error ("parameter pack argument %qT must be at the end of the template argument list", arg);
3340 }
3341 }
3342
3343 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3344 /* We only care about the pattern. */
3345 arg = PACK_EXPANSION_PATTERN (arg);
3346
3347 if (/* These first two lines are the `non-type' bit. */
3348 !TYPE_P (arg)
3349 && TREE_CODE (arg) != TEMPLATE_DECL
3350 /* This next line is the `argument expression is not just a
3351 simple identifier' condition and also the `specialized
3352 non-type argument' bit. */
3353 && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
3354 {
3355 if ((!packed_args && tpd.arg_uses_template_parms[i])
3356 || (packed_args && uses_template_parms (arg)))
3357 error ("template argument %qE involves template parameter(s)",
3358 arg);
3359 else
3360 {
3361 /* Look at the corresponding template parameter,
3362 marking which template parameters its type depends
3363 upon. */
3364 tree type = TREE_TYPE (parm);
3365
3366 if (!tpd2.parms)
3367 {
3368 /* We haven't yet initialized TPD2. Do so now. */
3369 tpd2.arg_uses_template_parms
3370 = (int *) alloca (sizeof (int) * nargs);
3371 /* The number of parameters here is the number in the
3372 main template, which, as checked in the assertion
3373 above, is NARGS. */
3374 tpd2.parms = (int *) alloca (sizeof (int) * nargs);
3375 tpd2.level =
3376 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
3377 }
3378
3379 /* Mark the template parameters. But this time, we're
3380 looking for the template parameters of the main
3381 template, not in the specialization. */
3382 tpd2.current_arg = i;
3383 tpd2.arg_uses_template_parms[i] = 0;
3384 memset (tpd2.parms, 0, sizeof (int) * nargs);
3385 for_each_template_parm (type,
3386 &mark_template_parm,
3387 &tpd2,
3388 NULL);
3389
3390 if (tpd2.arg_uses_template_parms [i])
3391 {
3392 /* The type depended on some template parameters.
3393 If they are fully specialized in the
3394 specialization, that's OK. */
3395 int j;
3396 for (j = 0; j < nargs; ++j)
3397 if (tpd2.parms[j] != 0
3398 && tpd.arg_uses_template_parms [j])
3399 {
3400 error ("type %qT of template argument %qE depends "
3401 "on template parameter(s)",
3402 type,
3403 arg);
3404 break;
3405 }
3406 }
3407 }
3408 }
3409 }
6c30752f
MM
3410 }
3411
c8094d83 3412 if (retrieve_specialization (maintmpl, specargs,
c7222c02 3413 /*class_specializations_p=*/true))
6c30752f
MM
3414 /* We've already got this specialization. */
3415 return decl;
3416
d8b64f80 3417 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
916b63c3 3418 = tree_cons (specargs, inner_parms,
b1d7b1c0 3419 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
6c30752f
MM
3420 TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
3421 return decl;
3422}
3423
6ba89f8e
MM
3424/* Check that a template declaration's use of default arguments is not
3425 invalid. Here, PARMS are the template parameters. IS_PRIMARY is
838dfd8a 3426 nonzero if DECL is the thing declared by a primary template.
9b7dd5e8
DG
3427 IS_PARTIAL is nonzero if DECL is a partial specialization.
3428
6ba89f8e 3429
9b7dd5e8
DG
3430 IS_FRIEND_DECL is nonzero if DECL is a friend function template
3431 declaration (but not a definition); 1 indicates a declaration, 2
3432 indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
3433 emitted for extraneous default arguments.
3434
3435 Returns TRUE if there were no errors found, FALSE otherwise. */
3436
3437bool
3438check_default_tmpl_args (tree decl, tree parms, int is_primary,
3439 int is_partial, int is_friend_decl)
6ba89f8e 3440{
d8e178a0 3441 const char *msg;
66191c20
MM
3442 int last_level_to_check;
3443 tree parm_level;
9b7dd5e8 3444 bool no_errors = true;
6ba89f8e 3445
c8094d83 3446 /* [temp.param]
6ba89f8e
MM
3447
3448 A default template-argument shall not be specified in a
3449 function template declaration or a function template definition, nor
3450 in the template-parameter-list of the definition of a member of a
3451 class template. */
3452
4f1c5b7d 3453 if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
e0942dcd
MM
3454 /* You can't have a function template declaration in a local
3455 scope, nor you can you define a member of a class template in a
3456 local scope. */
9b7dd5e8 3457 return true;
e0942dcd 3458
6ba89f8e
MM
3459 if (current_class_type
3460 && !TYPE_BEING_DEFINED (current_class_type)
3d7de1fa 3461 && DECL_LANG_SPECIFIC (decl)
5937a6f9
MM
3462 /* If this is either a friend defined in the scope of the class
3463 or a member function. */
6df5158a
NS
3464 && (DECL_FUNCTION_MEMBER_P (decl)
3465 ? same_type_p (DECL_CONTEXT (decl), current_class_type)
3466 : DECL_FRIEND_CONTEXT (decl)
3467 ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
3468 : false)
5937a6f9
MM
3469 /* And, if it was a member function, it really was defined in
3470 the scope of the class. */
6df5158a
NS
3471 && (!DECL_FUNCTION_MEMBER_P (decl)
3472 || DECL_INITIALIZED_IN_CLASS_P (decl)))
6ba89f8e 3473 /* We already checked these parameters when the template was
5937a6f9
MM
3474 declared, so there's no need to do it again now. This function
3475 was defined in class scope, but we're processing it's body now
3476 that the class is complete. */
9b7dd5e8 3477 return true;
c8094d83 3478
9b7dd5e8
DG
3479 /* Core issue 226 (C++0x only): the following only applies to class
3480 templates. */
c1ae8be5 3481 if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
66191c20 3482 {
9b7dd5e8 3483 /* [temp.param]
66191c20 3484
9b7dd5e8
DG
3485 If a template-parameter has a default template-argument, all
3486 subsequent template-parameters shall have a default
3487 template-argument supplied. */
3488 for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
3489 {
3490 tree inner_parms = TREE_VALUE (parm_level);
3491 int ntparms = TREE_VEC_LENGTH (inner_parms);
3492 int seen_def_arg_p = 0;
3493 int i;
42b304f1 3494
9b7dd5e8
DG
3495 for (i = 0; i < ntparms; ++i)
3496 {
3497 tree parm = TREE_VEC_ELT (inner_parms, i);
42b304f1 3498
9b7dd5e8
DG
3499 if (parm == error_mark_node)
3500 continue;
3501
3502 if (TREE_PURPOSE (parm))
3503 seen_def_arg_p = 1;
3504 else if (seen_def_arg_p)
3505 {
3506 error ("no default argument for %qD", TREE_VALUE (parm));
3507 /* For better subsequent error-recovery, we indicate that
3508 there should have been a default argument. */
3509 TREE_PURPOSE (parm) = error_mark_node;
3510 no_errors = false;
3511 }
3512 }
3513 }
66191c20
MM
3514 }
3515
c1ae8be5 3516 if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
9b7dd5e8
DG
3517 || is_partial
3518 || !is_primary
3519 || is_friend_decl)
6ba89f8e
MM
3520 /* For an ordinary class template, default template arguments are
3521 allowed at the innermost level, e.g.:
0cbd7506 3522 template <class T = int>
6ba89f8e
MM
3523 struct S {};
3524 but, in a partial specialization, they're not allowed even
3525 there, as we have in [temp.class.spec]:
c8094d83 3526
6ba89f8e 3527 The template parameter list of a specialization shall not
c8094d83 3528 contain default template argument values.
6ba89f8e 3529
9b7dd5e8
DG
3530 So, for a partial specialization, or for a function template
3531 (in C++98/C++03), we look at all of them. */
6ba89f8e
MM
3532 ;
3533 else
3534 /* But, for a primary class template that is not a partial
3535 specialization we look at all template parameters except the
3536 innermost ones. */
3537 parms = TREE_CHAIN (parms);
3538
3539 /* Figure out what error message to issue. */
9b7dd5e8
DG
3540 if (is_friend_decl == 2)
3541 msg = "default template arguments may not be used in function template friend re-declaration";
3542 else if (is_friend_decl)
3543 msg = "default template arguments may not be used in function template friend declarations";
c1ae8be5 3544 else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
8653a2c3 3545 msg = "default template arguments may not be used in function templates";
6ba89f8e 3546 else if (is_partial)
8653a2c3 3547 msg = "default template arguments may not be used in partial specializations";
6ba89f8e 3548 else
0f51ccfc 3549 msg = "default argument for template parameter for class enclosing %qD";
6ba89f8e
MM
3550
3551 if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
3552 /* If we're inside a class definition, there's no need to
104bf76a 3553 examine the parameters to the class itself. On the one
6ba89f8e 3554 hand, they will be checked when the class is defined, and,
0e339752 3555 on the other, default arguments are valid in things like:
0cbd7506
MS
3556 template <class T = double>
3557 struct S { template <class U> void f(U); };
6ba89f8e
MM
3558 Here the default argument for `S' has no bearing on the
3559 declaration of `f'. */
3560 last_level_to_check = template_class_depth (current_class_type) + 1;
3561 else
3562 /* Check everything. */
3563 last_level_to_check = 0;
3564
c8094d83
MS
3565 for (parm_level = parms;
3566 parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
66191c20 3567 parm_level = TREE_CHAIN (parm_level))
6ba89f8e 3568 {
66191c20
MM
3569 tree inner_parms = TREE_VALUE (parm_level);
3570 int i;
3571 int ntparms;
6ba89f8e
MM
3572
3573 ntparms = TREE_VEC_LENGTH (inner_parms);
c8094d83 3574 for (i = 0; i < ntparms; ++i)
42b304f1
LM
3575 {
3576 if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
3577 continue;
6ba89f8e 3578
42b304f1
LM
3579 if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
3580 {
3581 if (msg)
3582 {
9b7dd5e8
DG
3583 no_errors = false;
3584 if (is_friend_decl == 2)
3585 return no_errors;
3586
42b304f1
LM
3587 error (msg, decl);
3588 msg = 0;
3589 }
3590
3591 /* Clear out the default argument so that we are not
3592 confused later. */
3593 TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
3594 }
3595 }
6ba89f8e
MM
3596
3597 /* At this point, if we're still interested in issuing messages,
3598 they must apply to classes surrounding the object declared. */
3599 if (msg)
c8094d83 3600 msg = "default argument for template parameter for class enclosing %qD";
6ba89f8e 3601 }
9b7dd5e8
DG
3602
3603 return no_errors;
6ba89f8e
MM
3604}
3605
5dd236e2
NS
3606/* Worker for push_template_decl_real, called via
3607 for_each_template_parm. DATA is really an int, indicating the
3608 level of the parameters we are interested in. If T is a template
838dfd8a 3609 parameter of that level, return nonzero. */
5dd236e2
NS
3610
3611static int
3a978d72 3612template_parm_this_level_p (tree t, void* data)
5dd236e2 3613{
6e04241f 3614 int this_level = *(int *)data;
5dd236e2
NS
3615 int level;
3616
3617 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3618 level = TEMPLATE_PARM_LEVEL (t);
3619 else
3620 level = TEMPLATE_TYPE_LEVEL (t);
3621 return level == this_level;
3622}
3623
3ac3d9ea 3624/* Creates a TEMPLATE_DECL for the indicated DECL using the template
f84b4be9
JM
3625 parameters given by current_template_args, or reuses a
3626 previously existing one, if appropriate. Returns the DECL, or an
c8094d83 3627 equivalent one, if it is replaced via a call to duplicate_decls.
6757edfe 3628
d63d5d0c 3629 If IS_FRIEND is true, DECL is a friend declaration. */
3ac3d9ea
MM
3630
3631tree
d63d5d0c 3632push_template_decl_real (tree decl, bool is_friend)
9a3b49ac
MS
3633{
3634 tree tmpl;
f84b4be9 3635 tree args;
9a3b49ac 3636 tree info;
f84b4be9
JM
3637 tree ctx;
3638 int primary;
6ba89f8e 3639 int is_partial;
cfe507be 3640 int new_template_p = 0;
c7222c02
MM
3641 /* True if the template is a member template, in the sense of
3642 [temp.mem]. */
3643 bool member_template_p = false;
6ba89f8e 3644
c0694c4b
MM
3645 if (decl == error_mark_node)
3646 return decl;
3647
6ba89f8e 3648 /* See if this is a partial specialization. */
9188c363 3649 is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
6ba89f8e 3650 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
370af2d5 3651 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
6757edfe 3652
d63d5d0c
ILT
3653 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
3654 is_friend = true;
f84b4be9
JM
3655
3656 if (is_friend)
3657 /* For a friend, we want the context of the friend function, not
3658 the type of which it is a friend. */
3659 ctx = DECL_CONTEXT (decl);
4f1c5b7d
MM
3660 else if (CP_DECL_CONTEXT (decl)
3661 && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
f84b4be9
JM
3662 /* In the case of a virtual function, we want the class in which
3663 it is defined. */
4f1c5b7d 3664 ctx = CP_DECL_CONTEXT (decl);
f84b4be9 3665 else
dc957d14 3666 /* Otherwise, if we're currently defining some class, the DECL
f84b4be9 3667 is assumed to be a member of the class. */
9188c363 3668 ctx = current_scope ();
f84b4be9 3669
2c73f9f5
ML
3670 if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
3671 ctx = NULL_TREE;
3672
3673 if (!DECL_CONTEXT (decl))
cb0dbb9a 3674 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2c73f9f5 3675
6ba89f8e 3676 /* See if this is a primary template. */
c9cbfca6
JM
3677 if (is_friend && ctx)
3678 /* A friend template that specifies a class context, i.e.
3679 template <typename T> friend void A<T>::f();
3680 is not primary. */
3681 primary = 0;
3682 else
3683 primary = template_parm_scope_p ();
9a3b49ac 3684
83566abf
JM
3685 if (primary)
3686 {
c7222c02
MM
3687 if (DECL_CLASS_SCOPE_P (decl))
3688 member_template_p = true;
2f1b1731
MM
3689 if (TREE_CODE (decl) == TYPE_DECL
3690 && ANON_AGGRNAME_P (DECL_NAME (decl)))
33bd39a2 3691 error ("template class without a name");
717a7d5d 3692 else if (TREE_CODE (decl) == FUNCTION_DECL)
4b0d3cbe 3693 {
717a7d5d
MM
3694 if (DECL_DESTRUCTOR_P (decl))
3695 {
3696 /* [temp.mem]
c8094d83 3697
0cbd7506 3698 A destructor shall not be a member template. */
0f51ccfc 3699 error ("destructor %qD declared as member template", decl);
717a7d5d
MM
3700 return error_mark_node;
3701 }
3702 if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
3703 && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
3704 || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
3705 || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
3706 || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
3707 == void_list_node)))
3708 {
c8094d83 3709 /* [basic.stc.dynamic.allocation]
717a7d5d 3710
0cbd7506 3711 An allocation function can be a function
717a7d5d
MM
3712 template. ... Template allocation functions shall
3713 have two or more parameters. */
0f51ccfc 3714 error ("invalid template declaration of %qD", decl);
7c60008e 3715 return error_mark_node;
717a7d5d 3716 }
4b0d3cbe 3717 }
8ca4bf25
MM
3718 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3719 && CLASS_TYPE_P (TREE_TYPE (decl)))
2aaf816d
JM
3720 /* OK */;
3721 else
11325dcd 3722 {
0f51ccfc 3723 error ("template declaration of %q#D", decl);
11325dcd
KL
3724 return error_mark_node;
3725 }
83566abf
JM
3726 }
3727
6ba89f8e
MM
3728 /* Check to see that the rules regarding the use of default
3729 arguments are not being violated. */
c8094d83 3730 check_default_tmpl_args (decl, current_template_parms,
9b7dd5e8 3731 primary, is_partial, /*is_friend_decl=*/0);
73aad9b9 3732
5d80a306
DG
3733 /* Ensure that there are no parameter packs in the type of this
3734 declaration that have not been expanded. */
b1d7b1c0
DG
3735 if (TREE_CODE (decl) == FUNCTION_DECL)
3736 {
3737 /* Check each of the arguments individually to see if there are
3738 any bare parameter packs. */
3739 tree type = TREE_TYPE (decl);
3740 tree arg = DECL_ARGUMENTS (decl);
3741 tree argtype = TYPE_ARG_TYPES (type);
3742
3743 while (arg && argtype)
3744 {
3745 if (!FUNCTION_PARAMETER_PACK_P (arg)
3746 && !check_for_bare_parameter_packs (TREE_TYPE (arg)))
3747 {
3748 /* This is a PARM_DECL that contains unexpanded parameter
3749 packs. We have already complained about this in the
3750 check_for_bare_parameter_packs call, so just replace
3751 these types with ERROR_MARK_NODE. */
3752 TREE_TYPE (arg) = error_mark_node;
3753 TREE_VALUE (argtype) = error_mark_node;
3754 }
3755
3756 arg = TREE_CHAIN (arg);
3757 argtype = TREE_CHAIN (argtype);
3758 }
3759
3760 /* Check for bare parameter packs in the return type and the
3761 exception specifiers. */
3762 check_for_bare_parameter_packs (TREE_TYPE (type));
3763 check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type));
3764 }
3765 else
3766 check_for_bare_parameter_packs (TREE_TYPE (decl));
5d80a306 3767
6ba89f8e
MM
3768 if (is_partial)
3769 return process_partial_specialization (decl);
d32789d8 3770
5d80a306
DG
3771 /* A primary class template can only have one parameter pack, at the
3772 end of the template parameter list. */
3773 if (primary && TREE_CODE (decl) == TYPE_DECL)
3774 {
3775 tree inner_parms
3776 = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3777 int i, len = TREE_VEC_LENGTH (inner_parms);
3778 for (i = 0; i < len - 1; i++)
3779 {
3780 tree parm = TREE_VALUE (TREE_VEC_ELT (inner_parms, i));
3781
3782 if (template_parameter_pack_p (parm))
3783 {
3784 if (TREE_CODE (parm) == PARM_DECL)
3785 error ("parameter pack %qE must be at the end of the"
3786 " template parameter list", parm);
3787 else
3788 error ("parameter pack %qT must be at the end of the"
3789 " template parameter list", TREE_TYPE (parm));
3790 }
3791 }
3792 }
3793
9a3b49ac
MS
3794 args = current_template_args ();
3795
c8094d83 3796 if (!ctx
f84b4be9 3797 || TREE_CODE (ctx) == FUNCTION_DECL
a723baf1 3798 || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
f84b4be9 3799 || (is_friend && !DECL_TEMPLATE_INFO (decl)))
8d08fdba 3800 {
75650646 3801 if (DECL_LANG_SPECIFIC (decl)
f84b4be9
JM
3802 && DECL_TEMPLATE_INFO (decl)
3803 && DECL_TI_TEMPLATE (decl))
3804 tmpl = DECL_TI_TEMPLATE (decl);
1c10870d
AS
3805 /* If DECL is a TYPE_DECL for a class-template, then there won't
3806 be DECL_LANG_SPECIFIC. The information equivalent to
3807 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead. */
c8094d83 3808 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
1c10870d
AS
3809 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3810 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3811 {
3812 /* Since a template declaration already existed for this
3813 class-type, we must be redeclaring it here. Make sure
0e339752 3814 that the redeclaration is valid. */
1c10870d
AS
3815 redeclare_class_template (TREE_TYPE (decl),
3816 current_template_parms);
3817 /* We don't need to create a new TEMPLATE_DECL; just use the
3818 one we already had. */
3819 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3820 }
f84b4be9 3821 else
786b5245 3822 {
c7222c02
MM
3823 tmpl = build_template_decl (decl, current_template_parms,
3824 member_template_p);
cfe507be
MM
3825 new_template_p = 1;
3826
f84b4be9
JM
3827 if (DECL_LANG_SPECIFIC (decl)
3828 && DECL_TEMPLATE_SPECIALIZATION (decl))
3829 {
3830 /* A specialization of a member template of a template
c6002625 3831 class. */
f84b4be9
JM
3832 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3833 DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
3834 DECL_TEMPLATE_INFO (decl) = NULL_TREE;
3835 }
786b5245 3836 }
8d08fdba
MS
3837 }
3838 else
3839 {
e1a5ccf7 3840 tree a, t, current, parms;
ba4f4e5d 3841 int i;
6633d636 3842
6b9ab5cc
MM
3843 if (TREE_CODE (decl) == TYPE_DECL)
3844 {
ed44da02
MM
3845 if ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (decl)))
3846 || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
3847 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3848 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3849 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
6b9ab5cc
MM
3850 else
3851 {
0f51ccfc 3852 error ("%qD does not declare a template type", decl);
6b9ab5cc
MM
3853 return decl;
3854 }
3855 }
f3368a90 3856 else if (!DECL_LANG_SPECIFIC (decl) || !DECL_TEMPLATE_INFO (decl))
c91a56d2 3857 {
0f51ccfc 3858 error ("template definition of non-template %q#D", decl);
3ac3d9ea 3859 return decl;
c91a56d2 3860 }
8d08fdba 3861 else
5566b478 3862 tmpl = DECL_TI_TEMPLATE (decl);
c8094d83 3863
c353b8e3 3864 if (DECL_FUNCTION_TEMPLATE_P (tmpl)
c8094d83 3865 && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
c353b8e3 3866 && DECL_TEMPLATE_SPECIALIZATION (decl)
c7222c02 3867 && DECL_MEMBER_TEMPLATE_P (tmpl))
98c1c668 3868 {
e1a5ccf7
JM
3869 tree new_tmpl;
3870
3871 /* The declaration is a specialization of a member
3872 template, declared outside the class. Therefore, the
3873 innermost template arguments will be NULL, so we
3874 replace them with the arguments determined by the
3875 earlier call to check_explicit_specialization. */
3876 args = DECL_TI_ARGS (decl);
3877
c8094d83 3878 new_tmpl
c7222c02
MM
3879 = build_template_decl (decl, current_template_parms,
3880 member_template_p);
e1a5ccf7
JM
3881 DECL_TEMPLATE_RESULT (new_tmpl) = decl;
3882 TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
3883 DECL_TI_TEMPLATE (decl) = new_tmpl;
3884 SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
c8094d83 3885 DECL_TEMPLATE_INFO (new_tmpl)
e1b3e07d 3886 = tree_cons (tmpl, args, NULL_TREE);
e1a5ccf7 3887
c8094d83
MS
3888 register_specialization (new_tmpl,
3889 most_general_template (tmpl),
d63d5d0c
ILT
3890 args,
3891 is_friend);
e1a5ccf7 3892 return decl;
98c1c668 3893 }
98c1c668 3894
e1a5ccf7 3895 /* Make sure the template headers we got make sense. */
6633d636 3896
e1a5ccf7
JM
3897 parms = DECL_TEMPLATE_PARMS (tmpl);
3898 i = TMPL_PARMS_DEPTH (parms);
3899 if (TMPL_ARGS_DEPTH (args) != i)
98c1c668 3900 {
0f51ccfc 3901 error ("expected %d levels of template parms for %q#D, got %d",
0cbd7506 3902 i, decl, TMPL_ARGS_DEPTH (args));
98c1c668 3903 }
e1a5ccf7
JM
3904 else
3905 for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
3906 {
3907 a = TMPL_ARGS_LEVEL (args, i);
3908 t = INNERMOST_TEMPLATE_PARMS (parms);
3909
3910 if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
3911 {
3912 if (current == decl)
0f51ccfc 3913 error ("got %d template parameters for %q#D",
0cbd7506 3914 TREE_VEC_LENGTH (a), decl);
e1a5ccf7 3915 else
0f51ccfc 3916 error ("got %d template parameters for %q#T",
0cbd7506 3917 TREE_VEC_LENGTH (a), current);
33bd39a2 3918 error (" but %d required", TREE_VEC_LENGTH (t));
f1cc0515 3919 return error_mark_node;
e1a5ccf7 3920 }
98c1c668 3921
e1a5ccf7 3922 /* Perhaps we should also check that the parms are used in the
0cbd7506 3923 appropriate qualifying scopes in the declarator? */
6633d636 3924
e1a5ccf7
JM
3925 if (current == decl)
3926 current = ctx;
3927 else
3928 current = TYPE_CONTEXT (current);
3929 }
5566b478 3930 }
8d08fdba 3931
5566b478
MS
3932 DECL_TEMPLATE_RESULT (tmpl) = decl;
3933 TREE_TYPE (tmpl) = TREE_TYPE (decl);
8d08fdba 3934
36a117a5
MM
3935 /* Push template declarations for global functions and types. Note
3936 that we do not try to push a global template friend declared in a
3937 template class; such a thing may well depend on the template
39c01e4c 3938 parameters of the class. */
c8094d83 3939 if (new_template_p && !ctx
36a117a5 3940 && !(is_friend && template_class_depth (current_class_type) > 0))
c6f9f83b 3941 {
d63d5d0c 3942 tmpl = pushdecl_namespace_level (tmpl, is_friend);
c6f9f83b
KL
3943 if (tmpl == error_mark_node)
3944 return error_mark_node;
bd3d082e
KL
3945
3946 /* Hide template friend classes that haven't been declared yet. */
3947 if (is_friend && TREE_CODE (decl) == TYPE_DECL)
3948 {
3949 DECL_ANTICIPATED (tmpl) = 1;
3950 DECL_FRIEND_P (tmpl) = 1;
3951 }
c6f9f83b 3952 }
8d08fdba 3953
5566b478 3954 if (primary)
5dd236e2
NS
3955 {
3956 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
3957 if (DECL_CONV_FN_P (tmpl))
3958 {
6e04241f
GS
3959 int depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
3960
5dd236e2
NS
3961 /* It is a conversion operator. See if the type converted to
3962 depends on innermost template operands. */
c8094d83 3963
d43f603d
KL
3964 if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
3965 depth))
5dd236e2
NS
3966 DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
3967 }
3968 }
5566b478 3969
a692ad2e 3970 /* The DECL_TI_ARGS of DECL contains full set of arguments referring
28ba38e3
KL
3971 back to its most general template. If TMPL is a specialization,
3972 ARGS may only have the innermost set of arguments. Add the missing
3973 argument levels if necessary. */
3974 if (DECL_TEMPLATE_INFO (tmpl))
3975 args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
3976
e1b3e07d 3977 info = tree_cons (tmpl, args, NULL_TREE);
5566b478 3978
9188c363 3979 if (DECL_IMPLICIT_TYPEDEF_P (decl))
a0ad3539 3980 SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
2aaf816d 3981 else if (DECL_LANG_SPECIFIC (decl))
5566b478 3982 DECL_TEMPLATE_INFO (decl) = info;
3ac3d9ea
MM
3983
3984 return DECL_TEMPLATE_RESULT (tmpl);
8d08fdba
MS
3985}
3986
6757edfe 3987tree
3a978d72 3988push_template_decl (tree decl)
6757edfe 3989{
d63d5d0c 3990 return push_template_decl_real (decl, false);
6757edfe
MM
3991}
3992
3993/* Called when a class template TYPE is redeclared with the indicated
3994 template PARMS, e.g.:
7fe6899f
MM
3995
3996 template <class T> struct S;
3997 template <class T> struct S {}; */
3998
60feef2c 3999bool
3a978d72 4000redeclare_class_template (tree type, tree parms)
7fe6899f 4001{
3d7de1fa 4002 tree tmpl;
6757edfe 4003 tree tmpl_parms;
7fe6899f
MM
4004 int i;
4005
3d7de1fa
MM
4006 if (!TYPE_TEMPLATE_INFO (type))
4007 {
0f51ccfc 4008 error ("%qT is not a template type", type);
60feef2c 4009 return false;
3d7de1fa
MM
4010 }
4011
4012 tmpl = TYPE_TI_TEMPLATE (type);
7fe6899f
MM
4013 if (!PRIMARY_TEMPLATE_P (tmpl))
4014 /* The type is nested in some template class. Nothing to worry
4015 about here; there are no new template parameters for the nested
4016 type. */
60feef2c 4017 return true;
7fe6899f 4018
ee921ddf
MM
4019 if (!parms)
4020 {
4021 error ("template specifiers not specified in declaration of %qD",
4022 tmpl);
60feef2c 4023 return false;
ee921ddf
MM
4024 }
4025
6757edfe
MM
4026 parms = INNERMOST_TEMPLATE_PARMS (parms);
4027 tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
4028
7fe6899f
MM
4029 if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
4030 {
dee15844 4031 error ("previous declaration %q+D", tmpl);
f49d8c52 4032 error ("used %d template parameter(s) instead of %d",
c8094d83 4033 TREE_VEC_LENGTH (tmpl_parms),
f49d8c52 4034 TREE_VEC_LENGTH (parms));
60feef2c 4035 return false;
7fe6899f
MM
4036 }
4037
4038 for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
4039 {
2d8ba2c7
LM
4040 tree tmpl_parm;
4041 tree parm;
4042 tree tmpl_default;
4043 tree parm_default;
4044
4045 if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
4046 || TREE_VEC_ELT (parms, i) == error_mark_node)
4047 continue;
4048
4049 tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
4050 parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4051 tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
4052 parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
7fe6899f 4053
2649701f
KL
4054 /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
4055 TEMPLATE_DECL. */
0f67a82f
LM
4056 if (tmpl_parm != error_mark_node
4057 && (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
4058 || (TREE_CODE (tmpl_parm) != TYPE_DECL
4059 && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))))
7fe6899f 4060 {
dee15844 4061 error ("template parameter %q+#D", tmpl_parm);
0f51ccfc 4062 error ("redeclared here as %q#D", parm);
60feef2c 4063 return false;
7fe6899f
MM
4064 }
4065
4066 if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
4067 {
4068 /* We have in [temp.param]:
4069
4070 A template-parameter may not be given default arguments
4071 by two different declarations in the same scope. */
0f51ccfc 4072 error ("redefinition of default argument for %q#D", parm);
ddd2d57e 4073 error ("%J original definition appeared here", tmpl_parm);
60feef2c 4074 return false;
7fe6899f
MM
4075 }
4076
4077 if (parm_default != NULL_TREE)
4078 /* Update the previous template parameters (which are the ones
4079 that will really count) with the new default value. */
4080 TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
7ce74c5e
MM
4081 else if (tmpl_default != NULL_TREE)
4082 /* Update the new parameters, too; they'll be used as the
4083 parameters for any members. */
4084 TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
7fe6899f 4085 }
60feef2c
LM
4086
4087 return true;
7fe6899f 4088}
75650646 4089
9baa27a9
MM
4090/* Simplify EXPR if it is a non-dependent expression. Returns the
4091 (possibly simplified) expression. */
4092
4093tree
4094fold_non_dependent_expr (tree expr)
4095{
d4a200d3
SM
4096 if (expr == NULL_TREE)
4097 return NULL_TREE;
4098
9baa27a9
MM
4099 /* If we're in a template, but EXPR isn't value dependent, simplify
4100 it. We're supposed to treat:
c8094d83 4101
9baa27a9
MM
4102 template <typename T> void f(T[1 + 1]);
4103 template <typename T> void f(T[2]);
c8094d83 4104
9baa27a9
MM
4105 as two declarations of the same function, for example. */
4106 if (processing_template_decl
4107 && !type_dependent_expression_p (expr)
7416ab02 4108 && !value_dependent_expression_p (expr))
9baa27a9
MM
4109 {
4110 HOST_WIDE_INT saved_processing_template_decl;
4111
4112 saved_processing_template_decl = processing_template_decl;
4113 processing_template_decl = 0;
4114 expr = tsubst_copy_and_build (expr,
4115 /*args=*/NULL_TREE,
4116 tf_error,
4117 /*in_decl=*/NULL_TREE,
015c2c66
MM
4118 /*function_p=*/false,
4119 /*integral_constant_expression_p=*/true);
9baa27a9
MM
4120 processing_template_decl = saved_processing_template_decl;
4121 }
4122 return expr;
4123}
4124
b6ab6892
GB
4125/* EXPR is an expression which is used in a constant-expression context.
4126 For instance, it could be a VAR_DECL with a constant initializer.
4127 Extract the innest constant expression.
c8094d83 4128
8a784e4a
NS
4129 This is basically a more powerful version of
4130 integral_constant_value, which can be used also in templates where
4131 initializers can maintain a syntactic rather than semantic form
4132 (even if they are non-dependent, for access-checking purposes). */
b6ab6892 4133
993acaec 4134static tree
b6ab6892
GB
4135fold_decl_constant_value (tree expr)
4136{
4ef69b83
GB
4137 tree const_expr = expr;
4138 do
b6ab6892 4139 {
b6ab6892 4140 expr = fold_non_dependent_expr (const_expr);
4ef69b83 4141 const_expr = integral_constant_value (expr);
b6ab6892 4142 }
4ef69b83 4143 while (expr != const_expr);
b6ab6892 4144
8a784e4a 4145 return expr;
b6ab6892
GB
4146}
4147
4148/* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
4149 must be a function or a pointer-to-function type, as specified
4150 in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
4151 and check that the resulting function has external linkage. */
4152
4153static tree
4154convert_nontype_argument_function (tree type, tree expr)
4155{
4156 tree fns = expr;
4157 tree fn, fn_no_ptr;
4158
4159 fn = instantiate_type (type, fns, tf_none);
4160 if (fn == error_mark_node)
4161 return error_mark_node;
4162
4163 fn_no_ptr = fn;
4164 if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
4165 fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
eff3a276
MM
4166 if (TREE_CODE (fn_no_ptr) == BASELINK)
4167 fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
4168
b6ab6892
GB
4169 /* [temp.arg.nontype]/1
4170
4171 A template-argument for a non-type, non-template template-parameter
4172 shall be one of:
4173 [...]
4174 -- the address of an object or function with external linkage. */
4175 if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
4176 {
4177 error ("%qE is not a valid template argument for type %qT "
4178 "because function %qD has not external linkage",
4179 expr, type, fn_no_ptr);
4180 return NULL_TREE;
4181 }
4182
4183 return fn;
4184}
4185
75650646
MM
4186/* Attempt to convert the non-type template parameter EXPR to the
4187 indicated TYPE. If the conversion is successful, return the
dc957d14 4188 converted value. If the conversion is unsuccessful, return
75650646
MM
4189 NULL_TREE if we issued an error message, or error_mark_node if we
4190 did not. We issue error messages for out-and-out bad template
4191 parameters, but not simply because the conversion failed, since we
9baa27a9 4192 might be just trying to do argument deduction. Both TYPE and EXPR
b6ab6892
GB
4193 must be non-dependent.
4194
4195 The conversion follows the special rules described in
4196 [temp.arg.nontype], and it is much more strict than an implicit
4197 conversion.
4198
4199 This function is called twice for each template argument (see
4200 lookup_template_class for a more accurate description of this
4201 problem). This means that we need to handle expressions which
4202 are not valid in a C++ source, but can be created from the
4203 first call (for instance, casts to perform conversions). These
4204 hacks can go away after we fix the double coercion problem. */
75650646
MM
4205
4206static tree
3a978d72 4207convert_nontype_argument (tree type, tree expr)
75650646 4208{
9baa27a9
MM
4209 tree expr_type;
4210
b6ab6892
GB
4211 /* Detect immediately string literals as invalid non-type argument.
4212 This special-case is not needed for correctness (we would easily
4213 catch this later), but only to provide better diagnostic for this
4214 common user mistake. As suggested by DR 100, we do not mention
4215 linkage issues in the diagnostic as this is not the point. */
4216 if (TREE_CODE (expr) == STRING_CST)
4217 {
4218 error ("%qE is not a valid template argument for type %qT "
4219 "because string literals can never be used in this context",
4220 expr, type);
4221 return NULL_TREE;
4222 }
4223
9baa27a9
MM
4224 /* If we are in a template, EXPR may be non-dependent, but still
4225 have a syntactic, rather than semantic, form. For example, EXPR
4226 might be a SCOPE_REF, rather than the VAR_DECL to which the
4227 SCOPE_REF refers. Preserving the qualifying scope is necessary
4228 so that access checking can be performed when the template is
4229 instantiated -- but here we need the resolved form so that we can
4230 convert the argument. */
4231 expr = fold_non_dependent_expr (expr);
b166a559
VR
4232 if (error_operand_p (expr))
4233 return error_mark_node;
9baa27a9 4234 expr_type = TREE_TYPE (expr);
75650646 4235
b6ab6892
GB
4236 /* HACK: Due to double coercion, we can get a
4237 NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
4238 which is the tree that we built on the first call (see
4239 below when coercing to reference to object or to reference to
4240 function). We just strip everything and get to the arg.
4241 See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
4242 for examples. */
4243 if (TREE_CODE (expr) == NOP_EXPR)
75650646 4244 {
b6ab6892 4245 if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
75650646 4246 {
b6ab6892
GB
4247 /* ??? Maybe we could use convert_from_reference here, but we
4248 would need to relax its constraints because the NOP_EXPR
4249 could actually change the type to something more cv-qualified,
4250 and this is not folded by convert_from_reference. */
4251 tree addr = TREE_OPERAND (expr, 0);
4252 gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
4253 gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
4254 gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
4255 gcc_assert (same_type_ignoring_top_level_qualifiers_p
4256 (TREE_TYPE (expr_type),
4257 TREE_TYPE (TREE_TYPE (addr))));
4258
4259 expr = TREE_OPERAND (addr, 0);
4260 expr_type = TREE_TYPE (expr);
75650646
MM
4261 }
4262
b6ab6892
GB
4263 /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
4264 parameter is a pointer to object, through decay and
4265 qualification conversion. Let's strip everything. */
4266 else if (TYPE_PTROBV_P (type))
75650646 4267 {
b6ab6892
GB
4268 STRIP_NOPS (expr);
4269 gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
4270 gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
4271 /* Skip the ADDR_EXPR only if it is part of the decay for
4272 an array. Otherwise, it is part of the original argument
4273 in the source code. */
4274 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
4275 expr = TREE_OPERAND (expr, 0);
4276 expr_type = TREE_TYPE (expr);
f3400fe2 4277 }
75650646 4278 }
c61dce3a 4279
b6ab6892 4280 /* [temp.arg.nontype]/5, bullet 1
75650646 4281
b6ab6892
GB
4282 For a non-type template-parameter of integral or enumeration type,
4283 integral promotions (_conv.prom_) and integral conversions
4284 (_conv.integral_) are applied. */
4285 if (INTEGRAL_TYPE_P (type))
75650646 4286 {
75650646
MM
4287 if (!INTEGRAL_TYPE_P (expr_type))
4288 return error_mark_node;
fddabb2c 4289
b6ab6892
GB
4290 expr = fold_decl_constant_value (expr);
4291 /* Notice that there are constant expressions like '4 % 0' which
4292 do not fold into integer constants. */
db02b6b9 4293 if (TREE_CODE (expr) != INTEGER_CST)
b6ab6892
GB
4294 {
4295 error ("%qE is not a valid template argument for type %qT "
4296 "because it is a non-constant expression", expr, type);
4297 return NULL_TREE;
4298 }
75650646 4299
b6ab6892
GB
4300 /* At this point, an implicit conversion does what we want,
4301 because we already know that the expression is of integral
4302 type. */
4303 expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
4304 if (expr == error_mark_node)
4305 return error_mark_node;
75650646 4306
b6ab6892
GB
4307 /* Conversion was allowed: fold it to a bare integer constant. */
4308 expr = fold (expr);
4309 }
4310 /* [temp.arg.nontype]/5, bullet 2
75650646 4311
b6ab6892
GB
4312 For a non-type template-parameter of type pointer to object,
4313 qualification conversions (_conv.qual_) and the array-to-pointer
4314 conversion (_conv.array_) are applied. */
4315 else if (TYPE_PTROBV_P (type))
4316 {
4317 /* [temp.arg.nontype]/1 (TC1 version, DR 49):
75650646 4318
b6ab6892
GB
4319 A template-argument for a non-type, non-template template-parameter
4320 shall be one of: [...]
75650646 4321
b6ab6892
GB
4322 -- the name of a non-type template-parameter;
4323 -- the address of an object or function with external linkage, [...]
4324 expressed as "& id-expression" where the & is optional if the name
4325 refers to a function or array, or if the corresponding
4326 template-parameter is a reference.
c8094d83 4327
b6ab6892
GB
4328 Here, we do not care about functions, as they are invalid anyway
4329 for a parameter of type pointer-to-object. */
1082fd10
MM
4330
4331 if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
4332 /* Non-type template parameters are OK. */
4333 ;
4334 else if (TREE_CODE (expr) != ADDR_EXPR
4335 && TREE_CODE (expr_type) != ARRAY_TYPE)
4336 {
4337 if (TREE_CODE (expr) == VAR_DECL)
4338 {
4339 error ("%qD is not a valid template argument "
4340 "because %qD is a variable, not the address of "
4341 "a variable",
4342 expr, expr);
4343 return NULL_TREE;
4344 }
4345 /* Other values, like integer constants, might be valid
4346 non-type arguments of some other type. */
4347 return error_mark_node;
4348 }
4349 else
4350 {
4351 tree decl;
4352
4353 decl = ((TREE_CODE (expr) == ADDR_EXPR)
4354 ? TREE_OPERAND (expr, 0) : expr);
4355 if (TREE_CODE (decl) != VAR_DECL)
4356 {
4357 error ("%qE is not a valid template argument of type %qT "
4358 "because %qE is not a variable",
4359 expr, type, decl);
4360 return NULL_TREE;
4361 }
4362 else if (!DECL_EXTERNAL_LINKAGE_P (decl))
4363 {
4364 error ("%qE is not a valid template argument of type %qT "
4365 "because %qD does not have external linkage",
4366 expr, type, decl);
4367 return NULL_TREE;
4368 }
4369 }
b6ab6892
GB
4370
4371 expr = decay_conversion (expr);
4372 if (expr == error_mark_node)
4373 return error_mark_node;
75650646 4374
b6ab6892
GB
4375 expr = perform_qualification_conversions (type, expr);
4376 if (expr == error_mark_node)
4377 return error_mark_node;
b6ab6892
GB
4378 }
4379 /* [temp.arg.nontype]/5, bullet 3
4380
4381 For a non-type template-parameter of type reference to object, no
4382 conversions apply. The type referred to by the reference may be more
4383 cv-qualified than the (otherwise identical) type of the
4384 template-argument. The template-parameter is bound directly to the
4385 template-argument, which must be an lvalue. */
4386 else if (TYPE_REF_OBJ_P (type))
4387 {
4388 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
4389 expr_type))
4390 return error_mark_node;
75650646 4391
b6ab6892
GB
4392 if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
4393 {
4394 error ("%qE is not a valid template argument for type %qT "
4395 "because of conflicts in cv-qualification", expr, type);
4396 return NULL_TREE;
4397 }
c8094d83 4398
b6ab6892
GB
4399 if (!real_lvalue_p (expr))
4400 {
4401 error ("%qE is not a valid template argument for type %qT "
944fd207 4402 "because it is not an lvalue", expr, type);
b6ab6892
GB
4403 return NULL_TREE;
4404 }
e6e174e5 4405
b6ab6892 4406 /* [temp.arg.nontype]/1
75650646 4407
b6ab6892
GB
4408 A template-argument for a non-type, non-template template-parameter
4409 shall be one of: [...]
75650646 4410
03fd3f84 4411 -- the address of an object or function with external linkage. */
b6ab6892
GB
4412 if (!DECL_EXTERNAL_LINKAGE_P (expr))
4413 {
4414 error ("%qE is not a valid template argument for type %qT "
4415 "because object %qD has not external linkage",
4416 expr, type, expr);
4417 return NULL_TREE;
4418 }
0dc09a61 4419
b6ab6892
GB
4420 expr = build_nop (type, build_address (expr));
4421 }
4422 /* [temp.arg.nontype]/5, bullet 4
4423
4424 For a non-type template-parameter of type pointer to function, only
4425 the function-to-pointer conversion (_conv.func_) is applied. If the
4426 template-argument represents a set of overloaded functions (or a
4427 pointer to such), the matching function is selected from the set
4428 (_over.over_). */
4429 else if (TYPE_PTRFN_P (type))
4430 {
4431 /* If the argument is a template-id, we might not have enough
2c164de6 4432 context information to decay the pointer. */
b6ab6892
GB
4433 if (!type_unknown_p (expr_type))
4434 {
4435 expr = decay_conversion (expr);
4436 if (expr == error_mark_node)
4437 return error_mark_node;
4438 }
75650646 4439
b6ab6892
GB
4440 expr = convert_nontype_argument_function (type, expr);
4441 if (!expr || expr == error_mark_node)
4442 return expr;
4443 }
4444 /* [temp.arg.nontype]/5, bullet 5
75650646 4445
b6ab6892
GB
4446 For a non-type template-parameter of type reference to function, no
4447 conversions apply. If the template-argument represents a set of
4448 overloaded functions, the matching function is selected from the set
4449 (_over.over_). */
4450 else if (TYPE_REFFN_P (type))
4451 {
4452 if (TREE_CODE (expr) == ADDR_EXPR)
4453 {
4454 error ("%qE is not a valid template argument for type %qT "
4455 "because it is a pointer", expr, type);
4456 inform ("try using %qE instead", TREE_OPERAND (expr, 0));
4457 return NULL_TREE;
4458 }
75650646 4459
b6ab6892
GB
4460 expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
4461 if (!expr || expr == error_mark_node)
4462 return expr;
75650646 4463
7866705a 4464 expr = build_nop (type, build_address (expr));
b6ab6892
GB
4465 }
4466 /* [temp.arg.nontype]/5, bullet 6
75650646 4467
b6ab6892
GB
4468 For a non-type template-parameter of type pointer to member function,
4469 no conversions apply. If the template-argument represents a set of
4470 overloaded member functions, the matching member function is selected
4471 from the set (_over.over_). */
4472 else if (TYPE_PTRMEMFUNC_P (type))
4473 {
4474 expr = instantiate_type (type, expr, tf_none);
4475 if (expr == error_mark_node)
4476 return error_mark_node;
75650646 4477
b6ab6892
GB
4478 /* There is no way to disable standard conversions in
4479 resolve_address_of_overloaded_function (called by
4480 instantiate_type). It is possible that the call succeeded by
4481 converting &B::I to &D::I (where B is a base of D), so we need
4482 to reject this conversion here.
75650646 4483
b6ab6892
GB
4484 Actually, even if there was a way to disable standard conversions,
4485 it would still be better to reject them here so that we can
4486 provide a superior diagnostic. */
4487 if (!same_type_p (TREE_TYPE (expr), type))
4488 {
4489 /* Make sure we are just one standard conversion off. */
4490 gcc_assert (can_convert (type, TREE_TYPE (expr)));
4491 error ("%qE is not a valid template argument for type %qT "
4492 "because it is of type %qT", expr, type,
4493 TREE_TYPE (expr));
4494 inform ("standard conversions are not allowed in this context");
4495 return NULL_TREE;
4496 }
4497 }
4498 /* [temp.arg.nontype]/5, bullet 7
59e7a901 4499
b6ab6892
GB
4500 For a non-type template-parameter of type pointer to data member,
4501 qualification conversions (_conv.qual_) are applied. */
4502 else if (TYPE_PTRMEM_P (type))
4503 {
4504 expr = perform_qualification_conversions (type, expr);
4505 if (expr == error_mark_node)
75650646 4506 return expr;
75650646 4507 }
b6ab6892
GB
4508 /* A template non-type parameter must be one of the above. */
4509 else
4510 gcc_unreachable ();
75650646 4511
b6ab6892
GB
4512 /* Sanity check: did we actually convert the argument to the
4513 right type? */
4514 gcc_assert (same_type_p (type, TREE_TYPE (expr)));
4515 return expr;
75650646
MM
4516}
4517
b6ab6892 4518
c8094d83
MS
4519/* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
4520 template template parameters. Both PARM_PARMS and ARG_PARMS are
4521 vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
744fac59 4522 or PARM_DECL.
c8094d83 4523
744fac59 4524 Consider the example:
e7e93965
MM
4525 template <class T> class A;
4526 template<template <class U> class TT> class B;
744fac59 4527
e7e93965
MM
4528 For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
4529 the parameters to A, and OUTER_ARGS contains A. */
744fac59
KL
4530
4531static int
c8094d83 4532coerce_template_template_parms (tree parm_parms,
0cbd7506
MS
4533 tree arg_parms,
4534 tsubst_flags_t complain,
3a978d72 4535 tree in_decl,
0cbd7506 4536 tree outer_args)
744fac59
KL
4537{
4538 int nparms, nargs, i;
4539 tree parm, arg;
4540
50bc768d
NS
4541 gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
4542 gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
744fac59
KL
4543
4544 nparms = TREE_VEC_LENGTH (parm_parms);
4545 nargs = TREE_VEC_LENGTH (arg_parms);
4546
e7e93965 4547 if (nargs != nparms)
744fac59
KL
4548 return 0;
4549
4550 for (i = 0; i < nparms; ++i)
4551 {
2d8ba2c7
LM
4552 if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
4553 || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
42b304f1
LM
4554 continue;
4555
744fac59
KL
4556 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
4557 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
4558
4559 if (arg == NULL_TREE || arg == error_mark_node
0cbd7506 4560 || parm == NULL_TREE || parm == error_mark_node)
744fac59
KL
4561 return 0;
4562
4563 if (TREE_CODE (arg) != TREE_CODE (parm))
0cbd7506 4564 return 0;
744fac59
KL
4565
4566 switch (TREE_CODE (parm))
4567 {
744fac59
KL
4568 case TEMPLATE_DECL:
4569 /* We encounter instantiations of templates like
4570 template <template <template <class> class> class TT>
4571 class C; */
700466c2
JM
4572 {
4573 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4574 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
4575
8c6ab2db
NS
4576 if (!coerce_template_template_parms
4577 (parmparm, argparm, complain, in_decl, outer_args))
700466c2
JM
4578 return 0;
4579 }
5d80a306
DG
4580 /* Fall through. */
4581
4582 case TYPE_DECL:
4583 if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))
4584 != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg)))
4585 /* One is a parameter pack, the other is not. */
4586 return 0;
700466c2 4587 break;
744fac59
KL
4588
4589 case PARM_DECL:
4590 /* The tsubst call is used to handle cases such as
00bdb87f
KL
4591
4592 template <int> class C {};
4593 template <class T, template <T> class TT> class D {};
4594 D<int, C> d;
4595
744fac59 4596 i.e. the parameter list of TT depends on earlier parameters. */
00bdb87f
KL
4597 if (!dependent_type_p (TREE_TYPE (arg))
4598 && !same_type_p
4599 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
4600 TREE_TYPE (arg)))
744fac59 4601 return 0;
5d80a306
DG
4602
4603 if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
4604 != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg)))
4605 /* One is a parameter pack, the other is not. */
4606 return 0;
744fac59 4607 break;
c8094d83 4608
744fac59 4609 default:
315fb5db 4610 gcc_unreachable ();
744fac59
KL
4611 }
4612 }
4613 return 1;
4614}
4615
8b5b8b7c
MM
4616/* Convert the indicated template ARG as necessary to match the
4617 indicated template PARM. Returns the converted ARG, or
c2ea3a40
NS
4618 error_mark_node if the conversion was unsuccessful. Error and
4619 warning messages are issued under control of COMPLAIN. This
4620 conversion is for the Ith parameter in the parameter list. ARGS is
4621 the full set of template arguments deduced so far. */
8b5b8b7c
MM
4622
4623static tree
c8094d83 4624convert_template_argument (tree parm,
0cbd7506
MS
4625 tree arg,
4626 tree args,
4627 tsubst_flags_t complain,
4628 int i,
4629 tree in_decl)
8b5b8b7c
MM
4630{
4631 tree val;
8b5b8b7c 4632 int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
5d80a306 4633 tree check_arg = arg;
c8094d83 4634
c8094d83 4635 if (TREE_CODE (arg) == TREE_LIST
a5ac359a 4636 && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
c8094d83 4637 {
8b5b8b7c
MM
4638 /* The template argument was the name of some
4639 member function. That's usually
0e339752 4640 invalid, but static members are OK. In any
8b5b8b7c
MM
4641 case, grab the underlying fields/functions
4642 and issue an error later if required. */
4643 arg = TREE_VALUE (arg);
4644 TREE_TYPE (arg) = unknown_type_node;
4645 }
4646
4647 requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
4648 requires_type = (TREE_CODE (parm) == TYPE_DECL
4649 || requires_tmpl_type);
4650
5d80a306
DG
4651 /* When determining whether a argument pack expansion is a template,
4652 look at the pattern. */
4653 if (TREE_CODE (check_arg) == TYPE_PACK_EXPANSION)
4654 check_arg = PACK_EXPANSION_PATTERN (check_arg);
4655
4656 is_tmpl_type =
4657 ((TREE_CODE (check_arg) == TEMPLATE_DECL
4658 && TREE_CODE (DECL_TEMPLATE_RESULT (check_arg)) == TYPE_DECL)
4659 || TREE_CODE (check_arg) == TEMPLATE_TEMPLATE_PARM
4660 || TREE_CODE (check_arg) == UNBOUND_CLASS_TEMPLATE);
c8094d83 4661
b8c6534b
KL
4662 if (is_tmpl_type
4663 && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4664 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
8b5b8b7c 4665 arg = TYPE_STUB_DECL (arg);
8b5b8b7c 4666
2f939d94 4667 is_type = TYPE_P (arg) || is_tmpl_type;
8b5b8b7c
MM
4668
4669 if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
4670 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
4671 {
0f51ccfc 4672 pedwarn ("to refer to a type member of a template parameter, "
0cbd7506 4673 "use %<typename %E%>", arg);
c8094d83 4674
8b5b8b7c 4675 arg = make_typename_type (TREE_OPERAND (arg, 0),
3baa501d 4676 TREE_OPERAND (arg, 1),
fc6a28d7 4677 typename_type,
c2ea3a40 4678 complain & tf_error);
8b5b8b7c
MM
4679 is_type = 1;
4680 }
4681 if (is_type != requires_type)
4682 {
4683 if (in_decl)
4684 {
c2ea3a40 4685 if (complain & tf_error)
8b5b8b7c 4686 {
0f51ccfc 4687 error ("type/value mismatch at argument %d in template "
0cbd7506
MS
4688 "parameter list for %qD",
4689 i + 1, in_decl);
8b5b8b7c 4690 if (is_type)
0f51ccfc 4691 error (" expected a constant of type %qT, got %qT",
0cbd7506
MS
4692 TREE_TYPE (parm),
4693 (is_tmpl_type ? DECL_NAME (arg) : arg));
d12a7283 4694 else if (requires_tmpl_type)
0f51ccfc 4695 error (" expected a class template, got %qE", arg);
8b5b8b7c 4696 else
0f51ccfc 4697 error (" expected a type, got %qE", arg);
8b5b8b7c
MM
4698 }
4699 }
4700 return error_mark_node;
4701 }
4702 if (is_tmpl_type ^ requires_tmpl_type)
4703 {
c2ea3a40 4704 if (in_decl && (complain & tf_error))
8b5b8b7c 4705 {
0f51ccfc 4706 error ("type/value mismatch at argument %d in template "
0cbd7506
MS
4707 "parameter list for %qD",
4708 i + 1, in_decl);
8b5b8b7c 4709 if (is_tmpl_type)
0f51ccfc 4710 error (" expected a type, got %qT", DECL_NAME (arg));
8b5b8b7c 4711 else
0f51ccfc 4712 error (" expected a class template, got %qT", arg);
8b5b8b7c
MM
4713 }
4714 return error_mark_node;
4715 }
c8094d83 4716
8b5b8b7c
MM
4717 if (is_type)
4718 {
4719 if (requires_tmpl_type)
4720 {
b8c6534b
KL
4721 if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
4722 /* The number of argument required is not known yet.
4723 Just accept it for now. */
4724 val = TREE_TYPE (arg);
8b5b8b7c
MM
4725 else
4726 {
b8c6534b 4727 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
5d80a306
DG
4728 tree argparm;
4729
4730 check_arg = arg;
4731 /* When determining whether a pack expansion is a template,
4732 look at the pattern. */
4733 if (TREE_CODE (check_arg) == TYPE_PACK_EXPANSION)
4734 check_arg = PACK_EXPANSION_PATTERN (check_arg);
4735
4736 argparm = DECL_INNERMOST_TEMPLATE_PARMS (check_arg);
b8c6534b
KL
4737
4738 if (coerce_template_template_parms (parmparm, argparm,
4739 complain, in_decl,
6150b602 4740 args))
8b5b8b7c 4741 {
b8c6534b 4742 val = arg;
c8094d83
MS
4743
4744 /* TEMPLATE_TEMPLATE_PARM node is preferred over
b8c6534b 4745 TEMPLATE_DECL. */
5d80a306
DG
4746 if (val != error_mark_node)
4747 {
4748 if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
4749 val = TREE_TYPE (val);
4750 else if (TREE_CODE (val) == TYPE_PACK_EXPANSION
4751 && DECL_TEMPLATE_TEMPLATE_PARM_P (check_arg))
4752 {
4753 val = TREE_TYPE (check_arg);
4754 val = make_pack_expansion (val);
4755 }
4756 }
8b5b8b7c 4757 }
b8c6534b
KL
4758 else
4759 {
c2ea3a40 4760 if (in_decl && (complain & tf_error))
b8c6534b 4761 {
0f51ccfc 4762 error ("type/value mismatch at argument %d in "
0cbd7506
MS
4763 "template parameter list for %qD",
4764 i + 1, in_decl);
0f51ccfc 4765 error (" expected a template of type %qD, got %qD",
0cbd7506 4766 parm, arg);
b8c6534b 4767 }
c8094d83 4768
b8c6534b
KL
4769 val = error_mark_node;
4770 }
8b5b8b7c
MM
4771 }
4772 }
4773 else
058b15c1 4774 val = arg;
685e39c2
MM
4775 /* We only form one instance of each template specialization.
4776 Therefore, if we use a non-canonical variant (i.e., a
3db45ab5 4777 typedef), any future messages referring to the type will use
685e39c2
MM
4778 the typedef, which is confusing if those future uses do not
4779 themselves also use the typedef. */
4780 if (TYPE_P (val))
4781 val = canonical_type_variant (val);
8b5b8b7c
MM
4782 }
4783 else
4784 {
4393e105 4785 tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
8b5b8b7c 4786
11b810f1 4787 if (invalid_nontype_parm_type_p (t, complain))
0cbd7506 4788 return error_mark_node;
c8094d83 4789
d768a589 4790 if (!uses_template_parms (arg) && !uses_template_parms (t))
8b5b8b7c
MM
4791 /* We used to call digest_init here. However, digest_init
4792 will report errors, which we don't want when complain
4793 is zero. More importantly, digest_init will try too
4794 hard to convert things: for example, `0' should not be
4795 converted to pointer type at this point according to
4796 the standard. Accepting this is not merely an
4797 extension, since deciding whether or not these
4798 conversions can occur is part of determining which
dc957d14 4799 function template to call, or whether a given explicit
0e339752 4800 argument specification is valid. */
8b5b8b7c
MM
4801 val = convert_nontype_argument (t, arg);
4802 else
4803 val = arg;
4804
4805 if (val == NULL_TREE)
4806 val = error_mark_node;
c2ea3a40 4807 else if (val == error_mark_node && (complain & tf_error))
0f51ccfc 4808 error ("could not convert template argument %qE to %qT", arg, t);
8b5b8b7c
MM
4809 }
4810
4811 return val;
4812}
4813
b1d7b1c0
DG
4814/* Coerces the remaining template arguments in INNER_ARGS (from
4815 ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
4816 Returns the coerced argument pack. PARM_IDX is the position of this
4817 parameter in the template parameter list. ARGS is the original
4818 template argument list. */
4819static tree
4820coerce_template_parameter_pack (tree parms,
4821 int parm_idx,
4822 tree args,
4823 tree inner_args,
4824 int arg_idx,
4825 tree new_args,
4826 int* lost,
4827 tree in_decl,
4828 tsubst_flags_t complain)
4829{
4830 tree parm = TREE_VEC_ELT (parms, parm_idx);
4831 int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
4832 tree packed_args;
4833 tree argument_pack;
4834 tree packed_types = NULL_TREE;
4835
4836 if (arg_idx > nargs)
4837 arg_idx = nargs;
4838
4839 packed_args = make_tree_vec (nargs - arg_idx);
4840
4841 if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
4842 && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
4843 {
4844 /* When the template parameter is a non-type template
4845 parameter pack whose type uses parameter packs, we need
4846 to look at each of the template arguments
4847 separately. Build a vector of the types for these
4848 non-type template parameters in PACKED_TYPES. */
4849 tree expansion
4850 = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
4851 packed_types = tsubst_pack_expansion (expansion, args,
4852 complain, in_decl);
4853
4854 if (packed_types == error_mark_node)
4855 return error_mark_node;
4856
4857 /* Check that we have the right number of arguments. */
4858 if (arg_idx < nargs
4859 && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
4860 && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
4861 {
4862 int needed_parms
4863 = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
4864 error ("wrong number of template arguments (%d, should be %d)",
4865 nargs, needed_parms);
4866 return error_mark_node;
4867 }
4868
4869 /* If we aren't able to check the actual arguments now
4870 (because they haven't been expanded yet), we can at least
4871 verify that all of the types used for the non-type
4872 template parameter pack are, in fact, valid for non-type
4873 template parameters. */
4874 if (arg_idx < nargs
4875 && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
4876 {
4877 int j, len = TREE_VEC_LENGTH (packed_types);
4878 for (j = 0; j < len; ++j)
4879 {
4880 tree t = TREE_VEC_ELT (packed_types, j);
4881 if (invalid_nontype_parm_type_p (t, complain))
4882 return error_mark_node;
4883 }
4884 }
4885 }
4886
4887 /* Convert the remaining arguments, which will be a part of the
4888 parameter pack "parm". */
4889 for (; arg_idx < nargs; ++arg_idx)
4890 {
4891 tree arg = TREE_VEC_ELT (inner_args, arg_idx);
4892 tree actual_parm = TREE_VALUE (parm);
4893
4894 if (packed_types && !PACK_EXPANSION_P (arg))
4895 {
4896 /* When we have a vector of types (corresponding to the
4897 non-type template parameter pack that uses parameter
4898 packs in its type, as mention above), and the
4899 argument is not an expansion (which expands to a
4900 currently unknown number of arguments), clone the
4901 parm and give it the next type in PACKED_TYPES. */
4902 actual_parm = copy_node (actual_parm);
4903 TREE_TYPE (actual_parm) =
4904 TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
4905 }
4906
4907 arg = convert_template_argument (actual_parm,
4908 arg, new_args, complain, parm_idx,
4909 in_decl);
4910 if (arg == error_mark_node)
4911 (*lost)++;
4912 TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg;
4913 }
4914
4915 if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
4916 || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
4917 argument_pack = make_node (TYPE_ARGUMENT_PACK);
4918 else
4919 {
4920 argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
4921 TREE_TYPE (argument_pack) = TREE_TYPE (TREE_VALUE (parm));
4922 TREE_CONSTANT (argument_pack) = 1;
4923 }
4924
4925 SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
4926 return argument_pack;
4927}
4928
8b5b8b7c
MM
4929/* Convert all template arguments to their appropriate types, and
4930 return a vector containing the innermost resulting template
c2ea3a40 4931 arguments. If any error occurs, return error_mark_node. Error and
3e4a3562 4932 warning messages are issued under control of COMPLAIN.
75650646 4933
e7e93965 4934 If REQUIRE_ALL_ARGS is false, argument deduction will be performed
84dc00e8 4935 for arguments not specified in ARGS. Otherwise, if
e7e93965
MM
4936 USE_DEFAULT_ARGS is true, default arguments will be used to fill in
4937 unspecified arguments. If REQUIRE_ALL_ARGS is true, but
4938 USE_DEFAULT_ARGS is false, then all arguments must be specified in
4939 ARGS. */
c8094d83 4940
8d08fdba 4941static tree
c8094d83 4942coerce_template_parms (tree parms,
0cbd7506
MS
4943 tree args,
4944 tree in_decl,
3a978d72 4945 tsubst_flags_t complain,
e7e93965
MM
4946 bool require_all_args,
4947 bool use_default_args)
8d08fdba 4948{
b1d7b1c0 4949 int nparms, nargs, parm_idx, arg_idx, lost = 0;
e4a84209 4950 tree inner_args;
8b5b8b7c
MM
4951 tree new_args;
4952 tree new_inner_args;
a2c5ed87 4953 bool saved_skip_evaluation;
a292b002 4954
5d80a306
DG
4955 /* When used as a boolean value, indicates whether this is a
4956 variadic template parameter list. Since it's an int, we can also
4957 subtract it from nparms to get the number of non-variadic
4958 parameters. */
b1d7b1c0 4959 int variadic_p = 0;
5d80a306
DG
4960
4961 inner_args
4962 = expand_template_argument_pack (INNERMOST_TEMPLATE_ARGS (args));
4963
bf12d54d 4964 nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
a292b002
MS
4965 nparms = TREE_VEC_LENGTH (parms);
4966
b1d7b1c0
DG
4967 /* Determine if there are any parameter packs. */
4968 for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
4969 {
4970 tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
4971 if (template_parameter_pack_p (tparm))
4972 {
4973 variadic_p = 1;
4974 break;
4975 }
4976 }
4977
5d80a306
DG
4978 if ((nargs > nparms - variadic_p && !variadic_p)
4979 || (nargs < nparms - variadic_p
e7e93965
MM
4980 && require_all_args
4981 && (!use_default_args
42b304f1
LM
4982 || (TREE_VEC_ELT (parms, nargs) != error_mark_node
4983 && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
8d08fdba 4984 {
c8094d83 4985 if (complain & tf_error)
75650646 4986 {
5d80a306
DG
4987 const char *or_more = "";
4988 if (variadic_p)
4989 {
4990 or_more = " or more";
4991 --nparms;
4992 }
4993
4994 error ("wrong number of template arguments (%d, should be %d%s)",
4995 nargs, nparms, or_more);
c8094d83 4996
75650646 4997 if (in_decl)
dee15844 4998 error ("provided for %q+D", in_decl);
75650646
MM
4999 }
5000
8d08fdba
MS
5001 return error_mark_node;
5002 }
5003
a2c5ed87
MM
5004 /* We need to evaluate the template arguments, even though this
5005 template-id may be nested within a "sizeof". */
5006 saved_skip_evaluation = skip_evaluation;
5007 skip_evaluation = false;
f31c0a32 5008 new_inner_args = make_tree_vec (nparms);
8b5b8b7c 5009 new_args = add_outermost_template_args (args, new_inner_args);
b1d7b1c0 5010 for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
8d08fdba 5011 {
8b5b8b7c
MM
5012 tree arg;
5013 tree parm;
e4a84209 5014
8b5b8b7c 5015 /* Get the Ith template parameter. */
b1d7b1c0 5016 parm = TREE_VEC_ELT (parms, parm_idx);
42b304f1
LM
5017
5018 if (parm == error_mark_node)
2d8ba2c7 5019 {
b1d7b1c0 5020 TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
42b304f1 5021 continue;
2d8ba2c7 5022 }
75650646 5023
b1d7b1c0
DG
5024 /* Calculate the next argument. */
5025 if (template_parameter_pack_p (TREE_VALUE (parm)))
5d80a306 5026 {
b1d7b1c0
DG
5027 /* All remaining arguments will be placed in the
5028 template parameter pack PARM. */
5029 arg = coerce_template_parameter_pack (parms, parm_idx, args,
5030 inner_args, arg_idx,
5031 new_args, &lost,
5032 in_decl, complain);
5033
5034 /* Store this argument. */
5035 if (arg == error_mark_node)
5036 lost++;
5037 TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
5038
5039 /* We are done with all of the arguments. */
5040 arg_idx = nargs;
5041
5042 continue;
5043 }
5044 else if (arg_idx < nargs)
5045 {
5046 arg = TREE_VEC_ELT (inner_args, arg_idx);
5047
5048 if (arg && PACK_EXPANSION_P (arg))
5d80a306 5049 {
b1d7b1c0
DG
5050 /* If ARG is a pack expansion, but PARM is not a
5051 template parameter pack (if it were, we would have
5052 handled it above), we're trying to expand into a
5d80a306 5053 fixed-length argument list. */
b1d7b1c0
DG
5054 if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
5055 error ("cannot expand %<%E%> into a fixed-length "
5056 "argument list", arg);
5057 else
5058 error ("cannot expand %<%T%> into a fixed-length "
5059 "argument list", arg);
5d80a306
DG
5060 }
5061 }
e7e93965 5062 else if (require_all_args)
b1d7b1c0
DG
5063 /* There must be a default arg in this case. */
5064 arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
5065 complain, in_decl);
ffd49b19
NS
5066 else
5067 break;
c8094d83 5068
ffd49b19 5069 if (arg == error_mark_node)
e34b0922
KL
5070 {
5071 if (complain & tf_error)
b1d7b1c0 5072 error ("template argument %d is invalid", arg_idx + 1);
e34b0922 5073 }
b1d7b1c0
DG
5074 else if (!arg)
5075 /* This only occurs if there was an error in the template
5076 parameter list itself (which we would already have
5077 reported) that we are trying to recover from, e.g., a class
5078 template with a parameter list such as
5079 template<typename..., typename>. */
5080 return error_mark_node;
c8094d83
MS
5081 else
5082 arg = convert_template_argument (TREE_VALUE (parm),
b1d7b1c0
DG
5083 arg, new_args, complain,
5084 parm_idx, in_decl);
c8094d83 5085
8b5b8b7c 5086 if (arg == error_mark_node)
8d08fdba 5087 lost++;
b1d7b1c0 5088 TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
8d08fdba 5089 }
a2c5ed87 5090 skip_evaluation = saved_skip_evaluation;
8b5b8b7c 5091
8d08fdba
MS
5092 if (lost)
5093 return error_mark_node;
8b5b8b7c
MM
5094
5095 return new_inner_args;
8d08fdba
MS
5096}
5097
34016c81
JM
5098/* Returns 1 if template args OT and NT are equivalent. */
5099
d8e178a0 5100static int
3a978d72 5101template_args_equal (tree ot, tree nt)
34016c81
JM
5102{
5103 if (nt == ot)
5104 return 1;
74601d7c 5105
34016c81
JM
5106 if (TREE_CODE (nt) == TREE_VEC)
5107 /* For member templates */
74601d7c 5108 return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
5d80a306
DG
5109 else if (PACK_EXPANSION_P (ot))
5110 return PACK_EXPANSION_P (nt)
5111 && template_args_equal (PACK_EXPANSION_PATTERN (ot),
5112 PACK_EXPANSION_PATTERN (nt));
74601d7c 5113 else if (TYPE_P (nt))
660845bf 5114 return TYPE_P (ot) && same_type_p (ot, nt);
74601d7c
KL
5115 else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
5116 return 0;
34016c81 5117 else
c8a209ca 5118 return cp_tree_equal (ot, nt);
34016c81
JM
5119}
5120
5121/* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
f84b4be9
JM
5122 of template arguments. Returns 0 otherwise. */
5123
6757edfe 5124int
3a978d72 5125comp_template_args (tree oldargs, tree newargs)
5566b478
MS
5126{
5127 int i;
5128
5d80a306
DG
5129 oldargs = expand_template_argument_pack (oldargs);
5130 newargs = expand_template_argument_pack (newargs);
5131
386b8a85
JM
5132 if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
5133 return 0;
5134
5566b478
MS
5135 for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
5136 {
5137 tree nt = TREE_VEC_ELT (newargs, i);
5138 tree ot = TREE_VEC_ELT (oldargs, i);
5139
34016c81 5140 if (! template_args_equal (ot, nt))
61a127b3 5141 return 0;
5566b478
MS
5142 }
5143 return 1;
5144}
5145
5566b478 5146static void
3a978d72 5147add_pending_template (tree d)
5566b478 5148{
3ae18eaf
JM
5149 tree ti = (TYPE_P (d)
5150 ? CLASSTYPE_TEMPLATE_INFO (d)
5151 : DECL_TEMPLATE_INFO (d));
46ccf50a 5152 tree pt;
3ae18eaf 5153 int level;
e92cc029 5154
824b9a4c 5155 if (TI_PENDING_TEMPLATE_FLAG (ti))
5566b478
MS
5156 return;
5157
3ae18eaf
JM
5158 /* We are called both from instantiate_decl, where we've already had a
5159 tinst_level pushed, and instantiate_template, where we haven't.
5160 Compensate. */
5161 level = !(current_tinst_level && TINST_DECL (current_tinst_level) == d);
5162
5163 if (level)
5164 push_tinst_level (d);
5165
46ccf50a
JM
5166 pt = tree_cons (current_tinst_level, d, NULL_TREE);
5167 if (last_pending_template)
5168 TREE_CHAIN (last_pending_template) = pt;
5169 else
5170 pending_templates = pt;
5171
5172 last_pending_template = pt;
5173
824b9a4c 5174 TI_PENDING_TEMPLATE_FLAG (ti) = 1;
3ae18eaf
JM
5175
5176 if (level)
5177 pop_tinst_level ();
5566b478
MS
5178}
5179
386b8a85 5180
4ba126e4
MM
5181/* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
5182 ARGLIST. Valid choices for FNS are given in the cp-tree.def
5183 documentation for TEMPLATE_ID_EXPR. */
386b8a85
JM
5184
5185tree
3a978d72 5186lookup_template_function (tree fns, tree arglist)
386b8a85 5187{
2c73f9f5 5188 tree type;
050367a3 5189
4ba126e4
MM
5190 if (fns == error_mark_node || arglist == error_mark_node)
5191 return error_mark_node;
5192
50bc768d 5193 gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
4230cec2
NS
5194 gcc_assert (fns && (is_overloaded_fn (fns)
5195 || TREE_CODE (fns) == IDENTIFIER_NODE));
4ba126e4 5196
50ad9642
MM
5197 if (BASELINK_P (fns))
5198 {
f293ce4b
RS
5199 BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
5200 unknown_type_node,
5201 BASELINK_FUNCTIONS (fns),
5202 arglist);
50ad9642
MM
5203 return fns;
5204 }
5205
2c73f9f5
ML
5206 type = TREE_TYPE (fns);
5207 if (TREE_CODE (fns) == OVERLOAD || !type)
5208 type = unknown_type_node;
c8094d83 5209
f293ce4b 5210 return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
386b8a85
JM
5211}
5212
a2b60a0e
MM
5213/* Within the scope of a template class S<T>, the name S gets bound
5214 (in build_self_reference) to a TYPE_DECL for the class, not a
5215 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
5216 or one of its enclosing classes, and that type is a template,
5217 return the associated TEMPLATE_DECL. Otherwise, the original
5218 DECL is returned. */
5219
a723baf1 5220tree
3a978d72 5221maybe_get_template_decl_from_type_decl (tree decl)
a2b60a0e
MM
5222{
5223 return (decl != NULL_TREE
c8094d83 5224 && TREE_CODE (decl) == TYPE_DECL
a2b60a0e 5225 && DECL_ARTIFICIAL (decl)
511b60ff 5226 && CLASS_TYPE_P (TREE_TYPE (decl))
c8094d83 5227 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
a2b60a0e
MM
5228 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
5229}
386b8a85 5230
8d08fdba
MS
5231/* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
5232 parameters, find the desired type.
5233
5234 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
8d08fdba
MS
5235
5236 IN_DECL, if non-NULL, is the template declaration we are trying to
c8094d83 5237 instantiate.
75650646 5238
838dfd8a 5239 If ENTERING_SCOPE is nonzero, we are about to enter the scope of
36a117a5 5240 the class we are looking up.
c8094d83 5241
c2ea3a40 5242 Issue error and warning messages under control of COMPLAIN.
36a117a5 5243
75650646
MM
5244 If the template class is really a local class in a template
5245 function, then the FUNCTION_CONTEXT is the function in which it is
c8094d83 5246 being instantiated.
b6ab6892
GB
5247
5248 ??? Note that this function is currently called *twice* for each
5249 template-id: the first time from the parser, while creating the
5250 incomplete type (finish_template_type), and the second type during the
5251 real instantiation (instantiate_template_class). This is surely something
5252 that we want to avoid. It also causes some problems with argument
5253 coercion (see convert_nontype_argument for more information on this). */
e92cc029 5254
8d08fdba 5255tree
c8094d83 5256lookup_template_class (tree d1,
0cbd7506
MS
5257 tree arglist,
5258 tree in_decl,
5259 tree context,
5260 int entering_scope,
5261 tsubst_flags_t complain)
8d08fdba 5262{
a703fb38 5263 tree template = NULL_TREE, parmlist;
dbfe2124 5264 tree t;
c8094d83 5265
fd295cb2 5266 timevar_push (TV_NAME_LOOKUP);
c8094d83 5267
5566b478
MS
5268 if (TREE_CODE (d1) == IDENTIFIER_NODE)
5269 {
90ea9897
MM
5270 tree value = innermost_non_namespace_value (d1);
5271 if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
5272 template = value;
73b0fce8
KL
5273 else
5274 {
2c73f9f5
ML
5275 if (context)
5276 push_decl_namespace (context);
10e6657a 5277 template = lookup_name (d1);
3ebc5c52 5278 template = maybe_get_template_decl_from_type_decl (template);
2c73f9f5
ML
5279 if (context)
5280 pop_decl_namespace ();
73b0fce8 5281 }
8d019cef
JM
5282 if (template)
5283 context = DECL_CONTEXT (template);
5566b478 5284 }
c91a56d2
MS
5285 else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
5286 {
802dbc34
JM
5287 tree type = TREE_TYPE (d1);
5288
5289 /* If we are declaring a constructor, say A<T>::A<T>, we will get
5290 an implicit typename for the second A. Deal with it. */
5291 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5292 type = TREE_TYPE (type);
c8094d83 5293
802dbc34 5294 if (CLASSTYPE_TEMPLATE_INFO (type))
f3400fe2 5295 {
802dbc34 5296 template = CLASSTYPE_TI_TEMPLATE (type);
f3400fe2
JM
5297 d1 = DECL_NAME (template);
5298 }
c91a56d2 5299 }
c8094d83 5300 else if (TREE_CODE (d1) == ENUMERAL_TYPE
2f939d94 5301 || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
5566b478 5302 {
ed44da02 5303 template = TYPE_TI_TEMPLATE (d1);
5566b478
MS
5304 d1 = DECL_NAME (template);
5305 }
93cdc044 5306 else if (TREE_CODE (d1) == TEMPLATE_DECL
17aec3eb 5307 && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
93cdc044
JM
5308 {
5309 template = d1;
5310 d1 = DECL_NAME (template);
5311 context = DECL_CONTEXT (template);
5312 }
8d08fdba 5313
90ea9897 5314 /* Issue an error message if we didn't find a template. */
8d08fdba 5315 if (! template)
f3400fe2 5316 {
c2ea3a40 5317 if (complain & tf_error)
0cbd7506 5318 error ("%qT is not a template", d1);
fd295cb2 5319 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
f3400fe2 5320 }
2c73f9f5 5321
a87b4257 5322 if (TREE_CODE (template) != TEMPLATE_DECL
0cbd7506 5323 /* Make sure it's a user visible template, if it was named by
42eaed49
NS
5324 the user. */
5325 || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (template)
5326 && !PRIMARY_TEMPLATE_P (template)))
8d08fdba 5327 {
c2ea3a40 5328 if (complain & tf_error)
0cbd7506
MS
5329 {
5330 error ("non-template type %qT used as a template", d1);
5331 if (in_decl)
dee15844 5332 error ("for template declaration %q+D", in_decl);
f9c244b8 5333 }
fd295cb2 5334 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
8d08fdba 5335 }
8d08fdba 5336
42eaed49 5337 complain &= ~tf_user;
c8094d83 5338
73b0fce8
KL
5339 if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
5340 {
5341 /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
0cbd7506 5342 template arguments */
73b0fce8 5343
1899c3a4 5344 tree parm;
73b0fce8
KL
5345 tree arglist2;
5346
73b0fce8
KL
5347 parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
5348
4f96ff63
KL
5349 /* Consider an example where a template template parameter declared as
5350
5351 template <class T, class U = std::allocator<T> > class TT
5352
c8094d83
MS
5353 The template parameter level of T and U are one level larger than
5354 of TT. To proper process the default argument of U, say when an
4f96ff63 5355 instantiation `TT<int>' is seen, we need to build the full
342cea95
KL
5356 arguments containing {int} as the innermost level. Outer levels,
5357 available when not appearing as default template argument, can be
5358 obtained from `current_template_args ()'.
4f96ff63 5359
342cea95
KL
5360 Suppose that TT is later substituted with std::vector. The above
5361 instantiation is `TT<int, std::allocator<T> >' with TT at
5362 level 1, and T at level 2, while the template arguments at level 1
5363 becomes {std::vector} and the inner level 2 is {int}. */
5364
5365 if (current_template_parms)
4f96ff63
KL
5366 arglist = add_to_template_args (current_template_args (), arglist);
5367
f9c244b8 5368 arglist2 = coerce_template_parms (parmlist, arglist, template,
3db45ab5 5369 complain,
e7e93965
MM
5370 /*require_all_args=*/true,
5371 /*use_default_args=*/true);
3e4a3562 5372 if (arglist2 == error_mark_node
544aef8c 5373 || (!uses_template_parms (arglist2)
3e4a3562 5374 && check_instantiated_args (template, arglist2, complain)))
0cbd7506 5375 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
73b0fce8 5376
dac65501 5377 parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
fd295cb2 5378 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
73b0fce8 5379 }
c8094d83 5380 else
8d08fdba 5381 {
36a117a5 5382 tree template_type = TREE_TYPE (template);
7ac7b28f 5383 tree gen_tmpl;
36a117a5
MM
5384 tree type_decl;
5385 tree found = NULL_TREE;
5386 int arg_depth;
5387 int parm_depth;
dbfe2124 5388 int is_partial_instantiation;
830bfa74 5389
7ac7b28f
MM
5390 gen_tmpl = most_general_template (template);
5391 parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
36a117a5
MM
5392 parm_depth = TMPL_PARMS_DEPTH (parmlist);
5393 arg_depth = TMPL_ARGS_DEPTH (arglist);
5394
5395 if (arg_depth == 1 && parm_depth > 1)
5396 {
39c01e4c 5397 /* We've been given an incomplete set of template arguments.
36a117a5
MM
5398 For example, given:
5399
5400 template <class T> struct S1 {
0cbd7506 5401 template <class U> struct S2 {};
36a117a5 5402 template <class U> struct S2<U*> {};
0cbd7506 5403 };
c8094d83 5404
36a117a5
MM
5405 we will be called with an ARGLIST of `U*', but the
5406 TEMPLATE will be `template <class T> template
5407 <class U> struct S1<T>::S2'. We must fill in the missing
5408 arguments. */
c8094d83 5409 arglist
7ac7b28f
MM
5410 = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
5411 arglist);
36a117a5
MM
5412 arg_depth = TMPL_ARGS_DEPTH (arglist);
5413 }
5566b478 5414
41f5d4b1 5415 /* Now we should have enough arguments. */
50bc768d 5416 gcc_assert (parm_depth == arg_depth);
c8094d83 5417
7ac7b28f
MM
5418 /* From here on, we're only interested in the most general
5419 template. */
5420 template = gen_tmpl;
5421
36a117a5
MM
5422 /* Calculate the BOUND_ARGS. These will be the args that are
5423 actually tsubst'd into the definition to create the
5424 instantiation. */
5425 if (parm_depth > 1)
830bfa74
MM
5426 {
5427 /* We have multiple levels of arguments to coerce, at once. */
830bfa74 5428 int i;
e4a84209 5429 int saved_depth = TMPL_ARGS_DEPTH (arglist);
36a117a5 5430
f31c0a32 5431 tree bound_args = make_tree_vec (parm_depth);
c8094d83 5432
e4a84209 5433 for (i = saved_depth,
c8094d83 5434 t = DECL_TEMPLATE_PARMS (template);
e4a84209 5435 i > 0 && t != NULL_TREE;
830bfa74 5436 --i, t = TREE_CHAIN (t))
e4a84209 5437 {
ee3071ef
NS
5438 tree a = coerce_template_parms (TREE_VALUE (t),
5439 arglist, template,
3db45ab5 5440 complain,
e7e93965
MM
5441 /*require_all_args=*/true,
5442 /*use_default_args=*/true);
88e98cfe
KL
5443
5444 /* Don't process further if one of the levels fails. */
5445 if (a == error_mark_node)
5446 {
5447 /* Restore the ARGLIST to its full size. */
5448 TREE_VEC_LENGTH (arglist) = saved_depth;
5449 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5450 }
c8094d83 5451
e4a84209
MM
5452 SET_TMPL_ARGS_LEVEL (bound_args, i, a);
5453
5454 /* We temporarily reduce the length of the ARGLIST so
5455 that coerce_template_parms will see only the arguments
5456 corresponding to the template parameters it is
5457 examining. */
5458 TREE_VEC_LENGTH (arglist)--;
5459 }
5460
5461 /* Restore the ARGLIST to its full size. */
5462 TREE_VEC_LENGTH (arglist) = saved_depth;
5463
36a117a5 5464 arglist = bound_args;
830bfa74
MM
5465 }
5466 else
36a117a5
MM
5467 arglist
5468 = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
f9a7ae04 5469 INNERMOST_TEMPLATE_ARGS (arglist),
f9c244b8 5470 template,
3db45ab5 5471 complain,
e7e93965
MM
5472 /*require_all_args=*/true,
5473 /*use_default_args=*/true);
36a117a5 5474
c353b8e3 5475 if (arglist == error_mark_node)
36a117a5 5476 /* We were unable to bind the arguments. */
fd295cb2 5477 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5566b478 5478
36a117a5
MM
5479 /* In the scope of a template class, explicit references to the
5480 template class refer to the type of the template, not any
5481 instantiation of it. For example, in:
c8094d83 5482
36a117a5
MM
5483 template <class T> class C { void f(C<T>); }
5484
5485 the `C<T>' is just the same as `C'. Outside of the
5486 class, however, such a reference is an instantiation. */
ed44da02 5487 if (comp_template_args (TYPE_TI_ARGS (template_type),
36a117a5
MM
5488 arglist))
5489 {
5490 found = template_type;
c8094d83 5491
36a117a5 5492 if (!entering_scope && PRIMARY_TEMPLATE_P (template))
5566b478 5493 {
36a117a5 5494 tree ctx;
c8094d83
MS
5495
5496 for (ctx = current_class_type;
5f04800c
KL
5497 ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
5498 ctx = (TYPE_P (ctx)
5499 ? TYPE_CONTEXT (ctx)
5500 : DECL_CONTEXT (ctx)))
5501 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
5502 goto found_ctx;
c8094d83 5503
6df5158a
NS
5504 /* We're not in the scope of the class, so the
5505 TEMPLATE_TYPE is not the type we want after all. */
5506 found = NULL_TREE;
5507 found_ctx:;
5566b478
MS
5508 }
5509 }
36a117a5 5510 if (found)
0cbd7506 5511 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
414ea4aa 5512
c7222c02
MM
5513 /* If we already have this specialization, return it. */
5514 found = retrieve_specialization (template, arglist,
5515 /*class_specializations_p=*/false);
5516 if (found)
5517 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5566b478 5518
dbfe2124 5519 /* This type is a "partial instantiation" if any of the template
ab097535 5520 arguments still involve template parameters. Note that we set
486e4077
MM
5521 IS_PARTIAL_INSTANTIATION for partial specializations as
5522 well. */
dbfe2124
MM
5523 is_partial_instantiation = uses_template_parms (arglist);
5524
c353b8e3
MM
5525 /* If the deduced arguments are invalid, then the binding
5526 failed. */
5527 if (!is_partial_instantiation
5528 && check_instantiated_args (template,
5529 INNERMOST_TEMPLATE_ARGS (arglist),
5530 complain))
5531 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
c8094d83
MS
5532
5533 if (!is_partial_instantiation
3ebc5c52
MM
5534 && !PRIMARY_TEMPLATE_P (template)
5535 && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
5536 {
3ebc5c52
MM
5537 found = xref_tag_from_type (TREE_TYPE (template),
5538 DECL_NAME (template),
29ef83de 5539 /*tag_scope=*/ts_global);
fd295cb2 5540 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
3ebc5c52 5541 }
c8094d83 5542
95ee998c 5543 context = tsubst (DECL_CONTEXT (template), arglist,
c2ea3a40 5544 complain, in_decl);
95ee998c
MM
5545 if (!context)
5546 context = global_namespace;
5547
36a117a5 5548 /* Create the type. */
ed44da02
MM
5549 if (TREE_CODE (template_type) == ENUMERAL_TYPE)
5550 {
dbfe2124 5551 if (!is_partial_instantiation)
92777ce4
NS
5552 {
5553 set_current_access_from_decl (TYPE_NAME (template_type));
5554 t = start_enum (TYPE_IDENTIFIER (template_type));
5555 }
ed44da02 5556 else
dbfe2124 5557 /* We don't want to call start_enum for this type, since
ed44da02
MM
5558 the values for the enumeration constants may involve
5559 template parameters. And, no one should be interested
5560 in the enumeration constants for such a type. */
5561 t = make_node (ENUMERAL_TYPE);
5562 }
5563 else
5564 {
33848bb0 5565 t = make_aggr_type (TREE_CODE (template_type));
c8094d83 5566 CLASSTYPE_DECLARED_CLASS (t)
ed44da02 5567 = CLASSTYPE_DECLARED_CLASS (template_type);
ed44da02 5568 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
f668f160 5569 TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
ae673f14
JM
5570
5571 /* A local class. Make sure the decl gets registered properly. */
5572 if (context == current_function_decl)
bd3d082e 5573 pushtag (DECL_NAME (template), t, /*tag_scope=*/ts_current);
06d40de8
DG
5574
5575 if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
5576 /* This instantiation is another name for the primary
5577 template type. Set the TYPE_CANONICAL field
5578 appropriately. */
5579 TYPE_CANONICAL (t) = template_type;
5580 else if (any_template_arguments_need_structural_equality_p (arglist))
5581 /* Some of the template arguments require structural
5582 equality testing, so this template class requires
5583 structural equality testing. */
5584 SET_TYPE_STRUCTURAL_EQUALITY (t);
ed44da02
MM
5585 }
5586
ae673f14
JM
5587 /* If we called start_enum or pushtag above, this information
5588 will already be set up. */
ed44da02
MM
5589 if (!TYPE_NAME (t))
5590 {
5591 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
c8094d83 5592
9188c363 5593 type_decl = create_implicit_typedef (DECL_NAME (template), t);
ed44da02 5594 DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
9188c363 5595 TYPE_STUB_DECL (t) = type_decl;
c8094d83 5596 DECL_SOURCE_LOCATION (type_decl)
f31686a3 5597 = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
ed44da02
MM
5598 }
5599 else
5600 type_decl = TYPE_NAME (t);
36a117a5 5601
cab7a9a3
KL
5602 TREE_PRIVATE (type_decl)
5603 = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
5604 TREE_PROTECTED (type_decl)
5605 = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
12af7ba3
MM
5606 DECL_IN_SYSTEM_HEADER (type_decl)
5607 = DECL_IN_SYSTEM_HEADER (template);
8d039470
MS
5608 if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
5609 {
5610 DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
5611 DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
5612 }
cab7a9a3 5613
9fbf56f7
MM
5614 /* Set up the template information. We have to figure out which
5615 template is the immediate parent if this is a full
5616 instantiation. */
5617 if (parm_depth == 1 || is_partial_instantiation
5618 || !PRIMARY_TEMPLATE_P (template))
5619 /* This case is easy; there are no member templates involved. */
5620 found = template;
5621 else
5622 {
ab097535
NS
5623 /* This is a full instantiation of a member template. Look
5624 for a partial instantiation of which this is an instance. */
9fbf56f7
MM
5625
5626 for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
5627 found; found = TREE_CHAIN (found))
5628 {
5629 int success;
5630 tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
5631
5632 /* We only want partial instantiations, here, not
5633 specializations or full instantiations. */
370af2d5 5634 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
9fbf56f7
MM
5635 || !uses_template_parms (TREE_VALUE (found)))
5636 continue;
5637
5638 /* Temporarily reduce by one the number of levels in the
5639 ARGLIST and in FOUND so as to avoid comparing the
5640 last set of arguments. */
5641 TREE_VEC_LENGTH (arglist)--;
5642 TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
5643
5644 /* See if the arguments match. If they do, then TMPL is
5645 the partial instantiation we want. */
5646 success = comp_template_args (TREE_PURPOSE (found), arglist);
5647
5648 /* Restore the argument vectors to their full size. */
5649 TREE_VEC_LENGTH (arglist)++;
5650 TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
5651
5652 if (success)
5653 {
5654 found = tmpl;
5655 break;
5656 }
5657 }
5658
5659 if (!found)
ab097535
NS
5660 {
5661 /* There was no partial instantiation. This happens
0cbd7506
MS
5662 where C<T> is a member template of A<T> and it's used
5663 in something like
c8094d83 5664
0cbd7506
MS
5665 template <typename T> struct B { A<T>::C<int> m; };
5666 B<float>;
c8094d83 5667
0cbd7506
MS
5668 Create the partial instantiation.
5669 */
5670 TREE_VEC_LENGTH (arglist)--;
5671 found = tsubst (template, arglist, complain, NULL_TREE);
5672 TREE_VEC_LENGTH (arglist)++;
5673 }
9fbf56f7
MM
5674 }
5675
c8094d83
MS
5676 SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
5677 DECL_TEMPLATE_INSTANTIATIONS (template)
5678 = tree_cons (arglist, t,
dbfe2124
MM
5679 DECL_TEMPLATE_INSTANTIATIONS (template));
5680
c8094d83 5681 if (TREE_CODE (t) == ENUMERAL_TYPE
dbfe2124 5682 && !is_partial_instantiation)
61a127b3
MM
5683 /* Now that the type has been registered on the instantiations
5684 list, we set up the enumerators. Because the enumeration
5685 constants may involve the enumeration type itself, we make
5686 sure to register the type first, and then create the
5687 constants. That way, doing tsubst_expr for the enumeration
5688 constants won't result in recursive calls here; we'll find
5689 the instantiation and exit above. */
5690 tsubst_enum (template_type, t, arglist);
dbfe2124 5691
7813d14c 5692 if (is_partial_instantiation)
077e7015
MM
5693 /* If the type makes use of template parameters, the
5694 code that generates debugging information will crash. */
5695 DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
8d08fdba 5696
b9e75696
JM
5697 /* Possibly limit visibility based on template args. */
5698 TREE_PUBLIC (type_decl) = 1;
5699 determine_visibility (type_decl);
5700
fd295cb2 5701 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
36a117a5 5702 }
fd295cb2 5703 timevar_pop (TV_NAME_LOOKUP);
8d08fdba
MS
5704}
5705\f
c8094d83 5706struct pair_fn_data
8d08fdba 5707{
8dfaeb63
MM
5708 tree_fn_t fn;
5709 void *data;
0c58f841 5710 struct pointer_set_t *visited;
8dfaeb63
MM
5711};
5712
5713/* Called from for_each_template_parm via walk_tree. */
581d38d0 5714
8dfaeb63 5715static tree
350fae66 5716for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
8dfaeb63
MM
5717{
5718 tree t = *tp;
5719 struct pair_fn_data *pfd = (struct pair_fn_data *) d;
5720 tree_fn_t fn = pfd->fn;
5721 void *data = pfd->data;
4f2c9d7e 5722
2f939d94 5723 if (TYPE_P (t)
4f2c9d7e 5724 && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited))
8dfaeb63 5725 return error_mark_node;
581d38d0 5726
8d08fdba
MS
5727 switch (TREE_CODE (t))
5728 {
8d08fdba 5729 case RECORD_TYPE:
9076e292 5730 if (TYPE_PTRMEMFUNC_P (t))
8dfaeb63 5731 break;
ed44da02
MM
5732 /* Fall through. */
5733
8d08fdba 5734 case UNION_TYPE:
ed44da02 5735 case ENUMERAL_TYPE:
8dfaeb63
MM
5736 if (!TYPE_TEMPLATE_INFO (t))
5737 *walk_subtrees = 0;
5738 else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
4f2c9d7e 5739 fn, data, pfd->visited))
8dfaeb63
MM
5740 return error_mark_node;
5741 break;
5742
8f6e6bf3
EB
5743 case INTEGER_TYPE:
5744 if (for_each_template_parm (TYPE_MIN_VALUE (t),
5745 fn, data, pfd->visited)
5746 || for_each_template_parm (TYPE_MAX_VALUE (t),
5747 fn, data, pfd->visited))
5748 return error_mark_node;
5749 break;
5750
588c2d1c 5751 case METHOD_TYPE:
8dfaeb63
MM
5752 /* Since we're not going to walk subtrees, we have to do this
5753 explicitly here. */
4f2c9d7e
MM
5754 if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
5755 pfd->visited))
8dfaeb63 5756 return error_mark_node;
4890c2f4 5757 /* Fall through. */
588c2d1c
MM
5758
5759 case FUNCTION_TYPE:
8dfaeb63 5760 /* Check the return type. */
4f2c9d7e 5761 if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
8dfaeb63
MM
5762 return error_mark_node;
5763
588c2d1c
MM
5764 /* Check the parameter types. Since default arguments are not
5765 instantiated until they are needed, the TYPE_ARG_TYPES may
5766 contain expressions that involve template parameters. But,
5767 no-one should be looking at them yet. And, once they're
5768 instantiated, they don't contain template parameters, so
5769 there's no point in looking at them then, either. */
5770 {
5771 tree parm;
5772
5773 for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
4f2c9d7e
MM
5774 if (for_each_template_parm (TREE_VALUE (parm), fn, data,
5775 pfd->visited))
8dfaeb63 5776 return error_mark_node;
5566b478 5777
8dfaeb63
MM
5778 /* Since we've already handled the TYPE_ARG_TYPES, we don't
5779 want walk_tree walking into them itself. */
5780 *walk_subtrees = 0;
5781 }
5782 break;
3ac3d9ea 5783
a723baf1 5784 case TYPEOF_TYPE:
c8094d83 5785 if (for_each_template_parm (TYPE_FIELDS (t), fn, data,
a723baf1
MM
5786 pfd->visited))
5787 return error_mark_node;
5788 break;
5789
8d08fdba 5790 case FUNCTION_DECL:
5566b478 5791 case VAR_DECL:
5566b478 5792 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
4f2c9d7e
MM
5793 && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
5794 pfd->visited))
8dfaeb63
MM
5795 return error_mark_node;
5796 /* Fall through. */
5797
8d08fdba 5798 case PARM_DECL:
a723baf1
MM
5799 case CONST_DECL:
5800 if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
5801 && for_each_template_parm (DECL_INITIAL (t), fn, data,
5802 pfd->visited))
5803 return error_mark_node;
c8094d83 5804 if (DECL_CONTEXT (t)
4f2c9d7e
MM
5805 && for_each_template_parm (DECL_CONTEXT (t), fn, data,
5806 pfd->visited))
8dfaeb63
MM
5807 return error_mark_node;
5808 break;
8d08fdba 5809
a1281f45 5810 case BOUND_TEMPLATE_TEMPLATE_PARM:
744fac59 5811 /* Record template parameters such as `T' inside `TT<T>'. */
4f2c9d7e 5812 if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited))
8dfaeb63
MM
5813 return error_mark_node;
5814 /* Fall through. */
5815
a1281f45 5816 case TEMPLATE_TEMPLATE_PARM:
744fac59 5817 case TEMPLATE_TYPE_PARM:
f84b4be9 5818 case TEMPLATE_PARM_INDEX:
8dfaeb63
MM
5819 if (fn && (*fn)(t, data))
5820 return error_mark_node;
5821 else if (!fn)
5822 return error_mark_node;
5823 break;
5156628f 5824
8dfaeb63 5825 case TEMPLATE_DECL:
f4f206f4 5826 /* A template template parameter is encountered. */
8dfaeb63 5827 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
4f2c9d7e 5828 && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
8dfaeb63 5829 return error_mark_node;
db5ae43f 5830
8dfaeb63
MM
5831 /* Already substituted template template parameter */
5832 *walk_subtrees = 0;
5833 break;
b8865407 5834
4699c561 5835 case TYPENAME_TYPE:
c8094d83 5836 if (!fn
4f2c9d7e
MM
5837 || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
5838 data, pfd->visited))
8dfaeb63
MM
5839 return error_mark_node;
5840 break;
4699c561 5841
8dfaeb63
MM
5842 case CONSTRUCTOR:
5843 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
5844 && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
4f2c9d7e
MM
5845 (TREE_TYPE (t)), fn, data,
5846 pfd->visited))
8dfaeb63
MM
5847 return error_mark_node;
5848 break;
c8094d83 5849
b8865407
MM
5850 case INDIRECT_REF:
5851 case COMPONENT_REF:
4699c561 5852 /* If there's no type, then this thing must be some expression
b8865407 5853 involving template parameters. */
4699c561 5854 if (!fn && !TREE_TYPE (t))
8dfaeb63
MM
5855 return error_mark_node;
5856 break;
b8865407 5857
42976354
BK
5858 case MODOP_EXPR:
5859 case CAST_EXPR:
5860 case REINTERPRET_CAST_EXPR:
5861 case CONST_CAST_EXPR:
5862 case STATIC_CAST_EXPR:
5863 case DYNAMIC_CAST_EXPR:
42976354
BK
5864 case ARROW_EXPR:
5865 case DOTSTAR_EXPR:
5866 case TYPEID_EXPR:
40242ccf 5867 case PSEUDO_DTOR_EXPR:
b8865407 5868 if (!fn)
8dfaeb63
MM
5869 return error_mark_node;
5870 break;
abff8e06 5871
8d08fdba 5872 default:
8dfaeb63 5873 break;
8d08fdba 5874 }
8dfaeb63
MM
5875
5876 /* We didn't find any template parameters we liked. */
5877 return NULL_TREE;
5878}
5879
c8094d83
MS
5880/* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
5881 BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
a1281f45 5882 call FN with the parameter and the DATA.
838dfd8a 5883 If FN returns nonzero, the iteration is terminated, and
8dfaeb63 5884 for_each_template_parm returns 1. Otherwise, the iteration
838dfd8a 5885 continues. If FN never returns a nonzero value, the value
8dfaeb63
MM
5886 returned by for_each_template_parm is 0. If FN is NULL, it is
5887 considered to be the function which always returns 1. */
5888
5889static int
0c58f841
MA
5890for_each_template_parm (tree t, tree_fn_t fn, void* data,
5891 struct pointer_set_t *visited)
8dfaeb63
MM
5892{
5893 struct pair_fn_data pfd;
ad2ae3b2 5894 int result;
8dfaeb63
MM
5895
5896 /* Set up. */
5897 pfd.fn = fn;
5898 pfd.data = data;
5899
4890c2f4
MM
5900 /* Walk the tree. (Conceptually, we would like to walk without
5901 duplicates, but for_each_template_parm_r recursively calls
5902 for_each_template_parm, so we would need to reorganize a fair
4f2c9d7e
MM
5903 bit to use walk_tree_without_duplicates, so we keep our own
5904 visited list.) */
5905 if (visited)
5906 pfd.visited = visited;
5907 else
0c58f841 5908 pfd.visited = pointer_set_create ();
c8094d83
MS
5909 result = walk_tree (&t,
5910 for_each_template_parm_r,
ad2ae3b2 5911 &pfd,
c1e39976 5912 pfd.visited) != NULL_TREE;
ad2ae3b2
MM
5913
5914 /* Clean up. */
5915 if (!visited)
0c58f841
MA
5916 {
5917 pointer_set_destroy (pfd.visited);
5918 pfd.visited = 0;
5919 }
ad2ae3b2
MM
5920
5921 return result;
8d08fdba
MS
5922}
5923
d43f603d
KL
5924/* Returns true if T depends on any template parameter. */
5925
050367a3 5926int
3a978d72 5927uses_template_parms (tree t)
050367a3 5928{
c353b8e3
MM
5929 bool dependent_p;
5930 int saved_processing_template_decl;
5931
5932 saved_processing_template_decl = processing_template_decl;
5933 if (!saved_processing_template_decl)
5934 processing_template_decl = 1;
5935 if (TYPE_P (t))
5936 dependent_p = dependent_type_p (t);
5937 else if (TREE_CODE (t) == TREE_VEC)
5938 dependent_p = any_dependent_template_arguments_p (t);
5939 else if (TREE_CODE (t) == TREE_LIST)
5940 dependent_p = (uses_template_parms (TREE_VALUE (t))
5941 || uses_template_parms (TREE_CHAIN (t)));
3ce5fa4f
NS
5942 else if (TREE_CODE (t) == TYPE_DECL)
5943 dependent_p = dependent_type_p (TREE_TYPE (t));
c8094d83
MS
5944 else if (DECL_P (t)
5945 || EXPR_P (t)
c353b8e3
MM
5946 || TREE_CODE (t) == TEMPLATE_PARM_INDEX
5947 || TREE_CODE (t) == OVERLOAD
5948 || TREE_CODE (t) == BASELINK
b207d6e2 5949 || TREE_CODE (t) == IDENTIFIER_NODE
cb68ec50 5950 || TREE_CODE (t) == TRAIT_EXPR
6615c446 5951 || CONSTANT_CLASS_P (t))
c353b8e3
MM
5952 dependent_p = (type_dependent_expression_p (t)
5953 || value_dependent_expression_p (t));
315fb5db
NS
5954 else
5955 {
5956 gcc_assert (t == error_mark_node);
5957 dependent_p = false;
5958 }
c8094d83 5959
c353b8e3
MM
5960 processing_template_decl = saved_processing_template_decl;
5961
5962 return dependent_p;
050367a3
MM
5963}
5964
d43f603d
KL
5965/* Returns true if T depends on any template parameter with level LEVEL. */
5966
5967int
5968uses_template_parms_level (tree t, int level)
5969{
5970 return for_each_template_parm (t, template_parm_this_level_p, &level, NULL);
5971}
5972
27fafc8d 5973static int tinst_depth;
e9f32eb5 5974extern int max_tinst_depth;
5566b478 5975#ifdef GATHER_STATISTICS
27fafc8d 5976int depth_reached;
5566b478 5977#endif
8dfaeb63
MM
5978static int tinst_level_tick;
5979static int last_template_error_tick;
8d08fdba 5980
3ae18eaf
JM
5981/* We're starting to instantiate D; record the template instantiation context
5982 for diagnostics and to restore it later. */
5983
aa9d8196 5984static int
3a978d72 5985push_tinst_level (tree d)
8d08fdba 5986{
3ae18eaf 5987 tree new;
8d08fdba 5988
7215f9a0
MS
5989 if (tinst_depth >= max_tinst_depth)
5990 {
8adf5b5e
JM
5991 /* If the instantiation in question still has unbound template parms,
5992 we don't really care if we can't instantiate it, so just return.
0cbd7506 5993 This happens with base instantiation for implicit `typename'. */
8adf5b5e
JM
5994 if (uses_template_parms (d))
5995 return 0;
5996
1139b3d8 5997 last_template_error_tick = tinst_level_tick;
0f51ccfc 5998 error ("template instantiation depth exceeds maximum of %d (use "
0cbd7506 5999 "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
b4f4233d 6000 max_tinst_depth, d);
5566b478 6001
cb753e49 6002 print_instantiation_context ();
5566b478 6003
7215f9a0
MS
6004 return 0;
6005 }
6006
12af7ba3
MM
6007 new = make_node (TINST_LEVEL);
6008 TINST_DECL (new) = d;
6009 TINST_LOCATION (new) = input_location;
6010 TINST_IN_SYSTEM_HEADER_P (new) = in_system_header;
3ae18eaf 6011 TREE_CHAIN (new) = current_tinst_level;
8d08fdba 6012 current_tinst_level = new;
5566b478 6013
7215f9a0 6014 ++tinst_depth;
5566b478
MS
6015#ifdef GATHER_STATISTICS
6016 if (tinst_depth > depth_reached)
6017 depth_reached = tinst_depth;
6018#endif
6019
27fafc8d 6020 ++tinst_level_tick;
7215f9a0 6021 return 1;
8d08fdba
MS
6022}
6023
3ae18eaf
JM
6024/* We're done instantiating this template; return to the instantiation
6025 context. */
6026
aa9d8196 6027static void
3a978d72 6028pop_tinst_level (void)
8d08fdba 6029{
3ae18eaf 6030 tree old = current_tinst_level;
8d08fdba 6031
ae58fa02
MM
6032 /* Restore the filename and line number stashed away when we started
6033 this instantiation. */
406d77a4 6034 input_location = TINST_LOCATION (old);
12af7ba3 6035 in_system_header = TINST_IN_SYSTEM_HEADER_P (old);
3ae18eaf 6036 current_tinst_level = TREE_CHAIN (old);
7215f9a0 6037 --tinst_depth;
27fafc8d 6038 ++tinst_level_tick;
8d08fdba
MS
6039}
6040
3ae18eaf
JM
6041/* We're instantiating a deferred template; restore the template
6042 instantiation context in which the instantiation was requested, which
6043 is one step out from LEVEL. */
6044
6045static void
3a978d72 6046reopen_tinst_level (tree level)
3ae18eaf
JM
6047{
6048 tree t;
6049
6050 tinst_depth = 0;
6051 for (t = level; t; t = TREE_CHAIN (t))
6052 ++tinst_depth;
6053
6054 current_tinst_level = level;
6055 pop_tinst_level ();
6056}
6057
f84b4be9
JM
6058/* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
6059 vector of template arguments, as for tsubst.
6060
dc957d14 6061 Returns an appropriate tsubst'd friend declaration. */
f84b4be9
JM
6062
6063static tree
3a978d72 6064tsubst_friend_function (tree decl, tree args)
f84b4be9
JM
6065{
6066 tree new_friend;
27fafc8d 6067
c8094d83 6068 if (TREE_CODE (decl) == FUNCTION_DECL
f84b4be9
JM
6069 && DECL_TEMPLATE_INSTANTIATION (decl)
6070 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
6071 /* This was a friend declared with an explicit template
6072 argument list, e.g.:
c8094d83 6073
f84b4be9 6074 friend void f<>(T);
c8094d83 6075
f84b4be9
JM
6076 to indicate that f was a template instantiation, not a new
6077 function declaration. Now, we have to figure out what
6078 instantiation of what template. */
6079 {
76e57b45 6080 tree template_id, arglist, fns;
f84b4be9
JM
6081 tree new_args;
6082 tree tmpl;
ed2fa432 6083 tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
c8094d83 6084
76e57b45 6085 /* Friend functions are looked up in the containing namespace scope.
0cbd7506
MS
6086 We must enter that scope, to avoid finding member functions of the
6087 current cless with same name. */
76e57b45
NS
6088 push_nested_namespace (ns);
6089 fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
015c2c66
MM
6090 tf_warning_or_error, NULL_TREE,
6091 /*integral_constant_expression_p=*/false);
76e57b45
NS
6092 pop_nested_namespace (ns);
6093 arglist = tsubst (DECL_TI_ARGS (decl), args,
23fca1f5 6094 tf_warning_or_error, NULL_TREE);
76e57b45 6095 template_id = lookup_template_function (fns, arglist);
c8094d83 6096
23fca1f5 6097 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
36a117a5 6098 tmpl = determine_specialization (template_id, new_friend,
c8094d83 6099 &new_args,
5fe7b654 6100 /*need_member_template=*/0,
29a1da1c
MM
6101 TREE_VEC_LENGTH (args),
6102 tsk_none);
6e432b31 6103 return instantiate_template (tmpl, new_args, tf_error);
f84b4be9 6104 }
36a117a5 6105
23fca1f5 6106 new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
c8094d83 6107
36a117a5 6108 /* The NEW_FRIEND will look like an instantiation, to the
f84b4be9
JM
6109 compiler, but is not an instantiation from the point of view of
6110 the language. For example, we might have had:
c8094d83 6111
f84b4be9
JM
6112 template <class T> struct S {
6113 template <class U> friend void f(T, U);
6114 };
c8094d83 6115
f84b4be9
JM
6116 Then, in S<int>, template <class U> void f(int, U) is not an
6117 instantiation of anything. */
ac2b3222
AP
6118 if (new_friend == error_mark_node)
6119 return error_mark_node;
c8094d83 6120
f84b4be9
JM
6121 DECL_USE_TEMPLATE (new_friend) = 0;
6122 if (TREE_CODE (decl) == TEMPLATE_DECL)
655dc6ee
JM
6123 {
6124 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
6125 DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
6126 = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
6127 }
36a117a5 6128
92643fea
MM
6129 /* The mangled name for the NEW_FRIEND is incorrect. The function
6130 is not a template instantiation and should not be mangled like
6131 one. Therefore, we forget the mangling here; we'll recompute it
6132 later if we need it. */
36a117a5
MM
6133 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
6134 {
19e7881c 6135 SET_DECL_RTL (new_friend, NULL_RTX);
92643fea 6136 SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
36a117a5 6137 }
c8094d83 6138
6eb3bb27 6139 if (DECL_NAMESPACE_SCOPE_P (new_friend))
f84b4be9 6140 {
36a117a5 6141 tree old_decl;
fbf1c34b
MM
6142 tree new_friend_template_info;
6143 tree new_friend_result_template_info;
92da7074 6144 tree ns;
fbf1c34b
MM
6145 int new_friend_is_defn;
6146
6147 /* We must save some information from NEW_FRIEND before calling
6148 duplicate decls since that function will free NEW_FRIEND if
6149 possible. */
6150 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
5bd61841 6151 new_friend_is_defn =
c8094d83 6152 (DECL_INITIAL (DECL_TEMPLATE_RESULT
5bd61841
MM
6153 (template_for_substitution (new_friend)))
6154 != NULL_TREE);
f84b4be9 6155 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
fbf1c34b
MM
6156 {
6157 /* This declaration is a `primary' template. */
6158 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
c8094d83 6159
fbf1c34b 6160 new_friend_result_template_info
17aec3eb 6161 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
fbf1c34b
MM
6162 }
6163 else
5bd61841 6164 new_friend_result_template_info = NULL_TREE;
36a117a5 6165
b01e6d2b
JM
6166 /* Make the init_value nonzero so pushdecl knows this is a defn. */
6167 if (new_friend_is_defn)
6168 DECL_INITIAL (new_friend) = error_mark_node;
6169
1c227897
MM
6170 /* Inside pushdecl_namespace_level, we will push into the
6171 current namespace. However, the friend function should go
c6002625 6172 into the namespace of the template. */
92da7074
ML
6173 ns = decl_namespace_context (new_friend);
6174 push_nested_namespace (ns);
d63d5d0c 6175 old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
92da7074 6176 pop_nested_namespace (ns);
36a117a5 6177
0014c247
VR
6178 if (old_decl == error_mark_node)
6179 return error_mark_node;
6180
36a117a5
MM
6181 if (old_decl != new_friend)
6182 {
6183 /* This new friend declaration matched an existing
6184 declaration. For example, given:
6185
6186 template <class T> void f(T);
c8094d83
MS
6187 template <class U> class C {
6188 template <class T> friend void f(T) {}
36a117a5
MM
6189 };
6190
6191 the friend declaration actually provides the definition
6192 of `f', once C has been instantiated for some type. So,
6193 old_decl will be the out-of-class template declaration,
6194 while new_friend is the in-class definition.
6195
6196 But, if `f' was called before this point, the
6197 instantiation of `f' will have DECL_TI_ARGS corresponding
6198 to `T' but not to `U', references to which might appear
6199 in the definition of `f'. Previously, the most general
6200 template for an instantiation of `f' was the out-of-class
6201 version; now it is the in-class version. Therefore, we
6202 run through all specialization of `f', adding to their
6203 DECL_TI_ARGS appropriately. In particular, they need a
6204 new set of outer arguments, corresponding to the
c8094d83 6205 arguments for this class instantiation.
36a117a5
MM
6206
6207 The same situation can arise with something like this:
6208
6209 friend void f(int);
c8094d83 6210 template <class T> class C {
0cbd7506
MS
6211 friend void f(T) {}
6212 };
36a117a5
MM
6213
6214 when `C<int>' is instantiated. Now, `f(int)' is defined
6215 in the class. */
6216
fbf1c34b
MM
6217 if (!new_friend_is_defn)
6218 /* On the other hand, if the in-class declaration does
6219 *not* provide a definition, then we don't want to alter
6220 existing definitions. We can just leave everything
6221 alone. */
36a117a5 6222 ;
fbf1c34b 6223 else
36a117a5 6224 {
fbf1c34b
MM
6225 /* Overwrite whatever template info was there before, if
6226 any, with the new template information pertaining to
6227 the declaration. */
6228 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
6229
6230 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
8d83f792
MM
6231 reregister_specialization (new_friend,
6232 most_general_template (old_decl),
6233 old_decl);
c8094d83 6234 else
36a117a5 6235 {
fbf1c34b
MM
6236 tree t;
6237 tree new_friend_args;
6238
c8094d83 6239 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
fbf1c34b 6240 = new_friend_result_template_info;
c8094d83 6241
fbf1c34b 6242 new_friend_args = TI_ARGS (new_friend_template_info);
c8094d83 6243 for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
fbf1c34b
MM
6244 t != NULL_TREE;
6245 t = TREE_CHAIN (t))
6246 {
6247 tree spec = TREE_VALUE (t);
c8094d83
MS
6248
6249 DECL_TI_ARGS (spec)
fbf1c34b
MM
6250 = add_outermost_template_args (new_friend_args,
6251 DECL_TI_ARGS (spec));
fbf1c34b
MM
6252 }
6253
6254 /* Now, since specializations are always supposed to
6255 hang off of the most general template, we must move
6256 them. */
6257 t = most_general_template (old_decl);
6258 if (t != old_decl)
6259 {
6260 DECL_TEMPLATE_SPECIALIZATIONS (t)
6261 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
6262 DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
6263 DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
6264 }
36a117a5
MM
6265 }
6266 }
6267
6268 /* The information from NEW_FRIEND has been merged into OLD_DECL
6269 by duplicate_decls. */
6270 new_friend = old_decl;
6271 }
f84b4be9 6272 }
6e432b31 6273 else
f84b4be9 6274 {
6e432b31
KL
6275 tree context = DECL_CONTEXT (new_friend);
6276 bool dependent_p;
6277
6278 /* In the code
6279 template <class T> class C {
6280 template <class U> friend void C1<U>::f (); // case 1
6281 friend void C2<T>::f (); // case 2
6282 };
6283 we only need to make sure CONTEXT is a complete type for
6284 case 2. To distinguish between the two cases, we note that
6285 CONTEXT of case 1 remains dependent type after tsubst while
6286 this isn't true for case 2. */
6287 ++processing_template_decl;
6288 dependent_p = dependent_type_p (context);
6289 --processing_template_decl;
6290
6291 if (!dependent_p
6292 && !complete_type_or_else (context, NULL_TREE))
6293 return error_mark_node;
6294
6295 if (COMPLETE_TYPE_P (context))
6296 {
6297 /* Check to see that the declaration is really present, and,
6298 possibly obtain an improved declaration. */
6299 tree fn = check_classfn (context,
6300 new_friend, NULL_TREE);
6301
6302 if (fn)
6303 new_friend = fn;
6304 }
f84b4be9
JM
6305 }
6306
6307 return new_friend;
6308}
6309
1aed5355
MM
6310/* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
6311 template arguments, as for tsubst.
6757edfe 6312
dc957d14 6313 Returns an appropriate tsubst'd friend type or error_mark_node on
4b054b80 6314 failure. */
6757edfe
MM
6315
6316static tree
3a978d72 6317tsubst_friend_class (tree friend_tmpl, tree args)
6757edfe 6318{
1aed5355 6319 tree friend_type;
25aab5d0 6320 tree tmpl;
3e0ec82f 6321 tree context;
6757edfe 6322
3e0ec82f
MM
6323 context = DECL_CONTEXT (friend_tmpl);
6324
6325 if (context)
77adef84 6326 {
3e0ec82f
MM
6327 if (TREE_CODE (context) == NAMESPACE_DECL)
6328 push_nested_namespace (context);
6329 else
c8094d83 6330 push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
3e0ec82f 6331 }
25aab5d0 6332
105d72c5
MM
6333 /* Look for a class template declaration. We look for hidden names
6334 because two friend declarations of the same template are the
6335 same. For example, in:
6336
6337 struct A {
6338 template <typename> friend class F;
6339 };
6340 template <typename> struct B {
6341 template <typename> friend class F;
6342 };
6343
6344 both F templates are the same. */
6345 tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
6346 /*block_p=*/true, 0,
6347 LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
25aab5d0 6348
3e0ec82f
MM
6349 /* But, if we don't find one, it might be because we're in a
6350 situation like this:
77adef84 6351
3e0ec82f
MM
6352 template <class T>
6353 struct S {
6354 template <class U>
6355 friend struct S;
6356 };
6357
6358 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
6359 for `S<int>', not the TEMPLATE_DECL. */
6360 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
6361 {
10e6657a 6362 tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
3e0ec82f 6363 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
25aab5d0 6364 }
6757edfe 6365
25aab5d0 6366 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6757edfe
MM
6367 {
6368 /* The friend template has already been declared. Just
36a117a5
MM
6369 check to see that the declarations match, and install any new
6370 default parameters. We must tsubst the default parameters,
6371 of course. We only need the innermost template parameters
6372 because that is all that redeclare_class_template will look
6373 at. */
3e0ec82f
MM
6374 if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
6375 > TMPL_ARGS_DEPTH (args))
6376 {
6377 tree parms;
6378 parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
23fca1f5 6379 args, tf_warning_or_error);
3e0ec82f
MM
6380 redeclare_class_template (TREE_TYPE (tmpl), parms);
6381 }
6382
6757edfe
MM
6383 friend_type = TREE_TYPE (tmpl);
6384 }
6385 else
6386 {
6387 /* The friend template has not already been declared. In this
6388 case, the instantiation of the template class will cause the
6389 injection of this template into the global scope. */
23fca1f5 6390 tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
dca56f77
VR
6391 if (tmpl == error_mark_node)
6392 return error_mark_node;
6757edfe
MM
6393
6394 /* The new TMPL is not an instantiation of anything, so we
0cbd7506 6395 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
6757edfe
MM
6396 the new type because that is supposed to be the corresponding
6397 template decl, i.e., TMPL. */
6398 DECL_USE_TEMPLATE (tmpl) = 0;
6399 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
6400 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
68c78847
KL
6401 CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
6402 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
6757edfe
MM
6403
6404 /* Inject this template into the global scope. */
d63d5d0c 6405 friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
6757edfe
MM
6406 }
6407
c8094d83 6408 if (context)
3e0ec82f
MM
6409 {
6410 if (TREE_CODE (context) == NAMESPACE_DECL)
6411 pop_nested_namespace (context);
6412 else
6413 pop_nested_class ();
6414 }
6415
6757edfe
MM
6416 return friend_type;
6417}
f84b4be9 6418
17f29637
KL
6419/* Returns zero if TYPE cannot be completed later due to circularity.
6420 Otherwise returns one. */
6421
d5372501 6422static int
3a978d72 6423can_complete_type_without_circularity (tree type)
17f29637
KL
6424{
6425 if (type == NULL_TREE || type == error_mark_node)
6426 return 0;
6427 else if (COMPLETE_TYPE_P (type))
6428 return 1;
6429 else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
6430 return can_complete_type_without_circularity (TREE_TYPE (type));
8c6ab2db
NS
6431 else if (CLASS_TYPE_P (type)
6432 && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
17f29637
KL
6433 return 0;
6434 else
6435 return 1;
6436}
6437
8d08fdba 6438tree
3a978d72 6439instantiate_class_template (tree type)
8d08fdba 6440{
7088fca9 6441 tree template, args, pattern, t, member;
36a117a5 6442 tree typedecl;
dbbf88d1 6443 tree pbinfo;
cad7e87b 6444 tree base_list;
c8094d83 6445
5566b478 6446 if (type == error_mark_node)
8d08fdba
MS
6447 return error_mark_node;
6448
c8094d83 6449 if (TYPE_BEING_DEFINED (type)
ca099ac8
MM
6450 || COMPLETE_TYPE_P (type)
6451 || dependent_type_p (type))
5566b478
MS
6452 return type;
6453
6bdb985f 6454 /* Figure out which template is being instantiated. */
36a117a5 6455 template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
50bc768d 6456 gcc_assert (TREE_CODE (template) == TEMPLATE_DECL);
73aad9b9 6457
4c571114
MM
6458 /* Determine what specialization of the original template to
6459 instantiate. */
916b63c3 6460 t = most_specialized_class (type, template);
8fbc5ae7 6461 if (t == error_mark_node)
73aad9b9 6462 {
8fbc5ae7
MM
6463 TYPE_BEING_DEFINED (type) = 1;
6464 return error_mark_node;
73aad9b9 6465 }
916b63c3
MM
6466 else if (t)
6467 {
6468 /* This TYPE is actually an instantiation of a partial
6469 specialization. We replace the innermost set of ARGS with
6470 the arguments appropriate for substitution. For example,
6471 given:
3db45ab5
MS
6472
6473 template <class T> struct S {};
916b63c3 6474 template <class T> struct S<T*> {};
6bdb985f 6475
916b63c3 6476 and supposing that we are instantiating S<int*>, ARGS will
3db45ab5 6477 presently be {int*} -- but we need {int}. */
916b63c3
MM
6478 pattern = TREE_TYPE (t);
6479 args = TREE_PURPOSE (t);
6480 }
73aad9b9 6481 else
916b63c3
MM
6482 {
6483 pattern = TREE_TYPE (template);
6484 args = CLASSTYPE_TI_ARGS (type);
6485 }
5566b478 6486
4c571114
MM
6487 /* If the template we're instantiating is incomplete, then clearly
6488 there's nothing we can do. */
d0f062fb 6489 if (!COMPLETE_TYPE_P (pattern))
f31c0a32 6490 return type;
5566b478 6491
4c571114
MM
6492 /* If we've recursively instantiated too many templates, stop. */
6493 if (! push_tinst_level (type))
f31c0a32 6494 return type;
4c571114
MM
6495
6496 /* Now we're really doing the instantiation. Mark the type as in
6497 the process of being defined. */
6498 TYPE_BEING_DEFINED (type) = 1;
6499
78757caa
KL
6500 /* We may be in the middle of deferred access check. Disable
6501 it now. */
6502 push_deferring_access_checks (dk_no_deferred);
6503
c353b8e3 6504 push_to_top_level ();
4c571114 6505
7813d14c 6506 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
8d08fdba 6507
68ea098a
NS
6508 /* Set the input location to the template definition. This is needed
6509 if tsubsting causes an error. */
12af7ba3
MM
6510 typedecl = TYPE_MAIN_DECL (type);
6511 input_location = DECL_SOURCE_LOCATION (typedecl);
6512 in_system_header = DECL_IN_SYSTEM_HEADER (typedecl);
68ea098a 6513
f7da6097 6514 TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
834c6dff
MM
6515 TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
6516 TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
f7da6097 6517 TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
f7da6097
MS
6518 TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
6519 TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
f7da6097
MS
6520 TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
6521 TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
f7da6097
MS
6522 TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
6523 TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
f7da6097
MS
6524 TYPE_PACKED (type) = TYPE_PACKED (pattern);
6525 TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
11cf4d18 6526 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
eff71ab0 6527 TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
6bdb8141
JM
6528 if (ANON_AGGR_TYPE_P (pattern))
6529 SET_ANON_AGGR_TYPE_P (type);
8d039470
MS
6530 if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
6531 {
6532 CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
6533 CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
6534 }
f7da6097 6535
dbbf88d1 6536 pbinfo = TYPE_BINFO (pattern);
1456deaf 6537
315fb5db
NS
6538 /* We should never instantiate a nested class before its enclosing
6539 class; we need to look up the nested class by name before we can
6540 instantiate it, and that lookup should instantiate the enclosing
6541 class. */
6542 gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
6543 || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
6544 || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
1456deaf 6545
cad7e87b 6546 base_list = NULL_TREE;
fa743e8c 6547 if (BINFO_N_BASE_BINFOS (pbinfo))
3fd71a52 6548 {
fa743e8c 6549 tree pbase_binfo;
a2507277 6550 tree context = TYPE_CONTEXT (type);
4514aa8c 6551 tree pushed_scope;
3fd71a52 6552 int i;
5566b478 6553
a2507277
NS
6554 /* We must enter the scope containing the type, as that is where
6555 the accessibility of types named in dependent bases are
6556 looked up from. */
4514aa8c 6557 pushed_scope = push_scope (context ? context : global_namespace);
c8094d83 6558
3fd71a52
MM
6559 /* Substitute into each of the bases to determine the actual
6560 basetypes. */
fa743e8c 6561 for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
3fd71a52
MM
6562 {
6563 tree base;
fa743e8c 6564 tree access = BINFO_BASE_ACCESS (pbinfo, i);
5d80a306
DG
6565 tree expanded_bases = NULL_TREE;
6566 int idx, len = 1;
6567
6568 if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
6569 {
6570 expanded_bases =
6571 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
6572 args, tf_error, NULL_TREE);
6573 if (expanded_bases == error_mark_node)
6574 continue;
6575
6576 len = TREE_VEC_LENGTH (expanded_bases);
6577 }
6578
6579 for (idx = 0; idx < len; idx++)
6580 {
6581 if (expanded_bases)
6582 /* Extract the already-expanded base class. */
6583 base = TREE_VEC_ELT (expanded_bases, idx);
6584 else
6585 /* Substitute to figure out the base class. */
6586 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error,
6587 NULL_TREE);
6588
6589 if (base == error_mark_node)
6590 continue;
6591
6592 base_list = tree_cons (access, base, base_list);
6593 if (BINFO_VIRTUAL_P (pbase_binfo))
6594 TREE_TYPE (base_list) = integer_type_node;
6595 }
3fd71a52 6596 }
dfbcd65a 6597
3fd71a52
MM
6598 /* The list is now in reverse order; correct that. */
6599 base_list = nreverse (base_list);
6600
4514aa8c
NS
6601 if (pushed_scope)
6602 pop_scope (pushed_scope);
3fd71a52 6603 }
cad7e87b
NS
6604 /* Now call xref_basetypes to set up all the base-class
6605 information. */
6606 xref_basetypes (type, base_list);
6607
5566b478 6608
b74a0560
MM
6609 /* Now that our base classes are set up, enter the scope of the
6610 class, so that name lookups into base classes, etc. will work
dc957d14 6611 correctly. This is precisely analogous to what we do in
b74a0560
MM
6612 begin_class_definition when defining an ordinary non-template
6613 class. */
29370796 6614 pushclass (type);
b74a0560 6615
7088fca9 6616 /* Now members are processed in the order of declaration. */
8c6ab2db
NS
6617 for (member = CLASSTYPE_DECL_LIST (pattern);
6618 member; member = TREE_CHAIN (member))
8d08fdba 6619 {
7088fca9 6620 tree t = TREE_VALUE (member);
5566b478 6621
7088fca9 6622 if (TREE_PURPOSE (member))
ed44da02 6623 {
7088fca9
KL
6624 if (TYPE_P (t))
6625 {
5e0c54e5 6626 /* Build new CLASSTYPE_NESTED_UTDS. */
8d08fdba 6627
7088fca9 6628 tree newtag;
883a2bff
MM
6629 bool class_template_p;
6630
2678bae8
VR
6631 class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
6632 && TYPE_LANG_SPECIFIC (t)
6633 && CLASSTYPE_IS_TEMPLATE (t));
883a2bff 6634 /* If the member is a class template, then -- even after
6c745393 6635 substitution -- there may be dependent types in the
883a2bff
MM
6636 template argument list for the class. We increment
6637 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
6638 that function will assume that no types are dependent
6639 when outside of a template. */
6640 if (class_template_p)
6641 ++processing_template_decl;
2678bae8 6642 newtag = tsubst (t, args, tf_error, NULL_TREE);
883a2bff
MM
6643 if (class_template_p)
6644 --processing_template_decl;
2620d095
KL
6645 if (newtag == error_mark_node)
6646 continue;
6647
7088fca9
KL
6648 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
6649 {
2678bae8
VR
6650 tree name = TYPE_IDENTIFIER (t);
6651
883a2bff 6652 if (class_template_p)
7088fca9
KL
6653 /* Unfortunately, lookup_template_class sets
6654 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
3afd2e20
NS
6655 instantiation (i.e., for the type of a member
6656 template class nested within a template class.)
6657 This behavior is required for
6658 maybe_process_partial_specialization to work
6659 correctly, but is not accurate in this case;
6660 the TAG is not an instantiation of anything.
6661 (The corresponding TEMPLATE_DECL is an
6662 instantiation, but the TYPE is not.) */
7088fca9
KL
6663 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
6664
6665 /* Now, we call pushtag to put this NEWTAG into the scope of
6666 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
6667 pushtag calling push_template_decl. We don't have to do
6668 this for enums because it will already have been done in
6669 tsubst_enum. */
6670 if (name)
6671 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
bd3d082e 6672 pushtag (name, newtag, /*tag_scope=*/ts_current);
7088fca9
KL
6673 }
6674 }
c8094d83 6675 else if (TREE_CODE (t) == FUNCTION_DECL
7088fca9
KL
6676 || DECL_FUNCTION_TEMPLATE_P (t))
6677 {
6678 /* Build new TYPE_METHODS. */
fecafe5e 6679 tree r;
c8094d83 6680
fecafe5e 6681 if (TREE_CODE (t) == TEMPLATE_DECL)
9579624e 6682 ++processing_template_decl;
fecafe5e
NS
6683 r = tsubst (t, args, tf_error, NULL_TREE);
6684 if (TREE_CODE (t) == TEMPLATE_DECL)
9579624e 6685 --processing_template_decl;
7088fca9 6686 set_current_access_from_decl (r);
7088fca9
KL
6687 finish_member_declaration (r);
6688 }
6689 else
6690 {
6691 /* Build new TYPE_FIELDS. */
55a3debe
DG
6692 if (TREE_CODE (t) == STATIC_ASSERT)
6693 {
6694 tree condition =
6695 tsubst_expr (STATIC_ASSERT_CONDITION (t), args,
6696 tf_warning_or_error, NULL_TREE,
6697 /*integral_constant_expression_p=*/true);
6698 finish_static_assert (condition,
6699 STATIC_ASSERT_MESSAGE (t),
6700 STATIC_ASSERT_SOURCE_LOCATION (t),
6701 /*member_p=*/true);
6702 }
6703 else if (TREE_CODE (t) != CONST_DECL)
7088fca9
KL
6704 {
6705 tree r;
fa8d6e85 6706
d479d37f
NS
6707 /* The the file and line for this declaration, to
6708 assist in error message reporting. Since we
6709 called push_tinst_level above, we don't need to
6710 restore these. */
f31686a3 6711 input_location = DECL_SOURCE_LOCATION (t);
fa8d6e85 6712
fb5ce3c9 6713 if (TREE_CODE (t) == TEMPLATE_DECL)
9579624e 6714 ++processing_template_decl;
23fca1f5 6715 r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
fb5ce3c9 6716 if (TREE_CODE (t) == TEMPLATE_DECL)
9579624e 6717 --processing_template_decl;
7088fca9
KL
6718 if (TREE_CODE (r) == VAR_DECL)
6719 {
b794e321
MM
6720 /* In [temp.inst]:
6721
6722 [t]he initialization (and any associated
6723 side-effects) of a static data member does
6724 not occur unless the static data member is
6725 itself used in a way that requires the
6726 definition of the static data member to
3db45ab5 6727 exist.
b794e321
MM
6728
6729 Therefore, we do not substitute into the
3db45ab5
MS
6730 initialized for the static data member here. */
6731 finish_static_data_member_decl
6732 (r,
6733 /*init=*/NULL_TREE,
d174af6c 6734 /*init_const_expr_p=*/false,
3db45ab5 6735 /*asmspec_tree=*/NULL_TREE,
b794e321 6736 /*flags=*/0);
7088fca9
KL
6737 if (DECL_INITIALIZED_IN_CLASS_P (r))
6738 check_static_variable_definition (r, TREE_TYPE (r));
6739 }
6740 else if (TREE_CODE (r) == FIELD_DECL)
6741 {
6742 /* Determine whether R has a valid type and can be
6743 completed later. If R is invalid, then it is
6744 replaced by error_mark_node so that it will not be
6745 added to TYPE_FIELDS. */
6746 tree rtype = TREE_TYPE (r);
6747 if (can_complete_type_without_circularity (rtype))
6748 complete_type (rtype);
6749
6750 if (!COMPLETE_TYPE_P (rtype))
6751 {
6752 cxx_incomplete_type_error (r, rtype);
0cbd7506 6753 r = error_mark_node;
7088fca9
KL
6754 }
6755 }
5566b478 6756
7088fca9
KL
6757 /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
6758 such a thing will already have been added to the field
6759 list by tsubst_enum in finish_member_declaration in the
5e0c54e5 6760 CLASSTYPE_NESTED_UTDS case above. */
7088fca9
KL
6761 if (!(TREE_CODE (r) == TYPE_DECL
6762 && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
43b26a01 6763 && DECL_ARTIFICIAL (r)))
7088fca9
KL
6764 {
6765 set_current_access_from_decl (r);
6766 finish_member_declaration (r);
6767 }
0cbd7506 6768 }
7088fca9 6769 }
61fc8c9e 6770 }
7088fca9
KL
6771 else
6772 {
6773 if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
6774 {
6775 /* Build new CLASSTYPE_FRIEND_CLASSES. */
6776
6777 tree friend_type = t;
b939a023 6778 bool adjust_processing_template_decl = false;
1aed5355 6779
7088fca9 6780 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
b939a023 6781 {
5a24482e 6782 /* template <class T> friend class C; */
b939a023 6783 friend_type = tsubst_friend_class (friend_type, args);
0cbd7506 6784 adjust_processing_template_decl = true;
b939a023
KL
6785 }
6786 else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
6787 {
5a24482e 6788 /* template <class T> friend class C::D; */
b939a023 6789 friend_type = tsubst (friend_type, args,
23fca1f5 6790 tf_warning_or_error, NULL_TREE);
b939a023
KL
6791 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
6792 friend_type = TREE_TYPE (friend_type);
0cbd7506 6793 adjust_processing_template_decl = true;
b939a023
KL
6794 }
6795 else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
6796 {
5a24482e
KL
6797 /* This could be either
6798
6799 friend class T::C;
6800
6801 when dependent_type_p is false or
6802
6803 template <class U> friend class T::C;
6804
6805 otherwise. */
b939a023 6806 friend_type = tsubst (friend_type, args,
23fca1f5 6807 tf_warning_or_error, NULL_TREE);
b939a023
KL
6808 /* Bump processing_template_decl for correct
6809 dependent_type_p calculation. */
6810 ++processing_template_decl;
6811 if (dependent_type_p (friend_type))
6812 adjust_processing_template_decl = true;
6813 --processing_template_decl;
6814 }
5a24482e
KL
6815 else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
6816 && hidden_name_p (TYPE_NAME (friend_type)))
7088fca9 6817 {
5a24482e
KL
6818 /* friend class C;
6819
6820 where C hasn't been declared yet. Let's lookup name
6821 from namespace scope directly, bypassing any name that
6822 come from dependent base class. */
7088fca9
KL
6823 tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
6824
6825 /* The call to xref_tag_from_type does injection for friend
6826 classes. */
6827 push_nested_namespace (ns);
c8094d83
MS
6828 friend_type =
6829 xref_tag_from_type (friend_type, NULL_TREE,
5a24482e 6830 /*tag_scope=*/ts_current);
7088fca9
KL
6831 pop_nested_namespace (ns);
6832 }
5a24482e
KL
6833 else if (uses_template_parms (friend_type))
6834 /* friend class C<T>; */
6835 friend_type = tsubst (friend_type, args,
23fca1f5 6836 tf_warning_or_error, NULL_TREE);
5a24482e
KL
6837 /* Otherwise it's
6838
6839 friend class C;
6840
6841 where C is already declared or
6842
6843 friend class C<int>;
6844
0cbd7506 6845 We don't have to do anything in these cases. */
1aed5355 6846
b939a023 6847 if (adjust_processing_template_decl)
7088fca9
KL
6848 /* Trick make_friend_class into realizing that the friend
6849 we're adding is a template, not an ordinary class. It's
6850 important that we use make_friend_class since it will
6851 perform some error-checking and output cross-reference
6852 information. */
6853 ++processing_template_decl;
fc378698 6854
b939a023 6855 if (friend_type != error_mark_node)
0cbd7506 6856 make_friend_class (type, friend_type, /*complain=*/false);
fc378698 6857
b939a023 6858 if (adjust_processing_template_decl)
7088fca9
KL
6859 --processing_template_decl;
6860 }
6861 else
9579624e
KL
6862 {
6863 /* Build new DECL_FRIENDLIST. */
6864 tree r;
6865
6e432b31
KL
6866 /* The the file and line for this declaration, to
6867 assist in error message reporting. Since we
6868 called push_tinst_level above, we don't need to
6869 restore these. */
6870 input_location = DECL_SOURCE_LOCATION (t);
6871
9579624e 6872 if (TREE_CODE (t) == TEMPLATE_DECL)
cad7e87b
NS
6873 {
6874 ++processing_template_decl;
6875 push_deferring_access_checks (dk_no_check);
6876 }
c8094d83 6877
9579624e 6878 r = tsubst_friend_function (t, args);
9579624e 6879 add_friend (type, r, /*complain=*/false);
cad7e87b
NS
6880 if (TREE_CODE (t) == TEMPLATE_DECL)
6881 {
6882 pop_deferring_access_checks ();
6883 --processing_template_decl;
6884 }
9579624e 6885 }
7088fca9
KL
6886 }
6887 }
5566b478 6888
61a127b3
MM
6889 /* Set the file and line number information to whatever is given for
6890 the class itself. This puts error messages involving generated
6891 implicit functions at a predictable point, and the same point
6892 that would be used for non-template classes. */
f31686a3 6893 input_location = DECL_SOURCE_LOCATION (typedecl);
6de9cd9a 6894
61a127b3 6895 unreverse_member_declarations (type);
9f33663b 6896 finish_struct_1 (type);
5524676d 6897 TYPE_BEING_DEFINED (type) = 0;
8d08fdba 6898
9188c363
MM
6899 /* Now that the class is complete, instantiate default arguments for
6900 any member functions. We don't do this earlier because the
6901 default arguments may reference members of the class. */
6902 if (!PRIMARY_TEMPLATE_P (template))
6903 for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
c8094d83 6904 if (TREE_CODE (t) == FUNCTION_DECL
dc957d14 6905 /* Implicitly generated member functions will not have template
9188c363
MM
6906 information; they are not instantiations, but instead are
6907 created "fresh" for each instantiation. */
6908 && DECL_TEMPLATE_INFO (t))
6909 tsubst_default_arguments (t);
6910
b74a0560 6911 popclass ();
5566b478 6912 pop_from_top_level ();
78757caa 6913 pop_deferring_access_checks ();
5566b478
MS
6914 pop_tinst_level ();
6915
4684cd27
MM
6916 /* The vtable for a template class can be emitted in any translation
6917 unit in which the class is instantiated. When there is no key
6918 method, however, finish_struct_1 will already have added TYPE to
6919 the keyed_classes list. */
6920 if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
9aad8f83
MA
6921 keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
6922
5566b478 6923 return type;
8d08fdba
MS
6924}
6925
00d3396f 6926static tree
a91db711 6927tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
00d3396f 6928{
a91db711 6929 tree r;
c8094d83 6930
a91db711
NS
6931 if (!t)
6932 r = t;
6933 else if (TYPE_P (t))
6934 r = tsubst (t, args, complain, in_decl);
6935 else
00d3396f 6936 {
015c2c66
MM
6937 r = tsubst_expr (t, args, complain, in_decl,
6938 /*integral_constant_expression_p=*/true);
6f25cb35 6939 r = fold_non_dependent_expr (r);
bd83b409 6940 }
5d80a306
DG
6941 return r;
6942}
6943
6944/* Substitute ARGS into T, which is an pack expansion
6945 (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
6946 TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
6947 (if only a partial substitution could be performed) or
6948 ERROR_MARK_NODE if there was an error. */
6949tree
6950tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
6951 tree in_decl)
6952{
6953 tree pattern;
6954 tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
6955 tree first_arg_pack; int i, len = -1;
6956 tree result;
6957 int incomplete = 0;
6958
6959 gcc_assert (PACK_EXPANSION_P (t));
6960 pattern = PACK_EXPANSION_PATTERN (t);
6961
6962 /* Determine the argument packs that will instantiate the parameter
6963 packs used in the expansion expression. While we're at it,
6964 compute the number of arguments to be expanded and make sure it
6965 is consistent. */
6966 for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack;
6967 pack = TREE_CHAIN (pack))
6968 {
6969 tree parm_pack = TREE_VALUE (pack);
6970 tree arg_pack = NULL_TREE;
6971 tree orig_arg = NULL_TREE;
6972
6973 if (TREE_CODE (parm_pack) == PARM_DECL)
6974 {
6975 if (local_specializations)
6976 arg_pack = retrieve_local_specialization (parm_pack);
6977 }
6978 else
6979 {
6980 int level, idx, levels;
6981 template_parm_level_and_index (parm_pack, &level, &idx);
6982
6983 levels = TMPL_ARGS_DEPTH (args);
6984 if (level <= levels)
6985 arg_pack = TMPL_ARG (args, level, idx);
6986 }
6987
6988 orig_arg = arg_pack;
6989 if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
6990 arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
6991
d393153e
DG
6992 if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
6993 /* This can only happen if we forget to expand an argument
6994 pack somewhere else. Just return an error, silently. */
6995 {
6996 result = make_tree_vec (1);
6997 TREE_VEC_ELT (result, 0) = error_mark_node;
6998 return result;
6999 }
7000
5d80a306
DG
7001 if (arg_pack)
7002 {
7003 int my_len =
7004 TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
7005
7006 /* It's all-or-nothing with incomplete argument packs. */
7007 if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7008 return error_mark_node;
7009
7010 if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7011 incomplete = 1;
7012
7013 if (len < 0)
7014 {
7015 len = my_len;
7016 first_arg_pack = arg_pack;
7017 }
7018 else if (len != my_len)
7019 {
7020 if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
7021 error ("mismatched argument pack lengths while expanding "
7022 "%<%T%>",
7023 pattern);
7024 else
7025 error ("mismatched argument pack lengths while expanding "
7026 "%<%E%>",
7027 pattern);
7028 return error_mark_node;
7029 }
7030
7031 /* Keep track of the parameter packs and their corresponding
7032 argument packs. */
7033 packs = tree_cons (parm_pack, arg_pack, packs);
7034 TREE_TYPE (packs) = orig_arg;
7035 }
7036 else
7037 /* We can't substitute for this parameter pack. */
7038 unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
7039 TREE_VALUE (pack),
7040 unsubstituted_packs);
7041 }
7042
7043 /* We cannot expand this expansion expression, because we don't have
7044 all of the argument packs we need. Substitute into the pattern
7045 and return a PACK_EXPANSION_*. The caller will need to deal with
7046 that. */
7047 if (unsubstituted_packs)
7048 return make_pack_expansion (tsubst (pattern, args, complain,
7049 in_decl));
7050
7051 /* We could not find any argument packs that work. */
7052 if (len < 0)
7053 return error_mark_node;
7054
7055 /* For each argument in each argument pack, substitute into the
7056 pattern. */
7057 result = make_tree_vec (len + incomplete);
7058 for (i = 0; i < len + incomplete; ++i)
7059 {
7060 /* For parameter pack, change the substitution of the parameter
7061 pack to the ith argument in its argument pack, then expand
7062 the pattern. */
7063 for (pack = packs; pack; pack = TREE_CHAIN (pack))
7064 {
7065 tree parm = TREE_PURPOSE (pack);
7066
7067 if (TREE_CODE (parm) == PARM_DECL)
7068 {
7069 /* Select the Ith argument from the pack. */
7070 tree arg = make_node (ARGUMENT_PACK_SELECT);
7071 ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
7072 ARGUMENT_PACK_SELECT_INDEX (arg) = i;
7073 mark_used (parm);
7074 register_local_specialization (arg, parm);
7075 }
7076 else
7077 {
7078 tree value = parm;
7079 int idx, level;
7080 template_parm_level_and_index (parm, &level, &idx);
7081
7082 if (i < len)
7083 {
7084 /* Select the Ith argument from the pack. */
7085 value = make_node (ARGUMENT_PACK_SELECT);
7086 ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
7087 ARGUMENT_PACK_SELECT_INDEX (value) = i;
7088 }
7089
7090 /* Update the corresponding argument. */
7091 TMPL_ARG (args, level, idx) = value;
7092 }
7093 }
7094
7095 /* Substitute into the PATTERN with the altered arguments. */
7096 if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
7097 TREE_VEC_ELT (result, i) =
7098 tsubst_expr (pattern, args, complain, in_decl,
7099 /*integral_constant_expression_p=*/false);
7100 else
7101 TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
7102
7103 if (i == len)
7104 /* When we have incomplete argument packs, the last "expanded"
7105 result is itself a pack expansion, which allows us
7106 to deduce more arguments. */
7107 TREE_VEC_ELT (result, i) =
7108 make_pack_expansion (TREE_VEC_ELT (result, i));
7109
7110 if (TREE_VEC_ELT (result, i) == error_mark_node)
7111 {
7112 result = error_mark_node;
7113 break;
7114 }
7115 }
7116
7117 /* Update ARGS to restore the substitution from parameter packs to
7118 their argument packs. */
7119 for (pack = packs; pack; pack = TREE_CHAIN (pack))
7120 {
7121 tree parm = TREE_PURPOSE (pack);
7122
7123 if (TREE_CODE (parm) == PARM_DECL)
7124 register_local_specialization (TREE_TYPE (pack), parm);
7125 else
7126 {
7127 int idx, level;
7128 template_parm_level_and_index (parm, &level, &idx);
7129
7130 /* Update the corresponding argument. */
7131 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
7132 TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
7133 TREE_TYPE (pack);
7134 else
7135 TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
7136 }
7137 }
7138
7139 return result;
bd83b409
NS
7140}
7141
a91db711 7142/* Substitute ARGS into the vector or list of template arguments T. */
830bfa74 7143
e9659ab0 7144static tree
a91db711 7145tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
830bfa74 7146{
5d80a306 7147 tree orig_t = t;
bf12d54d 7148 int len = TREE_VEC_LENGTH (t);
5d80a306 7149 int need_new = 0, i, expanded_len_adjust = 0, out;
67f5655f 7150 tree *elts = (tree *) alloca (len * sizeof (tree));
c8094d83 7151
830bfa74
MM
7152 for (i = 0; i < len; i++)
7153 {
bf12d54d
NS
7154 tree orig_arg = TREE_VEC_ELT (t, i);
7155 tree new_arg;
a91db711 7156
bf12d54d
NS
7157 if (TREE_CODE (orig_arg) == TREE_VEC)
7158 new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
5d80a306
DG
7159 else if (PACK_EXPANSION_P (orig_arg))
7160 {
7161 /* Substitute into an expansion expression. */
7162 new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
7163
7164 if (TREE_CODE (new_arg) == TREE_VEC)
7165 /* Add to the expanded length adjustment the number of
7166 expanded arguments. We subtract one from this
7167 measurement, because the argument pack expression
7168 itself is already counted as 1 in
7169 LEN. EXPANDED_LEN_ADJUST can actually be negative, if
7170 the argument pack is empty. */
7171 expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
7172 }
7173 else if (ARGUMENT_PACK_P (orig_arg))
7174 {
7175 /* Substitute into each of the arguments. */
7176 new_arg = make_node (TREE_CODE (orig_arg));
7177
7178 SET_ARGUMENT_PACK_ARGS (
7179 new_arg,
7180 tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
7181 args, complain, in_decl));
7182
7183 if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
7184 new_arg = error_mark_node;
7185
7186 if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
7187 TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
7188 complain, in_decl);
7189 TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
7190
7191 if (TREE_TYPE (new_arg) == error_mark_node)
7192 new_arg = error_mark_node;
7193 }
7194 }
830bfa74 7195 else
a91db711 7196 new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
c8094d83 7197
a91db711 7198 if (new_arg == error_mark_node)
08e72a19
JM
7199 return error_mark_node;
7200
a91db711
NS
7201 elts[i] = new_arg;
7202 if (new_arg != orig_arg)
830bfa74
MM
7203 need_new = 1;
7204 }
c8094d83 7205
830bfa74
MM
7206 if (!need_new)
7207 return t;
a91db711 7208
5d80a306
DG
7209 /* Make space for the expanded arguments coming from template
7210 argument packs. */
7211 t = make_tree_vec (len + expanded_len_adjust);
7212 for (i = 0, out = 0; i < len; i++)
7213 {
7214 if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
7215 || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
7216 && TREE_CODE (elts[i]) == TREE_VEC)
7217 {
7218 int idx;
7219
7220 /* Now expand the template argument pack "in place". */
7221 for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
7222 TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
7223 }
7224 else
7225 {
7226 TREE_VEC_ELT (t, out) = elts[i];
7227 out++;
7228 }
7229 }
c8094d83 7230
830bfa74
MM
7231 return t;
7232}
7233
36a117a5
MM
7234/* Return the result of substituting ARGS into the template parameters
7235 given by PARMS. If there are m levels of ARGS and m + n levels of
7236 PARMS, then the result will contain n levels of PARMS. For
7237 example, if PARMS is `template <class T> template <class U>
7238 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
7239 result will be `template <int*, double, class V>'. */
7240
e9659ab0 7241static tree
3a978d72 7242tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
36a117a5 7243{
f71f87f9
MM
7244 tree r = NULL_TREE;
7245 tree* new_parms;
36a117a5 7246
8ca4bf25
MM
7247 /* When substituting into a template, we must set
7248 PROCESSING_TEMPLATE_DECL as the template parameters may be
7249 dependent if they are based on one-another, and the dependency
7250 predicates are short-circuit outside of templates. */
7251 ++processing_template_decl;
7252
36a117a5
MM
7253 for (new_parms = &r;
7254 TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
7255 new_parms = &(TREE_CHAIN (*new_parms)),
7256 parms = TREE_CHAIN (parms))
7257 {
c8094d83 7258 tree new_vec =
36a117a5
MM
7259 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
7260 int i;
c8094d83 7261
36a117a5
MM
7262 for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
7263 {
42b304f1
LM
7264 tree tuple;
7265 tree default_value;
7266 tree parm_decl;
7267
7268 if (parms == error_mark_node)
7269 continue;
7270
7271 tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
7272
7273 if (tuple == error_mark_node)
7274 continue;
7275
7276 default_value = TREE_PURPOSE (tuple);
7277 parm_decl = TREE_VALUE (tuple);
833aa4c4
NS
7278
7279 parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
a207780f
VR
7280 if (TREE_CODE (parm_decl) == PARM_DECL
7281 && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
7282 parm_decl = error_mark_node;
a91db711
NS
7283 default_value = tsubst_template_arg (default_value, args,
7284 complain, NULL_TREE);
c8094d83 7285
a91db711 7286 tuple = build_tree_list (default_value, parm_decl);
833aa4c4 7287 TREE_VEC_ELT (new_vec, i) = tuple;
36a117a5 7288 }
c8094d83
MS
7289
7290 *new_parms =
7291 tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
4890c2f4 7292 - TMPL_ARGS_DEPTH (args)),
36a117a5
MM
7293 new_vec, NULL_TREE);
7294 }
7295
8ca4bf25
MM
7296 --processing_template_decl;
7297
36a117a5
MM
7298 return r;
7299}
7300
ed44da02
MM
7301/* Substitute the ARGS into the indicated aggregate (or enumeration)
7302 type T. If T is not an aggregate or enumeration type, it is
7303 handled as if by tsubst. IN_DECL is as for tsubst. If
838dfd8a 7304 ENTERING_SCOPE is nonzero, T is the context for a template which
dc957d14 7305 we are presently tsubst'ing. Return the substituted value. */
36a117a5 7306
e9659ab0 7307static tree
c8094d83 7308tsubst_aggr_type (tree t,
0cbd7506
MS
7309 tree args,
7310 tsubst_flags_t complain,
7311 tree in_decl,
7312 int entering_scope)
36a117a5
MM
7313{
7314 if (t == NULL_TREE)
7315 return NULL_TREE;
7316
7317 switch (TREE_CODE (t))
7318 {
7319 case RECORD_TYPE:
7320 if (TYPE_PTRMEMFUNC_P (t))
46c895ac 7321 return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
36a117a5 7322
f4f206f4 7323 /* Else fall through. */
ed44da02 7324 case ENUMERAL_TYPE:
36a117a5 7325 case UNION_TYPE:
5db698f6 7326 if (TYPE_TEMPLATE_INFO (t))
36a117a5
MM
7327 {
7328 tree argvec;
7329 tree context;
7330 tree r;
3489ea0c
MM
7331 bool saved_skip_evaluation;
7332
7333 /* In "sizeof(X<I>)" we need to evaluate "I". */
7334 saved_skip_evaluation = skip_evaluation;
7335 skip_evaluation = false;
36a117a5
MM
7336
7337 /* First, determine the context for the type we are looking
7338 up. */
4f7847ca
NS
7339 context = TYPE_CONTEXT (t);
7340 if (context)
7341 context = tsubst_aggr_type (context, args, complain,
36a117a5 7342 in_decl, /*entering_scope=*/1);
36a117a5
MM
7343
7344 /* Then, figure out what arguments are appropriate for the
7345 type we are trying to find. For example, given:
7346
7347 template <class T> struct S;
7348 template <class T, class U> void f(T, U) { S<U> su; }
7349
7350 and supposing that we are instantiating f<int, double>,
7351 then our ARGS will be {int, double}, but, when looking up
7352 S we only want {double}. */
a91db711
NS
7353 argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
7354 complain, in_decl);
08e72a19 7355 if (argvec == error_mark_node)
3489ea0c
MM
7356 r = error_mark_node;
7357 else
7358 {
7359 r = lookup_template_class (t, argvec, in_decl, context,
7360 entering_scope, complain);
7361 r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7362 }
3db45ab5 7363
3489ea0c 7364 skip_evaluation = saved_skip_evaluation;
36a117a5 7365
3489ea0c 7366 return r;
36a117a5 7367 }
c8094d83 7368 else
36a117a5
MM
7369 /* This is not a template type, so there's nothing to do. */
7370 return t;
7371
7372 default:
4393e105 7373 return tsubst (t, args, complain, in_decl);
36a117a5
MM
7374 }
7375}
7376
9188c363
MM
7377/* Substitute into the default argument ARG (a default argument for
7378 FN), which has the indicated TYPE. */
7379
7380tree
3a978d72 7381tsubst_default_argument (tree fn, tree type, tree arg)
9188c363 7382{
2436b51f
MM
7383 tree saved_class_ptr = NULL_TREE;
7384 tree saved_class_ref = NULL_TREE;
7385
9188c363
MM
7386 /* This default argument came from a template. Instantiate the
7387 default argument here, not in tsubst. In the case of
c8094d83
MS
7388 something like:
7389
9188c363
MM
7390 template <class T>
7391 struct S {
7392 static T t();
7393 void f(T = t());
7394 };
c8094d83 7395
9188c363 7396 we must be careful to do name lookup in the scope of S<T>,
d5a10cf0 7397 rather than in the current class. */
2b59fc25 7398 push_access_scope (fn);
2436b51f
MM
7399 /* The "this" pointer is not valid in a default argument. */
7400 if (cfun)
7401 {
7402 saved_class_ptr = current_class_ptr;
7403 cp_function_chain->x_current_class_ptr = NULL_TREE;
7404 saved_class_ref = current_class_ref;
7405 cp_function_chain->x_current_class_ref = NULL_TREE;
7406 }
9188c363 7407
d5a10cf0 7408 push_deferring_access_checks(dk_no_deferred);
5a8613b2
MM
7409 /* The default argument expression may cause implicitly defined
7410 member functions to be synthesized, which will result in garbage
7411 collection. We must treat this situation as if we were within
7412 the body of function so as to avoid collecting live data on the
7413 stack. */
7414 ++function_depth;
c2ea3a40 7415 arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
015c2c66
MM
7416 tf_warning_or_error, NULL_TREE,
7417 /*integral_constant_expression_p=*/false);
5a8613b2 7418 --function_depth;
d5a10cf0
MM
7419 pop_deferring_access_checks();
7420
2436b51f
MM
7421 /* Restore the "this" pointer. */
7422 if (cfun)
7423 {
7424 cp_function_chain->x_current_class_ptr = saved_class_ptr;
7425 cp_function_chain->x_current_class_ref = saved_class_ref;
7426 }
7427
2b59fc25 7428 pop_access_scope (fn);
9188c363
MM
7429
7430 /* Make sure the default argument is reasonable. */
7431 arg = check_default_argument (type, arg);
7432
7433 return arg;
7434}
7435
7436/* Substitute into all the default arguments for FN. */
7437
7438static void
3a978d72 7439tsubst_default_arguments (tree fn)
9188c363
MM
7440{
7441 tree arg;
7442 tree tmpl_args;
7443
7444 tmpl_args = DECL_TI_ARGS (fn);
7445
7446 /* If this function is not yet instantiated, we certainly don't need
7447 its default arguments. */
7448 if (uses_template_parms (tmpl_args))
7449 return;
7450
c8094d83
MS
7451 for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
7452 arg;
9188c363
MM
7453 arg = TREE_CHAIN (arg))
7454 if (TREE_PURPOSE (arg))
c8094d83 7455 TREE_PURPOSE (arg) = tsubst_default_argument (fn,
9188c363
MM
7456 TREE_VALUE (arg),
7457 TREE_PURPOSE (arg));
7458}
7459
fc6a28d7
MM
7460/* Substitute the ARGS into the T, which is a _DECL. Return the
7461 result of the substitution. Issue error and warning messages under
7462 control of COMPLAIN. */
00d3396f 7463
e9659ab0 7464static tree
fc6a28d7 7465tsubst_decl (tree t, tree args, tsubst_flags_t complain)
8d08fdba 7466{
82a98427 7467 location_t saved_loc;
b370501f 7468 tree r = NULL_TREE;
4b2811e9 7469 tree in_decl = t;
830bfa74 7470
ae58fa02 7471 /* Set the filename and linenumber to improve error-reporting. */
82a98427 7472 saved_loc = input_location;
f31686a3 7473 input_location = DECL_SOURCE_LOCATION (t);
b7484fbe 7474
8d08fdba
MS
7475 switch (TREE_CODE (t))
7476 {
98c1c668
JM
7477 case TEMPLATE_DECL:
7478 {
28e42b7e
KL
7479 /* We can get here when processing a member function template,
7480 member class template, and template template parameter of
7481 a template class. */
98c1c668 7482 tree decl = DECL_TEMPLATE_RESULT (t);
386b8a85 7483 tree spec;
28e42b7e
KL
7484 tree tmpl_args;
7485 tree full_args;
98c1c668 7486
28e42b7e 7487 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
db2767b6 7488 {
28e42b7e
KL
7489 /* Template template parameter is treated here. */
7490 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7491 if (new_type == error_mark_node)
7492 return error_mark_node;
36a117a5 7493
28e42b7e
KL
7494 r = copy_decl (t);
7495 TREE_CHAIN (r) = NULL_TREE;
7496 TREE_TYPE (r) = new_type;
7497 DECL_TEMPLATE_RESULT (r)
7498 = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
c8094d83 7499 DECL_TEMPLATE_PARMS (r)
28e42b7e
KL
7500 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7501 complain);
7502 TYPE_NAME (new_type) = r;
7503 break;
7504 }
36a117a5 7505
28e42b7e
KL
7506 /* We might already have an instance of this template.
7507 The ARGS are for the surrounding class type, so the
7508 full args contain the tsubst'd args for the context,
7509 plus the innermost args from the template decl. */
c8094d83 7510 tmpl_args = DECL_CLASS_TEMPLATE_P (t)
28e42b7e
KL
7511 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
7512 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
8ca4bf25
MM
7513 /* Because this is a template, the arguments will still be
7514 dependent, even after substitution. If
7515 PROCESSING_TEMPLATE_DECL is not set, the dependency
7516 predicates will short-circuit. */
7517 ++processing_template_decl;
28e42b7e
KL
7518 full_args = tsubst_template_args (tmpl_args, args,
7519 complain, in_decl);
8ca4bf25 7520 --processing_template_decl;
bf2f7328
VR
7521 if (full_args == error_mark_node)
7522 return error_mark_node;
28e42b7e
KL
7523
7524 /* tsubst_template_args doesn't copy the vector if
7525 nothing changed. But, *something* should have
7526 changed. */
7527 gcc_assert (full_args != tmpl_args);
7528
7529 spec = retrieve_specialization (t, full_args,
7530 /*class_specializations_p=*/true);
7531 if (spec != NULL_TREE)
7532 {
7533 r = spec;
7534 break;
db2767b6 7535 }
98c1c668
JM
7536
7537 /* Make a new template decl. It will be similar to the
c8094d83 7538 original, but will record the current template arguments.
98c1c668
JM
7539 We also create a new function declaration, which is just
7540 like the old one, but points to this new template, rather
7541 than the old one. */
0acf7199 7542 r = copy_decl (t);
50bc768d 7543 gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
ae58fa02 7544 TREE_CHAIN (r) = NULL_TREE;
db2767b6 7545
ae58fa02 7546 DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
93cdc044
JM
7547
7548 if (TREE_CODE (decl) == TYPE_DECL)
7549 {
8ca4bf25
MM
7550 tree new_type;
7551 ++processing_template_decl;
7552 new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
3db45ab5 7553 --processing_template_decl;
2620d095
KL
7554 if (new_type == error_mark_node)
7555 return error_mark_node;
7556
ae58fa02
MM
7557 TREE_TYPE (r) = new_type;
7558 CLASSTYPE_TI_TEMPLATE (new_type) = r;
17aec3eb 7559 DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
ae58fa02 7560 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
8ca4bf25 7561 DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
93cdc044
JM
7562 }
7563 else
7564 {
8ca4bf25
MM
7565 tree new_decl;
7566 ++processing_template_decl;
7567 new_decl = tsubst (decl, args, complain, in_decl);
7568 --processing_template_decl;
caec1dc0
KL
7569 if (new_decl == error_mark_node)
7570 return error_mark_node;
17aec3eb
RK
7571
7572 DECL_TEMPLATE_RESULT (r) = new_decl;
ae58fa02
MM
7573 DECL_TI_TEMPLATE (new_decl) = r;
7574 TREE_TYPE (r) = TREE_TYPE (new_decl);
7575 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
3db45ab5 7576 DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
93cdc044
JM
7577 }
7578
ae58fa02
MM
7579 SET_DECL_IMPLICIT_INSTANTIATION (r);
7580 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
7581 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
98c1c668
JM
7582
7583 /* The template parameters for this new template are all the
7584 template parameters for the old template, except the
c6002625 7585 outermost level of parameters. */
c8094d83 7586 DECL_TEMPLATE_PARMS (r)
4393e105 7587 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
c2ea3a40 7588 complain);
98c1c668 7589
93cdc044 7590 if (PRIMARY_TEMPLATE_P (t))
ae58fa02 7591 DECL_PRIMARY_TEMPLATE (r) = r;
93cdc044 7592
8c6ab2db
NS
7593 if (TREE_CODE (decl) != TYPE_DECL)
7594 /* Record this non-type partial instantiation. */
c8094d83 7595 register_specialization (r, t,
d63d5d0c
ILT
7596 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
7597 false);
98c1c668 7598 }
ae58fa02 7599 break;
8d08fdba
MS
7600
7601 case FUNCTION_DECL:
7602 {
386b8a85 7603 tree ctx;
87603ed0 7604 tree argvec = NULL_TREE;
cf38f48a 7605 tree *friends;
36a117a5 7606 tree gen_tmpl;
fc6a28d7 7607 tree type;
5566b478 7608 int member;
d8c4447d
MM
7609 int args_depth;
7610 int parms_depth;
5566b478 7611
36a117a5 7612 /* Nobody should be tsubst'ing into non-template functions. */
50bc768d 7613 gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
36a117a5
MM
7614
7615 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
7616 {
7617 tree spec;
00cf3e31
MM
7618 bool dependent_p;
7619
7620 /* If T is not dependent, just return it. We have to
7621 increment PROCESSING_TEMPLATE_DECL because
7622 value_dependent_expression_p assumes that nothing is
7623 dependent when PROCESSING_TEMPLATE_DECL is zero. */
7624 ++processing_template_decl;
7625 dependent_p = value_dependent_expression_p (t);
7626 --processing_template_decl;
7627 if (!dependent_p)
7628 return t;
36a117a5
MM
7629
7630 /* Calculate the most general template of which R is a
7631 specialization, and the complete set of arguments used to
7632 specialize R. */
7633 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
c8094d83 7634 argvec = tsubst_template_args (DECL_TI_ARGS
a91db711 7635 (DECL_TEMPLATE_RESULT (gen_tmpl)),
c8094d83 7636 args, complain, in_decl);
36a117a5
MM
7637
7638 /* Check to see if we already have this specialization. */
c7222c02
MM
7639 spec = retrieve_specialization (gen_tmpl, argvec,
7640 /*class_specializations_p=*/false);
7ddedda4 7641
36a117a5 7642 if (spec)
ae58fa02
MM
7643 {
7644 r = spec;
7645 break;
7646 }
d8c4447d 7647
f9a7ae04
MM
7648 /* We can see more levels of arguments than parameters if
7649 there was a specialization of a member template, like
7650 this:
7651
0cbd7506 7652 template <class T> struct S { template <class U> void f(); }
c8094d83 7653 template <> template <class U> void S<int>::f(U);
f9a7ae04 7654
dc957d14 7655 Here, we'll be substituting into the specialization,
f9a7ae04
MM
7656 because that's where we can find the code we actually
7657 want to generate, but we'll have enough arguments for
c8094d83 7658 the most general template.
f9a7ae04
MM
7659
7660 We also deal with the peculiar case:
d8c4447d 7661
c8094d83 7662 template <class T> struct S {
d8c4447d
MM
7663 template <class U> friend void f();
7664 };
74b846e0 7665 template <class U> void f() {}
d8c4447d
MM
7666 template S<int>;
7667 template void f<double>();
7668
7669 Here, the ARGS for the instantiation of will be {int,
7670 double}. But, we only need as many ARGS as there are
7671 levels of template parameters in CODE_PATTERN. We are
7672 careful not to get fooled into reducing the ARGS in
7673 situations like:
7674
7675 template <class T> struct S { template <class U> void f(U); }
7676 template <class T> template <> void S<T>::f(int) {}
7677
7678 which we can spot because the pattern will be a
7679 specialization in this case. */
7680 args_depth = TMPL_ARGS_DEPTH (args);
c8094d83
MS
7681 parms_depth =
7682 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
d8c4447d
MM
7683 if (args_depth > parms_depth
7684 && !DECL_TEMPLATE_SPECIALIZATION (t))
f9a7ae04 7685 args = get_innermost_template_args (args, parms_depth);
36a117a5
MM
7686 }
7687 else
7688 {
7689 /* This special case arises when we have something like this:
7690
0cbd7506 7691 template <class T> struct S {
c8094d83 7692 friend void f<int>(int, double);
36a117a5
MM
7693 };
7694
7695 Here, the DECL_TI_TEMPLATE for the friend declaration
10b1d5e7
MM
7696 will be an IDENTIFIER_NODE. We are being called from
7697 tsubst_friend_function, and we want only to create a
7698 new decl (R) with appropriate types so that we can call
7699 determine_specialization. */
36a117a5
MM
7700 gen_tmpl = NULL_TREE;
7701 }
7702
6eb3bb27 7703 if (DECL_CLASS_SCOPE_P (t))
8d08fdba 7704 {
5566b478
MS
7705 if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
7706 member = 2;
7707 else
7708 member = 1;
c8094d83 7709 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
8c6ab2db 7710 complain, t, /*entering_scope=*/1);
5566b478
MS
7711 }
7712 else
7713 {
7714 member = 0;
4f1c5b7d 7715 ctx = DECL_CONTEXT (t);
5566b478 7716 }
fc6a28d7 7717 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
b3da7bb1
MM
7718 if (type == error_mark_node)
7719 return error_mark_node;
8d08fdba 7720
5566b478 7721 /* We do NOT check for matching decls pushed separately at this
0cbd7506
MS
7722 point, as they may not represent instantiations of this
7723 template, and in any case are considered separate under the
7724 discrete model. */
0acf7199 7725 r = copy_decl (t);
e1467ff2 7726 DECL_USE_TEMPLATE (r) = 0;
5566b478 7727 TREE_TYPE (r) = type;
92643fea
MM
7728 /* Clear out the mangled name and RTL for the instantiation. */
7729 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
7730 SET_DECL_RTL (r, NULL_RTX);
5bd61841 7731 DECL_INITIAL (r) = NULL_TREE;
4f1c5b7d 7732 DECL_CONTEXT (r) = ctx;
5566b478 7733
c8094d83 7734 if (member && DECL_CONV_FN_P (r))
1f84ec23
MM
7735 /* Type-conversion operator. Reconstruct the name, in
7736 case it's the name of one of the template's parameters. */
7737 DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
5566b478 7738
4393e105 7739 DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
c2ea3a40 7740 complain, t);
477f6664 7741 DECL_RESULT (r) = NULL_TREE;
711734a9
JM
7742
7743 TREE_STATIC (r) = 0;
7744 TREE_PUBLIC (r) = TREE_PUBLIC (t);
7745 DECL_EXTERNAL (r) = 1;
4684cd27
MM
7746 /* If this is an instantiation of a function with internal
7747 linkage, we already know what object file linkage will be
7748 assigned to the instantiation. */
7749 DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
711734a9
JM
7750 DECL_DEFER_OUTPUT (r) = 0;
7751 TREE_CHAIN (r) = NULL_TREE;
7752 DECL_PENDING_INLINE_INFO (r) = 0;
59026e79 7753 DECL_PENDING_INLINE_P (r) = 0;
655dc6ee 7754 DECL_SAVED_TREE (r) = NULL_TREE;
711734a9 7755 TREE_USED (r) = 0;
db9b2174
MM
7756 if (DECL_CLONED_FUNCTION (r))
7757 {
7758 DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
c2ea3a40 7759 args, complain, t);
db9b2174
MM
7760 TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
7761 TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
7762 }
711734a9 7763
92643fea
MM
7764 /* Set up the DECL_TEMPLATE_INFO for R. There's no need to do
7765 this in the special friend case mentioned above where
7766 GEN_TMPL is NULL. */
36a117a5 7767 if (gen_tmpl)
386b8a85 7768 {
c8094d83 7769 DECL_TEMPLATE_INFO (r)
e1b3e07d 7770 = tree_cons (gen_tmpl, argvec, NULL_TREE);
36a117a5 7771 SET_DECL_IMPLICIT_INSTANTIATION (r);
d63d5d0c 7772 register_specialization (r, gen_tmpl, argvec, false);
36a117a5 7773
9188c363
MM
7774 /* We're not supposed to instantiate default arguments
7775 until they are called, for a template. But, for a
7776 declaration like:
7777
0cbd7506
MS
7778 template <class T> void f ()
7779 { extern void g(int i = T()); }
c8094d83 7780
9188c363
MM
7781 we should do the substitution when the template is
7782 instantiated. We handle the member function case in
7783 instantiate_class_template since the default arguments
7784 might refer to other members of the class. */
7785 if (!member
7786 && !PRIMARY_TEMPLATE_P (gen_tmpl)
7787 && !uses_template_parms (argvec))
7788 tsubst_default_arguments (r);
386b8a85 7789 }
c43e95f8
MM
7790 else
7791 DECL_TEMPLATE_INFO (r) = NULL_TREE;
f181d4ae 7792
cf38f48a
MM
7793 /* Copy the list of befriending classes. */
7794 for (friends = &DECL_BEFRIENDING_CLASSES (r);
7795 *friends;
c8094d83 7796 friends = &TREE_CHAIN (*friends))
cf38f48a
MM
7797 {
7798 *friends = copy_node (*friends);
7799 TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
c2ea3a40 7800 args, complain,
cf38f48a
MM
7801 in_decl);
7802 }
7803
212e7048 7804 if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
f181d4ae
MM
7805 {
7806 maybe_retrofit_in_chrg (r);
212e7048
MM
7807 if (DECL_CONSTRUCTOR_P (r))
7808 grok_ctor_properties (ctx, r);
2be678ff
JM
7809 /* If this is an instantiation of a member template, clone it.
7810 If it isn't, that'll be handled by
7811 clone_constructors_and_destructors. */
5e818b93 7812 if (PRIMARY_TEMPLATE_P (gen_tmpl))
271e6f02 7813 clone_function_decl (r, /*update_method_vec_p=*/0);
f181d4ae 7814 }
398cd199
VR
7815 else if (IDENTIFIER_OPNAME_P (DECL_NAME (r))
7816 && !grok_op_properties (r, (complain & tf_error) != 0))
7817 return error_mark_node;
c8b2e872
MM
7818
7819 if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
7820 SET_DECL_FRIEND_CONTEXT (r,
7821 tsubst (DECL_FRIEND_CONTEXT (t),
7822 args, complain, in_decl));
b9e75696
JM
7823
7824 /* Possibly limit visibility based on template args. */
7825 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
b70f0f48
JM
7826 if (DECL_VISIBILITY_SPECIFIED (t))
7827 {
7828 DECL_VISIBILITY_SPECIFIED (r) = 0;
7829 DECL_ATTRIBUTES (r)
7830 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
7831 }
b9e75696 7832 determine_visibility (r);
8d08fdba 7833 }
ae58fa02 7834 break;
8d08fdba
MS
7835
7836 case PARM_DECL:
7837 {
5d80a306
DG
7838 tree type = NULL_TREE;
7839 int i, len = 1;
7840 tree expanded_types = NULL_TREE;
7841 tree prev_r = NULL_TREE;
7842 tree first_r = NULL_TREE;
1b8899d1 7843
5d80a306
DG
7844 if (FUNCTION_PARAMETER_PACK_P (t))
7845 {
7846 /* If there is a local specialization that isn't a
7847 parameter pack, it means that we're doing a "simple"
7848 substitution from inside tsubst_pack_expansion. Just
a757b5c5 7849 return the local specialization (which will be a single
5d80a306
DG
7850 parm). */
7851 tree spec = NULL_TREE;
7852 if (local_specializations)
7853 spec = retrieve_local_specialization (t);
7854 if (spec
7855 && TREE_CODE (spec) == PARM_DECL
7856 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
7857 return spec;
7858
7859 /* Expand the TYPE_PACK_EXPANSION that provides the types for
7860 the parameters in this function parameter pack. */
7861 expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
7862 complain, in_decl);
7863 if (TREE_CODE (expanded_types) == TREE_VEC)
7864 {
7865 len = TREE_VEC_LENGTH (expanded_types);
7866
7867 /* Zero-length parameter packs are boring. Just substitute
7868 into the chain. */
7869 if (len == 0)
7870 return tsubst (TREE_CHAIN (t), args, complain,
7871 TREE_CHAIN (t));
7872 }
7873 else
7874 {
7875 /* All we did was update the type. Make a note of that. */
7876 type = expanded_types;
7877 expanded_types = NULL_TREE;
7878 }
7879 }
db2767b6 7880
5d80a306
DG
7881 /* Loop through all of the parameter's we'll build. When T is
7882 a function parameter pack, LEN is the number of expanded
7883 types in EXPANDED_TYPES; otherwise, LEN is 1. */
7884 r = NULL_TREE;
7885 for (i = 0; i < len; ++i)
7886 {
7887 prev_r = r;
7888 r = copy_node (t);
7889 if (DECL_TEMPLATE_PARM_P (t))
7890 SET_DECL_TEMPLATE_PARM_P (r);
7891
7892 if (expanded_types)
7893 /* We're on the Ith parameter of the function parameter
7894 pack. */
7895 {
7896 /* Get the Ith type. */
7897 type = TREE_VEC_ELT (expanded_types, i);
7898
7899 if (DECL_NAME (r))
7900 /* Rename the parameter to include the index. */
7901 DECL_NAME (r) =
7902 make_ith_pack_parameter_name (DECL_NAME (r), i);
7903 }
7904 else if (!type)
7905 /* We're dealing with a normal parameter. */
7906 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7907
7908 type = type_decays_to (type);
7909 TREE_TYPE (r) = type;
7910 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
7911
7912 if (DECL_INITIAL (r))
7913 {
7914 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
7915 DECL_INITIAL (r) = TREE_TYPE (r);
7916 else
7917 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
7918 complain, in_decl);
7919 }
7920
7921 DECL_CONTEXT (r) = NULL_TREE;
7922
7923 if (!DECL_TEMPLATE_PARM_P (r))
7924 DECL_ARG_TYPE (r) = type_passed_as (type);
7925
7926 /* Keep track of the first new parameter we
7927 generate. That's what will be returned to the
7928 caller. */
7929 if (!first_r)
7930 first_r = r;
7931
7932 /* Build a proper chain of parameters when substituting
7933 into a function parameter pack. */
7934 if (prev_r)
7935 TREE_CHAIN (prev_r) = r;
7936 }
8e51619a 7937
8d08fdba 7938 if (TREE_CHAIN (t))
4393e105 7939 TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
c2ea3a40 7940 complain, TREE_CHAIN (t));
5d80a306
DG
7941
7942 /* FIRST_R contains the start of the chain we've built. */
7943 r = first_r;
8d08fdba 7944 }
ae58fa02 7945 break;
8d08fdba 7946
5566b478
MS
7947 case FIELD_DECL:
7948 {
fc6a28d7
MM
7949 tree type;
7950
0acf7199 7951 r = copy_decl (t);
fc6a28d7
MM
7952 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7953 if (type == error_mark_node)
7954 return error_mark_node;
1b8899d1 7955 TREE_TYPE (r) = type;
9804209d 7956 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
1b8899d1 7957
015c2c66
MM
7958 /* DECL_INITIAL gives the number of bits in a bit-field. */
7959 DECL_INITIAL (r)
7960 = tsubst_expr (DECL_INITIAL (t), args,
7961 complain, in_decl,
7962 /*integral_constant_expression_p=*/true);
1b8899d1
MM
7963 /* We don't have to set DECL_CONTEXT here; it is set by
7964 finish_member_declaration. */
5566b478 7965 TREE_CHAIN (r) = NULL_TREE;
c8094d83 7966 if (VOID_TYPE_P (type))
dee15844 7967 error ("instantiation of %q+D as type %qT", r, type);
5566b478 7968 }
ae58fa02 7969 break;
5566b478
MS
7970
7971 case USING_DECL:
98ed9dae
NS
7972 /* We reach here only for member using decls. */
7973 if (DECL_DEPENDENT_P (t))
7974 {
7975 r = do_class_using_decl
7976 (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
7977 tsubst_copy (DECL_NAME (t), args, complain, in_decl));
7978 if (!r)
7979 r = error_mark_node;
7980 }
7981 else
7982 {
7983 r = copy_node (t);
7984 TREE_CHAIN (r) = NULL_TREE;
7985 }
ae58fa02 7986 break;
5566b478 7987
9188c363 7988 case TYPE_DECL:
5566b478
MS
7989 case VAR_DECL:
7990 {
1cea0434
KG
7991 tree argvec = NULL_TREE;
7992 tree gen_tmpl = NULL_TREE;
36a117a5 7993 tree spec;
1cea0434 7994 tree tmpl = NULL_TREE;
9188c363 7995 tree ctx;
fc6a28d7 7996 tree type = NULL_TREE;
f604fc3b 7997 bool local_p;
9188c363 7998
fc6a28d7
MM
7999 if (TREE_CODE (t) == TYPE_DECL)
8000 {
8001 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8002 if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
8003 || t == TYPE_MAIN_DECL (TREE_TYPE (t)))
8004 {
8005 /* If this is the canonical decl, we don't have to
8006 mess with instantiations, and often we can't (for
8007 typename, template type parms and such). Note that
8008 TYPE_NAME is not correct for the above test if
8009 we've copied the type for a typedef. */
8010 r = TYPE_NAME (type);
8011 break;
8012 }
8013 }
c8094d83 8014
f604fc3b
MM
8015 /* Check to see if we already have the specialization we
8016 need. */
8017 spec = NULL_TREE;
8018 if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
8019 {
8020 /* T is a static data member or namespace-scope entity.
8021 We have to substitute into namespace-scope variables
8022 (even though such entities are never templates) because
8023 of cases like:
8024
8025 template <class T> void f() { extern T t; }
8026
8027 where the entity referenced is not known until
8028 instantiation time. */
8029 local_p = false;
8030 ctx = DECL_CONTEXT (t);
8031 if (DECL_CLASS_SCOPE_P (t))
8032 {
8033 ctx = tsubst_aggr_type (ctx, args,
8034 complain,
8035 in_decl, /*entering_scope=*/1);
8036 /* If CTX is unchanged, then T is in fact the
8037 specialization we want. That situation occurs when
8038 referencing a static data member within in its own
8039 class. We can use pointer equality, rather than
8040 same_type_p, because DECL_CONTEXT is always
8041 canonical. */
8042 if (ctx == DECL_CONTEXT (t))
8043 spec = t;
8044 }
5566b478 8045
f604fc3b
MM
8046 if (!spec)
8047 {
8048 tmpl = DECL_TI_TEMPLATE (t);
8049 gen_tmpl = most_general_template (tmpl);
8050 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
8051 spec = (retrieve_specialization
8052 (gen_tmpl, argvec,
8053 /*class_specializations_p=*/false));
8054 }
8055 }
9188c363 8056 else
6dfbb909 8057 {
f604fc3b
MM
8058 /* A local variable. */
8059 local_p = true;
6dfbb909
MM
8060 /* Subsequent calls to pushdecl will fill this in. */
8061 ctx = NULL_TREE;
f604fc3b 8062 spec = retrieve_local_specialization (t);
6dfbb909 8063 }
f604fc3b
MM
8064 /* If we already have the specialization we need, there is
8065 nothing more to do. */
36a117a5 8066 if (spec)
ae58fa02
MM
8067 {
8068 r = spec;
8069 break;
8070 }
5566b478 8071
f604fc3b 8072 /* Create a new node for the specialization we need. */
0acf7199 8073 r = copy_decl (t);
edebf865 8074 if (TREE_CODE (r) == VAR_DECL)
39703eb9 8075 {
8b0a8500
MM
8076 /* Even if the original location is out of scope, the
8077 newly substituted one is not. */
8078 DECL_DEAD_FOR_LOCAL (r) = 0;
8079 DECL_INITIALIZED_P (r) = 0;
8080 DECL_TEMPLATE_INSTANTIATED (r) = 0;
fc6a28d7
MM
8081 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8082 if (type == error_mark_node)
8083 return error_mark_node;
2c05d05e
MM
8084 if (TREE_CODE (type) == FUNCTION_TYPE)
8085 {
8086 /* It may seem that this case cannot occur, since:
8087
8088 typedef void f();
8089 void g() { f x; }
8090
8091 declares a function, not a variable. However:
8092
8093 typedef void f();
8094 template <typename T> void g() { T t; }
8095 template void g<f>();
8096
8097 is an attempt to declare a variable with function
8098 type. */
8099 error ("variable %qD has function type",
8100 /* R is not yet sufficiently initialized, so we
8101 just use its name. */
8102 DECL_NAME (r));
8103 return error_mark_node;
8104 }
39703eb9
MM
8105 type = complete_type (type);
8106 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
8107 = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
62e19030 8108 type = check_var_type (DECL_NAME (r), type);
56b4ea3d
RH
8109
8110 if (DECL_HAS_VALUE_EXPR_P (t))
8111 {
8112 tree ve = DECL_VALUE_EXPR (t);
015c2c66
MM
8113 ve = tsubst_expr (ve, args, complain, in_decl,
8114 /*constant_expression_p=*/false);
3db45ab5 8115 SET_DECL_VALUE_EXPR (r, ve);
56b4ea3d 8116 }
39703eb9 8117 }
a3d87771
MM
8118 else if (DECL_SELF_REFERENCE_P (t))
8119 SET_DECL_SELF_REFERENCE_P (r);
01f4137f 8120 TREE_TYPE (r) = type;
9804209d 8121 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
5566b478 8122 DECL_CONTEXT (r) = ctx;
92643fea
MM
8123 /* Clear out the mangled name and RTL for the instantiation. */
8124 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
820cc88f
DB
8125 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8126 SET_DECL_RTL (r, NULL_RTX);
8b0a8500
MM
8127 /* The initializer must not be expanded until it is required;
8128 see [temp.inst]. */
d11ad92e 8129 DECL_INITIAL (r) = NULL_TREE;
820cc88f
DB
8130 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8131 SET_DECL_RTL (r, NULL_RTX);
06ceef4e 8132 DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
b9e75696
JM
8133 if (TREE_CODE (r) == VAR_DECL)
8134 {
8135 /* Possibly limit visibility based on template args. */
8136 DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
b70f0f48
JM
8137 if (DECL_VISIBILITY_SPECIFIED (t))
8138 {
8139 DECL_VISIBILITY_SPECIFIED (r) = 0;
8140 DECL_ATTRIBUTES (r)
8141 = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8142 }
b9e75696
JM
8143 determine_visibility (r);
8144 }
5566b478 8145
6dfbb909
MM
8146 if (!local_p)
8147 {
8148 /* A static data member declaration is always marked
8149 external when it is declared in-class, even if an
8150 initializer is present. We mimic the non-template
8151 processing here. */
8152 DECL_EXTERNAL (r) = 1;
fa8d6e85 8153
d63d5d0c 8154 register_specialization (r, gen_tmpl, argvec, false);
6dfbb909
MM
8155 DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
8156 SET_DECL_IMPLICIT_INSTANTIATION (r);
8157 }
9188c363 8158 else
6dfbb909 8159 register_local_specialization (r, t);
5566b478 8160
5566b478 8161 TREE_CHAIN (r) = NULL_TREE;
edebf865 8162 layout_decl (r, 0);
5566b478 8163 }
ae58fa02 8164 break;
5566b478 8165
ae58fa02 8166 default:
315fb5db 8167 gcc_unreachable ();
c8094d83 8168 }
ae58fa02
MM
8169
8170 /* Restore the file and line information. */
82a98427 8171 input_location = saved_loc;
ae58fa02
MM
8172
8173 return r;
8174}
8175
34cd5ae7 8176/* Substitute into the ARG_TYPES of a function type. */
cabc336a 8177
e9659ab0 8178static tree
c8094d83 8179tsubst_arg_types (tree arg_types,
0cbd7506
MS
8180 tree args,
8181 tsubst_flags_t complain,
8182 tree in_decl)
cabc336a
MM
8183{
8184 tree remaining_arg_types;
5d80a306
DG
8185 tree type = NULL_TREE;
8186 int i = 1;
8187 tree expanded_args = NULL_TREE;
5e97d404 8188 tree default_arg;
cabc336a
MM
8189
8190 if (!arg_types || arg_types == void_list_node)
8191 return arg_types;
c8094d83 8192
cabc336a 8193 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
4393e105
MM
8194 args, complain, in_decl);
8195 if (remaining_arg_types == error_mark_node)
8196 return error_mark_node;
8197
5d80a306 8198 if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
4b2811e9 8199 {
5d80a306
DG
8200 /* For a pack expansion, perform substitution on the
8201 entire expression. Later on, we'll handle the arguments
8202 one-by-one. */
8203 expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
8204 args, complain, in_decl);
cabc336a 8205
5d80a306
DG
8206 if (TREE_CODE (expanded_args) == TREE_VEC)
8207 /* So that we'll spin through the parameters, one by one. */
8208 i = TREE_VEC_LENGTH (expanded_args);
8209 else
8210 {
8211 /* We only partially substituted into the parameter
8212 pack. Our type is TYPE_PACK_EXPANSION. */
8213 type = expanded_args;
8214 expanded_args = NULL_TREE;
8215 }
8216 }
cabc336a 8217
5d80a306
DG
8218 while (i > 0) {
8219 --i;
8220
8221 if (expanded_args)
8222 type = TREE_VEC_ELT (expanded_args, i);
8223 else if (!type)
8224 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
c8094d83 8225
5d80a306
DG
8226 if (type == error_mark_node)
8227 return error_mark_node;
8228 if (VOID_TYPE_P (type))
8229 {
8230 if (complain & tf_error)
8231 {
8232 error ("invalid parameter type %qT", type);
8233 if (in_decl)
8234 error ("in declaration %q+D", in_decl);
8235 }
8236 return error_mark_node;
5e97d404 8237 }
5d80a306
DG
8238
8239 /* Do array-to-pointer, function-to-pointer conversion, and ignore
8240 top-level qualifiers as required. */
8241 type = TYPE_MAIN_VARIANT (type_decays_to (type));
c8094d83 8242
5d80a306
DG
8243 /* We do not substitute into default arguments here. The standard
8244 mandates that they be instantiated only when needed, which is
8245 done in build_over_call. */
8246 default_arg = TREE_PURPOSE (arg_types);
8247
8248 if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
8249 {
8250 /* We've instantiated a template before its default arguments
8251 have been parsed. This can happen for a nested template
8252 class, and is not an error unless we require the default
8253 argument in a call of this function. */
8254 remaining_arg_types =
8255 tree_cons (default_arg, type, remaining_arg_types);
8256 VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg),
8257 remaining_arg_types);
8258 }
8259 else
8260 remaining_arg_types =
8261 hash_tree_cons (default_arg, type, remaining_arg_types);
8262 }
8263
8264 return remaining_arg_types;
cabc336a
MM
8265}
8266
4393e105
MM
8267/* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
8268 *not* handle the exception-specification for FNTYPE, because the
8269 initial substitution of explicitly provided template parameters
8270 during argument deduction forbids substitution into the
8271 exception-specification:
8272
8273 [temp.deduct]
8274
8275 All references in the function type of the function template to the
8276 corresponding template parameters are replaced by the specified tem-
8277 plate argument values. If a substitution in a template parameter or
8278 in the function type of the function template results in an invalid
8279 type, type deduction fails. [Note: The equivalent substitution in
8280 exception specifications is done only when the function is instanti-
8281 ated, at which point a program is ill-formed if the substitution
8282 results in an invalid type.] */
8283
8284static tree
c8094d83 8285tsubst_function_type (tree t,
0cbd7506
MS
8286 tree args,
8287 tsubst_flags_t complain,
8288 tree in_decl)
4393e105
MM
8289{
8290 tree return_type;
8291 tree arg_types;
8292 tree fntype;
8293
8dd3f57a 8294 /* The TYPE_CONTEXT is not used for function/method types. */
50bc768d 8295 gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
4393e105 8296
46c895ac 8297 /* Substitute the return type. */
4393e105
MM
8298 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8299 if (return_type == error_mark_node)
8300 return error_mark_node;
6e2993bf
MM
8301 /* The standard does not presently indicate that creation of a
8302 function type with an invalid return type is a deduction failure.
270af55d 8303 However, that is clearly analogous to creating an array of "void"
c8094d83 8304 or a reference to a reference. This is core issue #486. */
6e2993bf
MM
8305 if (TREE_CODE (return_type) == ARRAY_TYPE
8306 || TREE_CODE (return_type) == FUNCTION_TYPE)
8307 {
8308 if (complain & tf_error)
8309 {
8310 if (TREE_CODE (return_type) == ARRAY_TYPE)
8311 error ("function returning an array");
8312 else
8313 error ("function returning a function");
8314 }
8315 return error_mark_node;
8316 }
4393e105 8317
34cd5ae7 8318 /* Substitute the argument types. */
4393e105 8319 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
c8094d83 8320 complain, in_decl);
4393e105
MM
8321 if (arg_types == error_mark_node)
8322 return error_mark_node;
c8094d83 8323
1891dec4
DM
8324 if (TYPE_QUALS (return_type) != TYPE_UNQUALIFIED
8325 && in_decl != NULL_TREE
8326 && !TREE_NO_WARNING (in_decl)
8327 && (SCALAR_TYPE_P (return_type) || VOID_TYPE_P (return_type)))
8328 warning (OPT_Wreturn_type,
8329 "type qualifiers ignored on function return type");
8330
4393e105
MM
8331 /* Construct a new type node and return it. */
8332 if (TREE_CODE (t) == FUNCTION_TYPE)
8333 fntype = build_function_type (return_type, arg_types);
8334 else
8335 {
8336 tree r = TREE_TYPE (TREE_VALUE (arg_types));
8337 if (! IS_AGGR_TYPE (r))
8338 {
8339 /* [temp.deduct]
c8094d83 8340
4393e105
MM
8341 Type deduction may fail for any of the following
8342 reasons:
c8094d83 8343
4393e105
MM
8344 -- Attempting to create "pointer to member of T" when T
8345 is not a class type. */
c2ea3a40 8346 if (complain & tf_error)
0f51ccfc 8347 error ("creating pointer to member function of non-class type %qT",
4393e105
MM
8348 r);
8349 return error_mark_node;
8350 }
c8094d83
MS
8351
8352 fntype = build_method_type_directly (r, return_type,
43dc123f 8353 TREE_CHAIN (arg_types));
4393e105 8354 }
c2ea3a40 8355 fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
e9525111 8356 fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
c8094d83
MS
8357
8358 return fntype;
4393e105
MM
8359}
8360
c7222c02
MM
8361/* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE. Substitute the template
8362 ARGS into that specification, and return the substituted
8363 specification. If there is no specification, return NULL_TREE. */
8364
8365static tree
c8094d83
MS
8366tsubst_exception_specification (tree fntype,
8367 tree args,
c7222c02
MM
8368 tsubst_flags_t complain,
8369 tree in_decl)
8370{
8371 tree specs;
8372 tree new_specs;
8373
8374 specs = TYPE_RAISES_EXCEPTIONS (fntype);
8375 new_specs = NULL_TREE;
8376 if (specs)
8377 {
8378 if (! TREE_VALUE (specs))
8379 new_specs = specs;
8380 else
8381 while (specs)
8382 {
8383 tree spec;
5d80a306
DG
8384 int i, len = 1;
8385 tree expanded_specs = NULL_TREE;
8386
8387 if (PACK_EXPANSION_P (TREE_VALUE (specs)))
8388 {
8389 /* Expand the pack expansion type. */
8390 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
8391 args, complain,
8392 in_decl);
8393 len = TREE_VEC_LENGTH (expanded_specs);
8394 }
8395
8396 for (i = 0; i < len; ++i)
8397 {
8398 if (expanded_specs)
8399 spec = TREE_VEC_ELT (expanded_specs, i);
8400 else
8401 spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
8402 if (spec == error_mark_node)
8403 return spec;
8404 new_specs = add_exception_specifier (new_specs, spec,
8405 complain);
8406 }
8407
8408 specs = TREE_CHAIN (specs);
c7222c02
MM
8409 }
8410 }
8411 return new_specs;
8412}
8413
4393e105
MM
8414/* Take the tree structure T and replace template parameters used
8415 therein with the argument vector ARGS. IN_DECL is an associated
8416 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
c2ea3a40
NS
8417 Issue error and warning messages under control of COMPLAIN. Note
8418 that we must be relatively non-tolerant of extensions here, in
8419 order to preserve conformance; if we allow substitutions that
8420 should not be allowed, we may allow argument deductions that should
8421 not succeed, and therefore report ambiguous overload situations
8422 where there are none. In theory, we could allow the substitution,
8423 but indicate that it should have failed, and allow our caller to
8424 make sure that the right thing happens, but we don't try to do this
8425 yet.
4393e105
MM
8426
8427 This function is used for dealing with types, decls and the like;
8428 for expressions, use tsubst_expr or tsubst_copy. */
ae58fa02 8429
14d22dd6 8430static tree
3a978d72 8431tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
ae58fa02 8432{
0ecfe0b4 8433 tree type, r;
ae58fa02
MM
8434
8435 if (t == NULL_TREE || t == error_mark_node
8436 || t == integer_type_node
8437 || t == void_type_node
8438 || t == char_type_node
539599c1 8439 || t == unknown_type_node
ae58fa02
MM
8440 || TREE_CODE (t) == NAMESPACE_DECL)
8441 return t;
8442
fc6a28d7
MM
8443 if (DECL_P (t))
8444 return tsubst_decl (t, args, complain);
8445
ae58fa02
MM
8446 if (TREE_CODE (t) == IDENTIFIER_NODE)
8447 type = IDENTIFIER_TYPE_VALUE (t);
8448 else
8449 type = TREE_TYPE (t);
399dedb9 8450
50bc768d 8451 gcc_assert (type != unknown_type_node);
ae58fa02 8452
fc6a28d7 8453 if (type
ae58fa02 8454 && TREE_CODE (t) != TYPENAME_TYPE
4393e105
MM
8455 && TREE_CODE (t) != IDENTIFIER_NODE
8456 && TREE_CODE (t) != FUNCTION_TYPE
8457 && TREE_CODE (t) != METHOD_TYPE)
8458 type = tsubst (type, args, complain, in_decl);
8459 if (type == error_mark_node)
8460 return error_mark_node;
ae58fa02 8461
ae58fa02
MM
8462 switch (TREE_CODE (t))
8463 {
8464 case RECORD_TYPE:
8465 case UNION_TYPE:
8466 case ENUMERAL_TYPE:
4393e105
MM
8467 return tsubst_aggr_type (t, args, complain, in_decl,
8468 /*entering_scope=*/0);
ae58fa02
MM
8469
8470 case ERROR_MARK:
8471 case IDENTIFIER_NODE:
ae58fa02
MM
8472 case VOID_TYPE:
8473 case REAL_TYPE:
8474 case COMPLEX_TYPE:
c00996a3 8475 case VECTOR_TYPE:
ae58fa02
MM
8476 case BOOLEAN_TYPE:
8477 case INTEGER_CST:
8478 case REAL_CST:
8479 case STRING_CST:
8480 return t;
8481
8482 case INTEGER_TYPE:
8483 if (t == integer_type_node)
8484 return t;
8485
8486 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
8487 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
8488 return t;
d2e5ee5c 8489
5566b478 8490 {
ddce3528 8491 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
7ddedda4 8492
6ee3ffe8
MM
8493 max = tsubst_expr (omax, args, complain, in_decl,
8494 /*integral_constant_expression_p=*/false);
4ef69b83 8495 max = fold_decl_constant_value (max);
8dd3f57a 8496
eff3a276
MM
8497 if (TREE_CODE (max) != INTEGER_CST
8498 && TREE_CODE (max) != TEMPLATE_PARM_INDEX
8499 && !at_function_scope_p ())
8500 {
8501 if (complain & tf_error)
8502 error ("array bound is not an integer constant");
8503 return error_mark_node;
8504 }
8505
95cd6f6f 8506 /* [temp.deduct]
4393e105 8507
95cd6f6f
JC
8508 Type deduction may fail for any of the following
8509 reasons:
4393e105 8510
95cd6f6f
JC
8511 Attempting to create an array with a size that is
8512 zero or negative. */
8513 if (integer_zerop (max) && !(complain & tf_error))
8514 /* We must fail if performing argument deduction (as
8515 indicated by the state of complain), so that
8516 another substitution can be found. */
8517 return error_mark_node;
95cd6f6f
JC
8518 else if (TREE_CODE (max) == INTEGER_CST
8519 && INT_CST_LT (max, integer_zero_node))
8520 {
c2ea3a40 8521 if (complain & tf_error)
95cd6f6f 8522 error ("creating array with negative size (%qE)", max);
4393e105
MM
8523
8524 return error_mark_node;
0ecfe0b4
JM
8525 }
8526
c95cd22e 8527 return compute_array_index_type (NULL_TREE, max);
ae58fa02
MM
8528 }
8529
8530 case TEMPLATE_TYPE_PARM:
8531 case TEMPLATE_TEMPLATE_PARM:
a1281f45 8532 case BOUND_TEMPLATE_TEMPLATE_PARM:
ae58fa02
MM
8533 case TEMPLATE_PARM_INDEX:
8534 {
8535 int idx;
8536 int level;
8537 int levels;
315fb5db 8538 tree arg = NULL_TREE;
0ecfe0b4
JM
8539
8540 r = NULL_TREE;
ae58fa02 8541
315fb5db 8542 gcc_assert (TREE_VEC_LENGTH (args) > 0);
ae58fa02 8543 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
a1281f45
KL
8544 || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
8545 || TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
ae58fa02
MM
8546 {
8547 idx = TEMPLATE_TYPE_IDX (t);
8548 level = TEMPLATE_TYPE_LEVEL (t);
8549 }
8550 else
8551 {
8552 idx = TEMPLATE_PARM_IDX (t);
8553 level = TEMPLATE_PARM_LEVEL (t);
8554 }
8555
315fb5db
NS
8556 levels = TMPL_ARGS_DEPTH (args);
8557 if (level <= levels)
5d80a306
DG
8558 {
8559 arg = TMPL_ARG (args, level, idx);
8560
8561 if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
8562 /* See through ARGUMENT_PACK_SELECT arguments. */
8563 arg = ARGUMENT_PACK_SELECT_ARG (arg);
8564 }
ae58fa02 8565
315fb5db
NS
8566 if (arg == error_mark_node)
8567 return error_mark_node;
8568 else if (arg != NULL_TREE)
8569 {
5d80a306
DG
8570 if (ARGUMENT_PACK_P (arg))
8571 /* If ARG is an argument pack, we don't actually want to
8572 perform a substitution here, because substitutions
8573 for argument packs are only done
8574 element-by-element. We can get to this point when
8575 substituting the type of a non-type template
8576 parameter pack, when that type actually contains
8577 template parameter packs from an outer template, e.g.,
8578
8579 template<typename... Types> struct A {
8580 template<Types... Values> struct B { };
8581 }; */
8582 return t;
8583
315fb5db 8584 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
ae58fa02 8585 {
9180c238 8586 int quals;
315fb5db 8587 gcc_assert (TYPE_P (arg));
9180c238
JM
8588
8589 /* cv-quals from the template are discarded when
8590 substituting in a function or reference type. */
8591 if (TREE_CODE (arg) == FUNCTION_TYPE
8592 || TREE_CODE (arg) == METHOD_TYPE
8593 || TREE_CODE (arg) == REFERENCE_TYPE)
8594 quals = cp_type_quals (arg);
8595 else
8596 quals = cp_type_quals (arg) | cp_type_quals (t);
8597
315fb5db 8598 return cp_build_qualified_type_real
9180c238 8599 (arg, quals, complain | tf_ignore_bad_quals);
315fb5db
NS
8600 }
8601 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8602 {
8603 /* We are processing a type constructed from a
8604 template template parameter. */
8605 tree argvec = tsubst (TYPE_TI_ARGS (t),
8606 args, complain, in_decl);
8607 if (argvec == error_mark_node)
8608 return error_mark_node;
c8094d83 8609
315fb5db
NS
8610 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
8611 are resolving nested-types in the signature of a
8612 member function templates. Otherwise ARG is a
8613 TEMPLATE_DECL and is the real template to be
8614 instantiated. */
8615 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
8616 arg = TYPE_NAME (arg);
c8094d83
MS
8617
8618 r = lookup_template_class (arg,
8619 argvec, in_decl,
315fb5db
NS
8620 DECL_CONTEXT (arg),
8621 /*entering_scope=*/0,
8622 complain);
8623 return cp_build_qualified_type_real
8624 (r, TYPE_QUALS (t), complain);
ae58fa02 8625 }
315fb5db
NS
8626 else
8627 /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX. */
8628 return arg;
ae58fa02
MM
8629 }
8630
8631 if (level == 1)
8632 /* This can happen during the attempted tsubst'ing in
8633 unify. This means that we don't yet have any information
8634 about the template parameter in question. */
8635 return t;
8636
8637 /* If we get here, we must have been looking at a parm for a
8638 more deeply nested template. Make a new version of this
8639 template parameter, but with a lower level. */
8640 switch (TREE_CODE (t))
8641 {
8642 case TEMPLATE_TYPE_PARM:
8643 case TEMPLATE_TEMPLATE_PARM:
a1281f45 8644 case BOUND_TEMPLATE_TEMPLATE_PARM:
89d684bb 8645 if (cp_type_quals (t))
ae58fa02 8646 {
9ccf6541 8647 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
0cbd7506
MS
8648 r = cp_build_qualified_type_real
8649 (r, cp_type_quals (t),
4f2b0fb2
NS
8650 complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
8651 ? tf_ignore_bad_quals : 0));
9ccf6541
MM
8652 }
8653 else
8654 {
11e74ea6 8655 r = copy_type (t);
9ccf6541
MM
8656 TEMPLATE_TYPE_PARM_INDEX (r)
8657 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
8658 r, levels);
8659 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
8660 TYPE_MAIN_VARIANT (r) = r;
8661 TYPE_POINTER_TO (r) = NULL_TREE;
8662 TYPE_REFERENCE_TO (r) = NULL_TREE;
8663
06d40de8
DG
8664 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
8665 /* We have reduced the level of the template
8666 template parameter, but not the levels of its
8667 template parameters, so canonical_type_parameter
8668 will not be able to find the canonical template
8669 template parameter for this level. Thus, we
8670 require structural equality checking to compare
8671 TEMPLATE_TEMPLATE_PARMs. */
8672 SET_TYPE_STRUCTURAL_EQUALITY (r);
3d761c46
DG
8673 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
8674 SET_TYPE_STRUCTURAL_EQUALITY (r);
06d40de8
DG
8675 else
8676 TYPE_CANONICAL (r) = canonical_type_parameter (r);
8677
a1281f45 8678 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
9ccf6541
MM
8679 {
8680 tree argvec = tsubst (TYPE_TI_ARGS (t), args,
c8094d83 8681 complain, in_decl);
9ccf6541
MM
8682 if (argvec == error_mark_node)
8683 return error_mark_node;
4393e105 8684
9ccf6541
MM
8685 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
8686 = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
8687 }
ae58fa02
MM
8688 }
8689 break;
8690
8691 case TEMPLATE_PARM_INDEX:
8692 r = reduce_template_parm_level (t, type, levels);
8693 break;
c8094d83 8694
ae58fa02 8695 default:
315fb5db 8696 gcc_unreachable ();
ae58fa02
MM
8697 }
8698
5566b478 8699 return r;
ae58fa02 8700 }
5566b478 8701
8d08fdba
MS
8702 case TREE_LIST:
8703 {
058b15c1 8704 tree purpose, value, chain;
8d08fdba
MS
8705
8706 if (t == void_list_node)
8707 return t;
8708
8d08fdba
MS
8709 purpose = TREE_PURPOSE (t);
8710 if (purpose)
4393e105
MM
8711 {
8712 purpose = tsubst (purpose, args, complain, in_decl);
8713 if (purpose == error_mark_node)
8714 return error_mark_node;
8715 }
8d08fdba
MS
8716 value = TREE_VALUE (t);
8717 if (value)
4393e105
MM
8718 {
8719 value = tsubst (value, args, complain, in_decl);
8720 if (value == error_mark_node)
8721 return error_mark_node;
8722 }
8d08fdba
MS
8723 chain = TREE_CHAIN (t);
8724 if (chain && chain != void_type_node)
4393e105
MM
8725 {
8726 chain = tsubst (chain, args, complain, in_decl);
8727 if (chain == error_mark_node)
8728 return error_mark_node;
8729 }
8d08fdba
MS
8730 if (purpose == TREE_PURPOSE (t)
8731 && value == TREE_VALUE (t)
8732 && chain == TREE_CHAIN (t))
8733 return t;
058b15c1 8734 return hash_tree_cons (purpose, value, chain);
8d08fdba 8735 }
c8094d83 8736
95b4aca6 8737 case TREE_BINFO:
bd7eccc4 8738 /* We should never be tsubsting a binfo. */
315fb5db 8739 gcc_unreachable ();
85b71cf2 8740
95b4aca6
NS
8741 case TREE_VEC:
8742 /* A vector of template arguments. */
50bc768d 8743 gcc_assert (!type);
a91db711 8744 return tsubst_template_args (t, args, complain, in_decl);
8d08fdba 8745
8d08fdba
MS
8746 case POINTER_TYPE:
8747 case REFERENCE_TYPE:
8748 {
8d08fdba 8749 enum tree_code code;
79a7c7fa 8750
46c895ac 8751 if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
8d08fdba
MS
8752 return t;
8753
8754 code = TREE_CODE (t);
4393e105
MM
8755
8756
8757 /* [temp.deduct]
c8094d83 8758
4393e105 8759 Type deduction may fail for any of the following
c8094d83 8760 reasons:
4393e105
MM
8761
8762 -- Attempting to create a pointer to reference type.
8763 -- Attempting to create a reference to a reference type or
8af2fec4
RY
8764 a reference to void.
8765
8766 Core issue 106 says that creating a reference to a reference
8767 during instantiation is no longer a cause for failure. We
8768 only enforce this check in strict C++98 mode. */
8769 if ((TREE_CODE (type) == REFERENCE_TYPE
c1ae8be5 8770 && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
0ecfe0b4 8771 || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
79a7c7fa 8772 {
82a98427 8773 static location_t last_loc;
79a7c7fa
JM
8774
8775 /* We keep track of the last time we issued this error
8776 message to avoid spewing a ton of messages during a
8777 single bad template instantiation. */
c2ea3a40 8778 if (complain & tf_error
93409b8c 8779#ifdef USE_MAPPED_LOCATION
9b60dfd7 8780 && last_loc != input_location
93409b8c 8781#else
82a98427 8782 && (last_loc.line != input_line
9b60dfd7 8783 || last_loc.file != input_filename)
93409b8c 8784#endif
9b60dfd7 8785 )
79a7c7fa 8786 {
0ecfe0b4 8787 if (TREE_CODE (type) == VOID_TYPE)
33bd39a2 8788 error ("forming reference to void");
0ecfe0b4 8789 else
0f51ccfc 8790 error ("forming %s to reference type %qT",
0cbd7506
MS
8791 (code == POINTER_TYPE) ? "pointer" : "reference",
8792 type);
82a98427 8793 last_loc = input_location;
79a7c7fa
JM
8794 }
8795
4393e105 8796 return error_mark_node;
79a7c7fa
JM
8797 }
8798 else if (code == POINTER_TYPE)
46c895ac
NS
8799 {
8800 r = build_pointer_type (type);
8801 if (TREE_CODE (type) == METHOD_TYPE)
8802 r = build_ptrmemfunc_type (r);
8803 }
8af2fec4
RY
8804 else if (TREE_CODE (type) == REFERENCE_TYPE)
8805 /* In C++0x, during template argument substitution, when there is an
8806 attempt to create a reference to a reference type, reference
8807 collapsing is applied as described in [14.3.1/4 temp.arg.type]:
8808
8809 "If a template-argument for a template-parameter T names a type
8810 that is a reference to a type A, an attempt to create the type
8811 'lvalue reference to cv T' creates the type 'lvalue reference to
8812 A,' while an attempt to create the type type rvalue reference to
8813 cv T' creates the type T"
8814 */
8815 r = cp_build_reference_type
8816 (TREE_TYPE (type),
8817 TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
8d08fdba 8818 else
8af2fec4 8819 r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
adecb3f4 8820 r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
79a7c7fa 8821
a5f1c5f8
NS
8822 if (r != error_mark_node)
8823 /* Will this ever be needed for TYPE_..._TO values? */
8824 layout_type (r);
c8094d83 8825
8d08fdba
MS
8826 return r;
8827 }
a4443a08 8828 case OFFSET_TYPE:
0ecfe0b4 8829 {
4393e105
MM
8830 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
8831 if (r == error_mark_node || !IS_AGGR_TYPE (r))
8832 {
8833 /* [temp.deduct]
8834
8835 Type deduction may fail for any of the following
8836 reasons:
c8094d83 8837
4393e105 8838 -- Attempting to create "pointer to member of T" when T
0cbd7506 8839 is not a class type. */
c2ea3a40 8840 if (complain & tf_error)
0f51ccfc 8841 error ("creating pointer to member of non-class type %qT", r);
4393e105
MM
8842 return error_mark_node;
8843 }
46c895ac
NS
8844 if (TREE_CODE (type) == REFERENCE_TYPE)
8845 {
4f09be91 8846 if (complain & tf_error)
0f51ccfc 8847 error ("creating pointer to member reference type %qT", type);
cb6d4a9f
VR
8848 return error_mark_node;
8849 }
8850 if (TREE_CODE (type) == VOID_TYPE)
8851 {
8852 if (complain & tf_error)
8853 error ("creating pointer to member of type void");
46c895ac
NS
8854 return error_mark_node;
8855 }
50bc768d 8856 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
46c895ac 8857 if (TREE_CODE (type) == FUNCTION_TYPE)
a5ac359a 8858 {
0cbd7506
MS
8859 /* The type of the implicit object parameter gets its
8860 cv-qualifiers from the FUNCTION_TYPE. */
a5ac359a 8861 tree method_type;
0cbd7506
MS
8862 tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
8863 cp_type_quals (type));
8864 tree memptr;
8865 method_type = build_method_type_directly (this_type,
43dc123f
MM
8866 TREE_TYPE (type),
8867 TYPE_ARG_TYPES (type));
0cbd7506
MS
8868 memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
8869 return cp_build_qualified_type_real (memptr, cp_type_quals (t),
8870 complain);
a5ac359a 8871 }
46c895ac 8872 else
b7a78333
MM
8873 return cp_build_qualified_type_real (build_ptrmem_type (r, type),
8874 TYPE_QUALS (t),
8875 complain);
0ecfe0b4 8876 }
8d08fdba
MS
8877 case FUNCTION_TYPE:
8878 case METHOD_TYPE:
8879 {
c11b6f21 8880 tree fntype;
c7222c02 8881 tree specs;
4393e105
MM
8882 fntype = tsubst_function_type (t, args, complain, in_decl);
8883 if (fntype == error_mark_node)
8884 return error_mark_node;
cabc336a 8885
34cd5ae7 8886 /* Substitute the exception specification. */
c8094d83 8887 specs = tsubst_exception_specification (t, args, complain,
c7222c02 8888 in_decl);
9f6206d9
VR
8889 if (specs == error_mark_node)
8890 return error_mark_node;
c7222c02
MM
8891 if (specs)
8892 fntype = build_exception_variant (fntype, specs);
c11b6f21 8893 return fntype;
8d08fdba
MS
8894 }
8895 case ARRAY_TYPE:
8896 {
4393e105
MM
8897 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
8898 if (domain == error_mark_node)
8899 return error_mark_node;
8900
8901 /* As an optimization, we avoid regenerating the array type if
8902 it will obviously be the same as T. */
8d08fdba
MS
8903 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
8904 return t;
0ecfe0b4 8905
c8094d83 8906 /* These checks should match the ones in grokdeclarator.
4393e105 8907
c8094d83
MS
8908 [temp.deduct]
8909
8910 The deduction may fail for any of the following reasons:
4393e105
MM
8911
8912 -- Attempting to create an array with an element type that
c8094d83 8913 is void, a function type, or a reference type, or [DR337]
cfb91b67 8914 an abstract class type. */
c8094d83 8915 if (TREE_CODE (type) == VOID_TYPE
4393e105
MM
8916 || TREE_CODE (type) == FUNCTION_TYPE
8917 || TREE_CODE (type) == REFERENCE_TYPE)
0ecfe0b4 8918 {
c2ea3a40 8919 if (complain & tf_error)
0f51ccfc 8920 error ("creating array of %qT", type);
4393e105 8921 return error_mark_node;
0ecfe0b4 8922 }
cfb91b67
GB
8923 if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
8924 {
8925 if (complain & tf_error)
c8094d83 8926 error ("creating array of %qT, which is an abstract class type",
cfb91b67 8927 type);
c8094d83 8928 return error_mark_node;
cfb91b67 8929 }
0ecfe0b4 8930
8d08fdba
MS
8931 r = build_cplus_array_type (type, domain);
8932 return r;
8933 }
8934
8d08fdba 8935 case PLUS_EXPR:
5566b478 8936 case MINUS_EXPR:
4393e105 8937 {
c2ea3a40
NS
8938 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
8939 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
4393e105
MM
8940
8941 if (e1 == error_mark_node || e2 == error_mark_node)
8942 return error_mark_node;
8943
7866705a 8944 return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
4393e105 8945 }
8d08fdba
MS
8946
8947 case NEGATE_EXPR:
8948 case NOP_EXPR:
4393e105 8949 {
c2ea3a40 8950 tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
4393e105
MM
8951 if (e == error_mark_node)
8952 return error_mark_node;
8953
7866705a 8954 return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
4393e105 8955 }
8d08fdba 8956
5566b478
MS
8957 case TYPENAME_TYPE:
8958 {
4393e105
MM
8959 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
8960 in_decl, /*entering_scope=*/1);
8961 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
c8094d83 8962 complain, in_decl);
4393e105
MM
8963
8964 if (ctx == error_mark_node || f == error_mark_node)
8965 return error_mark_node;
ae58fa02 8966
bf8f3f93
MM
8967 if (!IS_AGGR_TYPE (ctx))
8968 {
c2ea3a40 8969 if (complain & tf_error)
0f51ccfc 8970 error ("%qT is not a class, struct, or union type", ctx);
bf8f3f93
MM
8971 return error_mark_node;
8972 }
8973 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
8974 {
8975 /* Normally, make_typename_type does not require that the CTX
8976 have complete type in order to allow things like:
c8094d83 8977
0cbd7506 8978 template <class T> struct S { typename S<T>::X Y; };
ae58fa02 8979
bf8f3f93
MM
8980 But, such constructs have already been resolved by this
8981 point, so here CTX really should have complete type, unless
8982 it's a partial instantiation. */
4393e105 8983 ctx = complete_type (ctx);
d0f062fb 8984 if (!COMPLETE_TYPE_P (ctx))
4393e105 8985 {
c2ea3a40 8986 if (complain & tf_error)
7a228918 8987 cxx_incomplete_type_error (NULL_TREE, ctx);
4393e105
MM
8988 return error_mark_node;
8989 }
8990 }
ae58fa02 8991
fc6a28d7 8992 f = make_typename_type (ctx, f, typename_type,
4f2b0fb2 8993 (complain & tf_error) | tf_keep_type_decl);
f0bcd168
MM
8994 if (f == error_mark_node)
8995 return f;
0cbd7506
MS
8996 if (TREE_CODE (f) == TYPE_DECL)
8997 {
4f2b0fb2 8998 complain |= tf_ignore_bad_quals;
0cbd7506
MS
8999 f = TREE_TYPE (f);
9000 }
c8094d83 9001
fc6a28d7
MM
9002 if (TREE_CODE (f) != TYPENAME_TYPE)
9003 {
9004 if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
c8094d83 9005 error ("%qT resolves to %qT, which is not an enumeration type",
fc6a28d7
MM
9006 t, f);
9007 else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
c8094d83 9008 error ("%qT resolves to %qT, which is is not a class type",
fc6a28d7
MM
9009 t, f);
9010 }
9011
0cbd7506
MS
9012 return cp_build_qualified_type_real
9013 (f, cp_type_quals (f) | cp_type_quals (t), complain);
5566b478 9014 }
c8094d83 9015
b8c6534b
KL
9016 case UNBOUND_CLASS_TEMPLATE:
9017 {
9018 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9019 in_decl, /*entering_scope=*/1);
9020 tree name = TYPE_IDENTIFIER (t);
b939a023 9021 tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
b8c6534b
KL
9022
9023 if (ctx == error_mark_node || name == error_mark_node)
9024 return error_mark_node;
9025
b939a023
KL
9026 if (parm_list)
9027 parm_list = tsubst_template_parms (parm_list, args, complain);
9028 return make_unbound_class_template (ctx, name, parm_list, complain);
b8c6534b
KL
9029 }
9030
5566b478 9031 case INDIRECT_REF:
5566b478 9032 case ADDR_EXPR:
058b15c1 9033 case CALL_EXPR:
315fb5db 9034 gcc_unreachable ();
5566b478
MS
9035
9036 case ARRAY_REF:
4393e105 9037 {
c2ea3a40 9038 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
015c2c66
MM
9039 tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl,
9040 /*integral_constant_expression_p=*/false);
4393e105
MM
9041 if (e1 == error_mark_node || e2 == error_mark_node)
9042 return error_mark_node;
9043
44de5aeb 9044 return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
4393e105 9045 }
5566b478 9046
fc378698 9047 case SCOPE_REF:
4393e105 9048 {
c2ea3a40 9049 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
4393e105
MM
9050 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9051 if (e1 == error_mark_node || e2 == error_mark_node)
9052 return error_mark_node;
9053
02ed62dd
MM
9054 return build_qualified_name (/*type=*/NULL_TREE,
9055 e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
4393e105 9056 }
fc378698 9057
b894fc05 9058 case TYPEOF_TYPE:
4393e105 9059 {
b830b74c 9060 tree type;
4393e105 9061
015c2c66
MM
9062 type = finish_typeof (tsubst_expr
9063 (TYPEOF_TYPE_EXPR (t), args,
9064 complain, in_decl,
9065 /*integral_constant_expression_p=*/false));
b830b74c 9066 return cp_build_qualified_type_real (type,
dce50630 9067 cp_type_quals (t)
b830b74c 9068 | cp_type_quals (type),
dce50630 9069 complain);
4393e105 9070 }
b894fc05 9071
5d80a306
DG
9072 case TYPE_ARGUMENT_PACK:
9073 case NONTYPE_ARGUMENT_PACK:
9074 {
9075 tree r = make_node (TREE_CODE (t));
9076 tree packed_out =
9077 tsubst_template_args (ARGUMENT_PACK_ARGS (t),
9078 args,
9079 complain,
9080 in_decl);
9081 SET_ARGUMENT_PACK_ARGS (r, packed_out);
9082
9083 /* For template nontype argument packs, also substitute into
9084 the type. */
9085 if (TREE_CODE (t) == NONTYPE_ARGUMENT_PACK)
9086 TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
9087
9088 return r;
9089 }
9090 break;
9091
8d08fdba 9092 default:
9e637a26 9093 sorry ("use of %qs in template",
8d08fdba
MS
9094 tree_code_name [(int) TREE_CODE (t)]);
9095 return error_mark_node;
9096 }
9097}
9098
ee76b931
MM
9099/* Like tsubst_expr for a BASELINK. OBJECT_TYPE, if non-NULL, is the
9100 type of the expression on the left-hand side of the "." or "->"
9101 operator. */
9102
9103static tree
9104tsubst_baselink (tree baselink, tree object_type,
9105 tree args, tsubst_flags_t complain, tree in_decl)
9106{
9107 tree name;
9108 tree qualifying_scope;
9109 tree fns;
6f67f000 9110 tree optype;
ee76b931
MM
9111 tree template_args = 0;
9112 bool template_id_p = false;
9113
51a203d9
MM
9114 /* A baselink indicates a function from a base class. Both the
9115 BASELINK_ACCESS_BINFO and the base class referenced may
9116 indicate bases of the template class, rather than the
9117 instantiated class. In addition, lookups that were not
9118 ambiguous before may be ambiguous now. Therefore, we perform
9119 the lookup again. */
ee76b931 9120 qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
51a203d9
MM
9121 qualifying_scope = tsubst (qualifying_scope, args,
9122 complain, in_decl);
ee76b931 9123 fns = BASELINK_FUNCTIONS (baselink);
6f67f000 9124 optype = BASELINK_OPTYPE (baselink);
ee76b931
MM
9125 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
9126 {
9127 template_id_p = true;
9128 template_args = TREE_OPERAND (fns, 1);
9129 fns = TREE_OPERAND (fns, 0);
bf12d54d
NS
9130 if (template_args)
9131 template_args = tsubst_template_args (template_args, args,
9132 complain, in_decl);
ee76b931
MM
9133 }
9134 name = DECL_NAME (get_first_fn (fns));
9135 baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
c8094d83 9136
9b60dfd7
MM
9137 /* If lookup found a single function, mark it as used at this
9138 point. (If it lookup found multiple functions the one selected
9139 later by overload resolution will be marked as used at that
9140 point.) */
9141 if (BASELINK_P (baselink))
9142 fns = BASELINK_FUNCTIONS (baselink);
9143 if (!template_id_p && !really_overloaded_fn (fns))
9144 mark_used (OVL_CURRENT (fns));
9145
9146 /* Add back the template arguments, if present. */
ee76b931 9147 if (BASELINK_P (baselink) && template_id_p)
c8094d83 9148 BASELINK_FUNCTIONS (baselink)
ee76b931
MM
9149 = build_nt (TEMPLATE_ID_EXPR,
9150 BASELINK_FUNCTIONS (baselink),
9151 template_args);
6f67f000
MM
9152 /* Update the conversion operator type. */
9153 BASELINK_OPTYPE (baselink)
9154 = tsubst (optype, args, complain, in_decl);
9b60dfd7 9155
ee76b931
MM
9156 if (!object_type)
9157 object_type = current_class_type;
c8094d83 9158 return adjust_result_of_qualified_name_lookup (baselink,
ee76b931
MM
9159 qualifying_scope,
9160 object_type);
9161}
9162
9163/* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID. DONE is
9164 true if the qualified-id will be a postfix-expression in-and-of
9165 itself; false if more of the postfix-expression follows the
9166 QUALIFIED_ID. ADDRESS_P is true if the qualified-id is the operand
9167 of "&". */
9168
9169static tree
c8094d83 9170tsubst_qualified_id (tree qualified_id, tree args,
ee76b931
MM
9171 tsubst_flags_t complain, tree in_decl,
9172 bool done, bool address_p)
9173{
9174 tree expr;
9175 tree scope;
9176 tree name;
9177 bool is_template;
9178 tree template_args;
9179
50bc768d 9180 gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
ee76b931 9181
ee76b931
MM
9182 /* Figure out what name to look up. */
9183 name = TREE_OPERAND (qualified_id, 1);
9184 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
9185 {
9186 is_template = true;
bf12d54d
NS
9187 template_args = TREE_OPERAND (name, 1);
9188 if (template_args)
9189 template_args = tsubst_template_args (template_args, args,
9190 complain, in_decl);
ee76b931
MM
9191 name = TREE_OPERAND (name, 0);
9192 }
9193 else
9194 {
9195 is_template = false;
9196 template_args = NULL_TREE;
9197 }
9198
6eeba0cc
MM
9199 /* Substitute into the qualifying scope. When there are no ARGS, we
9200 are just trying to simplify a non-dependent expression. In that
9201 case the qualifying scope may be dependent, and, in any case,
9202 substituting will not help. */
9203 scope = TREE_OPERAND (qualified_id, 0);
9204 if (args)
9205 {
9206 scope = tsubst (scope, args, complain, in_decl);
9207 expr = tsubst_copy (name, args, complain, in_decl);
9208 }
9209 else
9210 expr = name;
10b1d5e7 9211
ab73670a 9212 if (dependent_type_p (scope))
3db45ab5
MS
9213 return build_qualified_name (/*type=*/NULL_TREE,
9214 scope, expr,
02ed62dd 9215 QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
c8094d83 9216
5e08432e 9217 if (!BASELINK_P (name) && !DECL_P (expr))
12483c9f 9218 {
8ca4bf25
MM
9219 if (TREE_CODE (expr) == BIT_NOT_EXPR)
9220 /* If this were actually a destructor call, it would have been
9221 parsed as such by the parser. */
9222 expr = error_mark_node;
9223 else
9224 expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
12483c9f
NS
9225 if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
9226 ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
9227 {
9228 if (complain & tf_error)
b2693faf 9229 {
0f51ccfc 9230 error ("dependent-name %qE is parsed as a non-type, but "
b2693faf 9231 "instantiation yields a type", qualified_id);
0f51ccfc 9232 inform ("say %<typename %E%> if a type is meant", qualified_id);
b2693faf 9233 }
12483c9f
NS
9234 return error_mark_node;
9235 }
9236 }
c8094d83 9237
279b8466 9238 if (DECL_P (expr))
8f78f01f
MM
9239 {
9240 check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
9241 scope);
9242 /* Remember that there was a reference to this entity. */
9243 mark_used (expr);
9244 }
9245
9246 if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
9247 {
9248 if (complain & tf_error)
c8094d83 9249 qualified_name_lookup_error (scope,
8f78f01f
MM
9250 TREE_OPERAND (qualified_id, 1),
9251 expr);
9252 return error_mark_node;
9253 }
ee76b931
MM
9254
9255 if (is_template)
10b1d5e7 9256 expr = lookup_template_function (expr, template_args);
ee76b931 9257
22038b2c 9258 if (expr == error_mark_node && complain & tf_error)
8f78f01f
MM
9259 qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
9260 expr);
22038b2c 9261 else if (TYPE_P (scope))
ee76b931 9262 {
c8094d83 9263 expr = (adjust_result_of_qualified_name_lookup
ee76b931 9264 (expr, scope, current_class_type));
3db45ab5 9265 expr = (finish_qualified_id_expr
02ed62dd
MM
9266 (scope, expr, done, address_p,
9267 QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
9268 /*template_arg_p=*/false));
ee76b931 9269 }
c8094d83 9270
015c2c66
MM
9271 /* Expressions do not generally have reference type. */
9272 if (TREE_CODE (expr) != SCOPE_REF
9273 /* However, if we're about to form a pointer-to-member, we just
9274 want the referenced member referenced. */
9275 && TREE_CODE (expr) != OFFSET_REF)
aec5ba60 9276 expr = convert_from_reference (expr);
ee76b931
MM
9277
9278 return expr;
9279}
9280
00d3396f
JM
9281/* Like tsubst, but deals with expressions. This function just replaces
9282 template parms; to finish processing the resultant expression, use
9283 tsubst_expr. */
9284
14d22dd6 9285static tree
3a978d72 9286tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
5566b478
MS
9287{
9288 enum tree_code code;
8452b1d3 9289 tree r;
8d08fdba 9290
5566b478
MS
9291 if (t == NULL_TREE || t == error_mark_node)
9292 return t;
9293
9294 code = TREE_CODE (t);
b7484fbe 9295
5566b478
MS
9296 switch (code)
9297 {
9298 case PARM_DECL:
a723baf1 9299 r = retrieve_local_specialization (t);
50bc768d 9300 gcc_assert (r != NULL);
5d80a306
DG
9301 if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
9302 r = ARGUMENT_PACK_SELECT_ARG (r);
c0694c4b 9303 mark_used (r);
a723baf1 9304 return r;
5566b478
MS
9305
9306 case CONST_DECL:
ed44da02
MM
9307 {
9308 tree enum_type;
9309 tree v;
9310
a723baf1
MM
9311 if (DECL_TEMPLATE_PARM_P (t))
9312 return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
7b6d72fc
MM
9313 /* There is no need to substitute into namespace-scope
9314 enumerators. */
9315 if (DECL_NAMESPACE_SCOPE_P (t))
ed44da02 9316 return t;
d5a10cf0
MM
9317 /* If ARGS is NULL, then T is known to be non-dependent. */
9318 if (args == NULL_TREE)
8a784e4a 9319 return integral_constant_value (t);
ed44da02
MM
9320
9321 /* Unfortunately, we cannot just call lookup_name here.
9188c363 9322 Consider:
c8094d83 9323
9188c363
MM
9324 template <int I> int f() {
9325 enum E { a = I };
9326 struct S { void g() { E e = a; } };
9327 };
c8094d83 9328
9188c363
MM
9329 When we instantiate f<7>::S::g(), say, lookup_name is not
9330 clever enough to find f<7>::a. */
c8094d83
MS
9331 enum_type
9332 = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
ed44da02
MM
9333 /*entering_scope=*/0);
9334
c8094d83
MS
9335 for (v = TYPE_VALUES (enum_type);
9336 v != NULL_TREE;
ed44da02
MM
9337 v = TREE_CHAIN (v))
9338 if (TREE_PURPOSE (v) == DECL_NAME (t))
9339 return TREE_VALUE (v);
9340
9341 /* We didn't find the name. That should never happen; if
9342 name-lookup found it during preliminary parsing, we
9343 should find it again here during instantiation. */
315fb5db 9344 gcc_unreachable ();
ed44da02 9345 }
db04386f 9346 return t;
ed44da02 9347
5566b478
MS
9348 case FIELD_DECL:
9349 if (DECL_CONTEXT (t))
9350 {
0978790f 9351 tree ctx;
0978790f 9352
4393e105 9353 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
36a117a5 9354 /*entering_scope=*/1);
0978790f 9355 if (ctx != DECL_CONTEXT (t))
bad1f462
KL
9356 {
9357 tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
9358 if (!r)
9359 {
9360 if (complain & tf_error)
9361 error ("using invalid field %qD", t);
9362 return error_mark_node;
9363 }
9364 return r;
9365 }
5566b478 9366 }
c8094d83 9367
5566b478
MS
9368 return t;
9369
9370 case VAR_DECL:
9371 case FUNCTION_DECL:
a723baf1
MM
9372 if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
9373 || local_variable_p (t))
4393e105 9374 t = tsubst (t, args, complain, in_decl);
5566b478
MS
9375 mark_used (t);
9376 return t;
9377
a723baf1 9378 case BASELINK:
ee76b931 9379 return tsubst_baselink (t, current_class_type, args, complain, in_decl);
a723baf1 9380
98c1c668 9381 case TEMPLATE_DECL:
a723baf1 9382 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
c8094d83 9383 return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
a723baf1 9384 args, complain, in_decl);
c7222c02 9385 else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
4393e105 9386 return tsubst (t, args, complain, in_decl);
fcea7401
KL
9387 else if (DECL_CLASS_SCOPE_P (t)
9388 && uses_template_parms (DECL_CONTEXT (t)))
9389 {
9390 /* Template template argument like the following example need
9391 special treatment:
9392
9393 template <template <class> class TT> struct C {};
9394 template <class T> struct D {
9395 template <class U> struct E {};
0cbd7506 9396 C<E> c; // #1
fcea7401
KL
9397 };
9398 D<int> d; // #2
9399
9400 We are processing the template argument `E' in #1 for
9401 the template instantiation #2. Originally, `E' is a
9402 TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT. Now we
9403 have to substitute this with one having context `D<int>'. */
9404
9405 tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
9406 return lookup_field (context, DECL_NAME(t), 0, false);
9407 }
98c1c668 9408 else
fcea7401 9409 /* Ordinary template template argument. */
98c1c668
JM
9410 return t;
9411
5566b478
MS
9412 case CAST_EXPR:
9413 case REINTERPRET_CAST_EXPR:
e92cc029
MS
9414 case CONST_CAST_EXPR:
9415 case STATIC_CAST_EXPR:
9416 case DYNAMIC_CAST_EXPR:
51924768 9417 case NOP_EXPR:
5566b478 9418 return build1
4393e105
MM
9419 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9420 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
5566b478 9421
5d80a306
DG
9422 case SIZEOF_EXPR:
9423 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
9424 {
9425 /* We only want to compute the number of arguments. */
9426 tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
9427 complain, in_decl);
9428 return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
9429 }
9430 /* Fall through */
9431
5566b478 9432 case INDIRECT_REF:
5566b478
MS
9433 case NEGATE_EXPR:
9434 case TRUTH_NOT_EXPR:
b87692e5 9435 case BIT_NOT_EXPR:
5566b478 9436 case ADDR_EXPR:
392e3d51 9437 case UNARY_PLUS_EXPR: /* Unary + */
abff8e06 9438 case ALIGNOF_EXPR:
5566b478 9439 case ARROW_EXPR:
fc378698 9440 case THROW_EXPR:
5156628f 9441 case TYPEID_EXPR:
f5733617
SS
9442 case REALPART_EXPR:
9443 case IMAGPART_EXPR:
5566b478 9444 return build1
6a629cac 9445 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
4393e105 9446 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
5566b478 9447
a723baf1
MM
9448 case COMPONENT_REF:
9449 {
9450 tree object;
9451 tree name;
9452
9453 object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
9454 name = TREE_OPERAND (t, 1);
c8094d83 9455 if (TREE_CODE (name) == BIT_NOT_EXPR)
a723baf1
MM
9456 {
9457 name = tsubst_copy (TREE_OPERAND (name, 0), args,
9458 complain, in_decl);
9459 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9460 }
9461 else if (TREE_CODE (name) == SCOPE_REF
9462 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
9463 {
9464 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
9465 complain, in_decl);
9466 name = TREE_OPERAND (name, 1);
9467 name = tsubst_copy (TREE_OPERAND (name, 0), args,
9468 complain, in_decl);
9469 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
02ed62dd 9470 name = build_qualified_name (/*type=*/NULL_TREE,
3db45ab5 9471 base, name,
02ed62dd 9472 /*template_p=*/false);
a723baf1 9473 }
ee76b931 9474 else if (TREE_CODE (name) == BASELINK)
c8094d83
MS
9475 name = tsubst_baselink (name,
9476 non_reference (TREE_TYPE (object)),
9477 args, complain,
ee76b931 9478 in_decl);
a723baf1 9479 else
ee76b931 9480 name = tsubst_copy (name, args, complain, in_decl);
44de5aeb 9481 return build_nt (COMPONENT_REF, object, name, NULL_TREE);
a723baf1
MM
9482 }
9483
5566b478
MS
9484 case PLUS_EXPR:
9485 case MINUS_EXPR:
9486 case MULT_EXPR:
9487 case TRUNC_DIV_EXPR:
9488 case CEIL_DIV_EXPR:
9489 case FLOOR_DIV_EXPR:
9490 case ROUND_DIV_EXPR:
9491 case EXACT_DIV_EXPR:
9492 case BIT_AND_EXPR:
5566b478
MS
9493 case BIT_IOR_EXPR:
9494 case BIT_XOR_EXPR:
9495 case TRUNC_MOD_EXPR:
9496 case FLOOR_MOD_EXPR:
9497 case TRUTH_ANDIF_EXPR:
9498 case TRUTH_ORIF_EXPR:
9499 case TRUTH_AND_EXPR:
9500 case TRUTH_OR_EXPR:
9501 case RSHIFT_EXPR:
9502 case LSHIFT_EXPR:
9503 case RROTATE_EXPR:
9504 case LROTATE_EXPR:
9505 case EQ_EXPR:
9506 case NE_EXPR:
9507 case MAX_EXPR:
9508 case MIN_EXPR:
9509 case LE_EXPR:
9510 case GE_EXPR:
9511 case LT_EXPR:
9512 case GT_EXPR:
5566b478 9513 case COMPOUND_EXPR:
5566b478
MS
9514 case DOTSTAR_EXPR:
9515 case MEMBER_REF:
519c9806
MM
9516 case PREDECREMENT_EXPR:
9517 case PREINCREMENT_EXPR:
9518 case POSTDECREMENT_EXPR:
9519 case POSTINCREMENT_EXPR:
5566b478 9520 return build_nt
4393e105
MM
9521 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9522 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
5566b478 9523
02ed62dd
MM
9524 case SCOPE_REF:
9525 return build_qualified_name (/*type=*/NULL_TREE,
9526 tsubst_copy (TREE_OPERAND (t, 0),
9527 args, complain, in_decl),
9528 tsubst_copy (TREE_OPERAND (t, 1),
9529 args, complain, in_decl),
9530 QUALIFIED_NAME_IS_TEMPLATE (t));
9531
d8987adb
NS
9532 case ARRAY_REF:
9533 return build_nt
9534 (ARRAY_REF,
9535 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9536 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9537 NULL_TREE, NULL_TREE);
9538
5566b478 9539 case CALL_EXPR:
5039610b
SL
9540 {
9541 int n = VL_EXP_OPERAND_LENGTH (t);
9542 tree result = build_vl_exp (CALL_EXPR, n);
9543 int i;
9544 for (i = 0; i < n; i++)
9545 TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
9546 complain, in_decl);
9547 return result;
9548 }
5566b478 9549
5566b478
MS
9550 case COND_EXPR:
9551 case MODOP_EXPR:
40242ccf 9552 case PSEUDO_DTOR_EXPR:
67da3287 9553 {
8452b1d3 9554 r = build_nt
4393e105
MM
9555 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9556 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9557 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
e4c2c34b 9558 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
67da3287
MM
9559 return r;
9560 }
5566b478
MS
9561
9562 case NEW_EXPR:
9563 {
8452b1d3 9564 r = build_nt
4393e105
MM
9565 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9566 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9567 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
5566b478
MS
9568 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
9569 return r;
9570 }
9571
9572 case DELETE_EXPR:
9573 {
8452b1d3 9574 r = build_nt
4393e105
MM
9575 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9576 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
5566b478
MS
9577 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
9578 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
9579 return r;
9580 }
9581
386b8a85
JM
9582 case TEMPLATE_ID_EXPR:
9583 {
0cbd7506 9584 /* Substituted template arguments */
a91db711
NS
9585 tree fn = TREE_OPERAND (t, 0);
9586 tree targs = TREE_OPERAND (t, 1);
856216bb 9587
a91db711 9588 fn = tsubst_copy (fn, args, complain, in_decl);
bf12d54d
NS
9589 if (targs)
9590 targs = tsubst_template_args (targs, args, complain, in_decl);
c8094d83 9591
a91db711 9592 return lookup_template_function (fn, targs);
386b8a85
JM
9593 }
9594
5566b478
MS
9595 case TREE_LIST:
9596 {
9597 tree purpose, value, chain;
9598
9599 if (t == void_list_node)
9600 return t;
9601
9602 purpose = TREE_PURPOSE (t);
9603 if (purpose)
4393e105 9604 purpose = tsubst_copy (purpose, args, complain, in_decl);
5566b478
MS
9605 value = TREE_VALUE (t);
9606 if (value)
4393e105 9607 value = tsubst_copy (value, args, complain, in_decl);
5566b478
MS
9608 chain = TREE_CHAIN (t);
9609 if (chain && chain != void_type_node)
4393e105 9610 chain = tsubst_copy (chain, args, complain, in_decl);
5566b478
MS
9611 if (purpose == TREE_PURPOSE (t)
9612 && value == TREE_VALUE (t)
9613 && chain == TREE_CHAIN (t))
9614 return t;
9615 return tree_cons (purpose, value, chain);
9616 }
9617
9618 case RECORD_TYPE:
9619 case UNION_TYPE:
9620 case ENUMERAL_TYPE:
9621 case INTEGER_TYPE:
9622 case TEMPLATE_TYPE_PARM:
73b0fce8 9623 case TEMPLATE_TEMPLATE_PARM:
a1281f45 9624 case BOUND_TEMPLATE_TEMPLATE_PARM:
f84b4be9 9625 case TEMPLATE_PARM_INDEX:
5566b478
MS
9626 case POINTER_TYPE:
9627 case REFERENCE_TYPE:
9628 case OFFSET_TYPE:
9629 case FUNCTION_TYPE:
9630 case METHOD_TYPE:
9631 case ARRAY_TYPE:
9632 case TYPENAME_TYPE:
b8c6534b 9633 case UNBOUND_CLASS_TEMPLATE:
2a2b1d56 9634 case TYPEOF_TYPE:
f84b4be9 9635 case TYPE_DECL:
4393e105 9636 return tsubst (t, args, complain, in_decl);
5566b478 9637
e92cc029 9638 case IDENTIFIER_NODE:
421844e7 9639 if (IDENTIFIER_TYPENAME_P (t))
1f6e1acc
AS
9640 {
9641 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
1f84ec23 9642 return mangle_conv_op_name_for_type (new_type);
1f6e1acc 9643 }
e92cc029
MS
9644 else
9645 return t;
9646
5156628f 9647 case CONSTRUCTOR:
4038c495
GB
9648 /* This is handled by tsubst_copy_and_build. */
9649 gcc_unreachable ();
5156628f 9650
371534a9 9651 case VA_ARG_EXPR:
ea333e1c 9652 return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
c2ea3a40
NS
9653 in_decl),
9654 tsubst (TREE_TYPE (t), args, complain, in_decl));
f9817201 9655
543a0daa
RH
9656 case CLEANUP_POINT_EXPR:
9657 /* We shouldn't have built any of these during initial template
9658 generation. Instead, they should be built during instantiation
9659 in response to the saved STMT_IS_FULL_EXPR_P setting. */
315fb5db 9660 gcc_unreachable ();
543a0daa 9661
7eab6e7b
MM
9662 case OFFSET_REF:
9663 mark_used (TREE_OPERAND (t, 1));
9664 return t;
9665
5d80a306
DG
9666 case EXPR_PACK_EXPANSION:
9667 error ("invalid use of pack expansion expression");
9668 return error_mark_node;
9669
9670 case NONTYPE_ARGUMENT_PACK:
9671 error ("use %<...%> to expand argument pack");
9672 return error_mark_node;
9673
5566b478
MS
9674 default:
9675 return t;
9676 }
9677}
9678
1799e5d5
RH
9679/* Like tsubst_copy, but specifically for OpenMP clauses. */
9680
9681static tree
9682tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
9683 tree in_decl)
9684{
9685 tree new_clauses = NULL, nc, oc;
9686
9687 for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
9688 {
9689 nc = copy_node (oc);
9690 OMP_CLAUSE_CHAIN (nc) = new_clauses;
9691 new_clauses = nc;
9692
9693 switch (OMP_CLAUSE_CODE (nc))
9694 {
9695 case OMP_CLAUSE_PRIVATE:
9696 case OMP_CLAUSE_SHARED:
9697 case OMP_CLAUSE_FIRSTPRIVATE:
9698 case OMP_CLAUSE_LASTPRIVATE:
9699 case OMP_CLAUSE_REDUCTION:
9700 case OMP_CLAUSE_COPYIN:
9701 case OMP_CLAUSE_COPYPRIVATE:
9702 case OMP_CLAUSE_IF:
9703 case OMP_CLAUSE_NUM_THREADS:
9704 case OMP_CLAUSE_SCHEDULE:
9705 OMP_CLAUSE_OPERAND (nc, 0)
015c2c66
MM
9706 = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
9707 in_decl, /*integral_constant_expression_p=*/false);
1799e5d5
RH
9708 break;
9709 case OMP_CLAUSE_NOWAIT:
9710 case OMP_CLAUSE_ORDERED:
9711 case OMP_CLAUSE_DEFAULT:
9712 break;
9713 default:
9714 gcc_unreachable ();
9715 }
9716 }
9717
9718 return finish_omp_clauses (nreverse (new_clauses));
9719}
9720
f74dcfb7
JJ
9721/* Like tsubst_copy_and_build, but unshare TREE_LIST nodes. */
9722
9723static tree
9724tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
9725 tree in_decl)
9726{
9727#define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
9728
9729 tree purpose, value, chain;
9730
9731 if (t == NULL)
9732 return t;
9733
9734 if (TREE_CODE (t) != TREE_LIST)
9735 return tsubst_copy_and_build (t, args, complain, in_decl,
015c2c66
MM
9736 /*function_p=*/false,
9737 /*integral_constant_expression_p=*/false);
f74dcfb7
JJ
9738
9739 if (t == void_list_node)
9740 return t;
9741
9742 purpose = TREE_PURPOSE (t);
9743 if (purpose)
9744 purpose = RECUR (purpose);
9745 value = TREE_VALUE (t);
9746 if (value)
9747 value = RECUR (value);
9748 chain = TREE_CHAIN (t);
9749 if (chain && chain != void_type_node)
9750 chain = RECUR (chain);
9751 return tree_cons (purpose, value, chain);
9752#undef RECUR
9753}
9754
cc23546e
JO
9755/* Like tsubst_copy for expressions, etc. but also does semantic
9756 processing. */
00d3396f 9757
14d22dd6 9758static tree
015c2c66
MM
9759tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
9760 bool integral_constant_expression_p)
5566b478 9761{
015c2c66
MM
9762#define RECUR(NODE) \
9763 tsubst_expr ((NODE), args, complain, in_decl, \
9764 integral_constant_expression_p)
9765
fd10dd09 9766 tree stmt, tmp;
558475f0 9767
5566b478
MS
9768 if (t == NULL_TREE || t == error_mark_node)
9769 return t;
9770
93409b8c
PB
9771 if (EXPR_HAS_LOCATION (t))
9772 input_location = EXPR_LOCATION (t);
7c34ced1
RH
9773 if (STATEMENT_CODE_P (TREE_CODE (t)))
9774 current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
9775
5566b478 9776 switch (TREE_CODE (t))
8d08fdba 9777 {
325c3691
RH
9778 case STATEMENT_LIST:
9779 {
9780 tree_stmt_iterator i;
9781 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
015c2c66 9782 RECUR (tsi_stmt (i));
325c3691
RH
9783 break;
9784 }
9785
558475f0 9786 case CTOR_INITIALIZER:
c8094d83 9787 finish_mem_initializers (tsubst_initializer_list
2282d28d
MM
9788 (TREE_OPERAND (t, 0), args));
9789 break;
558475f0 9790
5088b058 9791 case RETURN_EXPR:
015c2c66 9792 finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
5566b478
MS
9793 break;
9794
9795 case EXPR_STMT:
015c2c66 9796 tmp = RECUR (EXPR_STMT_EXPR (t));
7c34ced1
RH
9797 if (EXPR_STMT_STMT_EXPR_RESULT (t))
9798 finish_stmt_expr_expr (tmp, cur_stmt_expr);
9799 else
9800 finish_expr_stmt (tmp);
9801 break;
5566b478 9802
9da99f7d 9803 case USING_STMT:
015c2c66 9804 do_using_directive (RECUR (USING_STMT_NAMESPACE (t)));
9da99f7d 9805 break;
c8094d83 9806
350fae66 9807 case DECL_EXPR:
5566b478 9808 {
e0942dcd
MM
9809 tree decl;
9810 tree init;
5566b478 9811
350fae66 9812 decl = DECL_EXPR_DECL (t);
acef433b
MM
9813 if (TREE_CODE (decl) == LABEL_DECL)
9814 finish_label_decl (DECL_NAME (decl));
fbfe8c9e
NS
9815 else if (TREE_CODE (decl) == USING_DECL)
9816 {
98ed9dae 9817 tree scope = USING_DECL_SCOPE (decl);
fbfe8c9e 9818 tree name = DECL_NAME (decl);
22038b2c 9819 tree decl;
c8094d83 9820
015c2c66 9821 scope = RECUR (scope);
22038b2c 9822 decl = lookup_qualified_name (scope, name,
12483c9f
NS
9823 /*is_type_p=*/false,
9824 /*complain=*/false);
8f78f01f
MM
9825 if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
9826 qualified_name_lookup_error (scope, name, decl);
22038b2c 9827 else
ed5f054f 9828 do_local_using_decl (decl, scope, name);
fbfe8c9e 9829 }
acef433b
MM
9830 else
9831 {
9832 init = DECL_INITIAL (decl);
9833 decl = tsubst (decl, args, complain, in_decl);
ce2e5191
NS
9834 if (decl != error_mark_node)
9835 {
0cbd7506
MS
9836 /* By marking the declaration as instantiated, we avoid
9837 trying to instantiate it. Since instantiate_decl can't
9838 handle local variables, and since we've already done
9839 all that needs to be done, that's the right thing to
9840 do. */
9841 if (TREE_CODE (decl) == VAR_DECL)
9842 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
edebf865
MM
9843 if (TREE_CODE (decl) == VAR_DECL
9844 && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
9845 /* Anonymous aggregates are a special case. */
9846 finish_anon_union (decl);
c8094d83 9847 else
ed2fa432 9848 {
edebf865 9849 maybe_push_decl (decl);
39703eb9
MM
9850 if (TREE_CODE (decl) == VAR_DECL
9851 && DECL_PRETTY_FUNCTION_P (decl))
edebf865
MM
9852 {
9853 /* For __PRETTY_FUNCTION__ we have to adjust the
9854 initializer. */
9855 const char *const name
9856 = cxx_printable_name (current_function_decl, 2);
bb885938 9857 init = cp_fname_init (name, &TREE_TYPE (decl));
edebf865
MM
9858 }
9859 else
015c2c66 9860 init = RECUR (init);
d174af6c 9861 finish_decl (decl, init, NULL_TREE);
ed2fa432 9862 }
ce2e5191 9863 }
acef433b 9864 }
fd10dd09 9865
350fae66 9866 /* A DECL_EXPR can also be used as an expression, in the condition
325c3691
RH
9867 clause of an if/for/while construct. */
9868 return decl;
5566b478 9869 }
8d08fdba 9870
5566b478 9871 case FOR_STMT:
7c34ced1 9872 stmt = begin_for_stmt ();
015c2c66 9873 RECUR (FOR_INIT_STMT (t));
7c34ced1 9874 finish_for_init_stmt (stmt);
015c2c66 9875 tmp = RECUR (FOR_COND (t));
7c34ced1 9876 finish_for_cond (tmp, stmt);
015c2c66 9877 tmp = RECUR (FOR_EXPR (t));
7c34ced1 9878 finish_for_expr (tmp, stmt);
015c2c66 9879 RECUR (FOR_BODY (t));
7c34ced1 9880 finish_for_stmt (stmt);
5566b478 9881 break;
8d08fdba 9882
5566b478 9883 case WHILE_STMT:
7c34ced1 9884 stmt = begin_while_stmt ();
015c2c66 9885 tmp = RECUR (WHILE_COND (t));
7c34ced1 9886 finish_while_stmt_cond (tmp, stmt);
015c2c66 9887 RECUR (WHILE_BODY (t));
7c34ced1 9888 finish_while_stmt (stmt);
5566b478 9889 break;
8d08fdba 9890
5566b478 9891 case DO_STMT:
7c34ced1 9892 stmt = begin_do_stmt ();
015c2c66 9893 RECUR (DO_BODY (t));
7c34ced1 9894 finish_do_body (stmt);
015c2c66 9895 tmp = RECUR (DO_COND (t));
7c34ced1 9896 finish_do_stmt (tmp, stmt);
5566b478 9897 break;
a0a33927 9898
5566b478 9899 case IF_STMT:
7c34ced1 9900 stmt = begin_if_stmt ();
015c2c66 9901 tmp = RECUR (IF_COND (t));
7c34ced1 9902 finish_if_stmt_cond (tmp, stmt);
015c2c66 9903 RECUR (THEN_CLAUSE (t));
7c34ced1 9904 finish_then_clause (stmt);
8d08fdba 9905
7c34ced1
RH
9906 if (ELSE_CLAUSE (t))
9907 {
9908 begin_else_clause (stmt);
015c2c66 9909 RECUR (ELSE_CLAUSE (t));
7c34ced1
RH
9910 finish_else_clause (stmt);
9911 }
9912
9913 finish_if_stmt (stmt);
5566b478 9914 break;
8d08fdba 9915
5882f0f3 9916 case BIND_EXPR:
7c34ced1
RH
9917 if (BIND_EXPR_BODY_BLOCK (t))
9918 stmt = begin_function_body ();
9919 else
9920 stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
9921 ? BCS_TRY_BLOCK : 0);
ade3dc07 9922
015c2c66 9923 RECUR (BIND_EXPR_BODY (t));
ade3dc07 9924
7c34ced1
RH
9925 if (BIND_EXPR_BODY_BLOCK (t))
9926 finish_function_body (stmt);
9927 else
9928 finish_compound_stmt (stmt);
5566b478 9929 break;
8d08fdba 9930
5566b478 9931 case BREAK_STMT:
ad321293 9932 finish_break_stmt ();
5566b478 9933 break;
8d08fdba 9934
6467930b 9935 case CONTINUE_STMT:
ad321293 9936 finish_continue_stmt ();
6467930b
MS
9937 break;
9938
5566b478 9939 case SWITCH_STMT:
7c34ced1 9940 stmt = begin_switch_stmt ();
015c2c66 9941 tmp = RECUR (SWITCH_STMT_COND (t));
7c34ced1 9942 finish_switch_cond (tmp, stmt);
015c2c66 9943 RECUR (SWITCH_STMT_BODY (t));
7c34ced1 9944 finish_switch_stmt (stmt);
5566b478
MS
9945 break;
9946
8c161995 9947 case CASE_LABEL_EXPR:
015c2c66
MM
9948 finish_case_label (RECUR (CASE_LOW (t)),
9949 RECUR (CASE_HIGH (t)));
5566b478
MS
9950 break;
9951
9e14e18f 9952 case LABEL_EXPR:
9e14e18f 9953 finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
5566b478
MS
9954 break;
9955
9e14e18f 9956 case GOTO_EXPR:
fd10dd09
JM
9957 tmp = GOTO_DESTINATION (t);
9958 if (TREE_CODE (tmp) != LABEL_DECL)
aa09da44
MM
9959 /* Computed goto's must be tsubst'd into. On the other hand,
9960 non-computed gotos must not be; the identifier in question
9961 will have no binding. */
015c2c66 9962 tmp = RECUR (tmp);
3fa56191 9963 else
fd10dd09
JM
9964 tmp = DECL_NAME (tmp);
9965 finish_goto_stmt (tmp);
ad321293
MM
9966 break;
9967
e130a54b 9968 case ASM_EXPR:
c87978aa 9969 tmp = finish_asm_stmt
6de9cd9a 9970 (ASM_VOLATILE_P (t),
015c2c66 9971 RECUR (ASM_STRING (t)),
f74dcfb7
JJ
9972 tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
9973 tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
9974 tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl));
131263fa
AP
9975 {
9976 tree asm_expr = tmp;
9977 if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
9978 asm_expr = TREE_OPERAND (asm_expr, 0);
9979 ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
9980 }
5566b478 9981 break;
faf5394a
MS
9982
9983 case TRY_BLOCK:
f1dedc31 9984 if (CLEANUP_P (t))
62409b39 9985 {
57b52417 9986 stmt = begin_try_block ();
015c2c66 9987 RECUR (TRY_STMTS (t));
62409b39 9988 finish_cleanup_try_block (stmt);
015c2c66 9989 finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
62409b39 9990 }
f1dedc31
MM
9991 else
9992 {
eaf6fb90
MM
9993 tree compound_stmt = NULL_TREE;
9994
62409b39 9995 if (FN_TRY_BLOCK_P (t))
eaf6fb90 9996 stmt = begin_function_try_block (&compound_stmt);
62409b39
MM
9997 else
9998 stmt = begin_try_block ();
9999
015c2c66 10000 RECUR (TRY_STMTS (t));
62409b39
MM
10001
10002 if (FN_TRY_BLOCK_P (t))
10003 finish_function_try_block (stmt);
10004 else
10005 finish_try_block (stmt);
10006
015c2c66 10007 RECUR (TRY_HANDLERS (t));
84df082b 10008 if (FN_TRY_BLOCK_P (t))
eaf6fb90 10009 finish_function_handler_sequence (stmt, compound_stmt);
84df082b
MM
10010 else
10011 finish_handler_sequence (stmt);
f1dedc31 10012 }
faf5394a 10013 break;
c8094d83 10014
faf5394a 10015 case HANDLER:
b35d4555 10016 {
3a2419a7 10017 tree decl = HANDLER_PARMS (t);
b35d4555 10018
3a2419a7 10019 if (decl)
b35d4555 10020 {
b35d4555 10021 decl = tsubst (decl, args, complain, in_decl);
f8191e64
MM
10022 /* Prevent instantiate_decl from trying to instantiate
10023 this variable. We've already done all that needs to be
10024 done. */
3a2419a7
VR
10025 if (decl != error_mark_node)
10026 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
b35d4555 10027 }
3a2419a7 10028 stmt = begin_handler ();
1a6025b4 10029 finish_handler_parms (decl, stmt);
015c2c66 10030 RECUR (HANDLER_BODY (t));
1a6025b4 10031 finish_handler (stmt);
b35d4555 10032 }
faf5394a
MS
10033 break;
10034
b87692e5 10035 case TAG_DEFN:
fd10dd09 10036 tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
b87692e5 10037 break;
55a3debe
DG
10038
10039 case STATIC_ASSERT:
10040 {
10041 tree condition =
10042 tsubst_expr (STATIC_ASSERT_CONDITION (t),
10043 args,
10044 complain, in_decl,
10045 /*integral_constant_expression_p=*/true);
10046 finish_static_assert (condition,
10047 STATIC_ASSERT_MESSAGE (t),
10048 STATIC_ASSERT_SOURCE_LOCATION (t),
10049 /*member_p=*/false);
10050 }
10051 break;
b87692e5 10052
1799e5d5
RH
10053 case OMP_PARALLEL:
10054 tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
10055 args, complain, in_decl);
10056 stmt = begin_omp_parallel ();
015c2c66 10057 RECUR (OMP_PARALLEL_BODY (t));
761041be
JJ
10058 OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
10059 = OMP_PARALLEL_COMBINED (t);
1799e5d5
RH
10060 break;
10061
10062 case OMP_FOR:
10063 {
10064 tree clauses, decl, init, cond, incr, body, pre_body;
10065
10066 clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
10067 args, complain, in_decl);
10068 init = OMP_FOR_INIT (t);
10069 gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
015c2c66
MM
10070 decl = RECUR (TREE_OPERAND (init, 0));
10071 init = RECUR (TREE_OPERAND (init, 1));
10072 cond = RECUR (OMP_FOR_COND (t));
10073 incr = RECUR (OMP_FOR_INCR (t));
1799e5d5
RH
10074
10075 stmt = begin_omp_structured_block ();
10076
10077 pre_body = push_stmt_list ();
015c2c66 10078 RECUR (OMP_FOR_PRE_BODY (t));
1799e5d5
RH
10079 pre_body = pop_stmt_list (pre_body);
10080
10081 body = push_stmt_list ();
015c2c66 10082 RECUR (OMP_FOR_BODY (t));
1799e5d5
RH
10083 body = pop_stmt_list (body);
10084
10085 t = finish_omp_for (EXPR_LOCATION (t), decl, init, cond, incr, body,
10086 pre_body);
10087 if (t)
10088 OMP_FOR_CLAUSES (t) = clauses;
10089
10090 add_stmt (finish_omp_structured_block (stmt));
10091 }
10092 break;
10093
10094 case OMP_SECTIONS:
10095 case OMP_SINGLE:
10096 tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
10097 stmt = push_stmt_list ();
015c2c66 10098 RECUR (OMP_BODY (t));
1799e5d5
RH
10099 stmt = pop_stmt_list (stmt);
10100
10101 t = copy_node (t);
10102 OMP_BODY (t) = stmt;
10103 OMP_CLAUSES (t) = tmp;
10104 add_stmt (t);
10105 break;
10106
10107 case OMP_SECTION:
10108 case OMP_CRITICAL:
10109 case OMP_MASTER:
10110 case OMP_ORDERED:
10111 stmt = push_stmt_list ();
015c2c66 10112 RECUR (OMP_BODY (t));
1799e5d5
RH
10113 stmt = pop_stmt_list (stmt);
10114
10115 t = copy_node (t);
10116 OMP_BODY (t) = stmt;
10117 add_stmt (t);
10118 break;
10119
10120 case OMP_ATOMIC:
4fe70b31
PB
10121 if (OMP_ATOMIC_DEPENDENT_P (t))
10122 {
10123 tree op1 = TREE_OPERAND (t, 1);
10124 tree lhs = RECUR (TREE_OPERAND (op1, 0));
10125 tree rhs = RECUR (TREE_OPERAND (op1, 1));
10126 finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
10127 }
1799e5d5
RH
10128 break;
10129
5d80a306
DG
10130 case EXPR_PACK_EXPANSION:
10131 error ("invalid use of pack expansion expression");
10132 return error_mark_node;
10133
10134 case NONTYPE_ARGUMENT_PACK:
10135 error ("use %<...%> to expand argument pack");
10136 return error_mark_node;
10137
5566b478 10138 default:
315fb5db 10139 gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
c8094d83 10140
315fb5db 10141 return tsubst_copy_and_build (t, args, complain, in_decl,
015c2c66
MM
10142 /*function_p=*/false,
10143 integral_constant_expression_p);
5566b478 10144 }
fd10dd09 10145
325c3691 10146 return NULL_TREE;
015c2c66 10147#undef RECUR
8d08fdba
MS
10148}
10149
b3445994
MM
10150/* T is a postfix-expression that is not being used in a function
10151 call. Return the substituted version of T. */
10152
10153static tree
c8094d83 10154tsubst_non_call_postfix_expression (tree t, tree args,
b3445994
MM
10155 tsubst_flags_t complain,
10156 tree in_decl)
10157{
10158 if (TREE_CODE (t) == SCOPE_REF)
10159 t = tsubst_qualified_id (t, args, complain, in_decl,
10160 /*done=*/false, /*address_p=*/false);
10161 else
10162 t = tsubst_copy_and_build (t, args, complain, in_decl,
015c2c66
MM
10163 /*function_p=*/false,
10164 /*integral_constant_expression_p=*/false);
b3445994
MM
10165
10166 return t;
10167}
10168
cc23546e 10169/* Like tsubst but deals with expressions and performs semantic
b3445994 10170 analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
cc23546e 10171
ee76b931 10172tree
c8094d83 10173tsubst_copy_and_build (tree t,
0cbd7506
MS
10174 tree args,
10175 tsubst_flags_t complain,
10176 tree in_decl,
015c2c66
MM
10177 bool function_p,
10178 bool integral_constant_expression_p)
cc23546e 10179{
015c2c66
MM
10180#define RECUR(NODE) \
10181 tsubst_copy_and_build (NODE, args, complain, in_decl, \
10182 /*function_p=*/false, \
10183 integral_constant_expression_p)
b3445994 10184
ee76b931
MM
10185 tree op1;
10186
cc23546e
JO
10187 if (t == NULL_TREE || t == error_mark_node)
10188 return t;
10189
10190 switch (TREE_CODE (t))
10191 {
399dedb9
NS
10192 case USING_DECL:
10193 t = DECL_NAME (t);
852dcbdd 10194 /* Fall through. */
b3445994 10195 case IDENTIFIER_NODE:
cc23546e 10196 {
b3445994 10197 tree decl;
b3445994 10198 cp_id_kind idk;
67c03833 10199 bool non_integral_constant_expression_p;
b3445994
MM
10200 const char *error_msg;
10201
b3445994 10202 if (IDENTIFIER_TYPENAME_P (t))
cc23546e 10203 {
b3445994
MM
10204 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10205 t = mangle_conv_op_name_for_type (new_type);
cc23546e 10206 }
b3445994
MM
10207
10208 /* Look up the name. */
10e6657a 10209 decl = lookup_name (t);
b3445994
MM
10210
10211 /* By convention, expressions use ERROR_MARK_NODE to indicate
10212 failure, not NULL_TREE. */
10213 if (decl == NULL_TREE)
10214 decl = error_mark_node;
10215
10b1d5e7 10216 decl = finish_id_expression (t, decl, NULL_TREE,
b3445994 10217 &idk,
015c2c66 10218 integral_constant_expression_p,
67c03833
JM
10219 /*allow_non_integral_constant_expression_p=*/false,
10220 &non_integral_constant_expression_p,
02ed62dd
MM
10221 /*template_p=*/false,
10222 /*done=*/true,
10223 /*address_p=*/false,
10224 /*template_arg_p=*/false,
b3445994
MM
10225 &error_msg);
10226 if (error_msg)
10227 error (error_msg);
10228 if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
10229 decl = unqualified_name_lookup_error (decl);
10230 return decl;
cc23546e
JO
10231 }
10232
10233 case TEMPLATE_ID_EXPR:
10234 {
10235 tree object;
b3445994 10236 tree template = RECUR (TREE_OPERAND (t, 0));
bf12d54d
NS
10237 tree targs = TREE_OPERAND (t, 1);
10238
10239 if (targs)
10240 targs = tsubst_template_args (targs, args, complain, in_decl);
c8094d83 10241
cc23546e
JO
10242 if (TREE_CODE (template) == COMPONENT_REF)
10243 {
10244 object = TREE_OPERAND (template, 0);
10245 template = TREE_OPERAND (template, 1);
10246 }
10247 else
10248 object = NULL_TREE;
bd83b409 10249 template = lookup_template_function (template, targs);
c8094d83 10250
cc23546e 10251 if (object)
c8094d83 10252 return build3 (COMPONENT_REF, TREE_TYPE (template),
f293ce4b 10253 object, template, NULL_TREE);
cc23546e 10254 else
eff3a276 10255 return baselink_for_fns (template);
cc23546e
JO
10256 }
10257
10258 case INDIRECT_REF:
db24eb1f
NS
10259 {
10260 tree r = RECUR (TREE_OPERAND (t, 0));
10261
10262 if (REFERENCE_REF_P (t))
10263 {
e8c66fe0
NS
10264 /* A type conversion to reference type will be enclosed in
10265 such an indirect ref, but the substitution of the cast
10266 will have also added such an indirect ref. */
10267 if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
10268 r = convert_from_reference (r);
db24eb1f
NS
10269 }
10270 else
10271 r = build_x_indirect_ref (r, "unary *");
10272 return r;
10273 }
cc23546e 10274
0da99d4e
GB
10275 case NOP_EXPR:
10276 return build_nop
10277 (tsubst (TREE_TYPE (t), args, complain, in_decl),
10278 RECUR (TREE_OPERAND (t, 0)));
10279
cc23546e 10280 case CAST_EXPR:
cc23546e 10281 case REINTERPRET_CAST_EXPR:
cc23546e 10282 case CONST_CAST_EXPR:
cc23546e 10283 case DYNAMIC_CAST_EXPR:
cc23546e 10284 case STATIC_CAST_EXPR:
015c2c66
MM
10285 {
10286 tree type;
10287 tree op;
10288
10289 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10290 if (integral_constant_expression_p
10291 && !cast_valid_in_integral_constant_expression_p (type))
10292 {
10293 error ("a cast to a type other than an integral or "
10294 "enumeration type cannot appear in a constant-expression");
10295 return error_mark_node;
10296 }
10297
10298 op = RECUR (TREE_OPERAND (t, 0));
10299
10300 switch (TREE_CODE (t))
10301 {
10302 case CAST_EXPR:
10303 return build_functional_cast (type, op);
10304 case REINTERPRET_CAST_EXPR:
10305 return build_reinterpret_cast (type, op);
10306 case CONST_CAST_EXPR:
10307 return build_const_cast (type, op);
10308 case DYNAMIC_CAST_EXPR:
10309 return build_dynamic_cast (type, op);
10310 case STATIC_CAST_EXPR:
10311 return build_static_cast (type, op);
10312 default:
10313 gcc_unreachable ();
10314 }
10315 }
cc23546e 10316
cc23546e
JO
10317 case POSTDECREMENT_EXPR:
10318 case POSTINCREMENT_EXPR:
b3445994
MM
10319 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10320 args, complain, in_decl);
ee76b931
MM
10321 return build_x_unary_op (TREE_CODE (t), op1);
10322
10323 case PREDECREMENT_EXPR:
10324 case PREINCREMENT_EXPR:
cc23546e
JO
10325 case NEGATE_EXPR:
10326 case BIT_NOT_EXPR:
cc23546e 10327 case ABS_EXPR:
d17811fd 10328 case TRUTH_NOT_EXPR:
392e3d51 10329 case UNARY_PLUS_EXPR: /* Unary + */
d17811fd
MM
10330 case REALPART_EXPR:
10331 case IMAGPART_EXPR:
b3445994 10332 return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
cc23546e 10333
cc23546e 10334 case ADDR_EXPR:
ee76b931
MM
10335 op1 = TREE_OPERAND (t, 0);
10336 if (TREE_CODE (op1) == SCOPE_REF)
c8094d83 10337 op1 = tsubst_qualified_id (op1, args, complain, in_decl,
ee76b931
MM
10338 /*done=*/true, /*address_p=*/true);
10339 else
c8094d83 10340 op1 = tsubst_non_call_postfix_expression (op1, args, complain,
b3445994 10341 in_decl);
fc2b8477
MM
10342 if (TREE_CODE (op1) == LABEL_DECL)
10343 return finish_label_address_expr (DECL_NAME (op1));
ee76b931
MM
10344 return build_x_unary_op (ADDR_EXPR, op1);
10345
cc23546e
JO
10346 case PLUS_EXPR:
10347 case MINUS_EXPR:
10348 case MULT_EXPR:
10349 case TRUNC_DIV_EXPR:
10350 case CEIL_DIV_EXPR:
10351 case FLOOR_DIV_EXPR:
10352 case ROUND_DIV_EXPR:
10353 case EXACT_DIV_EXPR:
10354 case BIT_AND_EXPR:
cc23546e
JO
10355 case BIT_IOR_EXPR:
10356 case BIT_XOR_EXPR:
10357 case TRUNC_MOD_EXPR:
10358 case FLOOR_MOD_EXPR:
10359 case TRUTH_ANDIF_EXPR:
10360 case TRUTH_ORIF_EXPR:
10361 case TRUTH_AND_EXPR:
10362 case TRUTH_OR_EXPR:
10363 case RSHIFT_EXPR:
10364 case LSHIFT_EXPR:
10365 case RROTATE_EXPR:
10366 case LROTATE_EXPR:
10367 case EQ_EXPR:
10368 case NE_EXPR:
10369 case MAX_EXPR:
10370 case MIN_EXPR:
10371 case LE_EXPR:
10372 case GE_EXPR:
10373 case LT_EXPR:
10374 case GT_EXPR:
10375 case MEMBER_REF:
b3445994 10376 case DOTSTAR_EXPR:
cc23546e 10377 return build_x_binary_op
c8094d83 10378 (TREE_CODE (t),
b3445994 10379 RECUR (TREE_OPERAND (t, 0)),
2a67bec2
ILT
10380 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10381 ? ERROR_MARK
10382 : TREE_CODE (TREE_OPERAND (t, 0))),
ec835fb2 10383 RECUR (TREE_OPERAND (t, 1)),
2a67bec2
ILT
10384 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10385 ? ERROR_MARK
10386 : TREE_CODE (TREE_OPERAND (t, 1))),
ec835fb2 10387 /*overloaded_p=*/NULL);
cc23546e
JO
10388
10389 case SCOPE_REF:
ee76b931
MM
10390 return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
10391 /*address_p=*/false);
cc23546e 10392 case ARRAY_REF:
b3445994
MM
10393 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10394 args, complain, in_decl);
2a67bec2
ILT
10395 return build_x_binary_op (ARRAY_REF, op1,
10396 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10397 ? ERROR_MARK
10398 : TREE_CODE (TREE_OPERAND (t, 0))),
10399 RECUR (TREE_OPERAND (t, 1)),
10400 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10401 ? ERROR_MARK
10402 : TREE_CODE (TREE_OPERAND (t, 1))),
d8987adb 10403 /*overloaded_p=*/NULL);
c8094d83 10404
cc23546e 10405 case SIZEOF_EXPR:
5d80a306
DG
10406 if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
10407 {
10408 /* We only want to compute the number of arguments. */
10409 tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
10410 complain, in_decl);
10411 return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
10412 }
10413 /* Fall through */
10414
cc23546e 10415 case ALIGNOF_EXPR:
d17811fd
MM
10416 op1 = TREE_OPERAND (t, 0);
10417 if (!args)
10418 {
10419 /* When there are no ARGS, we are trying to evaluate a
10420 non-dependent expression from the parser. Trying to do
10421 the substitutions may not work. */
10422 if (!TYPE_P (op1))
10423 op1 = TREE_TYPE (op1);
10424 }
10425 else
10426 {
10427 ++skip_evaluation;
015c2c66
MM
10428 op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
10429 /*function_p=*/false,
10430 /*integral_constant_expression_p=*/false);
d17811fd
MM
10431 --skip_evaluation;
10432 }
7a18b933
NS
10433 if (TYPE_P (op1))
10434 return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
d17811fd 10435 else
7a18b933 10436 return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
cc23546e
JO
10437
10438 case MODOP_EXPR:
e4c2c34b
JM
10439 {
10440 tree r = build_x_modify_expr
10441 (RECUR (TREE_OPERAND (t, 0)),
10442 TREE_CODE (TREE_OPERAND (t, 1)),
10443 RECUR (TREE_OPERAND (t, 2)));
bcf9a914
JM
10444 /* TREE_NO_WARNING must be set if either the expression was
10445 parenthesized or it uses an operator such as >>= rather
10446 than plain assignment. In the former case, it was already
10447 set and must be copied. In the latter case,
10448 build_x_modify_expr sets it and it must not be reset
10449 here. */
10450 if (TREE_NO_WARNING (t))
10451 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
e4c2c34b
JM
10452 return r;
10453 }
cc23546e
JO
10454
10455 case ARROW_EXPR:
b3445994
MM
10456 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10457 args, complain, in_decl);
ee76b931
MM
10458 /* Remember that there was a reference to this entity. */
10459 if (DECL_P (op1))
10460 mark_used (op1);
10461 return build_x_arrow (op1);
cc23546e
JO
10462
10463 case NEW_EXPR:
10464 return build_new
b3445994
MM
10465 (RECUR (TREE_OPERAND (t, 0)),
10466 RECUR (TREE_OPERAND (t, 1)),
10467 RECUR (TREE_OPERAND (t, 2)),
058b15c1 10468 RECUR (TREE_OPERAND (t, 3)),
cc23546e
JO
10469 NEW_EXPR_USE_GLOBAL (t));
10470
10471 case DELETE_EXPR:
10472 return delete_sanity
b3445994
MM
10473 (RECUR (TREE_OPERAND (t, 0)),
10474 RECUR (TREE_OPERAND (t, 1)),
cc23546e
JO
10475 DELETE_EXPR_USE_VEC (t),
10476 DELETE_EXPR_USE_GLOBAL (t));
10477
10478 case COMPOUND_EXPR:
b3445994
MM
10479 return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
10480 RECUR (TREE_OPERAND (t, 1)));
cc23546e 10481
ee76b931 10482 case CALL_EXPR:
cc23546e 10483 {
ee76b931
MM
10484 tree function;
10485 tree call_args;
ee76b931 10486 bool qualified_p;
ee935db4 10487 bool koenig_p;
ee76b931 10488
5039610b 10489 function = CALL_EXPR_FN (t);
6d80c4b9
MM
10490 /* When we parsed the expression, we determined whether or
10491 not Koenig lookup should be performed. */
10492 koenig_p = KOENIG_LOOKUP_P (t);
ee76b931 10493 if (TREE_CODE (function) == SCOPE_REF)
cc23546e 10494 {
ee76b931
MM
10495 qualified_p = true;
10496 function = tsubst_qualified_id (function, args, complain, in_decl,
c8094d83 10497 /*done=*/false,
ee76b931 10498 /*address_p=*/false);
cc23546e 10499 }
ee76b931 10500 else
cc23546e 10501 {
61e71a9e
NS
10502 if (TREE_CODE (function) == COMPONENT_REF)
10503 {
10504 tree op = TREE_OPERAND (function, 1);
10505
10506 qualified_p = (TREE_CODE (op) == SCOPE_REF
10507 || (BASELINK_P (op)
10508 && BASELINK_QUALIFIED_P (op)));
10509 }
10510 else
10511 qualified_p = false;
3db45ab5 10512
c8094d83 10513 function = tsubst_copy_and_build (function, args, complain,
b3445994 10514 in_decl,
015c2c66
MM
10515 !qualified_p,
10516 integral_constant_expression_p);
10517
6d80c4b9
MM
10518 if (BASELINK_P (function))
10519 qualified_p = true;
cc23546e 10520 }
cc23546e 10521
5039610b
SL
10522 /* FIXME: Rewrite this so as not to construct an arglist. */
10523 call_args = RECUR (CALL_EXPR_ARGS (t));
676e33ca
MM
10524
10525 /* We do not perform argument-dependent lookup if normal
10526 lookup finds a non-function, in accordance with the
10527 expected resolution of DR 218. */
ee935db4 10528 if (koenig_p
44370687
MM
10529 && ((is_overloaded_fn (function)
10530 /* If lookup found a member function, the Koenig lookup is
10531 not appropriate, even if an unqualified-name was used
10532 to denote the function. */
10533 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
b3445994 10534 || TREE_CODE (function) == IDENTIFIER_NODE))
6d80c4b9
MM
10535 function = perform_koenig_lookup (function, call_args);
10536
10537 if (TREE_CODE (function) == IDENTIFIER_NODE)
b3445994 10538 {
6d80c4b9
MM
10539 unqualified_name_lookup_error (function);
10540 return error_mark_node;
b3445994
MM
10541 }
10542
10543 /* Remember that there was a reference to this entity. */
10544 if (DECL_P (function))
10545 mark_used (function);
10546
d17811fd
MM
10547 if (TREE_CODE (function) == OFFSET_REF)
10548 return build_offset_ref_call_from_tree (function, call_args);
10549 if (TREE_CODE (function) == COMPONENT_REF)
9f880ef9
MM
10550 {
10551 if (!BASELINK_P (TREE_OPERAND (function, 1)))
10552 return finish_call_expr (function, call_args,
10553 /*disallow_virtual=*/false,
10554 /*koenig_p=*/false);
10555 else
c8094d83 10556 return (build_new_method_call
9f880ef9
MM
10557 (TREE_OPERAND (function, 0),
10558 TREE_OPERAND (function, 1),
c8094d83 10559 call_args, NULL_TREE,
63c9a190
MM
10560 qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
10561 /*fn_p=*/NULL));
9f880ef9 10562 }
c8094d83 10563 return finish_call_expr (function, call_args,
6d80c4b9
MM
10564 /*disallow_virtual=*/qualified_p,
10565 koenig_p);
cc23546e
JO
10566 }
10567
10568 case COND_EXPR:
10569 return build_x_conditional_expr
b3445994
MM
10570 (RECUR (TREE_OPERAND (t, 0)),
10571 RECUR (TREE_OPERAND (t, 1)),
10572 RECUR (TREE_OPERAND (t, 2)));
cc23546e
JO
10573
10574 case PSEUDO_DTOR_EXPR:
c8094d83 10575 return finish_pseudo_destructor_expr
b3445994
MM
10576 (RECUR (TREE_OPERAND (t, 0)),
10577 RECUR (TREE_OPERAND (t, 1)),
10578 RECUR (TREE_OPERAND (t, 2)));
cc23546e
JO
10579
10580 case TREE_LIST:
10581 {
10582 tree purpose, value, chain;
10583
10584 if (t == void_list_node)
10585 return t;
10586
5d80a306
DG
10587 if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
10588 || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
10589 {
10590 /* We have pack expansions, so expand those and
10591 create a new list out of it. */
10592 tree purposevec = NULL_TREE;
10593 tree valuevec = NULL_TREE;
10594 tree chain;
10595 int i, len = -1;
10596
10597 /* Expand the argument expressions. */
10598 if (TREE_PURPOSE (t))
10599 purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
10600 complain, in_decl);
10601 if (TREE_VALUE (t))
10602 valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
10603 complain, in_decl);
10604
10605 /* Build the rest of the list. */
10606 chain = TREE_CHAIN (t);
10607 if (chain && chain != void_type_node)
10608 chain = RECUR (chain);
10609
10610 /* Determine the number of arguments. */
10611 if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
10612 {
10613 len = TREE_VEC_LENGTH (purposevec);
10614 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
10615 }
10616 else if (TREE_CODE (valuevec) == TREE_VEC)
10617 len = TREE_VEC_LENGTH (valuevec);
10618 else
10619 {
10620 /* Since we only performed a partial substitution into
10621 the argument pack, we only return a single list
10622 node. */
10623 if (purposevec == TREE_PURPOSE (t)
10624 && valuevec == TREE_VALUE (t)
10625 && chain == TREE_CHAIN (t))
10626 return t;
10627
10628 return tree_cons (purposevec, valuevec, chain);
10629 }
10630
10631 /* Convert the argument vectors into a TREE_LIST */
10632 i = len;
10633 while (i > 0)
10634 {
10635 /* Grab the Ith values. */
10636 i--;
10637 purpose = purposevec ? TREE_VEC_ELT (purposevec, i)
10638 : NULL_TREE;
10639 value
10640 = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i))
10641 : NULL_TREE;
10642
10643 /* Build the list (backwards). */
10644 chain = tree_cons (purpose, value, chain);
10645 }
10646
10647 return chain;
10648 }
10649
cc23546e
JO
10650 purpose = TREE_PURPOSE (t);
10651 if (purpose)
b3445994 10652 purpose = RECUR (purpose);
cc23546e
JO
10653 value = TREE_VALUE (t);
10654 if (value)
b3445994 10655 value = RECUR (value);
cc23546e
JO
10656 chain = TREE_CHAIN (t);
10657 if (chain && chain != void_type_node)
b3445994 10658 chain = RECUR (chain);
cc23546e
JO
10659 if (purpose == TREE_PURPOSE (t)
10660 && value == TREE_VALUE (t)
10661 && chain == TREE_CHAIN (t))
10662 return t;
10663 return tree_cons (purpose, value, chain);
10664 }
10665
10666 case COMPONENT_REF:
10667 {
ee76b931 10668 tree object;
3897c0aa 10669 tree object_type;
ee76b931
MM
10670 tree member;
10671
b3445994
MM
10672 object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10673 args, complain, in_decl);
ee76b931
MM
10674 /* Remember that there was a reference to this entity. */
10675 if (DECL_P (object))
10676 mark_used (object);
3897c0aa 10677 object_type = TREE_TYPE (object);
ee76b931
MM
10678
10679 member = TREE_OPERAND (t, 1);
10680 if (BASELINK_P (member))
c8094d83 10681 member = tsubst_baselink (member,
ee76b931
MM
10682 non_reference (TREE_TYPE (object)),
10683 args, complain, in_decl);
10684 else
10685 member = tsubst_copy (member, args, complain, in_decl);
bad1f462
KL
10686 if (member == error_mark_node)
10687 return error_mark_node;
3897c0aa
MM
10688
10689 if (object_type && !CLASS_TYPE_P (object_type))
cc23546e
JO
10690 {
10691 if (TREE_CODE (member) == BIT_NOT_EXPR)
c8094d83 10692 return finish_pseudo_destructor_expr (object,
cc23546e 10693 NULL_TREE,
3897c0aa 10694 object_type);
cc23546e
JO
10695 else if (TREE_CODE (member) == SCOPE_REF
10696 && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
c8094d83 10697 return finish_pseudo_destructor_expr (object,
cc23546e 10698 object,
3897c0aa 10699 object_type);
cc23546e
JO
10700 }
10701 else if (TREE_CODE (member) == SCOPE_REF
10702 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
10703 {
10704 tree tmpl;
10705 tree args;
c8094d83 10706
cc23546e
JO
10707 /* Lookup the template functions now that we know what the
10708 scope is. */
10709 tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
10710 args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
c8094d83 10711 member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
12483c9f
NS
10712 /*is_type_p=*/false,
10713 /*complain=*/false);
cc23546e 10714 if (BASELINK_P (member))
44370687 10715 {
c8094d83 10716 BASELINK_FUNCTIONS (member)
44370687
MM
10717 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
10718 args);
c8094d83
MS
10719 member = (adjust_result_of_qualified_name_lookup
10720 (member, BINFO_TYPE (BASELINK_BINFO (member)),
3897c0aa 10721 object_type));
44370687 10722 }
cc23546e
JO
10723 else
10724 {
3897c0aa 10725 qualified_name_lookup_error (object_type, tmpl, member);
cc23546e
JO
10726 return error_mark_node;
10727 }
10728 }
2436b51f
MM
10729 else if (TREE_CODE (member) == SCOPE_REF
10730 && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
10731 && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
10732 {
10733 if (complain & tf_error)
10734 {
10735 if (TYPE_P (TREE_OPERAND (member, 0)))
c8094d83 10736 error ("%qT is not a class or namespace",
2436b51f
MM
10737 TREE_OPERAND (member, 0));
10738 else
c8094d83 10739 error ("%qD is not a class or namespace",
2436b51f
MM
10740 TREE_OPERAND (member, 0));
10741 }
10742 return error_mark_node;
10743 }
a3f10e50
NS
10744 else if (TREE_CODE (member) == FIELD_DECL)
10745 return finish_non_static_data_member (member, object, NULL_TREE);
cc23546e 10746
02ed62dd
MM
10747 return finish_class_member_access_expr (object, member,
10748 /*template_p=*/false);
cc23546e
JO
10749 }
10750
10751 case THROW_EXPR:
10752 return build_throw
b3445994 10753 (RECUR (TREE_OPERAND (t, 0)));
cc23546e
JO
10754
10755 case CONSTRUCTOR:
10756 {
4038c495
GB
10757 VEC(constructor_elt,gc) *n;
10758 constructor_elt *ce;
10759 unsigned HOST_WIDE_INT idx;
cc23546e 10760 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
4038c495 10761 bool process_index_p;
5d80a306
DG
10762 int newlen;
10763 bool need_copy_p = false;
cc23546e 10764
a97728cf
VR
10765 if (type == error_mark_node)
10766 return error_mark_node;
10767
cc23546e
JO
10768 /* digest_init will do the wrong thing if we let it. */
10769 if (type && TYPE_PTRMEMFUNC_P (type))
10770 return t;
10771
4038c495 10772 /* We do not want to process the index of aggregate
cc23546e
JO
10773 initializers as they are identifier nodes which will be
10774 looked up by digest_init. */
4038c495 10775 process_index_p = !(type && IS_AGGR_TYPE (type));
c8094d83 10776
4038c495 10777 n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
5d80a306 10778 newlen = VEC_length (constructor_elt, n);
4038c495
GB
10779 for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
10780 {
10781 if (ce->index && process_index_p)
10782 ce->index = RECUR (ce->index);
5d80a306
DG
10783
10784 if (PACK_EXPANSION_P (ce->value))
10785 {
10786 /* Substitute into the pack expansion. */
10787 ce->value = tsubst_pack_expansion (ce->value, args, complain,
10788 in_decl);
10789
10790 if (TREE_VEC_LENGTH (ce->value) == 1)
10791 /* Just move the argument into place. */
10792 ce->value = TREE_VEC_ELT (ce->value, 0);
10793 else
10794 {
10795 /* Update the length of the final CONSTRUCTOR
10796 arguments vector, and note that we will need to
10797 copy.*/
10798 newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
10799 need_copy_p = true;
10800 }
10801 }
10802 else
10803 ce->value = RECUR (ce->value);
cc23546e 10804 }
c8094d83 10805
5d80a306
DG
10806 if (need_copy_p)
10807 {
10808 VEC(constructor_elt,gc) *old_n = n;
10809
10810 n = VEC_alloc (constructor_elt, gc, newlen);
10811 for (idx = 0; VEC_iterate (constructor_elt, old_n, idx, ce);
10812 idx++)
10813 {
10814 if (TREE_CODE (ce->value) == TREE_VEC)
10815 {
10816 int i, len = TREE_VEC_LENGTH (ce->value);
10817 for (i = 0; i < len; ++i)
10818 CONSTRUCTOR_APPEND_ELT (n, 0,
10819 TREE_VEC_ELT (ce->value, i));
10820 }
10821 else
10822 CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
10823 }
10824 }
10825
05b22df9
MM
10826 if (TREE_HAS_CONSTRUCTOR (t))
10827 return finish_compound_literal (type, n);
cc23546e 10828
05b22df9 10829 return build_constructor (NULL_TREE, n);
cc23546e
JO
10830 }
10831
10832 case TYPEID_EXPR:
10833 {
b3445994 10834 tree operand_0 = RECUR (TREE_OPERAND (t, 0));
cc23546e
JO
10835 if (TYPE_P (operand_0))
10836 return get_typeid (operand_0);
10837 return build_typeid (operand_0);
10838 }
10839
cc23546e 10840 case VAR_DECL:
db24eb1f
NS
10841 if (!args)
10842 return t;
10843 /* Fall through */
c8094d83 10844
db24eb1f
NS
10845 case PARM_DECL:
10846 {
10847 tree r = tsubst_copy (t, args, complain, in_decl);
c8094d83 10848
db24eb1f
NS
10849 if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
10850 /* If the original type was a reference, we'll be wrapped in
10851 the appropriate INDIRECT_REF. */
10852 r = convert_from_reference (r);
10853 return r;
10854 }
cc23546e
JO
10855
10856 case VA_ARG_EXPR:
b3445994 10857 return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
c8094d83 10858 tsubst_copy (TREE_TYPE (t), args, complain,
b3445994 10859 in_decl));
cc23546e 10860
4bceb077 10861 case OFFSETOF_EXPR:
c291f8b1 10862 return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
4bceb077 10863
cb68ec50
PC
10864 case TRAIT_EXPR:
10865 {
10866 tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
10867 complain, in_decl);
10868
10869 tree type2 = TRAIT_EXPR_TYPE2 (t);
10870 if (type2)
10871 type2 = tsubst_copy (type2, args, complain, in_decl);
10872
10873 return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
10874 }
10875
0fe0caa6
RH
10876 case STMT_EXPR:
10877 {
10878 tree old_stmt_expr = cur_stmt_expr;
10879 tree stmt_expr = begin_stmt_expr ();
10880
10881 cur_stmt_expr = stmt_expr;
015c2c66
MM
10882 tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
10883 integral_constant_expression_p);
0fe0caa6
RH
10884 stmt_expr = finish_stmt_expr (stmt_expr, false);
10885 cur_stmt_expr = old_stmt_expr;
10886
10887 return stmt_expr;
10888 }
10889
a5201a91
MM
10890 case CONST_DECL:
10891 t = tsubst_copy (t, args, complain, in_decl);
10892 /* As in finish_id_expression, we resolve enumeration constants
10893 to their underlying values. */
10894 if (TREE_CODE (t) == CONST_DECL)
6193b8b7
DJ
10895 {
10896 used_types_insert (TREE_TYPE (t));
10897 return DECL_INITIAL (t);
10898 }
a5201a91
MM
10899 return t;
10900
cc23546e 10901 default:
e58a9aa1
ZL
10902 /* Handle Objective-C++ constructs, if appropriate. */
10903 {
10904 tree subst
10905 = objcp_tsubst_copy_and_build (t, args, complain,
10906 in_decl, /*function_p=*/false);
10907 if (subst)
10908 return subst;
10909 }
cc23546e
JO
10910 return tsubst_copy (t, args, complain, in_decl);
10911 }
b3445994
MM
10912
10913#undef RECUR
cc23546e
JO
10914}
10915
3e4a3562
NS
10916/* Verify that the instantiated ARGS are valid. For type arguments,
10917 make sure that the type's linkage is ok. For non-type arguments,
34cd5ae7 10918 make sure they are constants if they are integral or enumerations.
9bcb9aae 10919 Emit an error under control of COMPLAIN, and return TRUE on error. */
3e4a3562
NS
10920
10921static bool
3a978d72 10922check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
3e4a3562
NS
10923{
10924 int ix, len = DECL_NTPARMS (tmpl);
10925 bool result = false;
10926
10927 for (ix = 0; ix != len; ix++)
10928 {
10929 tree t = TREE_VEC_ELT (args, ix);
c8094d83 10930
3e4a3562
NS
10931 if (TYPE_P (t))
10932 {
10933 /* [basic.link]: A name with no linkage (notably, the name
10934 of a class or enumeration declared in a local scope)
10935 shall not be used to declare an entity with linkage.
10936 This implies that names with no linkage cannot be used as
10937 template arguments. */
4684cd27 10938 tree nt = no_linkage_check (t, /*relaxed_p=*/false);
3e4a3562
NS
10939
10940 if (nt)
10941 {
cb807ba3 10942 /* DR 488 makes use of a type with no linkage cause
3db45ab5 10943 type deduction to fail. */
2010cdcd
MM
10944 if (complain & tf_error)
10945 {
10946 if (TYPE_ANONYMOUS_P (nt))
10947 error ("%qT is/uses anonymous type", t);
10948 else
9df540a8 10949 error ("template argument for %qD uses local type %qT",
3db45ab5 10950 tmpl, t);
2010cdcd 10951 }
3e4a3562
NS
10952 result = true;
10953 }
10954 /* In order to avoid all sorts of complications, we do not
10955 allow variably-modified types as template arguments. */
5377d5ba 10956 else if (variably_modified_type_p (t, NULL_TREE))
3e4a3562
NS
10957 {
10958 if (complain & tf_error)
0f51ccfc 10959 error ("%qT is a variably modified type", t);
3e4a3562
NS
10960 result = true;
10961 }
10962 }
10963 /* A non-type argument of integral or enumerated type must be a
10964 constant. */
10965 else if (TREE_TYPE (t)
10966 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
10967 && !TREE_CONSTANT (t))
10968 {
10969 if (complain & tf_error)
0f51ccfc 10970 error ("integral expression %qE is not constant", t);
3e4a3562
NS
10971 result = true;
10972 }
10973 }
2010cdcd 10974 if (result && (complain & tf_error))
0f51ccfc 10975 error (" trying to instantiate %qD", tmpl);
3e4a3562
NS
10976 return result;
10977}
10978
6ba89f8e 10979/* Instantiate the indicated variable or function template TMPL with
36a117a5
MM
10980 the template arguments in TARG_PTR. */
10981
5566b478 10982tree
3a978d72 10983instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
8d08fdba 10984{
5566b478 10985 tree fndecl;
36a117a5
MM
10986 tree gen_tmpl;
10987 tree spec;
a95799ec 10988 HOST_WIDE_INT saved_processing_template_decl;
5566b478 10989
27fafc8d
JM
10990 if (tmpl == error_mark_node)
10991 return error_mark_node;
10992
50bc768d 10993 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
386b8a85 10994
db9b2174
MM
10995 /* If this function is a clone, handle it specially. */
10996 if (DECL_CLONED_FUNCTION_P (tmpl))
3ad97789 10997 {
a30f62e0 10998 tree spec;
3ad97789 10999 tree clone;
c8094d83 11000
a30f62e0
MM
11001 spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
11002 complain);
11003 if (spec == error_mark_node)
11004 return error_mark_node;
11005
c6002625 11006 /* Look for the clone. */
4684cd27 11007 FOR_EACH_CLONE (clone, spec)
3ad97789
NS
11008 if (DECL_NAME (clone) == DECL_NAME (tmpl))
11009 return clone;
11010 /* We should always have found the clone by now. */
315fb5db 11011 gcc_unreachable ();
3ad97789
NS
11012 return NULL_TREE;
11013 }
c8094d83 11014
36a117a5 11015 /* Check to see if we already have this specialization. */
c8094d83 11016 spec = retrieve_specialization (tmpl, targ_ptr,
c7222c02 11017 /*class_specializations_p=*/false);
36a117a5
MM
11018 if (spec != NULL_TREE)
11019 return spec;
11020
f9a7ae04
MM
11021 gen_tmpl = most_general_template (tmpl);
11022 if (tmpl != gen_tmpl)
386b8a85 11023 {
36a117a5
MM
11024 /* The TMPL is a partial instantiation. To get a full set of
11025 arguments we must add the arguments used to perform the
11026 partial instantiation. */
11027 targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
11028 targ_ptr);
36a117a5
MM
11029
11030 /* Check to see if we already have this specialization. */
c7222c02
MM
11031 spec = retrieve_specialization (gen_tmpl, targ_ptr,
11032 /*class_specializations_p=*/false);
75650646
MM
11033 if (spec != NULL_TREE)
11034 return spec;
386b8a85
JM
11035 }
11036
3e4a3562
NS
11037 if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
11038 complain))
11039 return error_mark_node;
c8094d83 11040
2b907f5c
KL
11041 /* We are building a FUNCTION_DECL, during which the access of its
11042 parameters and return types have to be checked. However this
11043 FUNCTION_DECL which is the desired context for access checking
11044 is not built yet. We solve this chicken-and-egg problem by
11045 deferring all checks until we have the FUNCTION_DECL. */
11046 push_deferring_access_checks (dk_deferred);
5c74d5b0 11047
a95799ec
MM
11048 /* Although PROCESSING_TEMPLATE_DECL may be true at this point
11049 (because, for example, we have encountered a non-dependent
a1d08991
MM
11050 function call in the body of a template function and must now
11051 determine which of several overloaded functions will be called),
11052 within the instantiation itself we are not processing a
11053 template. */
a95799ec
MM
11054 saved_processing_template_decl = processing_template_decl;
11055 processing_template_decl = 0;
11056 /* Substitute template parameters to obtain the specialization. */
17aec3eb 11057 fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
3e4a3562 11058 targ_ptr, complain, gen_tmpl);
a95799ec 11059 processing_template_decl = saved_processing_template_decl;
6b6b60af
MM
11060 if (fndecl == error_mark_node)
11061 return error_mark_node;
5c74d5b0 11062
2b907f5c
KL
11063 /* Now we know the specialization, compute access previously
11064 deferred. */
11065 push_access_scope (fndecl);
11066 perform_deferred_access_checks ();
11067 pop_access_scope (fndecl);
11068 pop_deferring_access_checks ();
5c74d5b0 11069
36a117a5
MM
11070 /* The DECL_TI_TEMPLATE should always be the immediate parent
11071 template, not the most general template. */
11072 DECL_TI_TEMPLATE (fndecl) = tmpl;
8d08fdba 11073
94350948 11074 /* If we've just instantiated the main entry point for a function,
3ad97789
NS
11075 instantiate all the alternate entry points as well. We do this
11076 by cloning the instantiation of the main entry point, not by
11077 instantiating the template clones. */
11078 if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
11079 clone_function_decl (fndecl, /*update_method_vec_p=*/0);
94350948 11080
5566b478 11081 return fndecl;
8d08fdba 11082}
5566b478 11083
4393e105
MM
11084/* The FN is a TEMPLATE_DECL for a function. The ARGS are the
11085 arguments that are being used when calling it. TARGS is a vector
c8094d83 11086 into which the deduced template arguments are placed.
8d08fdba
MS
11087
11088 Return zero for success, 2 for an incomplete match that doesn't resolve
11089 all the types, and 1 for complete failure. An error message will be
11090 printed only for an incomplete match.
11091
e5214479
JM
11092 If FN is a conversion operator, or we are trying to produce a specific
11093 specialization, RETURN_TYPE is the return type desired.
9f54c803
MM
11094
11095 The EXPLICIT_TARGS are explicit template arguments provided via a
11096 template-id.
6467930b 11097
830bfa74
MM
11098 The parameter STRICT is one of:
11099
c8094d83 11100 DEDUCE_CALL:
830bfa74
MM
11101 We are deducing arguments for a function call, as in
11102 [temp.deduct.call].
11103
11104 DEDUCE_CONV:
c8094d83 11105 We are deducing arguments for a conversion function, as in
830bfa74
MM
11106 [temp.deduct.conv].
11107
11108 DEDUCE_EXACT:
62e4a758
NS
11109 We are deducing arguments when doing an explicit instantiation
11110 as in [temp.explicit], when determining an explicit specialization
11111 as in [temp.expl.spec], or when taking the address of a function
a34d3336 11112 template, as in [temp.deduct.funcaddr]. */
8d08fdba
MS
11113
11114int
c8094d83 11115fn_type_unification (tree fn,
0cbd7506
MS
11116 tree explicit_targs,
11117 tree targs,
11118 tree args,
11119 tree return_type,
30f86ec3
FJ
11120 unification_kind_t strict,
11121 int flags)
386b8a85 11122{
4393e105
MM
11123 tree parms;
11124 tree fntype;
adecb3f4 11125 int result;
5d80a306 11126 bool incomplete_argument_packs_p = false;
386b8a85 11127
50bc768d 11128 gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
2b59fc25 11129
4393e105
MM
11130 fntype = TREE_TYPE (fn);
11131 if (explicit_targs)
75650646 11132 {
4393e105 11133 /* [temp.deduct]
c8094d83 11134
4393e105
MM
11135 The specified template arguments must match the template
11136 parameters in kind (i.e., type, nontype, template), and there
11137 must not be more arguments than there are parameters;
11138 otherwise type deduction fails.
11139
11140 Nontype arguments must match the types of the corresponding
11141 nontype template parameters, or must be convertible to the
11142 types of the corresponding nontype parameters as specified in
11143 _temp.arg.nontype_, otherwise type deduction fails.
11144
11145 All references in the function type of the function template
11146 to the corresponding template parameters are replaced by the
11147 specified template argument values. If a substitution in a
11148 template parameter or in the function type of the function
11149 template results in an invalid type, type deduction fails. */
5d80a306
DG
11150 tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
11151 int i, len = TREE_VEC_LENGTH (tparms);
4393e105 11152 tree converted_args;
5d80a306 11153 bool incomplete = false;
75650646 11154
c8a7ed43
AO
11155 if (explicit_targs == error_mark_node)
11156 return 1;
11157
4393e105 11158 converted_args
5d80a306 11159 = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
e7e93965
MM
11160 /*require_all_args=*/false,
11161 /*use_default_args=*/false));
4393e105 11162 if (converted_args == error_mark_node)
75650646 11163 return 1;
386b8a85 11164
ffd49b19 11165 /* Substitute the explicit args into the function type. This is
0cbd7506
MS
11166 necessary so that, for instance, explicitly declared function
11167 arguments can match null pointed constants. If we were given
11168 an incomplete set of explicit args, we must not do semantic
11169 processing during substitution as we could create partial
11170 instantiations. */
5d80a306
DG
11171 for (i = 0; i < len; i++)
11172 {
11173 tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11174 bool parameter_pack = false;
11175
11176 /* Dig out the actual parm. */
11177 if (TREE_CODE (parm) == TYPE_DECL
11178 || TREE_CODE (parm) == TEMPLATE_DECL)
11179 {
11180 parm = TREE_TYPE (parm);
11181 parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
11182 }
11183 else if (TREE_CODE (parm) == PARM_DECL)
11184 {
11185 parm = DECL_INITIAL (parm);
11186 parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
11187 }
11188
11189 if (parameter_pack)
11190 {
11191 int level, idx;
11192 tree targ;
11193 template_parm_level_and_index (parm, &level, &idx);
11194
11195 /* Mark the argument pack as "incomplete". We could
11196 still deduce more arguments during unification. */
11197 targ = TMPL_ARG (converted_args, level, idx);
b1d7b1c0
DG
11198 if (targ)
11199 {
11200 ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
11201 ARGUMENT_PACK_EXPLICIT_ARGS (targ)
11202 = ARGUMENT_PACK_ARGS (targ);
11203 }
5d80a306
DG
11204
11205 /* We have some incomplete argument packs. */
11206 incomplete_argument_packs_p = true;
11207 }
11208 }
11209
11210 if (incomplete_argument_packs_p)
11211 /* Any substitution is guaranteed to be incomplete if there
11212 are incomplete argument packs, because we can still deduce
11213 more arguments. */
11214 incomplete = 1;
11215 else
11216 incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
11217
ffd49b19 11218 processing_template_decl += incomplete;
c2ea3a40 11219 fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
ffd49b19 11220 processing_template_decl -= incomplete;
c8094d83 11221
4393e105
MM
11222 if (fntype == error_mark_node)
11223 return 1;
050367a3 11224
4393e105 11225 /* Place the explicitly specified arguments in TARGS. */
ffd49b19 11226 for (i = NUM_TMPL_ARGS (converted_args); i--;)
4393e105 11227 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
75650646 11228 }
c8094d83 11229
e5214479 11230 /* Never do unification on the 'this' parameter. */
ba139ba8 11231 parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
c8094d83 11232
8d3631f8
NS
11233 if (return_type)
11234 {
8d3631f8
NS
11235 parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
11236 args = tree_cons (NULL_TREE, return_type, args);
4393e105
MM
11237 }
11238
4393e105
MM
11239 /* We allow incomplete unification without an error message here
11240 because the standard doesn't seem to explicitly prohibit it. Our
11241 callers must be ready to deal with unification failures in any
11242 event. */
c8094d83 11243 result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
adecb3f4 11244 targs, parms, args, /*subr=*/0,
30f86ec3 11245 strict, flags);
adecb3f4 11246
5d80a306
DG
11247 if (result == 0 && incomplete_argument_packs_p)
11248 {
11249 int i, len = NUM_TMPL_ARGS (targs);
11250
11251 /* Clear the "incomplete" flags on all argument packs. */
11252 for (i = 0; i < len; i++)
11253 {
11254 tree arg = TREE_VEC_ELT (targs, i);
11255 if (ARGUMENT_PACK_P (arg))
11256 {
11257 ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
11258 ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
11259 }
11260 }
11261 }
11262
c8094d83 11263 if (result == 0)
adecb3f4 11264 /* All is well so far. Now, check:
c8094d83
MS
11265
11266 [temp.deduct]
11267
adecb3f4
MM
11268 When all template arguments have been deduced, all uses of
11269 template parameters in nondeduced contexts are replaced with
11270 the corresponding deduced argument values. If the
11271 substitution results in an invalid type, as described above,
11272 type deduction fails. */
c2ea3a40 11273 if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
adecb3f4
MM
11274 == error_mark_node)
11275 return 1;
11276
11277 return result;
830bfa74
MM
11278}
11279
11280/* Adjust types before performing type deduction, as described in
11281 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
4c7d0dff
MM
11282 sections are symmetric. PARM is the type of a function parameter
11283 or the return type of the conversion function. ARG is the type of
11284 the argument passed to the call, or the type of the value
8af2fec4
RY
11285 initialized with the result of the conversion function.
11286 ARG_EXPR is the original argument expression, which may be null. */
386b8a85 11287
62e4a758 11288static int
c8094d83 11289maybe_adjust_types_for_deduction (unification_kind_t strict,
0cbd7506 11290 tree* parm,
8af2fec4
RY
11291 tree* arg,
11292 tree arg_expr)
830bfa74 11293{
62e4a758 11294 int result = 0;
c8094d83 11295
830bfa74
MM
11296 switch (strict)
11297 {
11298 case DEDUCE_CALL:
11299 break;
11300
11301 case DEDUCE_CONV:
11302 {
4c7d0dff
MM
11303 /* Swap PARM and ARG throughout the remainder of this
11304 function; the handling is precisely symmetric since PARM
11305 will initialize ARG rather than vice versa. */
830bfa74
MM
11306 tree* temp = parm;
11307 parm = arg;
11308 arg = temp;
11309 break;
11310 }
11311
11312 case DEDUCE_EXACT:
11313 /* There is nothing to do in this case. */
62e4a758 11314 return 0;
830bfa74
MM
11315
11316 default:
315fb5db 11317 gcc_unreachable ();
830bfa74
MM
11318 }
11319
11320 if (TREE_CODE (*parm) != REFERENCE_TYPE)
11321 {
11322 /* [temp.deduct.call]
c8094d83 11323
830bfa74 11324 If P is not a reference type:
c8094d83 11325
830bfa74
MM
11326 --If A is an array type, the pointer type produced by the
11327 array-to-pointer standard conversion (_conv.array_) is
11328 used in place of A for type deduction; otherwise,
c8094d83 11329
830bfa74
MM
11330 --If A is a function type, the pointer type produced by
11331 the function-to-pointer standard conversion
11332 (_conv.func_) is used in place of A for type deduction;
11333 otherwise,
c8094d83 11334
830bfa74
MM
11335 --If A is a cv-qualified type, the top level
11336 cv-qualifiers of A's type are ignored for type
11337 deduction. */
11338 if (TREE_CODE (*arg) == ARRAY_TYPE)
11339 *arg = build_pointer_type (TREE_TYPE (*arg));
d8f8dca1 11340 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
830bfa74
MM
11341 *arg = build_pointer_type (*arg);
11342 else
11343 *arg = TYPE_MAIN_VARIANT (*arg);
11344 }
c8094d83 11345
8af2fec4
RY
11346 /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
11347 of the form T&&, where T is a template parameter, and the argument
11348 is an lvalue, T is deduced as A& */
11349 if (TREE_CODE (*parm) == REFERENCE_TYPE
11350 && TYPE_REF_IS_RVALUE (*parm)
11351 && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
11352 && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
11353 && arg_expr && real_lvalue_p (arg_expr))
11354 *arg = build_reference_type (*arg);
11355
830bfa74 11356 /* [temp.deduct.call]
c8094d83 11357
830bfa74
MM
11358 If P is a cv-qualified type, the top level cv-qualifiers
11359 of P's type are ignored for type deduction. If P is a
11360 reference type, the type referred to by P is used for
11361 type deduction. */
11362 *parm = TYPE_MAIN_VARIANT (*parm);
11363 if (TREE_CODE (*parm) == REFERENCE_TYPE)
62e4a758
NS
11364 {
11365 *parm = TREE_TYPE (*parm);
11366 result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
11367 }
1c82cc90
NS
11368
11369 /* DR 322. For conversion deduction, remove a reference type on parm
11370 too (which has been swapped into ARG). */
11371 if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
11372 *arg = TREE_TYPE (*arg);
c8094d83 11373
62e4a758 11374 return result;
386b8a85
JM
11375}
11376
e5214479 11377/* Most parms like fn_type_unification.
9f54c803
MM
11378
11379 If SUBR is 1, we're being called recursively (to unify the
11380 arguments of a function or method parameter of a function
38d18b1a 11381 template). */
386b8a85 11382
4966381a 11383static int
c8094d83 11384type_unification_real (tree tparms,
0cbd7506
MS
11385 tree targs,
11386 tree xparms,
11387 tree xargs,
11388 int subr,
30f86ec3
FJ
11389 unification_kind_t strict,
11390 int flags)
8d08fdba 11391{
8af2fec4 11392 tree parm, arg, arg_expr;
8d08fdba
MS
11393 int i;
11394 int ntparms = TREE_VEC_LENGTH (tparms);
830bfa74 11395 int sub_strict;
bd0d5d4a
JM
11396 int saw_undeduced = 0;
11397 tree parms, args;
8d08fdba 11398
50bc768d
NS
11399 gcc_assert (TREE_CODE (tparms) == TREE_VEC);
11400 gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
11401 gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
11402 gcc_assert (ntparms > 0);
8d08fdba 11403
830bfa74
MM
11404 switch (strict)
11405 {
11406 case DEDUCE_CALL:
028d1f20 11407 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
0cbd7506 11408 | UNIFY_ALLOW_DERIVED);
830bfa74 11409 break;
c8094d83 11410
830bfa74
MM
11411 case DEDUCE_CONV:
11412 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
11413 break;
11414
11415 case DEDUCE_EXACT:
11416 sub_strict = UNIFY_ALLOW_NONE;
11417 break;
c8094d83 11418
830bfa74 11419 default:
315fb5db 11420 gcc_unreachable ();
830bfa74
MM
11421 }
11422
bd0d5d4a
JM
11423 again:
11424 parms = xparms;
11425 args = xargs;
bd0d5d4a 11426
a34d3336
NS
11427 while (parms && parms != void_list_node
11428 && args && args != void_list_node)
8d08fdba 11429 {
5d80a306
DG
11430 if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11431 break;
11432
8d08fdba
MS
11433 parm = TREE_VALUE (parms);
11434 parms = TREE_CHAIN (parms);
11435 arg = TREE_VALUE (args);
11436 args = TREE_CHAIN (args);
8af2fec4 11437 arg_expr = NULL;
8d08fdba
MS
11438
11439 if (arg == error_mark_node)
11440 return 1;
11441 if (arg == unknown_type_node)
34016c81
JM
11442 /* We can't deduce anything from this, but we might get all the
11443 template args from other function args. */
11444 continue;
b7484fbe 11445
03e70705
JM
11446 /* Conversions will be performed on a function argument that
11447 corresponds with a function parameter that contains only
11448 non-deducible template parameters and explicitly specified
11449 template parameters. */
c353b8e3 11450 if (!uses_template_parms (parm))
b7484fbe 11451 {
03e70705
JM
11452 tree type;
11453
2f939d94 11454 if (!TYPE_P (arg))
03e70705
JM
11455 type = TREE_TYPE (arg);
11456 else
c353b8e3 11457 type = arg;
03e70705 11458
fad86f7a 11459 if (same_type_p (parm, type))
343c89cd 11460 continue;
fad86f7a 11461 if (strict != DEDUCE_EXACT
3db45ab5 11462 && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
30f86ec3 11463 flags))
fad86f7a 11464 continue;
3db45ab5 11465
b7484fbe
MS
11466 return 1;
11467 }
c8094d83 11468
2f939d94 11469 if (!TYPE_P (arg))
8d08fdba 11470 {
50bc768d 11471 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
34016c81 11472 if (type_unknown_p (arg))
28cbf42c 11473 {
34016c81
JM
11474 /* [temp.deduct.type] A template-argument can be deduced from
11475 a pointer to function or pointer to member function
11476 argument if the set of overloaded functions does not
11477 contain function templates and at most one of a set of
11478 overloaded functions provides a unique match. */
11479
11480 if (resolve_overloaded_unification
4393e105 11481 (tparms, targs, parm, arg, strict, sub_strict)
34016c81
JM
11482 != 0)
11483 return 1;
11484 continue;
28cbf42c 11485 }
8af2fec4 11486 arg_expr = arg;
f9aa54d3 11487 arg = unlowered_expr_type (arg);
08476342
NS
11488 if (arg == error_mark_node)
11489 return 1;
8d08fdba 11490 }
c8094d83 11491
62e4a758 11492 {
0cbd7506 11493 int arg_strict = sub_strict;
c8094d83 11494
0cbd7506 11495 if (!subr)
8af2fec4
RY
11496 arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
11497 arg_expr);
4393e105 11498
0cbd7506
MS
11499 if (unify (tparms, targs, parm, arg, arg_strict))
11500 return 1;
62e4a758 11501 }
8d08fdba 11502 }
c8094d83 11503
5d80a306
DG
11504
11505 if (parms
11506 && parms != void_list_node
11507 && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11508 {
11509 /* Unify the remaining arguments with the pack expansion type. */
11510 tree argvec;
11511 tree parmvec = make_tree_vec (1);
11512 int len = 0;
11513 tree t;
11514
11515 /* Count the number of arguments that remain. */
11516 for (t = args; t && t != void_list_node; t = TREE_CHAIN (t))
11517 len++;
11518
11519 /* Allocate a TREE_VEC and copy in all of the arguments */
11520 argvec = make_tree_vec (len);
11521 for (i = 0; args && args != void_list_node; args = TREE_CHAIN (args))
11522 {
11523 TREE_VEC_ELT (argvec, i) = TREE_VALUE (args);
11524 ++i;
11525 }
11526
11527 /* Copy the parameter into parmvec. */
11528 TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
11529 if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
11530 /*call_args_p=*/true, /*subr=*/subr))
11531 return 1;
11532
11533 /* Advance to the end of the list of parameters. */
11534 parms = TREE_CHAIN (parms);
11535 }
11536
8d08fdba
MS
11537 /* Fail if we've reached the end of the parm list, and more args
11538 are present, and the parm list isn't variadic. */
11539 if (args && args != void_list_node && parms == void_list_node)
11540 return 1;
f4f206f4 11541 /* Fail if parms are left and they don't have default values. */
a34d3336 11542 if (parms && parms != void_list_node
8d08fdba
MS
11543 && TREE_PURPOSE (parms) == NULL_TREE)
11544 return 1;
bd0d5d4a 11545
8d08fdba
MS
11546 if (!subr)
11547 for (i = 0; i < ntparms; i++)
a34d3336 11548 if (!TREE_VEC_ELT (targs, i))
8d08fdba 11549 {
2d8ba2c7
LM
11550 tree tparm;
11551
11552 if (TREE_VEC_ELT (tparms, i) == error_mark_node)
11553 continue;
11554
11555 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
bd0d5d4a
JM
11556
11557 /* If this is an undeduced nontype parameter that depends on
11558 a type parameter, try another pass; its type may have been
11559 deduced from a later argument than the one from which
11560 this parameter can be deduced. */
11561 if (TREE_CODE (tparm) == PARM_DECL
11562 && uses_template_parms (TREE_TYPE (tparm))
11563 && !saw_undeduced++)
11564 goto again;
11565
9b7dd5e8
DG
11566 /* Core issue #226 (C++0x) [temp.deduct]:
11567
11568 If a template argument has not been deduced, its
11569 default template argument, if any, is used.
11570
c1ae8be5
SM
11571 When we are in C++98 mode, TREE_PURPOSE will either
11572 be NULL_TREE or ERROR_MARK_NODE, so we do not need
11573 to explicitly check cxx_dialect here. */
9b7dd5e8
DG
11574 if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
11575 {
11576 tree arg = tsubst (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)),
11577 targs, tf_none, NULL_TREE);
11578 if (arg == error_mark_node)
11579 return 1;
11580 else
11581 {
11582 TREE_VEC_ELT (targs, i) = arg;
11583 continue;
11584 }
11585 }
11586
b1d7b1c0
DG
11587 /* If the type parameter is a parameter pack, then it will
11588 be deduced to an empty parameter pack. */
11589 if (template_parameter_pack_p (tparm))
11590 {
11591 tree arg;
11592
11593 if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
11594 {
11595 arg = make_node (NONTYPE_ARGUMENT_PACK);
11596 TREE_TYPE (arg) = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
11597 TREE_CONSTANT (arg) = 1;
11598 }
11599 else
11600 arg = make_node (TYPE_ARGUMENT_PACK);
11601
11602 SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
11603
11604 TREE_VEC_ELT (targs, i) = arg;
11605 continue;
11606 }
11607
8d08fdba
MS
11608 return 2;
11609 }
c8094d83 11610
8d08fdba
MS
11611 return 0;
11612}
11613
34016c81
JM
11614/* Subroutine of type_unification_real. Args are like the variables at the
11615 call site. ARG is an overloaded function (or template-id); we try
11616 deducing template args from each of the overloads, and if only one
11617 succeeds, we go with that. Modifies TARGS and returns 0 on success. */
11618
11619static int
c8094d83 11620resolve_overloaded_unification (tree tparms,
0cbd7506
MS
11621 tree targs,
11622 tree parm,
11623 tree arg,
11624 unification_kind_t strict,
3a978d72 11625 int sub_strict)
34016c81
JM
11626{
11627 tree tempargs = copy_node (targs);
11628 int good = 0;
f23fb7f5 11629 bool addr_p;
34016c81
JM
11630
11631 if (TREE_CODE (arg) == ADDR_EXPR)
f23fb7f5
MM
11632 {
11633 arg = TREE_OPERAND (arg, 0);
11634 addr_p = true;
11635 }
11636 else
11637 addr_p = false;
9f3d9e46 11638
d8f8dca1
MM
11639 if (TREE_CODE (arg) == COMPONENT_REF)
11640 /* Handle `&x' where `x' is some static or non-static member
11641 function name. */
11642 arg = TREE_OPERAND (arg, 1);
11643
05e0b2f4
JM
11644 if (TREE_CODE (arg) == OFFSET_REF)
11645 arg = TREE_OPERAND (arg, 1);
11646
9f3d9e46 11647 /* Strip baselink information. */
50ad9642
MM
11648 if (BASELINK_P (arg))
11649 arg = BASELINK_FUNCTIONS (arg);
9f3d9e46 11650
34016c81
JM
11651 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
11652 {
11653 /* If we got some explicit template args, we need to plug them into
11654 the affected templates before we try to unify, in case the
11655 explicit args will completely resolve the templates in question. */
11656
11657 tree expl_subargs = TREE_OPERAND (arg, 1);
11658 arg = TREE_OPERAND (arg, 0);
11659
11660 for (; arg; arg = OVL_NEXT (arg))
11661 {
11662 tree fn = OVL_CURRENT (arg);
11663 tree subargs, elem;
11664
11665 if (TREE_CODE (fn) != TEMPLATE_DECL)
11666 continue;
11667
a34d3336
NS
11668 subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
11669 expl_subargs, /*check_ret=*/false);
34016c81
JM
11670 if (subargs)
11671 {
c2ea3a40 11672 elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
c8094d83 11673 good += try_one_overload (tparms, targs, tempargs, parm,
f23fb7f5 11674 elem, strict, sub_strict, addr_p);
34016c81
JM
11675 }
11676 }
11677 }
315fb5db 11678 else
34016c81 11679 {
315fb5db
NS
11680 gcc_assert (TREE_CODE (arg) == OVERLOAD
11681 || TREE_CODE (arg) == FUNCTION_DECL);
c8094d83 11682
34016c81 11683 for (; arg; arg = OVL_NEXT (arg))
f23fb7f5
MM
11684 good += try_one_overload (tparms, targs, tempargs, parm,
11685 TREE_TYPE (OVL_CURRENT (arg)),
11686 strict, sub_strict, addr_p);
34016c81 11687 }
34016c81
JM
11688
11689 /* [temp.deduct.type] A template-argument can be deduced from a pointer
11690 to function or pointer to member function argument if the set of
11691 overloaded functions does not contain function templates and at most
11692 one of a set of overloaded functions provides a unique match.
11693
11694 So if we found multiple possibilities, we return success but don't
11695 deduce anything. */
11696
11697 if (good == 1)
11698 {
11699 int i = TREE_VEC_LENGTH (targs);
11700 for (; i--; )
11701 if (TREE_VEC_ELT (tempargs, i))
11702 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
11703 }
11704 if (good)
11705 return 0;
11706
11707 return 1;
11708}
11709
11710/* Subroutine of resolve_overloaded_unification; does deduction for a single
11711 overload. Fills TARGS with any deduced arguments, or error_mark_node if
11712 different overloads deduce different arguments for a given parm.
f23fb7f5
MM
11713 ADDR_P is true if the expression for which deduction is being
11714 performed was of the form "& fn" rather than simply "fn".
11715
34016c81
JM
11716 Returns 1 on success. */
11717
11718static int
3a978d72 11719try_one_overload (tree tparms,
0cbd7506
MS
11720 tree orig_targs,
11721 tree targs,
11722 tree parm,
11723 tree arg,
11724 unification_kind_t strict,
f23fb7f5
MM
11725 int sub_strict,
11726 bool addr_p)
34016c81
JM
11727{
11728 int nargs;
11729 tree tempargs;
11730 int i;
11731
11732 /* [temp.deduct.type] A template-argument can be deduced from a pointer
11733 to function or pointer to member function argument if the set of
11734 overloaded functions does not contain function templates and at most
11735 one of a set of overloaded functions provides a unique match.
11736
11737 So if this is a template, just return success. */
11738
11739 if (uses_template_parms (arg))
11740 return 1;
11741
f23fb7f5
MM
11742 if (TREE_CODE (arg) == METHOD_TYPE)
11743 arg = build_ptrmemfunc_type (build_pointer_type (arg));
11744 else if (addr_p)
11745 arg = build_pointer_type (arg);
11746
8af2fec4 11747 sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
34016c81
JM
11748
11749 /* We don't copy orig_targs for this because if we have already deduced
11750 some template args from previous args, unify would complain when we
11751 try to deduce a template parameter for the same argument, even though
11752 there isn't really a conflict. */
11753 nargs = TREE_VEC_LENGTH (targs);
f31c0a32 11754 tempargs = make_tree_vec (nargs);
34016c81 11755
4393e105 11756 if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
34016c81
JM
11757 return 0;
11758
11759 /* First make sure we didn't deduce anything that conflicts with
e97e5263 11760 explicitly specified args. */
34016c81
JM
11761 for (i = nargs; i--; )
11762 {
11763 tree elt = TREE_VEC_ELT (tempargs, i);
e97e5263 11764 tree oldelt = TREE_VEC_ELT (orig_targs, i);
34016c81 11765
a34d3336
NS
11766 if (!elt)
11767 /*NOP*/;
34016c81 11768 else if (uses_template_parms (elt))
a34d3336
NS
11769 /* Since we're unifying against ourselves, we will fill in
11770 template args used in the function parm list with our own
11771 template parms. Discard them. */
11772 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
11773 else if (oldelt && !template_args_equal (oldelt, elt))
34016c81
JM
11774 return 0;
11775 }
11776
11777 for (i = nargs; i--; )
11778 {
11779 tree elt = TREE_VEC_ELT (tempargs, i);
11780
11781 if (elt)
11782 TREE_VEC_ELT (targs, i) = elt;
11783 }
11784
11785 return 1;
11786}
11787
4393e105
MM
11788/* PARM is a template class (perhaps with unbound template
11789 parameters). ARG is a fully instantiated type. If ARG can be
11790 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
11791 TARGS are as for unify. */
fcfb9f96
MM
11792
11793static tree
3a978d72 11794try_class_unification (tree tparms, tree targs, tree parm, tree arg)
4393e105 11795{
4393e105
MM
11796 tree copy_of_targs;
11797
11798 if (!CLASSTYPE_TEMPLATE_INFO (arg)
c8094d83 11799 || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
68361a03 11800 != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
4393e105
MM
11801 return NULL_TREE;
11802
11803 /* We need to make a new template argument vector for the call to
11804 unify. If we used TARGS, we'd clutter it up with the result of
11805 the attempted unification, even if this class didn't work out.
11806 We also don't want to commit ourselves to all the unifications
11807 we've already done, since unification is supposed to be done on
11808 an argument-by-argument basis. In other words, consider the
11809 following pathological case:
11810
11811 template <int I, int J, int K>
11812 struct S {};
c8094d83 11813
4393e105
MM
11814 template <int I, int J>
11815 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
c8094d83 11816
4393e105
MM
11817 template <int I, int J, int K>
11818 void f(S<I, J, K>, S<I, I, I>);
c8094d83 11819
4393e105 11820 void g() {
0cbd7506
MS
11821 S<0, 0, 0> s0;
11822 S<0, 1, 2> s2;
c8094d83 11823
0cbd7506 11824 f(s0, s2);
4393e105
MM
11825 }
11826
11827 Now, by the time we consider the unification involving `s2', we
11828 already know that we must have `f<0, 0, 0>'. But, even though
0e339752 11829 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
4393e105
MM
11830 because there are two ways to unify base classes of S<0, 1, 2>
11831 with S<I, I, I>. If we kept the already deduced knowledge, we
11832 would reject the possibility I=1. */
f31c0a32 11833 copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
c8094d83 11834
4393e105 11835 /* If unification failed, we're done. */
74601d7c
KL
11836 if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
11837 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
4393e105 11838 return NULL_TREE;
74601d7c
KL
11839
11840 return arg;
4393e105
MM
11841}
11842
a3a0fc7f
NS
11843/* Given a template type PARM and a class type ARG, find the unique
11844 base type in ARG that is an instance of PARM. We do not examine
11845 ARG itself; only its base-classes. If there is not exactly one
11846 appropriate base class, return NULL_TREE. PARM may be the type of
11847 a partial specialization, as well as a plain template type. Used
11848 by unify. */
4393e105
MM
11849
11850static tree
a3a0fc7f 11851get_template_base (tree tparms, tree targs, tree parm, tree arg)
fcfb9f96 11852{
a3a0fc7f
NS
11853 tree rval = NULL_TREE;
11854 tree binfo;
11855
11856 gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
c8094d83 11857
a3a0fc7f
NS
11858 binfo = TYPE_BINFO (complete_type (arg));
11859 if (!binfo)
11860 /* The type could not be completed. */
11861 return NULL_TREE;
fcfb9f96 11862
a3a0fc7f
NS
11863 /* Walk in inheritance graph order. The search order is not
11864 important, and this avoids multiple walks of virtual bases. */
11865 for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
fcfb9f96 11866 {
a3a0fc7f 11867 tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
fcfb9f96 11868
8d83768f
NS
11869 if (r)
11870 {
11871 /* If there is more than one satisfactory baseclass, then:
fcfb9f96 11872
8d83768f 11873 [temp.deduct.call]
fcfb9f96 11874
8d83768f
NS
11875 If they yield more than one possible deduced A, the type
11876 deduction fails.
4393e105 11877
8d83768f 11878 applies. */
a3a0fc7f
NS
11879 if (rval && !same_type_p (r, rval))
11880 return NULL_TREE;
c8094d83 11881
a3a0fc7f 11882 rval = r;
8d83768f 11883 }
fcfb9f96
MM
11884 }
11885
a3a0fc7f 11886 return rval;
fcfb9f96
MM
11887}
11888
db2767b6
MM
11889/* Returns the level of DECL, which declares a template parameter. */
11890
e9659ab0 11891static int
3a978d72 11892template_decl_level (tree decl)
db2767b6
MM
11893{
11894 switch (TREE_CODE (decl))
11895 {
11896 case TYPE_DECL:
11897 case TEMPLATE_DECL:
11898 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
11899
11900 case PARM_DECL:
11901 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
11902
11903 default:
315fb5db 11904 gcc_unreachable ();
db2767b6 11905 }
315fb5db 11906 return 0;
db2767b6
MM
11907}
11908
830bfa74
MM
11909/* Decide whether ARG can be unified with PARM, considering only the
11910 cv-qualifiers of each type, given STRICT as documented for unify.
324f9dfb 11911 Returns nonzero iff the unification is OK on that basis. */
e92cc029 11912
e9659ab0 11913static int
3a978d72 11914check_cv_quals_for_unify (int strict, tree arg, tree parm)
830bfa74 11915{
4f2b0fb2
NS
11916 int arg_quals = cp_type_quals (arg);
11917 int parm_quals = cp_type_quals (parm);
11918
355f774d
NS
11919 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
11920 && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
4f2b0fb2 11921 {
2e9ceb77 11922 /* Although a CVR qualifier is ignored when being applied to a
0cbd7506
MS
11923 substituted template parameter ([8.3.2]/1 for example), that
11924 does not apply during deduction [14.8.2.4]/1, (even though
11925 that is not explicitly mentioned, [14.8.2.4]/9 indicates
11926 this). Except when we're allowing additional CV qualifiers
11927 at the outer level [14.8.2.1]/3,1st bullet. */
2e9ceb77
NS
11928 if ((TREE_CODE (arg) == REFERENCE_TYPE
11929 || TREE_CODE (arg) == FUNCTION_TYPE
11930 || TREE_CODE (arg) == METHOD_TYPE)
11931 && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
11932 return 0;
11933
11934 if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
11935 && (parm_quals & TYPE_QUAL_RESTRICT))
11936 return 0;
4f2b0fb2 11937 }
2e9ceb77 11938
62e4a758 11939 if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
4f2b0fb2 11940 && (arg_quals & parm_quals) != parm_quals)
ef637255
MM
11941 return 0;
11942
62e4a758 11943 if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
4f2b0fb2 11944 && (parm_quals & arg_quals) != arg_quals)
ef637255
MM
11945 return 0;
11946
ef637255 11947 return 1;
830bfa74
MM
11948}
11949
5d80a306
DG
11950/* Determines the LEVEL and INDEX for the template parameter PARM. */
11951void
11952template_parm_level_and_index (tree parm, int* level, int* index)
11953{
11954 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
11955 || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
11956 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
11957 {
11958 *index = TEMPLATE_TYPE_IDX (parm);
11959 *level = TEMPLATE_TYPE_LEVEL (parm);
11960 }
11961 else
11962 {
11963 *index = TEMPLATE_PARM_IDX (parm);
11964 *level = TEMPLATE_PARM_LEVEL (parm);
11965 }
11966}
11967
11968/* Unifies the remaining arguments in PACKED_ARGS with the pack
11969 expansion at the end of PACKED_PARMS. Returns 0 if the type
11970 deduction succeeds, 1 otherwise. STRICT is the same as in
11971 unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
11972 call argument list. We'll need to adjust the arguments to make them
11973 types. SUBR tells us if this is from a recursive call to
11974 type_unification_real. */
11975int
11976unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
11977 tree packed_args, int strict, bool call_args_p,
11978 bool subr)
11979{
11980 tree parm
11981 = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
11982 tree pattern = PACK_EXPANSION_PATTERN (parm);
11983 tree pack, packs = NULL_TREE;
11984 int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
11985 int len = TREE_VEC_LENGTH (packed_args);
11986
11987 /* Determine the parameter packs we will be deducing from the
11988 pattern, and record their current deductions. */
11989 for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm);
11990 pack; pack = TREE_CHAIN (pack))
11991 {
11992 tree parm_pack = TREE_VALUE (pack);
11993 int idx, level;
11994
11995 /* Determine the index and level of this parameter pack. */
11996 template_parm_level_and_index (parm_pack, &level, &idx);
11997
11998 /* Keep track of the parameter packs and their corresponding
11999 argument packs. */
12000 packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
12001 TREE_TYPE (packs) = make_tree_vec (len - start);
12002 }
12003
12004 /* Loop through all of the arguments that have not yet been
12005 unified and unify each with the pattern. */
12006 for (i = start; i < len; i++)
12007 {
12008 tree parm = pattern;
12009
12010 /* For each parameter pack, clear out the deduced value so that
12011 we can deduce it again. */
12012 for (pack = packs; pack; pack = TREE_CHAIN (pack))
12013 {
12014 int idx, level;
12015 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12016
12017 TMPL_ARG (targs, level, idx) = NULL_TREE;
12018 }
12019
12020 /* Unify the pattern with the current argument. */
12021 {
12022 tree arg = TREE_VEC_ELT (packed_args, i);
12023 int arg_strict = strict;
12024 bool skip_arg_p = false;
12025
12026 if (call_args_p)
12027 {
12028 int sub_strict;
12029
12030 /* This mirrors what we do in type_unification_real. */
12031 switch (strict)
12032 {
12033 case DEDUCE_CALL:
12034 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL
12035 | UNIFY_ALLOW_MORE_CV_QUAL
12036 | UNIFY_ALLOW_DERIVED);
12037 break;
12038
12039 case DEDUCE_CONV:
12040 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12041 break;
12042
12043 case DEDUCE_EXACT:
12044 sub_strict = UNIFY_ALLOW_NONE;
12045 break;
12046
12047 default:
12048 gcc_unreachable ();
12049 }
12050
12051 if (!TYPE_P (arg))
12052 {
12053 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12054 if (type_unknown_p (arg))
12055 {
12056 /* [temp.deduct.type] A template-argument can be
12057 deduced from a pointer to function or pointer
12058 to member function argument if the set of
12059 overloaded functions does not contain function
12060 templates and at most one of a set of
12061 overloaded functions provides a unique
12062 match. */
12063
12064 if (resolve_overloaded_unification
12065 (tparms, targs, parm, arg, strict, sub_strict)
12066 != 0)
12067 return 1;
12068 skip_arg_p = true;
12069 }
12070
12071 if (!skip_arg_p)
12072 {
12073 arg = TREE_TYPE (arg);
12074 if (arg == error_mark_node)
12075 return 1;
12076 }
12077 }
12078
12079 arg_strict = sub_strict;
12080
12081 if (!subr)
12082 arg_strict |=
8af2fec4 12083 maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
5d80a306
DG
12084 }
12085
12086 if (!skip_arg_p)
12087 {
12088 if (unify (tparms, targs, parm, arg, arg_strict))
12089 return 1;
12090 }
12091 }
12092
12093 /* For each parameter pack, collect the deduced value. */
12094 for (pack = packs; pack; pack = TREE_CHAIN (pack))
12095 {
12096 int idx, level;
12097 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12098
12099 TREE_VEC_ELT (TREE_TYPE (pack), i - start) =
12100 TMPL_ARG (targs, level, idx);
12101 }
12102 }
12103
12104 /* Verify that the results of unification with the parameter packs
12105 produce results consistent with what we've seen before, and make
12106 the deduced argument packs available. */
12107 for (pack = packs; pack; pack = TREE_CHAIN (pack))
12108 {
12109 tree old_pack = TREE_VALUE (pack);
12110 tree new_args = TREE_TYPE (pack);
12111
12112 if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
12113 {
12114 /* Prepend the explicit arguments onto NEW_ARGS. */
12115 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12116 tree old_args = new_args;
12117 int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
12118 int len = explicit_len + TREE_VEC_LENGTH (old_args);
12119
12120 /* Copy the explicit arguments. */
12121 new_args = make_tree_vec (len);
12122 for (i = 0; i < explicit_len; i++)
12123 TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
12124
12125 /* Copy the deduced arguments. */
12126 for (; i < len; i++)
12127 TREE_VEC_ELT (new_args, i) =
12128 TREE_VEC_ELT (old_args, i - explicit_len);
12129 }
12130
12131 if (!old_pack)
12132 {
12133 tree result;
12134 int idx, level;
12135
12136 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12137
12138 /* Build the deduced *_ARGUMENT_PACK. */
12139 if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
12140 {
12141 result = make_node (NONTYPE_ARGUMENT_PACK);
12142 TREE_TYPE (result) =
12143 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
12144 TREE_CONSTANT (result) = 1;
12145 }
12146 else
12147 result = make_node (TYPE_ARGUMENT_PACK);
12148
12149 SET_ARGUMENT_PACK_ARGS (result, new_args);
12150
12151 /* Note the deduced argument packs for this parameter
12152 pack. */
12153 TMPL_ARG (targs, level, idx) = result;
12154 }
12155 else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
12156 && (ARGUMENT_PACK_ARGS (old_pack)
12157 == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
12158 {
12159 /* We only had the explicitly-provided arguments before, but
12160 now we have a complete set of arguments. */
12161 int idx, level;
12162 tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12163 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12164
12165 /* Keep the original deduced argument pack. */
12166 TMPL_ARG (targs, level, idx) = old_pack;
12167
12168 SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
12169 ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
12170 ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
12171 }
12172 else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
12173 new_args))
12174 /* Inconsistent unification of this parameter pack. */
12175 return 1;
12176 else
12177 {
12178 int idx, level;
12179
12180 template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12181
12182 /* Keep the original deduced argument pack. */
12183 TMPL_ARG (targs, level, idx) = old_pack;
12184 }
12185 }
12186
12187 return 0;
12188}
12189
916b63c3
MM
12190/* Deduce the value of template parameters. TPARMS is the (innermost)
12191 set of template parameters to a template. TARGS is the bindings
12192 for those template parameters, as determined thus far; TARGS may
12193 include template arguments for outer levels of template parameters
12194 as well. PARM is a parameter to a template function, or a
12195 subcomponent of that parameter; ARG is the corresponding argument.
12196 This function attempts to match PARM with ARG in a manner
12197 consistent with the existing assignments in TARGS. If more values
12198 are deduced, then TARGS is updated.
12199
12200 Returns 0 if the type deduction succeeds, 1 otherwise. The
12201 parameter STRICT is a bitwise or of the following flags:
830bfa74
MM
12202
12203 UNIFY_ALLOW_NONE:
12204 Require an exact match between PARM and ARG.
12205 UNIFY_ALLOW_MORE_CV_QUAL:
028d1f20
NS
12206 Allow the deduced ARG to be more cv-qualified (by qualification
12207 conversion) than ARG.
830bfa74
MM
12208 UNIFY_ALLOW_LESS_CV_QUAL:
12209 Allow the deduced ARG to be less cv-qualified than ARG.
12210 UNIFY_ALLOW_DERIVED:
12211 Allow the deduced ARG to be a template base class of ARG,
12212 or a pointer to a template base class of the type pointed to by
161c12b0
JM
12213 ARG.
12214 UNIFY_ALLOW_INTEGER:
12215 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
c8094d83 12216 case for more information.
028d1f20
NS
12217 UNIFY_ALLOW_OUTER_LEVEL:
12218 This is the outermost level of a deduction. Used to determine validity
12219 of qualification conversions. A valid qualification conversion must
12220 have const qualified pointers leading up to the inner type which
12221 requires additional CV quals, except at the outer level, where const
12222 is not required [conv.qual]. It would be normal to set this flag in
62e4a758
NS
12223 addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
12224 UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
12225 This is the outermost level of a deduction, and PARM can be more CV
12226 qualified at this point.
12227 UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
12228 This is the outermost level of a deduction, and PARM can be less CV
8baddbf1 12229 qualified at this point. */
830bfa74 12230
e9659ab0 12231static int
3a978d72 12232unify (tree tparms, tree targs, tree parm, tree arg, int strict)
8d08fdba
MS
12233{
12234 int idx;
050367a3 12235 tree targ;
db2767b6 12236 tree tparm;
028d1f20 12237 int strict_in = strict;
8d08fdba
MS
12238
12239 /* I don't think this will do the right thing with respect to types.
12240 But the only case I've seen it in so far has been array bounds, where
12241 signedness is the only information lost, and I think that will be
12242 okay. */
12243 while (TREE_CODE (parm) == NOP_EXPR)
12244 parm = TREE_OPERAND (parm, 0);
12245
12246 if (arg == error_mark_node)
12247 return 1;
12248 if (arg == unknown_type_node)
34016c81
JM
12249 /* We can't deduce anything from this, but we might get all the
12250 template args from other function args. */
12251 return 0;
12252
db2767b6 12253 /* If PARM uses template parameters, then we can't bail out here,
6bdb985f 12254 even if ARG == PARM, since we won't record unifications for the
db2767b6
MM
12255 template parameters. We might need them if we're trying to
12256 figure out which of two things is more specialized. */
12257 if (arg == parm && !uses_template_parms (parm))
8d08fdba
MS
12258 return 0;
12259
830bfa74
MM
12260 /* Immediately reject some pairs that won't unify because of
12261 cv-qualification mismatches. */
12262 if (TREE_CODE (arg) == TREE_CODE (parm)
2f939d94 12263 && TYPE_P (arg)
d0ab7624 12264 /* It is the elements of the array which hold the cv quals of an array
0cbd7506
MS
12265 type, and the elements might be template type parms. We'll check
12266 when we recurse. */
d0ab7624 12267 && TREE_CODE (arg) != ARRAY_TYPE
830bfa74
MM
12268 /* We check the cv-qualifiers when unifying with template type
12269 parameters below. We want to allow ARG `const T' to unify with
12270 PARM `T' for example, when computing which of two templates
12271 is more specialized, for example. */
12272 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
028d1f20 12273 && !check_cv_quals_for_unify (strict_in, arg, parm))
49432171
JM
12274 return 1;
12275
028d1f20 12276 if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
3ea099f1 12277 && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
028d1f20
NS
12278 strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
12279 strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
12280 strict &= ~UNIFY_ALLOW_DERIVED;
62e4a758
NS
12281 strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
12282 strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
c8094d83 12283
8d08fdba
MS
12284 switch (TREE_CODE (parm))
12285 {
2ca340ae 12286 case TYPENAME_TYPE:
fccef71e 12287 case SCOPE_REF:
b8c6534b 12288 case UNBOUND_CLASS_TEMPLATE:
2ca340ae
JM
12289 /* In a type which contains a nested-name-specifier, template
12290 argument values cannot be deduced for template parameters used
12291 within the nested-name-specifier. */
12292 return 0;
12293
8d08fdba 12294 case TEMPLATE_TYPE_PARM:
73b0fce8 12295 case TEMPLATE_TEMPLATE_PARM:
a1281f45 12296 case BOUND_TEMPLATE_TEMPLATE_PARM:
db2767b6
MM
12297 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12298
12299 if (TEMPLATE_TYPE_LEVEL (parm)
12300 != template_decl_level (tparm))
12301 /* The PARM is not one we're trying to unify. Just check
12302 to see if it matches ARG. */
12303 return (TREE_CODE (arg) == TREE_CODE (parm)
3bfdc719 12304 && same_type_p (parm, arg)) ? 0 : 1;
73b0fce8 12305 idx = TEMPLATE_TYPE_IDX (parm);
916b63c3 12306 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
db2767b6 12307 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
050367a3 12308
73b0fce8 12309 /* Check for mixed types and values. */
db2767b6
MM
12310 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12311 && TREE_CODE (tparm) != TYPE_DECL)
c8094d83 12312 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
db2767b6 12313 && TREE_CODE (tparm) != TEMPLATE_DECL))
73b0fce8
KL
12314 return 1;
12315
a1281f45 12316 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
73b0fce8 12317 {
b429fdf0
KL
12318 /* ARG must be constructed from a template class or a template
12319 template parameter. */
12320 if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
4e95268d 12321 && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
a1281f45 12322 return 1;
73b0fce8 12323
a1281f45 12324 {
a1281f45 12325 tree parmvec = TYPE_TI_ARGS (parm);
6df91b00 12326 tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
a1281f45 12327 tree argtmplvec
b429fdf0 12328 = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
a1281f45 12329 int i;
73b0fce8 12330
e7e93965
MM
12331 /* The resolution to DR150 makes clear that default
12332 arguments for an N-argument may not be used to bind T
12333 to a template template parameter with fewer than N
12334 parameters. It is not safe to permit the binding of
12335 default arguments as an extension, as that may change
12336 the meaning of a conforming program. Consider:
12337
12338 struct Dense { static const unsigned int dim = 1; };
12339
12340 template <template <typename> class View,
12341 typename Block>
12342 void operator+(float, View<Block> const&);
12343
3db45ab5
MS
12344 template <typename Block,
12345 unsigned int Dim = Block::dim>
e7e93965
MM
12346 struct Lvalue_proxy { operator float() const; };
12347
12348 void
12349 test_1d (void) {
12350 Lvalue_proxy<Dense> p;
12351 float b;
12352 b + p;
12353 }
a1281f45 12354
e7e93965
MM
12355 Here, if Lvalue_proxy is permitted to bind to View, then
12356 the global operator+ will be used; if they are not, the
3db45ab5
MS
12357 Lvalue_proxy will be converted to float. */
12358 if (coerce_template_parms (argtmplvec, parmvec,
e7e93965
MM
12359 TYPE_TI_TEMPLATE (parm),
12360 tf_none,
12361 /*require_all_args=*/true,
12362 /*use_default_args=*/false)
0cbd7506 12363 == error_mark_node)
a1281f45 12364 return 1;
c8094d83
MS
12365
12366 /* Deduce arguments T, i from TT<T> or TT<i>.
a1281f45
KL
12367 We check each element of PARMVEC and ARGVEC individually
12368 rather than the whole TREE_VEC since they can have
12369 different number of elements. */
6b9b6b15 12370
a1281f45
KL
12371 for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
12372 {
0cbd7506 12373 if (unify (tparms, targs,
c8094d83
MS
12374 TREE_VEC_ELT (parmvec, i),
12375 TREE_VEC_ELT (argvec, i),
a1281f45
KL
12376 UNIFY_ALLOW_NONE))
12377 return 1;
73b0fce8 12378 }
a1281f45 12379 }
b429fdf0 12380 arg = TYPE_TI_TEMPLATE (arg);
a1281f45
KL
12381
12382 /* Fall through to deduce template name. */
12383 }
12384
12385 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12386 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12387 {
12388 /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>. */
12389
12390 /* Simple cases: Value already set, does match or doesn't. */
12391 if (targ != NULL_TREE && template_args_equal (targ, arg))
12392 return 0;
12393 else if (targ)
12394 return 1;
db2767b6
MM
12395 }
12396 else
12397 {
830bfa74
MM
12398 /* If PARM is `const T' and ARG is only `int', we don't have
12399 a match unless we are allowing additional qualification.
12400 If ARG is `const int' and PARM is just `T' that's OK;
12401 that binds `const int' to `T'. */
c8094d83 12402 if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
830bfa74 12403 arg, parm))
db2767b6
MM
12404 return 1;
12405
830bfa74
MM
12406 /* Consider the case where ARG is `const volatile int' and
12407 PARM is `const T'. Then, T should be `volatile int'. */
c2ea3a40
NS
12408 arg = cp_build_qualified_type_real
12409 (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
adecb3f4
MM
12410 if (arg == error_mark_node)
12411 return 1;
73b0fce8 12412
a1281f45
KL
12413 /* Simple cases: Value already set, does match or doesn't. */
12414 if (targ != NULL_TREE && same_type_p (targ, arg))
12415 return 0;
12416 else if (targ)
12417 return 1;
61cd552e 12418
94fc547c
MM
12419 /* Make sure that ARG is not a variable-sized array. (Note
12420 that were talking about variable-sized arrays (like
12421 `int[n]'), rather than arrays of unknown size (like
12422 `int[]').) We'll get very confused by such a type since
12423 the bound of the array will not be computable in an
12424 instantiation. Besides, such types are not allowed in
12425 ISO C++, so we can do as we please here. */
5377d5ba 12426 if (variably_modified_type_p (arg, NULL_TREE))
94fc547c
MM
12427 return 1;
12428 }
61cd552e 12429
5d80a306
DG
12430 /* If ARG is a parameter pack or an expansion, we cannot unify
12431 against it unless PARM is also a parameter pack. */
12432 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12433 && !template_parameter_pack_p (parm))
12434 return 1;
12435
916b63c3 12436 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
73b0fce8
KL
12437 return 0;
12438
f84b4be9 12439 case TEMPLATE_PARM_INDEX:
db2767b6 12440 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
3e9ac7e5
VR
12441 if (tparm == error_mark_node)
12442 return 1;
db2767b6 12443
c8094d83 12444 if (TEMPLATE_PARM_LEVEL (parm)
db2767b6
MM
12445 != template_decl_level (tparm))
12446 /* The PARM is not one we're trying to unify. Just check
12447 to see if it matches ARG. */
c8a209ca
NS
12448 return !(TREE_CODE (arg) == TREE_CODE (parm)
12449 && cp_tree_equal (parm, arg));
db2767b6 12450
f84b4be9 12451 idx = TEMPLATE_PARM_IDX (parm);
916b63c3 12452 targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
db2767b6 12453
050367a3 12454 if (targ)
c8a209ca 12455 return !cp_tree_equal (targ, arg);
8d08fdba 12456
161c12b0
JM
12457 /* [temp.deduct.type] If, in the declaration of a function template
12458 with a non-type template-parameter, the non-type
12459 template-parameter is used in an expression in the function
12460 parameter-list and, if the corresponding template-argument is
12461 deduced, the template-argument type shall match the type of the
12462 template-parameter exactly, except that a template-argument
c8094d83 12463 deduced from an array bound may be of any integral type.
d7c4edd0 12464 The non-type parameter might use already deduced type parameters. */
bd0d5d4a 12465 tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
e2005c8d
KL
12466 if (!TREE_TYPE (arg))
12467 /* Template-parameter dependent expression. Just accept it for now.
12468 It will later be processed in convert_template_argument. */
12469 ;
12470 else if (same_type_p (TREE_TYPE (arg), tparm))
12471 /* OK */;
161c12b0 12472 else if ((strict & UNIFY_ALLOW_INTEGER)
bd0d5d4a
JM
12473 && (TREE_CODE (tparm) == INTEGER_TYPE
12474 || TREE_CODE (tparm) == BOOLEAN_TYPE))
8baddbf1
MM
12475 /* Convert the ARG to the type of PARM; the deduced non-type
12476 template argument must exactly match the types of the
12477 corresponding parameter. */
12478 arg = fold (build_nop (TREE_TYPE (parm), arg));
bd0d5d4a
JM
12479 else if (uses_template_parms (tparm))
12480 /* We haven't deduced the type of this parameter yet. Try again
12481 later. */
12482 return 0;
161c12b0
JM
12483 else
12484 return 1;
12485
5d80a306
DG
12486 /* If ARG is a parameter pack or an expansion, we cannot unify
12487 against it unless PARM is also a parameter pack. */
12488 if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12489 && !TEMPLATE_PARM_PARAMETER_PACK (parm))
12490 return 1;
12491
916b63c3 12492 TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
8d08fdba
MS
12493 return 0;
12494
28e8f3a0
GB
12495 case PTRMEM_CST:
12496 {
0cbd7506
MS
12497 /* A pointer-to-member constant can be unified only with
12498 another constant. */
28e8f3a0 12499 if (TREE_CODE (arg) != PTRMEM_CST)
0cbd7506 12500 return 1;
28e8f3a0
GB
12501
12502 /* Just unify the class member. It would be useless (and possibly
0cbd7506
MS
12503 wrong, depending on the strict flags) to unify also
12504 PTRMEM_CST_CLASS, because we want to be sure that both parm and
12505 arg refer to the same variable, even if through different
12506 classes. For instance:
28e8f3a0 12507
0cbd7506
MS
12508 struct A { int x; };
12509 struct B : A { };
28e8f3a0 12510
0cbd7506 12511 Unification of &A::x and &B::x must succeed. */
28e8f3a0 12512 return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
0cbd7506 12513 PTRMEM_CST_MEMBER (arg), strict);
28e8f3a0
GB
12514 }
12515
8d08fdba 12516 case POINTER_TYPE:
830bfa74 12517 {
830bfa74
MM
12518 if (TREE_CODE (arg) != POINTER_TYPE)
12519 return 1;
c8094d83 12520
830bfa74
MM
12521 /* [temp.deduct.call]
12522
12523 A can be another pointer or pointer to member type that can
12524 be converted to the deduced A via a qualification
12525 conversion (_conv.qual_).
12526
12527 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
12528 This will allow for additional cv-qualification of the
028d1f20 12529 pointed-to types if appropriate. */
c8094d83 12530
028d1f20 12531 if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
830bfa74
MM
12532 /* The derived-to-base conversion only persists through one
12533 level of pointers. */
028d1f20 12534 strict |= (strict_in & UNIFY_ALLOW_DERIVED);
830bfa74 12535
c8094d83 12536 return unify (tparms, targs, TREE_TYPE (parm),
028d1f20 12537 TREE_TYPE (arg), strict);
830bfa74 12538 }
8d08fdba
MS
12539
12540 case REFERENCE_TYPE:
830bfa74
MM
12541 if (TREE_CODE (arg) != REFERENCE_TYPE)
12542 return 1;
12543 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
028d1f20 12544 strict & UNIFY_ALLOW_MORE_CV_QUAL);
8d08fdba
MS
12545
12546 case ARRAY_TYPE:
12547 if (TREE_CODE (arg) != ARRAY_TYPE)
12548 return 1;
3042d5be
MM
12549 if ((TYPE_DOMAIN (parm) == NULL_TREE)
12550 != (TYPE_DOMAIN (arg) == NULL_TREE))
12551 return 1;
8baddbf1
MM
12552 if (TYPE_DOMAIN (parm) != NULL_TREE)
12553 {
12554 tree parm_max;
12555 tree arg_max;
6ee3ffe8
MM
12556 bool parm_cst;
12557 bool arg_cst;
8baddbf1
MM
12558
12559 /* Our representation of array types uses "N - 1" as the
12560 TYPE_MAX_VALUE for an array with "N" elements, if "N" is
6ee3ffe8
MM
12561 not an integer constant. We cannot unify arbitrarily
12562 complex expressions, so we eliminate the MINUS_EXPRs
12563 here. */
12564 parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
12565 parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
12566 if (!parm_cst)
8baddbf1 12567 {
6ee3ffe8 12568 gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
8baddbf1
MM
12569 parm_max = TREE_OPERAND (parm_max, 0);
12570 }
6ee3ffe8
MM
12571 arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
12572 arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
12573 if (!arg_cst)
12574 {
12575 /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
12576 trying to unify the type of a variable with the type
12577 of a template parameter. For example:
12578
12579 template <unsigned int N>
12580 void f (char (&) [N]);
12581 int g();
12582 void h(int i) {
12583 char a[g(i)];
12584 f(a);
12585 }
12586
12587 Here, the type of the ARG will be "int [g(i)]", and
12588 may be a SAVE_EXPR, etc. */
12589 if (TREE_CODE (arg_max) != MINUS_EXPR)
12590 return 1;
12591 arg_max = TREE_OPERAND (arg_max, 0);
12592 }
12593
12594 /* If only one of the bounds used a MINUS_EXPR, compensate
12595 by adding one to the other bound. */
12596 if (parm_cst && !arg_cst)
12597 parm_max = fold_build2 (PLUS_EXPR,
12598 integer_type_node,
12599 parm_max,
12600 integer_one_node);
12601 else if (arg_cst && !parm_cst)
12602 arg_max = fold_build2 (PLUS_EXPR,
12603 integer_type_node,
12604 arg_max,
12605 integer_one_node);
8baddbf1
MM
12606
12607 if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
12608 return 1;
12609 }
830bfa74 12610 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
712467a4 12611 strict & UNIFY_ALLOW_MORE_CV_QUAL);
8d08fdba
MS
12612
12613 case REAL_TYPE:
37c46b43 12614 case COMPLEX_TYPE:
c00996a3 12615 case VECTOR_TYPE:
8d08fdba 12616 case INTEGER_TYPE:
42976354 12617 case BOOLEAN_TYPE:
3590f0a6 12618 case ENUMERAL_TYPE:
5ad5a526 12619 case VOID_TYPE:
f376e137
MS
12620 if (TREE_CODE (arg) != TREE_CODE (parm))
12621 return 1;
c8094d83 12622
9edc3913 12623 /* We have already checked cv-qualification at the top of the
514a1f18 12624 function. */
8baddbf1 12625 if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
ca79f85d
JM
12626 return 1;
12627
8d08fdba
MS
12628 /* As far as unification is concerned, this wins. Later checks
12629 will invalidate it if necessary. */
12630 return 0;
12631
12632 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
bd6dd845 12633 /* Type INTEGER_CST can come from ordinary constant template args. */
8d08fdba 12634 case INTEGER_CST:
bd6dd845
MS
12635 while (TREE_CODE (arg) == NOP_EXPR)
12636 arg = TREE_OPERAND (arg, 0);
12637
8d08fdba
MS
12638 if (TREE_CODE (arg) != INTEGER_CST)
12639 return 1;
12640 return !tree_int_cst_equal (parm, arg);
12641
8d08fdba
MS
12642 case TREE_VEC:
12643 {
12644 int i;
12645 if (TREE_CODE (arg) != TREE_VEC)
12646 return 1;
12647 if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
12648 return 1;
0dc09a61 12649 for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
830bfa74 12650 if (unify (tparms, targs,
8d08fdba 12651 TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
4393e105 12652 UNIFY_ALLOW_NONE))
8d08fdba
MS
12653 return 1;
12654 return 0;
12655 }
12656
8d08fdba 12657 case RECORD_TYPE:
f181d4ae 12658 case UNION_TYPE:
f181d4ae 12659 if (TREE_CODE (arg) != TREE_CODE (parm))
a4443a08 12660 return 1;
c8094d83 12661
a7a64a77
MM
12662 if (TYPE_PTRMEMFUNC_P (parm))
12663 {
12664 if (!TYPE_PTRMEMFUNC_P (arg))
12665 return 1;
12666
c8094d83 12667 return unify (tparms, targs,
a7a64a77
MM
12668 TYPE_PTRMEMFUNC_FN_TYPE (parm),
12669 TYPE_PTRMEMFUNC_FN_TYPE (arg),
12670 strict);
12671 }
12672
5db698f6 12673 if (CLASSTYPE_TEMPLATE_INFO (parm))
5566b478 12674 {
6467930b 12675 tree t = NULL_TREE;
4393e105 12676
028d1f20 12677 if (strict_in & UNIFY_ALLOW_DERIVED)
4393e105
MM
12678 {
12679 /* First, we try to unify the PARM and ARG directly. */
12680 t = try_class_unification (tparms, targs,
12681 parm, arg);
12682
12683 if (!t)
12684 {
12685 /* Fallback to the special case allowed in
12686 [temp.deduct.call]:
c8094d83 12687
4393e105
MM
12688 If P is a class, and P has the form
12689 template-id, then A can be a derived class of
12690 the deduced A. Likewise, if P is a pointer to
12691 a class of the form template-id, A can be a
12692 pointer to a derived class pointed to by the
12693 deduced A. */
8d83768f 12694 t = get_template_base (tparms, targs, parm, arg);
4393e105 12695
8d83768f 12696 if (!t)
4393e105
MM
12697 return 1;
12698 }
12699 }
c8094d83
MS
12700 else if (CLASSTYPE_TEMPLATE_INFO (arg)
12701 && (CLASSTYPE_TI_TEMPLATE (parm)
9fbf56f7 12702 == CLASSTYPE_TI_TEMPLATE (arg)))
6df47b06
MM
12703 /* Perhaps PARM is something like S<U> and ARG is S<int>.
12704 Then, we should unify `int' and `U'. */
6467930b 12705 t = arg;
4393e105 12706 else
dc957d14 12707 /* There's no chance of unification succeeding. */
5566b478 12708 return 1;
6467930b 12709
830bfa74 12710 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
4393e105 12711 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
5566b478 12712 }
9edc3913 12713 else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
5566b478 12714 return 1;
a4443a08 12715 return 0;
8d08fdba
MS
12716
12717 case METHOD_TYPE:
8d08fdba 12718 case FUNCTION_TYPE:
830bfa74 12719 if (TREE_CODE (arg) != TREE_CODE (parm))
8d08fdba 12720 return 1;
830bfa74 12721
38d18b1a 12722 /* CV qualifications for methods can never be deduced, they must
3db45ab5
MS
12723 match exactly. We need to check them explicitly here,
12724 because type_unification_real treats them as any other
12725 cvqualified parameter. */
38d18b1a
NS
12726 if (TREE_CODE (parm) == METHOD_TYPE
12727 && (!check_cv_quals_for_unify
12728 (UNIFY_ALLOW_NONE,
12729 TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
12730 TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
12731 return 1;
12732
830bfa74 12733 if (unify (tparms, targs, TREE_TYPE (parm),
4393e105 12734 TREE_TYPE (arg), UNIFY_ALLOW_NONE))
28cbf42c 12735 return 1;
386b8a85 12736 return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
30f86ec3
FJ
12737 TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
12738 LOOKUP_NORMAL);
a4443a08
MS
12739
12740 case OFFSET_TYPE:
9804209d 12741 /* Unify a pointer to member with a pointer to member function, which
0cbd7506 12742 deduces the type of the member as a function type. */
9804209d 12743 if (TYPE_PTRMEMFUNC_P (arg))
0cbd7506
MS
12744 {
12745 tree method_type;
12746 tree fntype;
12747 cp_cv_quals cv_quals;
12748
12749 /* Check top-level cv qualifiers */
12750 if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
12751 return 1;
12752
12753 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
12754 TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
12755 return 1;
12756
12757 /* Determine the type of the function we are unifying against. */
12758 method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
12759 fntype =
12760 build_function_type (TREE_TYPE (method_type),
12761 TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
12762
12763 /* Extract the cv-qualifiers of the member function from the
12764 implicit object parameter and place them on the function
12765 type to be restored later. */
12766 cv_quals =
12767 cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
12768 fntype = build_qualified_type (fntype, cv_quals);
12769 return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
12770 }
9804209d 12771
a4443a08
MS
12772 if (TREE_CODE (arg) != OFFSET_TYPE)
12773 return 1;
830bfa74 12774 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
4393e105 12775 TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
a4443a08 12776 return 1;
830bfa74 12777 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
4393e105 12778 strict);
a4443a08 12779
f62dbf03 12780 case CONST_DECL:
a723baf1
MM
12781 if (DECL_TEMPLATE_PARM_P (parm))
12782 return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
c8094d83 12783 if (arg != integral_constant_value (parm))
f62dbf03
JM
12784 return 1;
12785 return 0;
12786
28e8f3a0 12787 case FIELD_DECL:
027905b4
KL
12788 case TEMPLATE_DECL:
12789 /* Matched cases are handled by the ARG == PARM test above. */
12790 return 1;
12791
5d80a306
DG
12792 case TYPE_ARGUMENT_PACK:
12793 case NONTYPE_ARGUMENT_PACK:
12794 {
12795 tree packed_parms = ARGUMENT_PACK_ARGS (parm);
12796 tree packed_args = ARGUMENT_PACK_ARGS (arg);
12797 int i, len = TREE_VEC_LENGTH (packed_parms);
12798 int argslen = TREE_VEC_LENGTH (packed_args);
12799 int parm_variadic_p = 0;
12800
12801 /* Check if the parameters end in a pack, making them variadic. */
12802 if (len > 0
12803 && PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, len - 1)))
12804 parm_variadic_p = 1;
12805
12806 /* If we don't have enough arguments to satisfy the parameters
12807 (not counting the pack expression at the end), or we have
12808 too many arguments for a parameter list that doesn't end in
12809 a pack expression, we can't unify. */
12810 if (argslen < (len - parm_variadic_p)
12811 || (argslen > len && !parm_variadic_p))
12812 return 1;
12813
12814 /* Unify all of the parameters that precede the (optional)
12815 pack expression. */
12816 for (i = 0; i < len - parm_variadic_p; ++i)
12817 {
12818 if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
12819 TREE_VEC_ELT (packed_args, i), strict))
12820 return 1;
12821 }
12822
12823 if (parm_variadic_p)
12824 return unify_pack_expansion (tparms, targs,
12825 packed_parms, packed_args,
12826 strict, /*call_args_p=*/false,
12827 /*subr=*/false);
12828 return 0;
12829 }
12830
12831 break;
12832
8d08fdba 12833 default:
6615c446 12834 gcc_assert (EXPR_P (parm));
c8094d83 12835
98ddffc1 12836 /* We must be looking at an expression. This can happen with
c8094d83
MS
12837 something like:
12838
98ddffc1
NS
12839 template <int I>
12840 void foo(S<I>, S<I + 2>);
050367a3 12841
98ddffc1 12842 This is a "nondeduced context":
050367a3 12843
98ddffc1 12844 [deduct.type]
c8094d83 12845
98ddffc1 12846 The nondeduced contexts are:
050367a3 12847
98ddffc1
NS
12848 --A type that is a template-id in which one or more of
12849 the template-arguments is an expression that references
c8094d83 12850 a template-parameter.
050367a3 12851
98ddffc1
NS
12852 In these cases, we assume deduction succeeded, but don't
12853 actually infer any unifications. */
74601d7c 12854
98ddffc1
NS
12855 if (!uses_template_parms (parm)
12856 && !template_args_equal (parm, arg))
12857 return 1;
12858 else
12859 return 0;
8d08fdba
MS
12860 }
12861}
8d08fdba 12862\f
4684cd27
MM
12863/* Note that DECL can be defined in this translation unit, if
12864 required. */
12865
12866static void
12867mark_definable (tree decl)
12868{
12869 tree clone;
12870 DECL_NOT_REALLY_EXTERN (decl) = 1;
12871 FOR_EACH_CLONE (clone, decl)
12872 DECL_NOT_REALLY_EXTERN (clone) = 1;
12873}
12874
03d0f4af 12875/* Called if RESULT is explicitly instantiated, or is a member of an
4684cd27 12876 explicitly instantiated class. */
03d0f4af 12877
faae18ab 12878void
3a978d72 12879mark_decl_instantiated (tree result, int extern_p)
faae18ab 12880{
415c974c 12881 SET_DECL_EXPLICIT_INSTANTIATION (result);
3ae18eaf 12882
1f6f0cb6
MM
12883 /* If this entity has already been written out, it's too late to
12884 make any modifications. */
12885 if (TREE_ASM_WRITTEN (result))
12886 return;
12887
12888 if (TREE_CODE (result) != FUNCTION_DECL)
12889 /* The TREE_PUBLIC flag for function declarations will have been
12890 set correctly by tsubst. */
12891 TREE_PUBLIC (result) = 1;
12892
346eeb15
JM
12893 /* This might have been set by an earlier implicit instantiation. */
12894 DECL_COMDAT (result) = 0;
12895
4684cd27
MM
12896 if (extern_p)
12897 DECL_NOT_REALLY_EXTERN (result) = 0;
12898 else
faae18ab 12899 {
4684cd27 12900 mark_definable (result);
1a408d07
JM
12901 /* Always make artificials weak. */
12902 if (DECL_ARTIFICIAL (result) && flag_weak)
12903 comdat_linkage (result);
a7d87521
JM
12904 /* For WIN32 we also want to put explicit instantiations in
12905 linkonce sections. */
1a408d07 12906 else if (TREE_PUBLIC (result))
b385c841 12907 maybe_make_one_only (result);
faae18ab 12908 }
c8094d83 12909
4684cd27
MM
12910 /* If EXTERN_P, then this function will not be emitted -- unless
12911 followed by an explicit instantiation, at which point its linkage
12912 will be adjusted. If !EXTERN_P, then this function will be
12913 emitted here. In neither circumstance do we want
12914 import_export_decl to adjust the linkage. */
c8094d83 12915 DECL_INTERFACE_KNOWN (result) = 1;
faae18ab
MS
12916}
12917
e5214479 12918/* Given two function templates PAT1 and PAT2, return:
6467930b
MS
12919
12920 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
12921 -1 if PAT2 is more specialized than PAT1.
e5214479
JM
12922 0 if neither is more specialized.
12923
dda04398
NS
12924 LEN indicates the number of parameters we should consider
12925 (defaulted parameters should not be considered).
12926
12927 The 1998 std underspecified function template partial ordering, and
12928 DR214 addresses the issue. We take pairs of arguments, one from
c51940a2 12929 each of the templates, and deduce them against each other. One of
dda04398
NS
12930 the templates will be more specialized if all the *other*
12931 template's arguments deduce against its arguments and at least one
12932 of its arguments *does* *not* deduce against the other template's
12933 corresponding argument. Deduction is done as for class templates.
12934 The arguments used in deduction have reference and top level cv
12935 qualifiers removed. Iff both arguments were originally reference
12936 types *and* deduction succeeds in both directions, the template
12937 with the more cv-qualified argument wins for that pairing (if
12938 neither is more cv-qualified, they both are equal). Unlike regular
12939 deduction, after all the arguments have been deduced in this way,
12940 we do *not* verify the deduced template argument values can be
12941 substituted into non-deduced contexts, nor do we have to verify
12942 that all template arguments have been deduced. */
c8094d83 12943
6467930b 12944int
dda04398
NS
12945more_specialized_fn (tree pat1, tree pat2, int len)
12946{
12947 tree decl1 = DECL_TEMPLATE_RESULT (pat1);
12948 tree decl2 = DECL_TEMPLATE_RESULT (pat2);
12949 tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
12950 tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
12951 tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
12952 tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
12953 tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
12954 tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
12955 int better1 = 0;
12956 int better2 = 0;
3db45ab5 12957
48884537
NS
12958 /* Remove the this parameter from non-static member functions. If
12959 one is a non-static member function and the other is not a static
12960 member function, remove the first parameter from that function
12961 also. This situation occurs for operator functions where we
12962 locate both a member function (with this pointer) and non-member
12963 operator (with explicit first operand). */
dda04398 12964 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
48884537
NS
12965 {
12966 len--; /* LEN is the number of significant arguments for DECL1 */
12967 args1 = TREE_CHAIN (args1);
12968 if (!DECL_STATIC_FUNCTION_P (decl2))
12969 args2 = TREE_CHAIN (args2);
12970 }
12971 else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
12972 {
12973 args2 = TREE_CHAIN (args2);
12974 if (!DECL_STATIC_FUNCTION_P (decl1))
12975 {
12976 len--;
12977 args1 = TREE_CHAIN (args1);
12978 }
12979 }
3db45ab5 12980
ee307009
NS
12981 /* If only one is a conversion operator, they are unordered. */
12982 if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
12983 return 0;
c8094d83 12984
dda04398
NS
12985 /* Consider the return type for a conversion function */
12986 if (DECL_CONV_FN_P (decl1))
12987 {
dda04398
NS
12988 args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
12989 args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
12990 len++;
12991 }
c8094d83 12992
dda04398 12993 processing_template_decl++;
c8094d83 12994
dda04398
NS
12995 while (len--)
12996 {
12997 tree arg1 = TREE_VALUE (args1);
12998 tree arg2 = TREE_VALUE (args2);
12999 int deduce1, deduce2;
13000 int quals1 = -1;
13001 int quals2 = -1;
6467930b 13002
5d80a306
DG
13003 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13004 && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13005 {
13006 /* When both arguments are pack expansions, we need only
13007 unify the patterns themselves. */
13008 arg1 = PACK_EXPANSION_PATTERN (arg1);
13009 arg2 = PACK_EXPANSION_PATTERN (arg2);
13010
13011 /* This is the last comparison we need to do. */
13012 len = 0;
13013 }
13014
dda04398
NS
13015 if (TREE_CODE (arg1) == REFERENCE_TYPE)
13016 {
13017 arg1 = TREE_TYPE (arg1);
13018 quals1 = cp_type_quals (arg1);
13019 }
c8094d83 13020
dda04398
NS
13021 if (TREE_CODE (arg2) == REFERENCE_TYPE)
13022 {
13023 arg2 = TREE_TYPE (arg2);
13024 quals2 = cp_type_quals (arg2);
13025 }
6467930b 13026
dda04398
NS
13027 if ((quals1 < 0) != (quals2 < 0))
13028 {
13029 /* Only of the args is a reference, see if we should apply
13030 array/function pointer decay to it. This is not part of
13031 DR214, but is, IMHO, consistent with the deduction rules
13032 for the function call itself, and with our earlier
13033 implementation of the underspecified partial ordering
13034 rules. (nathan). */
13035 if (quals1 >= 0)
13036 {
13037 switch (TREE_CODE (arg1))
13038 {
13039 case ARRAY_TYPE:
13040 arg1 = TREE_TYPE (arg1);
13041 /* FALLTHROUGH. */
13042 case FUNCTION_TYPE:
13043 arg1 = build_pointer_type (arg1);
13044 break;
c8094d83 13045
dda04398
NS
13046 default:
13047 break;
13048 }
13049 }
13050 else
13051 {
13052 switch (TREE_CODE (arg2))
13053 {
13054 case ARRAY_TYPE:
13055 arg2 = TREE_TYPE (arg2);
13056 /* FALLTHROUGH. */
13057 case FUNCTION_TYPE:
13058 arg2 = build_pointer_type (arg2);
13059 break;
c8094d83 13060
dda04398
NS
13061 default:
13062 break;
13063 }
13064 }
13065 }
c8094d83 13066
dda04398
NS
13067 arg1 = TYPE_MAIN_VARIANT (arg1);
13068 arg2 = TYPE_MAIN_VARIANT (arg2);
c8094d83 13069
5d80a306
DG
13070 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
13071 {
b1d7b1c0 13072 int i, len2 = list_length (args2);
5d80a306
DG
13073 tree parmvec = make_tree_vec (1);
13074 tree argvec = make_tree_vec (len2);
13075 tree ta = args2;
13076
13077 /* Setup the parameter vector, which contains only ARG1. */
13078 TREE_VEC_ELT (parmvec, 0) = arg1;
13079
13080 /* Setup the argument vector, which contains the remaining
13081 arguments. */
13082 for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
13083 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13084
13085 deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec,
13086 argvec, UNIFY_ALLOW_NONE,
13087 /*call_args_p=*/false,
13088 /*subr=*/0);
13089
13090 /* We cannot deduce in the other direction, because ARG1 is
13091 a pack expansion but ARG2 is not. */
13092 deduce2 = 0;
13093 }
13094 else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13095 {
b1d7b1c0 13096 int i, len1 = list_length (args1);
5d80a306
DG
13097 tree parmvec = make_tree_vec (1);
13098 tree argvec = make_tree_vec (len1);
13099 tree ta = args1;
13100
13101 /* Setup the parameter vector, which contains only ARG1. */
13102 TREE_VEC_ELT (parmvec, 0) = arg2;
13103
13104 /* Setup the argument vector, which contains the remaining
13105 arguments. */
13106 for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
13107 TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13108
13109 deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec,
13110 argvec, UNIFY_ALLOW_NONE,
13111 /*call_args_p=*/false,
13112 /*subr=*/0);
13113
13114 /* We cannot deduce in the other direction, because ARG2 is
13115 a pack expansion but ARG1 is not.*/
13116 deduce1 = 0;
13117 }
13118
13119 else
13120 {
13121 /* The normal case, where neither argument is a pack
13122 expansion. */
13123 deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
13124 deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
13125 }
dda04398
NS
13126
13127 if (!deduce1)
13128 better2 = -1;
13129 if (!deduce2)
13130 better1 = -1;
13131 if (better1 < 0 && better2 < 0)
13132 /* We've failed to deduce something in either direction.
13133 These must be unordered. */
13134 break;
c8094d83 13135
dda04398
NS
13136 if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
13137 {
13138 /* Deduces in both directions, see if quals can
13139 disambiguate. Pretend the worse one failed to deduce. */
13140 if ((quals1 & quals2) == quals2)
13141 deduce1 = 0;
13142 if ((quals1 & quals2) == quals1)
13143 deduce2 = 0;
13144 }
13145 if (deduce1 && !deduce2 && !better2)
13146 better2 = 1;
13147 if (deduce2 && !deduce1 && !better1)
13148 better1 = 1;
c8094d83 13149
5d80a306
DG
13150 if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13151 || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13152 /* We have already processed all of the arguments in our
13153 handing of the pack expansion type. */
13154 len = 0;
13155
dda04398
NS
13156 args1 = TREE_CHAIN (args1);
13157 args2 = TREE_CHAIN (args2);
13158 }
13159
13160 processing_template_decl--;
13161
5d80a306
DG
13162 /* All things being equal, if the next argument is a pack expansion
13163 for one function but not for the other, prefer the
13164 non-variadic function. */
13165 if ((better1 > 0) - (better2 > 0) == 0
13166 && args1 && TREE_VALUE (args1)
13167 && args2 && TREE_VALUE (args2))
13168 {
13169 if (TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION)
13170 return TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION ? 0 : -1;
13171 else if (TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION)
13172 return 1;
13173 }
13174
dda04398 13175 return (better1 > 0) - (better2 > 0);
73aad9b9 13176}
6467930b 13177
916b63c3 13178/* Determine which of two partial specializations is more specialized.
6467930b 13179
916b63c3
MM
13180 PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
13181 to the first partial specialization. The TREE_VALUE is the
13182 innermost set of template parameters for the partial
13183 specialization. PAT2 is similar, but for the second template.
13184
13185 Return 1 if the first partial specialization is more specialized;
13186 -1 if the second is more specialized; 0 if neither is more
13187 specialized.
55ece1b3 13188
916b63c3 13189 See [temp.class.order] for information about determining which of
3db45ab5 13190 two templates is more specialized. */
c8094d83 13191
b5791fdc 13192static int
916b63c3 13193more_specialized_class (tree pat1, tree pat2)
73aad9b9
JM
13194{
13195 tree targs;
916b63c3 13196 tree tmpl1, tmpl2;
73aad9b9 13197 int winner = 0;
5d80a306 13198 bool any_deductions = false;
73aad9b9 13199
916b63c3
MM
13200 tmpl1 = TREE_TYPE (pat1);
13201 tmpl2 = TREE_TYPE (pat2);
13202
c8094d83 13203 /* Just like what happens for functions, if we are ordering between
baa49730
GB
13204 different class template specializations, we may encounter dependent
13205 types in the arguments, and we need our dependency check functions
13206 to behave correctly. */
13207 ++processing_template_decl;
3db45ab5 13208 targs = get_class_bindings (TREE_VALUE (pat1),
916b63c3
MM
13209 CLASSTYPE_TI_ARGS (tmpl1),
13210 CLASSTYPE_TI_ARGS (tmpl2));
73aad9b9 13211 if (targs)
5d80a306
DG
13212 {
13213 --winner;
13214 any_deductions = true;
13215 }
73aad9b9 13216
3db45ab5 13217 targs = get_class_bindings (TREE_VALUE (pat2),
916b63c3
MM
13218 CLASSTYPE_TI_ARGS (tmpl2),
13219 CLASSTYPE_TI_ARGS (tmpl1));
73aad9b9 13220 if (targs)
5d80a306
DG
13221 {
13222 ++winner;
13223 any_deductions = true;
13224 }
baa49730 13225 --processing_template_decl;
6467930b 13226
5d80a306
DG
13227 /* In the case of a tie where at least one of the class templates
13228 has a parameter pack at the end, the template with the most
13229 non-packed parameters wins. */
13230 if (winner == 0
13231 && any_deductions
13232 && (template_args_variadic_p (TREE_PURPOSE (pat1))
13233 || template_args_variadic_p (TREE_PURPOSE (pat2))))
13234 {
13235 tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
13236 tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
13237 int len1 = TREE_VEC_LENGTH (args1);
13238 int len2 = TREE_VEC_LENGTH (args2);
13239
13240 /* We don't count the pack expansion at the end. */
13241 if (template_args_variadic_p (TREE_PURPOSE (pat1)))
13242 --len1;
13243 if (template_args_variadic_p (TREE_PURPOSE (pat2)))
13244 --len2;
13245
13246 if (len1 > len2)
13247 return 1;
13248 else if (len1 < len2)
13249 return -1;
13250 }
13251
6467930b
MS
13252 return winner;
13253}
73aad9b9
JM
13254
13255/* Return the template arguments that will produce the function signature
e1467ff2 13256 DECL from the function template FN, with the explicit template
a34d3336 13257 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is true, the return type must
4393e105 13258 also match. Return NULL_TREE if no satisfactory arguments could be
a34d3336 13259 found. */
c8094d83 13260
76b9a14d 13261static tree
a34d3336 13262get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
73aad9b9 13263{
98c1c668 13264 int ntparms = DECL_NTPARMS (fn);
f31c0a32 13265 tree targs = make_tree_vec (ntparms);
4393e105 13266 tree decl_type;
03017874 13267 tree decl_arg_types;
98c1c668 13268
4393e105
MM
13269 /* Substitute the explicit template arguments into the type of DECL.
13270 The call to fn_type_unification will handle substitution into the
13271 FN. */
13272 decl_type = TREE_TYPE (decl);
13273 if (explicit_args && uses_template_parms (decl_type))
13274 {
13275 tree tmpl;
13276 tree converted_args;
13277
13278 if (DECL_TEMPLATE_INFO (decl))
13279 tmpl = DECL_TI_TEMPLATE (decl);
13280 else
0e339752 13281 /* We can get here for some invalid specializations. */
4393e105
MM
13282 return NULL_TREE;
13283
13284 converted_args
e7e93965
MM
13285 = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
13286 explicit_args, NULL_TREE,
3db45ab5 13287 tf_none,
e7e93965
MM
13288 /*require_all_args=*/false,
13289 /*use_default_args=*/false);
4393e105
MM
13290 if (converted_args == error_mark_node)
13291 return NULL_TREE;
c8094d83
MS
13292
13293 decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
4393e105
MM
13294 if (decl_type == error_mark_node)
13295 return NULL_TREE;
13296 }
13297
e5214479 13298 /* Never do unification on the 'this' parameter. */
ba139ba8
MM
13299 decl_arg_types = skip_artificial_parms_for (decl,
13300 TYPE_ARG_TYPES (decl_type));
d7684f2d 13301
c8094d83 13302 if (fn_type_unification (fn, explicit_args, targs,
03017874 13303 decl_arg_types,
8d3631f8 13304 (check_rettype || DECL_CONV_FN_P (fn)
0cbd7506 13305 ? TREE_TYPE (decl_type) : NULL_TREE),
30f86ec3 13306 DEDUCE_EXACT, LOOKUP_NORMAL))
76b9a14d
JM
13307 return NULL_TREE;
13308
76b9a14d
JM
13309 return targs;
13310}
13311
36a117a5
MM
13312/* Return the innermost template arguments that, when applied to a
13313 template specialization whose innermost template parameters are
9471d3e2 13314 TPARMS, and whose specialization arguments are PARMS, yield the
c8094d83 13315 ARGS.
36a117a5
MM
13316
13317 For example, suppose we have:
13318
13319 template <class T, class U> struct S {};
13320 template <class T> struct S<T*, int> {};
13321
13322 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
916b63c3 13323 {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
36a117a5
MM
13324 int}. The resulting vector will be {double}, indicating that `T'
13325 is bound to `double'. */
13326
bd6dd845 13327static tree
916b63c3 13328get_class_bindings (tree tparms, tree spec_args, tree args)
73aad9b9 13329{
3b3ba9f0 13330 int i, ntparms = TREE_VEC_LENGTH (tparms);
916b63c3
MM
13331 tree deduced_args;
13332 tree innermost_deduced_args;
73aad9b9 13333
916b63c3
MM
13334 innermost_deduced_args = make_tree_vec (ntparms);
13335 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
13336 {
13337 deduced_args = copy_node (args);
13338 SET_TMPL_ARGS_LEVEL (deduced_args,
13339 TMPL_ARGS_DEPTH (deduced_args),
13340 innermost_deduced_args);
13341 }
13342 else
3db45ab5 13343 deduced_args = innermost_deduced_args;
916b63c3 13344
3db45ab5
MS
13345 if (unify (tparms, deduced_args,
13346 INNERMOST_TEMPLATE_ARGS (spec_args),
13347 INNERMOST_TEMPLATE_ARGS (args),
0cbd7506 13348 UNIFY_ALLOW_NONE))
fcfb9f96 13349 return NULL_TREE;
73aad9b9
JM
13350
13351 for (i = 0; i < ntparms; ++i)
916b63c3 13352 if (! TREE_VEC_ELT (innermost_deduced_args, i))
73aad9b9
JM
13353 return NULL_TREE;
13354
916b63c3
MM
13355 /* Verify that nondeduced template arguments agree with the type
13356 obtained from argument deduction.
3db45ab5 13357
916b63c3
MM
13358 For example:
13359
13360 struct A { typedef int X; };
13361 template <class T, class U> struct C {};
13362 template <class T> struct C<T, typename T::X> {};
13363
13364 Then with the instantiation `C<A, int>', we can deduce that
13365 `T' is `A' but unify () does not check whether `typename T::X'
13366 is `int'. */
13367 spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
13368 if (spec_args == error_mark_node
13369 /* We only need to check the innermost arguments; the other
13370 arguments will always agree. */
13371 || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
13372 INNERMOST_TEMPLATE_ARGS (args)))
74601d7c
KL
13373 return NULL_TREE;
13374
916b63c3 13375 return deduced_args;
73aad9b9
JM
13376}
13377
7ca383e6
MM
13378/* TEMPLATES is a TREE_LIST. Each TREE_VALUE is a TEMPLATE_DECL.
13379 Return the TREE_LIST node with the most specialized template, if
13380 any. If there is no most specialized template, the error_mark_node
13381 is returned.
13382
13383 Note that this function does not look at, or modify, the
13384 TREE_PURPOSE or TREE_TYPE of any of the nodes. Since the node
13385 returned is one of the elements of INSTANTIATIONS, callers may
13386 store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
13387 and retrieve it from the value returned. */
73aad9b9
JM
13388
13389tree
7ca383e6 13390most_specialized_instantiation (tree templates)
73aad9b9 13391{
104bf76a 13392 tree fn, champ;
73aad9b9 13393
dda04398 13394 ++processing_template_decl;
c8094d83 13395
7ca383e6
MM
13396 champ = templates;
13397 for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
73aad9b9 13398 {
dda04398 13399 int fate = 0;
c8094d83 13400
a34d3336
NS
13401 if (get_bindings (TREE_VALUE (champ),
13402 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13403 NULL_TREE, /*check_ret=*/false))
dda04398
NS
13404 fate--;
13405
a34d3336
NS
13406 if (get_bindings (TREE_VALUE (fn),
13407 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13408 NULL_TREE, /*check_ret=*/false))
dda04398 13409 fate++;
c8094d83 13410
8ca4bf25
MM
13411 if (fate == -1)
13412 champ = fn;
13413 else if (!fate)
73aad9b9 13414 {
8ca4bf25
MM
13415 /* Equally specialized, move to next function. If there
13416 is no next function, nothing's most specialized. */
13417 fn = TREE_CHAIN (fn);
7ca383e6 13418 champ = fn;
8ca4bf25
MM
13419 if (!fn)
13420 break;
73aad9b9
JM
13421 }
13422 }
c8094d83 13423
dda04398
NS
13424 if (champ)
13425 /* Now verify that champ is better than everything earlier in the
13426 instantiation list. */
7ca383e6 13427 for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
a34d3336
NS
13428 if (get_bindings (TREE_VALUE (champ),
13429 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13430 NULL_TREE, /*check_ret=*/false)
13431 || !get_bindings (TREE_VALUE (fn),
13432 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13433 NULL_TREE, /*check_ret=*/false))
dda04398
NS
13434 {
13435 champ = NULL_TREE;
13436 break;
13437 }
c8094d83 13438
dda04398 13439 processing_template_decl--;
c8094d83 13440
dda04398
NS
13441 if (!champ)
13442 return error_mark_node;
73aad9b9 13443
7ca383e6 13444 return champ;
73aad9b9
JM
13445}
13446
36a117a5 13447/* If DECL is a specialization of some template, return the most
f9a7ae04
MM
13448 general such template. Otherwise, returns NULL_TREE.
13449
13450 For example, given:
36a117a5
MM
13451
13452 template <class T> struct S { template <class U> void f(U); };
13453
13454 if TMPL is `template <class U> void S<int>::f(U)' this will return
13455 the full template. This function will not trace past partial
13456 specializations, however. For example, given in addition:
13457
13458 template <class T> struct S<T*> { template <class U> void f(U); };
13459
13460 if TMPL is `template <class U> void S<int*>::f(U)' this will return
13461 `template <class T> template <class U> S<T*>::f(U)'. */
73aad9b9 13462
612c671a 13463tree
3a978d72 13464most_general_template (tree decl)
73aad9b9 13465{
f9a7ae04
MM
13466 /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
13467 an immediate specialization. */
13468 if (TREE_CODE (decl) == FUNCTION_DECL)
13469 {
13470 if (DECL_TEMPLATE_INFO (decl)) {
13471 decl = DECL_TI_TEMPLATE (decl);
13472
13473 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
13474 template friend. */
13475 if (TREE_CODE (decl) != TEMPLATE_DECL)
13476 return NULL_TREE;
13477 } else
13478 return NULL_TREE;
13479 }
13480
13481 /* Look for more and more general templates. */
13482 while (DECL_TEMPLATE_INFO (decl))
13483 {
10b1d5e7
MM
13484 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
13485 (See cp-tree.h for details.) */
f9a7ae04
MM
13486 if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
13487 break;
13488
6e049fcd
KL
13489 if (CLASS_TYPE_P (TREE_TYPE (decl))
13490 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
13491 break;
13492
f9a7ae04
MM
13493 /* Stop if we run into an explicitly specialized class template. */
13494 if (!DECL_NAMESPACE_SCOPE_P (decl)
13495 && DECL_CONTEXT (decl)
13496 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
13497 break;
13498
13499 decl = DECL_TI_TEMPLATE (decl);
13500 }
36a117a5
MM
13501
13502 return decl;
13503}
13504
916b63c3
MM
13505/* Return the most specialized of the class template partial
13506 specializations of TMPL which can produce TYPE, a specialization of
13507 TMPL. The value returned is actually a TREE_LIST; the TREE_TYPE is
13508 a _TYPE node corresponding to the partial specialization, while the
13509 TREE_PURPOSE is the set of template arguments that must be
13510 substituted into the TREE_TYPE in order to generate TYPE.
13511
13512 If the choice of partial specialization is ambiguous, a diagnostic
13513 is issued, and the error_mark_node is returned. If there are no
13514 partial specializations of TMPL matching TYPE, then NULL_TREE is
13515 returned. */
36a117a5 13516
e9659ab0 13517static tree
916b63c3 13518most_specialized_class (tree type, tree tmpl)
36a117a5
MM
13519{
13520 tree list = NULL_TREE;
13521 tree t;
13522 tree champ;
73aad9b9 13523 int fate;
916b63c3
MM
13524 bool ambiguous_p;
13525 tree args;
73aad9b9 13526
36a117a5 13527 tmpl = most_general_template (tmpl);
916b63c3 13528 args = CLASSTYPE_TI_ARGS (type);
36a117a5 13529 for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
73aad9b9 13530 {
916b63c3
MM
13531 tree partial_spec_args;
13532 tree spec_args;
13533
13534 partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
3db45ab5
MS
13535 spec_args = get_class_bindings (TREE_VALUE (t),
13536 partial_spec_args,
916b63c3 13537 args);
36a117a5 13538 if (spec_args)
73aad9b9 13539 {
916b63c3 13540 list = tree_cons (spec_args, TREE_VALUE (t), list);
73aad9b9
JM
13541 TREE_TYPE (list) = TREE_TYPE (t);
13542 }
13543 }
13544
13545 if (! list)
13546 return NULL_TREE;
13547
916b63c3 13548 ambiguous_p = false;
73aad9b9
JM
13549 t = list;
13550 champ = t;
13551 t = TREE_CHAIN (t);
13552 for (; t; t = TREE_CHAIN (t))
13553 {
916b63c3 13554 fate = more_specialized_class (champ, t);
73aad9b9
JM
13555 if (fate == 1)
13556 ;
13557 else
13558 {
13559 if (fate == 0)
13560 {
13561 t = TREE_CHAIN (t);
13562 if (! t)
916b63c3
MM
13563 {
13564 ambiguous_p = true;
13565 break;
13566 }
73aad9b9
JM
13567 }
13568 champ = t;
13569 }
13570 }
13571
916b63c3
MM
13572 if (!ambiguous_p)
13573 for (t = list; t && t != champ; t = TREE_CHAIN (t))
13574 {
13575 fate = more_specialized_class (champ, t);
13576 if (fate != 1)
13577 {
13578 ambiguous_p = true;
13579 break;
13580 }
13581 }
13582
13583 if (ambiguous_p)
73aad9b9 13584 {
916b63c3
MM
13585 const char *str = "candidates are:";
13586 error ("ambiguous class template instantiation for %q#T", type);
13587 for (t = list; t; t = TREE_CHAIN (t))
13588 {
13589 error ("%s %+#T", str, TREE_TYPE (t));
13590 str = " ";
13591 }
13592 return error_mark_node;
73aad9b9
JM
13593 }
13594
13595 return champ;
13596}
13597
eb8845be 13598/* Explicitly instantiate DECL. */
e92cc029 13599
8d08fdba 13600void
eb8845be 13601do_decl_instantiation (tree decl, tree storage)
8d08fdba 13602{
8d08fdba 13603 tree result = NULL_TREE;
faae18ab 13604 int extern_p = 0;
e8abc66f 13605
ad47b891 13606 if (!decl || decl == error_mark_node)
dc957d14 13607 /* An error occurred, for which grokdeclarator has already issued
3fa56191
MM
13608 an appropriate message. */
13609 return;
13610 else if (! DECL_LANG_SPECIFIC (decl))
ec255269 13611 {
0f51ccfc 13612 error ("explicit instantiation of non-template %q#D", decl);
ec255269
MS
13613 return;
13614 }
03d0f4af 13615 else if (TREE_CODE (decl) == VAR_DECL)
6633d636 13616 {
03d0f4af
MM
13617 /* There is an asymmetry here in the way VAR_DECLs and
13618 FUNCTION_DECLs are handled by grokdeclarator. In the case of
13619 the latter, the DECL we get back will be marked as a
13620 template instantiation, and the appropriate
13621 DECL_TEMPLATE_INFO will be set up. This does not happen for
13622 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
13623 should handle VAR_DECLs as it currently handles
13624 FUNCTION_DECLs. */
86ac0575 13625 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
e0860732 13626 if (!result || TREE_CODE (result) != VAR_DECL)
03d0f4af 13627 {
0f51ccfc 13628 error ("no matching template for %qD found", decl);
03d0f4af
MM
13629 return;
13630 }
8ea6dfae
SM
13631 if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
13632 {
13633 error ("type %qT for explicit instantiation %qD does not match "
13634 "declared type %qT", TREE_TYPE (result), decl,
13635 TREE_TYPE (decl));
13636 return;
13637 }
6633d636
MS
13638 }
13639 else if (TREE_CODE (decl) != FUNCTION_DECL)
13640 {
0f51ccfc 13641 error ("explicit instantiation of %q#D", decl);
6633d636
MS
13642 return;
13643 }
03d0f4af
MM
13644 else
13645 result = decl;
672476cb 13646
03d0f4af 13647 /* Check for various error cases. Note that if the explicit
0e339752 13648 instantiation is valid the RESULT will currently be marked as an
03d0f4af
MM
13649 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
13650 until we get here. */
13651
13652 if (DECL_TEMPLATE_SPECIALIZATION (result))
672476cb 13653 {
07782718
KL
13654 /* DR 259 [temp.spec].
13655
13656 Both an explicit instantiation and a declaration of an explicit
13657 specialization shall not appear in a program unless the explicit
13658 instantiation follows a declaration of the explicit specialization.
03d0f4af 13659
07782718
KL
13660 For a given set of template parameters, if an explicit
13661 instantiation of a template appears after a declaration of an
13662 explicit specialization for that template, the explicit
13663 instantiation has no effect. */
672476cb
MM
13664 return;
13665 }
03d0f4af
MM
13666 else if (DECL_EXPLICIT_INSTANTIATION (result))
13667 {
13668 /* [temp.spec]
98c1c668 13669
03d0f4af 13670 No program shall explicitly instantiate any template more
c8094d83 13671 than once.
03d0f4af 13672
4684cd27
MM
13673 We check DECL_NOT_REALLY_EXTERN so as not to complain when
13674 the first instantiation was `extern' and the second is not,
13675 and EXTERN_P for the opposite case. */
13676 if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
0f51ccfc 13677 pedwarn ("duplicate explicit instantiation of %q#D", result);
4684cd27
MM
13678 /* If an "extern" explicit instantiation follows an ordinary
13679 explicit instantiation, the template is instantiated. */
13680 if (extern_p)
03d0f4af
MM
13681 return;
13682 }
13683 else if (!DECL_IMPLICIT_INSTANTIATION (result))
faae18ab 13684 {
0f51ccfc 13685 error ("no matching template for %qD found", result);
faae18ab
MS
13686 return;
13687 }
03d0f4af 13688 else if (!DECL_TEMPLATE_INFO (result))
6633d636 13689 {
0f51ccfc 13690 pedwarn ("explicit instantiation of non-template %q#D", result);
6633d636
MS
13691 return;
13692 }
13693
f0e01782 13694 if (storage == NULL_TREE)
00595019 13695 ;
faae18ab 13696 else if (storage == ridpointers[(int) RID_EXTERN])
03d0f4af 13697 {
c02f5e29 13698 if (pedantic && !in_system_header)
0f51ccfc 13699 pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
0cbd7506 13700 "instantiations");
03d0f4af
MM
13701 extern_p = 1;
13702 }
f0e01782 13703 else
0f51ccfc 13704 error ("storage class %qD applied to template instantiation", storage);
3db45ab5 13705
9c12301f 13706 check_explicit_instantiation_namespace (result);
5566b478 13707 mark_decl_instantiated (result, extern_p);
c91a56d2 13708 if (! extern_p)
3db45ab5 13709 instantiate_decl (result, /*defer_ok=*/1,
eba839f9 13710 /*expl_inst_class_mem_p=*/false);
7177d104
MS
13711}
13712
b5791fdc 13713static void
3a978d72 13714mark_class_instantiated (tree t, int extern_p)
faae18ab
MS
13715{
13716 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
eb773359
JM
13717 SET_CLASSTYPE_INTERFACE_KNOWN (t);
13718 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
faae18ab
MS
13719 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
13720 if (! extern_p)
13721 {
13722 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
13723 rest_of_type_compilation (t, 1);
13724 }
c8094d83 13725}
e8abc66f 13726
5e0c54e5 13727/* Called from do_type_instantiation through binding_table_foreach to
9bcb9aae 13728 do recursive instantiation for the type bound in ENTRY. */
5e0c54e5
GDR
13729static void
13730bt_instantiate_type_proc (binding_entry entry, void *data)
13731{
13732 tree storage = *(tree *) data;
13733
13734 if (IS_AGGR_TYPE (entry->type)
13735 && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
13736 do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
13737}
13738
415c974c
MA
13739/* Called from do_type_instantiation to instantiate a member
13740 (a member function or a static member variable) of an
03fd3f84 13741 explicitly instantiated class template. */
415c974c
MA
13742static void
13743instantiate_class_member (tree decl, int extern_p)
13744{
13745 mark_decl_instantiated (decl, extern_p);
415c974c 13746 if (! extern_p)
3db45ab5 13747 instantiate_decl (decl, /*defer_ok=*/1,
eba839f9 13748 /*expl_inst_class_mem_p=*/true);
415c974c
MA
13749}
13750
a1bcc528
JM
13751/* Perform an explicit instantiation of template class T. STORAGE, if
13752 non-null, is the RID for extern, inline or static. COMPLAIN is
838dfd8a 13753 nonzero if this is called from the parser, zero if called recursively,
a1bcc528 13754 since the standard is unclear (as detailed below). */
c8094d83 13755
7177d104 13756void
3a978d72 13757do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
7177d104 13758{
e8abc66f
MS
13759 int extern_p = 0;
13760 int nomem_p = 0;
5566b478 13761 int static_p = 0;
4746cf84 13762 int previous_instantiation_extern_p = 0;
5566b478 13763
ca79f85d
JM
13764 if (TREE_CODE (t) == TYPE_DECL)
13765 t = TREE_TYPE (t);
13766
7ddedda4 13767 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
ca79f85d 13768 {
0f51ccfc 13769 error ("explicit instantiation of non-template type %qT", t);
ca79f85d
JM
13770 return;
13771 }
13772
5566b478 13773 complete_type (t);
7177d104 13774
d0f062fb 13775 if (!COMPLETE_TYPE_P (t))
f0e01782 13776 {
c2ea3a40 13777 if (complain & tf_error)
0f51ccfc 13778 error ("explicit instantiation of %q#T before definition of template",
0cbd7506 13779 t);
f0e01782
MS
13780 return;
13781 }
13782
03d0f4af 13783 if (storage != NULL_TREE)
f0e01782 13784 {
c02f5e29 13785 if (pedantic && !in_system_header)
c8094d83 13786 pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
0cbd7506 13787 storage);
03d0f4af
MM
13788
13789 if (storage == ridpointers[(int) RID_INLINE])
13790 nomem_p = 1;
13791 else if (storage == ridpointers[(int) RID_EXTERN])
13792 extern_p = 1;
13793 else if (storage == ridpointers[(int) RID_STATIC])
13794 static_p = 1;
13795 else
13796 {
0f51ccfc 13797 error ("storage class %qD applied to template instantiation",
0cbd7506 13798 storage);
03d0f4af
MM
13799 extern_p = 0;
13800 }
f0e01782
MS
13801 }
13802
370af2d5 13803 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
03d0f4af 13804 {
07782718 13805 /* DR 259 [temp.spec].
a292b002 13806
07782718
KL
13807 Both an explicit instantiation and a declaration of an explicit
13808 specialization shall not appear in a program unless the explicit
13809 instantiation follows a declaration of the explicit specialization.
13810
13811 For a given set of template parameters, if an explicit
13812 instantiation of a template appears after a declaration of an
13813 explicit specialization for that template, the explicit
13814 instantiation has no effect. */
03d0f4af
MM
13815 return;
13816 }
13817 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
44a8d0b3 13818 {
03d0f4af
MM
13819 /* [temp.spec]
13820
13821 No program shall explicitly instantiate any template more
c8094d83 13822 than once.
03d0f4af 13823
0cbd7506 13824 If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
4746cf84 13825 instantiation was `extern'. If EXTERN_P then the second is.
4684cd27 13826 These cases are OK. */
4746cf84
MA
13827 previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
13828
13829 if (!previous_instantiation_extern_p && !extern_p
c2ea3a40 13830 && (complain & tf_error))
0f51ccfc 13831 pedwarn ("duplicate explicit instantiation of %q#T", t);
c8094d83 13832
03d0f4af
MM
13833 /* If we've already instantiated the template, just return now. */
13834 if (!CLASSTYPE_INTERFACE_ONLY (t))
13835 return;
44a8d0b3 13836 }
e8abc66f 13837
9c12301f 13838 check_explicit_instantiation_namespace (TYPE_NAME (t));
03d0f4af 13839 mark_class_instantiated (t, extern_p);
03d0f4af 13840
e8abc66f
MS
13841 if (nomem_p)
13842 return;
13843
7177d104 13844 {
db5ae43f 13845 tree tmp;
5566b478 13846
03d0f4af
MM
13847 /* In contrast to implicit instantiation, where only the
13848 declarations, and not the definitions, of members are
13849 instantiated, we have here:
13850
0cbd7506 13851 [temp.explicit]
03d0f4af
MM
13852
13853 The explicit instantiation of a class template specialization
13854 implies the instantiation of all of its members not
13855 previously explicitly specialized in the translation unit
c8094d83 13856 containing the explicit instantiation.
03d0f4af
MM
13857
13858 Of course, we can't instantiate member template classes, since
13859 we don't have any arguments for them. Note that the standard
dc957d14 13860 is unclear on whether the instantiation of the members are
415c974c 13861 *explicit* instantiations or not. However, the most natural
03fd3f84 13862 interpretation is that it should be an explicit instantiation. */
03d0f4af 13863
5566b478
MS
13864 if (! static_p)
13865 for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
a7d87521 13866 if (TREE_CODE (tmp) == FUNCTION_DECL
1f109f0f 13867 && DECL_TEMPLATE_INSTANTIATION (tmp))
415c974c 13868 instantiate_class_member (tmp, extern_p);
5566b478
MS
13869
13870 for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
13871 if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
415c974c 13872 instantiate_class_member (tmp, extern_p);
7177d104 13873
5e0c54e5
GDR
13874 if (CLASSTYPE_NESTED_UTDS (t))
13875 binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
0cbd7506 13876 bt_instantiate_type_proc, &storage);
a292b002 13877 }
8d08fdba 13878}
a28e3c7f 13879
36a117a5
MM
13880/* Given a function DECL, which is a specialization of TMPL, modify
13881 DECL to be a re-instantiation of TMPL with the same template
13882 arguments. TMPL should be the template into which tsubst'ing
13883 should occur for DECL, not the most general template.
830bfa74
MM
13884
13885 One reason for doing this is a scenario like this:
13886
13887 template <class T>
13888 void f(const T&, int i);
13889
13890 void g() { f(3, 7); }
13891
13892 template <class T>
13893 void f(const T& t, const int i) { }
13894
13895 Note that when the template is first instantiated, with
13896 instantiate_template, the resulting DECL will have no name for the
13897 first parameter, and the wrong type for the second. So, when we go
13898 to instantiate the DECL, we regenerate it. */
13899
e9659ab0 13900static void
3a978d72 13901regenerate_decl_from_template (tree decl, tree tmpl)
830bfa74 13902{
f9a7ae04
MM
13903 /* The arguments used to instantiate DECL, from the most general
13904 template. */
830bfa74 13905 tree args;
830bfa74 13906 tree code_pattern;
830bfa74
MM
13907
13908 args = DECL_TI_ARGS (decl);
13909 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
13910
2b907f5c
KL
13911 /* Make sure that we can see identifiers, and compute access
13912 correctly. */
13913 push_access_scope (decl);
13914
c7222c02
MM
13915 if (TREE_CODE (decl) == FUNCTION_DECL)
13916 {
13917 tree decl_parm;
13918 tree pattern_parm;
13919 tree specs;
13920 int args_depth;
13921 int parms_depth;
c8094d83 13922
c7222c02 13923 args_depth = TMPL_ARGS_DEPTH (args);
c8094d83 13924 parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
c7222c02
MM
13925 if (args_depth > parms_depth)
13926 args = get_innermost_template_args (args, parms_depth);
13927
13928 specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
13929 args, tf_error, NULL_TREE);
13930 if (specs)
13931 TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
13932 specs);
13933
13934 /* Merge parameter declarations. */
c8094d83 13935 decl_parm = skip_artificial_parms_for (decl,
c7222c02 13936 DECL_ARGUMENTS (decl));
c8094d83 13937 pattern_parm
c7222c02
MM
13938 = skip_artificial_parms_for (code_pattern,
13939 DECL_ARGUMENTS (code_pattern));
5d80a306 13940 while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
c7222c02
MM
13941 {
13942 tree parm_type;
b17bba6d 13943 tree attributes;
5d80a306 13944
c7222c02
MM
13945 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
13946 DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
13947 parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
13948 NULL_TREE);
02bab9db 13949 parm_type = type_decays_to (parm_type);
c7222c02
MM
13950 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
13951 TREE_TYPE (decl_parm) = parm_type;
b17bba6d
MM
13952 attributes = DECL_ATTRIBUTES (pattern_parm);
13953 if (DECL_ATTRIBUTES (decl_parm) != attributes)
13954 {
13955 DECL_ATTRIBUTES (decl_parm) = attributes;
13956 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
13957 }
c7222c02
MM
13958 decl_parm = TREE_CHAIN (decl_parm);
13959 pattern_parm = TREE_CHAIN (pattern_parm);
13960 }
5d80a306
DG
13961 /* Merge any parameters that match with the function parameter
13962 pack. */
13963 if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
13964 {
13965 int i, len;
13966 tree expanded_types;
13967 /* Expand the TYPE_PACK_EXPANSION that provides the types for
13968 the parameters in this function parameter pack. */
13969 expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm),
13970 args, tf_error, NULL_TREE);
13971 len = TREE_VEC_LENGTH (expanded_types);
13972 for (i = 0; i < len; i++)
13973 {
13974 tree parm_type;
13975 tree attributes;
13976
13977 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
13978 /* Rename the parameter to include the index. */
13979 DECL_NAME (decl_parm) =
13980 make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
13981 parm_type = TREE_VEC_ELT (expanded_types, i);
13982 parm_type = type_decays_to (parm_type);
13983 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
13984 TREE_TYPE (decl_parm) = parm_type;
13985 attributes = DECL_ATTRIBUTES (pattern_parm);
13986 if (DECL_ATTRIBUTES (decl_parm) != attributes)
13987 {
13988 DECL_ATTRIBUTES (decl_parm) = attributes;
13989 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
13990 }
13991 decl_parm = TREE_CHAIN (decl_parm);
13992 }
13993 }
c7222c02
MM
13994 /* Merge additional specifiers from the CODE_PATTERN. */
13995 if (DECL_DECLARED_INLINE_P (code_pattern)
13996 && !DECL_DECLARED_INLINE_P (decl))
13997 DECL_DECLARED_INLINE_P (decl) = 1;
13998 if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
13999 DECL_INLINE (decl) = 1;
14000 }
14001 else if (TREE_CODE (decl) == VAR_DECL)
b794e321
MM
14002 DECL_INITIAL (decl) =
14003 tsubst_expr (DECL_INITIAL (code_pattern), args,
015c2c66
MM
14004 tf_error, DECL_TI_TEMPLATE (decl),
14005 /*integral_constant_expression_p=*/false);
c7222c02
MM
14006 else
14007 gcc_unreachable ();
36a117a5 14008
2b59fc25 14009 pop_access_scope (decl);
830bfa74
MM
14010}
14011
a723baf1
MM
14012/* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
14013 substituted to get DECL. */
14014
d58b7c2d 14015tree
a723baf1
MM
14016template_for_substitution (tree decl)
14017{
14018 tree tmpl = DECL_TI_TEMPLATE (decl);
14019
14020 /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
14021 for the instantiation. This is not always the most general
14022 template. Consider, for example:
14023
0cbd7506 14024 template <class T>
a723baf1 14025 struct S { template <class U> void f();
0cbd7506 14026 template <> void f<int>(); };
a723baf1
MM
14027
14028 and an instantiation of S<double>::f<int>. We want TD to be the
14029 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
14030 while (/* An instantiation cannot have a definition, so we need a
14031 more general template. */
14032 DECL_TEMPLATE_INSTANTIATION (tmpl)
14033 /* We must also deal with friend templates. Given:
14034
c8094d83 14035 template <class T> struct S {
a723baf1
MM
14036 template <class U> friend void f() {};
14037 };
14038
14039 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
14040 so far as the language is concerned, but that's still
14041 where we get the pattern for the instantiation from. On
14042 other hand, if the definition comes outside the class, say:
14043
c8094d83 14044 template <class T> struct S {
a723baf1
MM
14045 template <class U> friend void f();
14046 };
14047 template <class U> friend void f() {}
14048
14049 we don't need to look any further. That's what the check for
14050 DECL_INITIAL is for. */
14051 || (TREE_CODE (decl) == FUNCTION_DECL
14052 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
14053 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
14054 {
14055 /* The present template, TD, should not be a definition. If it
14056 were a definition, we should be using it! Note that we
14057 cannot restructure the loop to just keep going until we find
14058 a template with a definition, since that might go too far if
14059 a specialization was declared, but not defined. */
50bc768d
NS
14060 gcc_assert (TREE_CODE (decl) != VAR_DECL
14061 || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
c8094d83 14062
a723baf1
MM
14063 /* Fetch the more general template. */
14064 tmpl = DECL_TI_TEMPLATE (tmpl);
14065 }
14066
14067 return tmpl;
14068}
14069
16d53b64 14070/* Produce the definition of D, a _DECL generated from a template. If
838dfd8a 14071 DEFER_OK is nonzero, then we don't have to actually do the
415c974c
MA
14072 instantiation now; we just have to do it sometime. Normally it is
14073 an error if this is an explicit instantiation but D is undefined.
eba839f9
MM
14074 EXPL_INST_CLASS_MEM_P is true iff D is a member of an
14075 explicitly instantiated class template. */
f84b4be9 14076
a28e3c7f 14077tree
3db45ab5 14078instantiate_decl (tree d, int defer_ok,
eba839f9 14079 bool expl_inst_class_mem_p)
a28e3c7f 14080{
36a117a5 14081 tree tmpl = DECL_TI_TEMPLATE (d);
65f8b0fb
MM
14082 tree gen_args;
14083 tree args;
830bfa74 14084 tree td;
36a117a5
MM
14085 tree code_pattern;
14086 tree spec;
14087 tree gen_tmpl;
b794e321 14088 bool pattern_defined;
31a714f6 14089 int need_push;
82a98427 14090 location_t saved_loc = input_location;
912291ca 14091 int saved_in_system_header = in_system_header;
f7e4e484 14092 bool external_p;
c8094d83 14093
36a117a5
MM
14094 /* This function should only be used to instantiate templates for
14095 functions and static member variables. */
50bc768d
NS
14096 gcc_assert (TREE_CODE (d) == FUNCTION_DECL
14097 || TREE_CODE (d) == VAR_DECL);
36a117a5 14098
cec24319
MM
14099 /* Variables are never deferred; if instantiation is required, they
14100 are instantiated right away. That allows for better code in the
14101 case that an expression refers to the value of the variable --
14102 if the variable has a constant value the referring expression can
14103 take advantage of that fact. */
14104 if (TREE_CODE (d) == VAR_DECL)
14105 defer_ok = 0;
14106
db9b2174
MM
14107 /* Don't instantiate cloned functions. Instead, instantiate the
14108 functions they cloned. */
14109 if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
14110 d = DECL_CLONED_FUNCTION (d);
14111
fbf1c34b 14112 if (DECL_TEMPLATE_INSTANTIATED (d))
03d0f4af 14113 /* D has already been instantiated. It might seem reasonable to
dc957d14 14114 check whether or not D is an explicit instantiation, and, if so,
03d0f4af
MM
14115 stop here. But when an explicit instantiation is deferred
14116 until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
14117 is set, even though we still need to do the instantiation. */
36a117a5
MM
14118 return d;
14119
14120 /* If we already have a specialization of this declaration, then
14121 there's no reason to instantiate it. Note that
14122 retrieve_specialization gives us both instantiations and
14123 specializations, so we must explicitly check
14124 DECL_TEMPLATE_SPECIALIZATION. */
14125 gen_tmpl = most_general_template (tmpl);
65f8b0fb 14126 gen_args = DECL_TI_ARGS (d);
c7222c02
MM
14127 spec = retrieve_specialization (gen_tmpl, gen_args,
14128 /*class_specializations_p=*/false);
36a117a5
MM
14129 if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
14130 return spec;
14131
14132 /* This needs to happen before any tsubsting. */
14133 if (! push_tinst_level (d))
14134 return d;
14135
297a5329
JM
14136 timevar_push (TV_PARSE);
14137
4d85e00e 14138 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
a723baf1
MM
14139 for the instantiation. */
14140 td = template_for_substitution (d);
fee23f54 14141 code_pattern = DECL_TEMPLATE_RESULT (td);
27bb8339 14142
2d22db1f 14143 /* We should never be trying to instantiate a member of a class
3db45ab5 14144 template or partial specialization. */
2d22db1f 14145 gcc_assert (d != code_pattern);
3db45ab5 14146
76d3baad
KL
14147 if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
14148 || DECL_TEMPLATE_SPECIALIZATION (td))
649fc72d
NS
14149 /* In the case of a friend template whose definition is provided
14150 outside the class, we may have too many arguments. Drop the
76d3baad 14151 ones we don't need. The same is true for specializations. */
649fc72d
NS
14152 args = get_innermost_template_args
14153 (gen_args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td)));
14154 else
14155 args = gen_args;
65f8b0fb 14156
5566b478 14157 if (TREE_CODE (d) == FUNCTION_DECL)
39c76b4f 14158 pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
5566b478 14159 else
36a117a5 14160 pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
b794e321
MM
14161
14162 /* We may be in the middle of deferred access check. Disable it now. */
14163 push_deferring_access_checks (dk_no_deferred);
14164
4684cd27
MM
14165 /* Unless an explicit instantiation directive has already determined
14166 the linkage of D, remember that a definition is available for
14167 this entity. */
c8094d83 14168 if (pattern_defined
4684cd27
MM
14169 && !DECL_INTERFACE_KNOWN (d)
14170 && !DECL_NOT_REALLY_EXTERN (d))
14171 mark_definable (d);
de22184b 14172
f31686a3 14173 input_location = DECL_SOURCE_LOCATION (d);
912291ca 14174 in_system_header = DECL_IN_SYSTEM_HEADER (d);
de22184b 14175
eba839f9
MM
14176 /* If D is a member of an explicitly instantiated class template,
14177 and no definition is available, treat it like an implicit
3db45ab5
MS
14178 instantiation. */
14179 if (!pattern_defined && expl_inst_class_mem_p
14180 && DECL_EXPLICIT_INSTANTIATION (d))
5566b478 14181 {
4684cd27 14182 DECL_NOT_REALLY_EXTERN (d) = 0;
eba839f9 14183 DECL_INTERFACE_KNOWN (d) = 0;
4684cd27 14184 SET_DECL_IMPLICIT_INSTANTIATION (d);
5566b478
MS
14185 }
14186
4f2b0fb2
NS
14187 if (!defer_ok)
14188 {
14189 /* Recheck the substitutions to obtain any warning messages
14190 about ignoring cv qualifiers. */
14191 tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
14192 tree type = TREE_TYPE (gen);
14193
0e902d98 14194 /* Make sure that we can see identifiers, and compute access
2b59fc25
KL
14195 correctly. D is already the target FUNCTION_DECL with the
14196 right context. */
14197 push_access_scope (d);
0e902d98 14198
4f2b0fb2
NS
14199 if (TREE_CODE (gen) == FUNCTION_DECL)
14200 {
23fca1f5 14201 tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
5d80a306
DG
14202 tsubst_exception_specification (type, gen_args, tf_warning_or_error,
14203 d);
4f2b0fb2
NS
14204 /* Don't simply tsubst the function type, as that will give
14205 duplicate warnings about poor parameter qualifications.
14206 The function arguments are the same as the decl_arguments
c6002625 14207 without the top level cv qualifiers. */
4f2b0fb2
NS
14208 type = TREE_TYPE (type);
14209 }
23fca1f5 14210 tsubst (type, gen_args, tf_warning_or_error, d);
0e902d98 14211
2b59fc25 14212 pop_access_scope (d);
4f2b0fb2 14213 }
c8094d83 14214
f7e4e484
MM
14215 /* Check to see whether we know that this template will be
14216 instantiated in some other file, as with "extern template"
14217 extension. */
14218 external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
14219 /* In general, we do not instantiate such templates... */
14220 if (external_p
14221 /* ... but we instantiate inline functions so that we can inline
14222 them and ... */
14223 && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d))
14224 /* ... we instantiate static data members whose values are
14225 needed in integral constant expressions. */
3db45ab5 14226 && ! (TREE_CODE (d) == VAR_DECL
f7e4e484 14227 && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
930cd796 14228 goto out;
16d53b64 14229 /* Defer all other templates, unless we have been explicitly
f7e4e484
MM
14230 forbidden from doing so. */
14231 if (/* If there is no definition, we cannot instantiate the
14232 template. */
3db45ab5 14233 ! pattern_defined
f7e4e484
MM
14234 /* If it's OK to postpone instantiation, do so. */
14235 || defer_ok
14236 /* If this is a static data member that will be defined
14237 elsewhere, we don't want to instantiate the entire data
14238 member, but we do want to instantiate the initializer so that
14239 we can substitute that elsewhere. */
14240 || (external_p && TREE_CODE (d) == VAR_DECL))
16d53b64 14241 {
b794e321
MM
14242 /* The definition of the static data member is now required so
14243 we must substitute the initializer. */
14244 if (TREE_CODE (d) == VAR_DECL
3db45ab5 14245 && !DECL_INITIAL (d)
b794e321
MM
14246 && DECL_INITIAL (code_pattern))
14247 {
4bff36d3
MM
14248 tree ns;
14249 tree init;
14250
14251 ns = decl_namespace_context (d);
27a725e2 14252 push_nested_namespace (ns);
b794e321 14253 push_nested_class (DECL_CONTEXT (d));
3db45ab5 14254 init = tsubst_expr (DECL_INITIAL (code_pattern),
4bff36d3 14255 args,
015c2c66
MM
14256 tf_warning_or_error, NULL_TREE,
14257 /*integral_constant_expression_p=*/false);
d174af6c
MM
14258 cp_finish_decl (d, init, /*init_const_expr_p=*/false,
14259 /*asmspec_tree=*/NULL_TREE,
86414779 14260 LOOKUP_ONLYCONVERTING);
b794e321 14261 pop_nested_class ();
27a725e2 14262 pop_nested_namespace (ns);
b794e321
MM
14263 }
14264
f7e4e484
MM
14265 /* We restore the source position here because it's used by
14266 add_pending_template. */
82a98427 14267 input_location = saved_loc;
c27be9b9 14268
c8094d83 14269 if (at_eof && !pattern_defined
03d0f4af
MM
14270 && DECL_EXPLICIT_INSTANTIATION (d))
14271 /* [temp.explicit]
14272
14273 The definition of a non-exported function template, a
14274 non-exported member function template, or a non-exported
14275 member function or static data member of a class template
14276 shall be present in every translation unit in which it is
14277 explicitly instantiated. */
33bd39a2 14278 pedwarn
0f51ccfc 14279 ("explicit instantiation of %qD but no definition available", d);
03d0f4af 14280
f7e4e484
MM
14281 /* ??? Historically, we have instantiated inline functions, even
14282 when marked as "extern template". */
14283 if (!(external_p && TREE_CODE (d) == VAR_DECL))
14284 add_pending_template (d);
de22184b 14285 goto out;
5566b478 14286 }
4684cd27
MM
14287 /* Tell the repository that D is available in this translation unit
14288 -- and see if it is supposed to be instantiated here. */
14289 if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
14290 {
14291 /* In a PCH file, despite the fact that the repository hasn't
14292 requested instantiation in the PCH it is still possible that
14293 an instantiation will be required in a file that includes the
14294 PCH. */
14295 if (pch_file)
14296 add_pending_template (d);
14297 /* Instantiate inline functions so that the inliner can do its
14298 job, even though we'll not be emitting a copy of this
14299 function. */
c2a124b2 14300 if (!(TREE_CODE (d) == FUNCTION_DECL
c8094d83 14301 && flag_inline_trees
c2a124b2 14302 && DECL_DECLARED_INLINE_P (d)))
4684cd27
MM
14303 goto out;
14304 }
5566b478 14305
6de9cd9a 14306 need_push = !cfun || !global_bindings_p ();
31a714f6
MM
14307 if (need_push)
14308 push_to_top_level ();
414ea4aa 14309
66e0c440
KL
14310 /* Mark D as instantiated so that recursive calls to
14311 instantiate_decl do not try to instantiate it again. */
14312 DECL_TEMPLATE_INSTANTIATED (d) = 1;
14313
2b0a63a3
MM
14314 /* Regenerate the declaration in case the template has been modified
14315 by a subsequent redeclaration. */
14316 regenerate_decl_from_template (d, td);
4684cd27 14317
120722ac 14318 /* We already set the file and line above. Reset them now in case
6de9cd9a 14319 they changed as a result of calling regenerate_decl_from_template. */
f31686a3 14320 input_location = DECL_SOURCE_LOCATION (d);
5156628f 14321
5566b478
MS
14322 if (TREE_CODE (d) == VAR_DECL)
14323 {
e92fb501
MM
14324 tree init;
14325
1d62c33e
MM
14326 /* Clear out DECL_RTL; whatever was there before may not be right
14327 since we've reset the type of the declaration. */
14328 SET_DECL_RTL (d, NULL_RTX);
5566b478 14329 DECL_IN_AGGR_P (d) = 0;
ea56c40c 14330
e92fb501
MM
14331 /* The initializer is placed in DECL_INITIAL by
14332 regenerate_decl_from_template. Pull it out so that
14333 finish_decl can process it. */
14334 init = DECL_INITIAL (d);
14335 DECL_INITIAL (d) = NULL_TREE;
14336 DECL_INITIALIZED_P (d) = 0;
14337
4684cd27
MM
14338 /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
14339 initializer. That function will defer actual emission until
14340 we have a chance to determine linkage. */
14341 DECL_EXTERNAL (d) = 0;
14342
73a8adb6 14343 /* Enter the scope of D so that access-checking works correctly. */
4684cd27 14344 push_nested_class (DECL_CONTEXT (d));
e92fb501 14345 finish_decl (d, init, NULL_TREE);
73a8adb6 14346 pop_nested_class ();
5566b478
MS
14347 }
14348 else if (TREE_CODE (d) == FUNCTION_DECL)
14349 {
6bbf1598 14350 htab_t saved_local_specializations;
a723baf1
MM
14351 tree subst_decl;
14352 tree tmpl_parm;
14353 tree spec_parm;
6bbf1598
MM
14354
14355 /* Save away the current list, in case we are instantiating one
14356 template from within the body of another. */
14357 saved_local_specializations = local_specializations;
14358
6dfbb909 14359 /* Set up the list of local specializations. */
c8094d83 14360 local_specializations = htab_create (37,
69f794a7 14361 hash_local_specialization,
a723baf1 14362 eq_local_specializations,
6dfbb909
MM
14363 NULL);
14364
558475f0 14365 /* Set up context. */
058b15c1 14366 start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
5566b478 14367
a723baf1
MM
14368 /* Create substitution entries for the parameters. */
14369 subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
14370 tmpl_parm = DECL_ARGUMENTS (subst_decl);
14371 spec_parm = DECL_ARGUMENTS (d);
14372 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
14373 {
14374 register_local_specialization (spec_parm, tmpl_parm);
14375 spec_parm = skip_artificial_parms_for (d, spec_parm);
14376 tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
14377 }
5d80a306 14378 while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
a723baf1
MM
14379 {
14380 register_local_specialization (spec_parm, tmpl_parm);
14381 tmpl_parm = TREE_CHAIN (tmpl_parm);
14382 spec_parm = TREE_CHAIN (spec_parm);
14383 }
5d80a306
DG
14384 if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14385 {
14386 /* Collect all of the extra "packed" parameters into an
14387 argument pack. */
14388 tree parmvec;
14389 tree parmtypevec;
14390 tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
14391 tree argtypepack = make_node (TYPE_ARGUMENT_PACK);
14392 int i, len = 0;
14393 tree t;
14394
14395 /* Count how many parameters remain. */
14396 for (t = spec_parm; t; t = TREE_CHAIN (t))
14397 len++;
14398
14399 /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters. */
14400 parmvec = make_tree_vec (len);
14401 parmtypevec = make_tree_vec (len);
14402 for(i = 0; i < len; i++, spec_parm = TREE_CHAIN (spec_parm))
14403 {
14404 TREE_VEC_ELT (parmvec, i) = spec_parm;
14405 TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
14406 }
14407
14408 /* Build the argument packs. */
14409 SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
14410 SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
14411 TREE_TYPE (argpack) = argtypepack;
14412
14413 /* Register the (value) argument pack as a specialization of
14414 TMPL_PARM, then move on. */
14415 register_local_specialization (argpack, tmpl_parm);
14416 tmpl_parm = TREE_CHAIN (tmpl_parm);
14417 }
50bc768d 14418 gcc_assert (!spec_parm);
a723baf1 14419
558475f0
MM
14420 /* Substitute into the body of the function. */
14421 tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
015c2c66
MM
14422 tf_warning_or_error, tmpl,
14423 /*integral_constant_expression_p=*/false);
558475f0 14424
6dfbb909
MM
14425 /* We don't need the local specializations any more. */
14426 htab_delete (local_specializations);
6bbf1598 14427 local_specializations = saved_local_specializations;
6dfbb909 14428
4d6abc1c 14429 /* Finish the function. */
b2dd096b 14430 d = finish_function (0);
8cd2462c 14431 expand_or_defer_fn (d);
5566b478
MS
14432 }
14433
971cbc14
MM
14434 /* We're not deferring instantiation any more. */
14435 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
14436
31a714f6
MM
14437 if (need_push)
14438 pop_from_top_level ();
414ea4aa 14439
de22184b 14440out:
82a98427 14441 input_location = saved_loc;
912291ca 14442 in_system_header = saved_in_system_header;
7d021397 14443 pop_deferring_access_checks ();
5566b478 14444 pop_tinst_level ();
a28e3c7f 14445
297a5329
JM
14446 timevar_pop (TV_PARSE);
14447
a28e3c7f
MS
14448 return d;
14449}
5566b478 14450
0aafb128 14451/* Run through the list of templates that we wish we could
35046a54
KL
14452 instantiate, and instantiate any we can. RETRIES is the
14453 number of times we retry pending template instantiation. */
0aafb128 14454
35046a54
KL
14455void
14456instantiate_pending_templates (int retries)
0aafb128
MM
14457{
14458 tree *t;
46ccf50a 14459 tree last = NULL_TREE;
0aafb128 14460 int reconsider;
aad626f7 14461 location_t saved_loc = input_location;
12af7ba3 14462 int saved_in_system_header = in_system_header;
35046a54
KL
14463
14464 /* Instantiating templates may trigger vtable generation. This in turn
14465 may require further template instantiations. We place a limit here
14466 to avoid infinite loop. */
14467 if (pending_templates && retries >= max_tinst_depth)
14468 {
96c993a8
JM
14469 tree decl = TREE_VALUE (pending_templates);
14470
dee15844 14471 error ("template instantiation depth exceeds maximum of %d"
96c993a8
JM
14472 " instantiating %q+D, possibly from virtual table generation"
14473 " (use -ftemplate-depth-NN to increase the maximum)",
14474 max_tinst_depth, decl);
14475 if (TREE_CODE (decl) == FUNCTION_DECL)
14476 /* Pretend that we defined it. */
14477 DECL_INITIAL (decl) = error_mark_node;
35046a54
KL
14478 return;
14479 }
14480
c8094d83 14481 do
0aafb128
MM
14482 {
14483 reconsider = 0;
14484
14485 t = &pending_templates;
14486 while (*t)
14487 {
0aafb128
MM
14488 tree instantiation = TREE_VALUE (*t);
14489
3ae18eaf 14490 reopen_tinst_level (TREE_PURPOSE (*t));
0aafb128 14491
2f939d94 14492 if (TYPE_P (instantiation))
0aafb128
MM
14493 {
14494 tree fn;
14495
d0f062fb 14496 if (!COMPLETE_TYPE_P (instantiation))
0aafb128
MM
14497 {
14498 instantiate_class_template (instantiation);
14499 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
c8094d83 14500 for (fn = TYPE_METHODS (instantiation);
0aafb128
MM
14501 fn;
14502 fn = TREE_CHAIN (fn))
14503 if (! DECL_ARTIFICIAL (fn))
3db45ab5 14504 instantiate_decl (fn,
eba839f9
MM
14505 /*defer_ok=*/0,
14506 /*expl_inst_class_mem_p=*/false);
d0f062fb 14507 if (COMPLETE_TYPE_P (instantiation))
35046a54 14508 reconsider = 1;
0aafb128
MM
14509 }
14510
d0f062fb 14511 if (COMPLETE_TYPE_P (instantiation))
0aafb128
MM
14512 /* If INSTANTIATION has been instantiated, then we don't
14513 need to consider it again in the future. */
14514 *t = TREE_CHAIN (*t);
46ccf50a
JM
14515 else
14516 {
14517 last = *t;
14518 t = &TREE_CHAIN (*t);
14519 }
0aafb128
MM
14520 }
14521 else
14522 {
16d53b64 14523 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
0aafb128
MM
14524 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
14525 {
3db45ab5 14526 instantiation
eba839f9
MM
14527 = instantiate_decl (instantiation,
14528 /*defer_ok=*/0,
14529 /*expl_inst_class_mem_p=*/false);
0aafb128 14530 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
35046a54 14531 reconsider = 1;
0aafb128
MM
14532 }
14533
16d53b64 14534 if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
0aafb128
MM
14535 || DECL_TEMPLATE_INSTANTIATED (instantiation))
14536 /* If INSTANTIATION has been instantiated, then we don't
14537 need to consider it again in the future. */
14538 *t = TREE_CHAIN (*t);
46ccf50a
JM
14539 else
14540 {
14541 last = *t;
14542 t = &TREE_CHAIN (*t);
14543 }
0aafb128 14544 }
84e5ca0f
NS
14545 tinst_depth = 0;
14546 current_tinst_level = NULL_TREE;
0aafb128 14547 }
46ccf50a 14548 last_pending_template = last;
c8094d83 14549 }
0aafb128
MM
14550 while (reconsider);
14551
aad626f7 14552 input_location = saved_loc;
12af7ba3 14553 in_system_header = saved_in_system_header;
0aafb128
MM
14554}
14555
fd74ca0b
MM
14556/* Substitute ARGVEC into T, which is a list of initializers for
14557 either base class or a non-static data member. The TREE_PURPOSEs
14558 are DECLs, and the TREE_VALUEs are the initializer values. Used by
14559 instantiate_decl. */
4393e105 14560
824b9a4c 14561static tree
3a978d72 14562tsubst_initializer_list (tree t, tree argvec)
5566b478 14563{
2282d28d 14564 tree inits = NULL_TREE;
5566b478
MS
14565
14566 for (; t; t = TREE_CHAIN (t))
14567 {
fd74ca0b
MM
14568 tree decl;
14569 tree init;
5d80a306
DG
14570 tree expanded_bases = NULL_TREE;
14571 tree expanded_arguments = NULL_TREE;
14572 int i, len = 1;
fd74ca0b 14573
5d80a306
DG
14574 if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
14575 {
14576 tree expr;
14577 tree arg;
14578
14579 /* Expand the base class expansion type into separate base
14580 classes. */
14581 expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
14582 tf_warning_or_error,
14583 NULL_TREE);
14584 if (expanded_bases == error_mark_node)
14585 continue;
14586
14587 /* We'll be building separate TREE_LISTs of arguments for
14588 each base. */
14589 len = TREE_VEC_LENGTH (expanded_bases);
14590 expanded_arguments = make_tree_vec (len);
14591 for (i = 0; i < len; i++)
14592 TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
14593
14594 /* Build a dummy EXPR_PACK_EXPANSION that will be used to
14595 expand each argument in the TREE_VALUE of t. */
14596 expr = make_node (EXPR_PACK_EXPANSION);
14597 PACK_EXPANSION_PARAMETER_PACKS (expr) =
14598 PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
14599
14600 /* Substitute parameter packs into each argument in the
14601 TREE_LIST. */
14602 in_base_initializer = 1;
14603 for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
14604 {
14605 tree expanded_exprs;
14606
14607 /* Expand the argument. */
14608 SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
14609 expanded_exprs = tsubst_pack_expansion (expr, argvec,
14610 tf_warning_or_error,
14611 NULL_TREE);
14612
14613 /* Prepend each of the expanded expressions to the
14614 corresponding TREE_LIST in EXPANDED_ARGUMENTS. */
14615 for (i = 0; i < len; i++)
14616 {
14617 TREE_VEC_ELT (expanded_arguments, i) =
14618 tree_cons (NULL_TREE, TREE_VEC_ELT (expanded_exprs, i),
14619 TREE_VEC_ELT (expanded_arguments, i));
14620 }
14621 }
14622 in_base_initializer = 0;
14623
14624 /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
14625 since we built them backwards. */
14626 for (i = 0; i < len; i++)
14627 {
14628 TREE_VEC_ELT (expanded_arguments, i) =
14629 nreverse (TREE_VEC_ELT (expanded_arguments, i));
14630 }
14631 }
1f5a253a 14632
5d80a306
DG
14633 for (i = 0; i < len; ++i)
14634 {
14635 if (expanded_bases)
14636 {
14637 decl = TREE_VEC_ELT (expanded_bases, i);
14638 decl = expand_member_init (decl);
14639 init = TREE_VEC_ELT (expanded_arguments, i);
14640 }
14641 else
14642 {
14643 decl = tsubst_copy (TREE_PURPOSE (t), argvec,
14644 tf_warning_or_error, NULL_TREE);
14645
14646 decl = expand_member_init (decl);
14647 if (decl && !DECL_P (decl))
14648 in_base_initializer = 1;
14649
14650 init = tsubst_expr (TREE_VALUE (t), argvec,
14651 tf_warning_or_error, NULL_TREE,
14652 /*integral_constant_expression_p=*/false);
14653 in_base_initializer = 0;
14654 }
14655
14656 if (decl)
14657 {
14658 init = build_tree_list (decl, init);
14659 TREE_CHAIN (init) = inits;
14660 inits = init;
14661 }
14662 }
5566b478 14663 }
2282d28d 14664 return inits;
5566b478
MS
14665}
14666
61a127b3
MM
14667/* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
14668
14669static void
3a978d72 14670set_current_access_from_decl (tree decl)
61a127b3
MM
14671{
14672 if (TREE_PRIVATE (decl))
14673 current_access_specifier = access_private_node;
14674 else if (TREE_PROTECTED (decl))
14675 current_access_specifier = access_protected_node;
14676 else
14677 current_access_specifier = access_public_node;
14678}
14679
dbfe2124
MM
14680/* Instantiate an enumerated type. TAG is the template type, NEWTAG
14681 is the instantiation (which should have been created with
14682 start_enum) and ARGS are the template arguments to use. */
b87692e5 14683
dbfe2124 14684static void
3a978d72 14685tsubst_enum (tree tag, tree newtag, tree args)
b87692e5 14686{
dbfe2124 14687 tree e;
b87692e5
MS
14688
14689 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
14690 {
61a127b3 14691 tree value;
7b6d72fc
MM
14692 tree decl;
14693
14694 decl = TREE_VALUE (e);
61a127b3
MM
14695 /* Note that in a template enum, the TREE_VALUE is the
14696 CONST_DECL, not the corresponding INTEGER_CST. */
c8094d83 14697 value = tsubst_expr (DECL_INITIAL (decl),
015c2c66
MM
14698 args, tf_warning_or_error, NULL_TREE,
14699 /*integral_constant_expression_p=*/true);
61a127b3
MM
14700
14701 /* Give this enumeration constant the correct access. */
7b6d72fc 14702 set_current_access_from_decl (decl);
61a127b3
MM
14703
14704 /* Actually build the enumerator itself. */
c8094d83 14705 build_enumerator (DECL_NAME (decl), value, newtag);
dbfe2124 14706 }
b3d5a58b 14707
219670f1 14708 finish_enum (newtag);
f31686a3
RH
14709 DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
14710 = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
b87692e5 14711}
36a117a5 14712
1f6e1acc
AS
14713/* DECL is a FUNCTION_DECL that is a template specialization. Return
14714 its type -- but without substituting the innermost set of template
14715 arguments. So, innermost set of template parameters will appear in
5c74d5b0 14716 the type. */
1f6e1acc 14717
c8094d83 14718tree
3a978d72 14719get_mostly_instantiated_function_type (tree decl)
1f6e1acc 14720{
1f6e1acc
AS
14721 tree fn_type;
14722 tree tmpl;
14723 tree targs;
14724 tree tparms;
14725 int parm_depth;
14726
14727 tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
14728 targs = DECL_TI_ARGS (decl);
14729 tparms = DECL_TEMPLATE_PARMS (tmpl);
14730 parm_depth = TMPL_PARMS_DEPTH (tparms);
14731
14732 /* There should be as many levels of arguments as there are levels
14733 of parameters. */
50bc768d 14734 gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
1f6e1acc
AS
14735
14736 fn_type = TREE_TYPE (tmpl);
1f6e1acc
AS
14737
14738 if (parm_depth == 1)
14739 /* No substitution is necessary. */
14740 ;
14741 else
14742 {
fae6e246 14743 int i, save_access_control;
1f6e1acc
AS
14744 tree partial_args;
14745
14746 /* Replace the innermost level of the TARGS with NULL_TREEs to
dc957d14 14747 let tsubst know not to substitute for those parameters. */
1f6e1acc
AS
14748 partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
14749 for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
14750 SET_TMPL_ARGS_LEVEL (partial_args, i,
14751 TMPL_ARGS_LEVEL (targs, i));
14752 SET_TMPL_ARGS_LEVEL (partial_args,
14753 TMPL_ARGS_DEPTH (targs),
14754 make_tree_vec (DECL_NTPARMS (tmpl)));
14755
fae6e246
RH
14756 /* Disable access control as this function is used only during
14757 name-mangling. */
14758 save_access_control = flag_access_control;
14759 flag_access_control = 0;
5c74d5b0 14760
9579624e 14761 ++processing_template_decl;
1f6e1acc
AS
14762 /* Now, do the (partial) substitution to figure out the
14763 appropriate function type. */
c2ea3a40 14764 fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
9579624e 14765 --processing_template_decl;
1f6e1acc
AS
14766
14767 /* Substitute into the template parameters to obtain the real
14768 innermost set of parameters. This step is important if the
14769 innermost set of template parameters contains value
14770 parameters whose types depend on outer template parameters. */
14771 TREE_VEC_LENGTH (partial_args)--;
c2ea3a40 14772 tparms = tsubst_template_parms (tparms, partial_args, tf_error);
1f6e1acc 14773
fae6e246 14774 flag_access_control = save_access_control;
5c74d5b0 14775 }
1f6e1acc
AS
14776
14777 return fn_type;
14778}
669ec2b4 14779
cb753e49 14780/* Return truthvalue if we're processing a template different from
dc957d14 14781 the last one involved in diagnostics. */
cb753e49 14782int
3a978d72 14783problematic_instantiation_changed (void)
cb753e49
GDR
14784{
14785 return last_template_error_tick != tinst_level_tick;
14786}
14787
14788/* Remember current template involved in diagnostics. */
14789void
3a978d72 14790record_last_problematic_instantiation (void)
cb753e49
GDR
14791{
14792 last_template_error_tick = tinst_level_tick;
14793}
14794
14795tree
3a978d72 14796current_instantiation (void)
cb753e49
GDR
14797{
14798 return current_tinst_level;
14799}
db3f4e4e
NS
14800
14801/* [temp.param] Check that template non-type parm TYPE is of an allowable
838dfd8a 14802 type. Return zero for ok, nonzero for disallowed. Issue error and
c2ea3a40 14803 warning messages under control of COMPLAIN. */
db3f4e4e
NS
14804
14805static int
3a978d72 14806invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
db3f4e4e
NS
14807{
14808 if (INTEGRAL_TYPE_P (type))
14809 return 0;
14810 else if (POINTER_TYPE_P (type))
14811 return 0;
a5ac359a 14812 else if (TYPE_PTR_TO_MEMBER_P (type))
db3f4e4e 14813 return 0;
db3f4e4e
NS
14814 else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
14815 return 0;
14816 else if (TREE_CODE (type) == TYPENAME_TYPE)
14817 return 0;
c8094d83 14818
c2ea3a40 14819 if (complain & tf_error)
0f51ccfc 14820 error ("%q#T is not a valid type for a template constant parameter", type);
db3f4e4e
NS
14821 return 1;
14822}
e2500fed 14823
5552b43c
MM
14824/* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
14825 Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
1fb3244a 14826
5552b43c
MM
14827static bool
14828dependent_type_p_r (tree type)
1fb3244a
MM
14829{
14830 tree scope;
14831
1fb3244a
MM
14832 /* [temp.dep.type]
14833
14834 A type is dependent if it is:
14835
6615c446
JO
14836 -- a template parameter. Template template parameters are types
14837 for us (since TYPE_P holds true for them) so we handle
14838 them here. */
c8094d83 14839 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
6bf92cb6 14840 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
1fb3244a
MM
14841 return true;
14842 /* -- a qualified-id with a nested-name-specifier which contains a
0cbd7506 14843 class-name that names a dependent type or whose unqualified-id
1fb3244a
MM
14844 names a dependent type. */
14845 if (TREE_CODE (type) == TYPENAME_TYPE)
14846 return true;
14847 /* -- a cv-qualified type where the cv-unqualified type is
0cbd7506 14848 dependent. */
1fb3244a
MM
14849 type = TYPE_MAIN_VARIANT (type);
14850 /* -- a compound type constructed from any dependent type. */
a5ac359a 14851 if (TYPE_PTR_TO_MEMBER_P (type))
1fb3244a 14852 return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
c8094d83 14853 || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
1fb3244a
MM
14854 (type)));
14855 else if (TREE_CODE (type) == POINTER_TYPE
14856 || TREE_CODE (type) == REFERENCE_TYPE)
14857 return dependent_type_p (TREE_TYPE (type));
14858 else if (TREE_CODE (type) == FUNCTION_TYPE
14859 || TREE_CODE (type) == METHOD_TYPE)
14860 {
14861 tree arg_type;
14862
14863 if (dependent_type_p (TREE_TYPE (type)))
14864 return true;
c8094d83
MS
14865 for (arg_type = TYPE_ARG_TYPES (type);
14866 arg_type;
1fb3244a
MM
14867 arg_type = TREE_CHAIN (arg_type))
14868 if (dependent_type_p (TREE_VALUE (arg_type)))
14869 return true;
14870 return false;
14871 }
14872 /* -- an array type constructed from any dependent type or whose
0cbd7506 14873 size is specified by a constant expression that is
1fb3244a
MM
14874 value-dependent. */
14875 if (TREE_CODE (type) == ARRAY_TYPE)
14876 {
14877 if (TYPE_DOMAIN (type)
c8094d83 14878 && ((value_dependent_expression_p
1fb3244a
MM
14879 (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
14880 || (type_dependent_expression_p
14881 (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
14882 return true;
14883 return dependent_type_p (TREE_TYPE (type));
14884 }
c8094d83 14885
1fb3244a 14886 /* -- a template-id in which either the template name is a template
86306a6b
NS
14887 parameter ... */
14888 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
1fb3244a 14889 return true;
86306a6b 14890 /* ... or any of the template arguments is a dependent type or
04c06002 14891 an expression that is type-dependent or value-dependent. */
86306a6b 14892 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
c8094d83 14893 && (any_dependent_template_arguments_p
7e99327d 14894 (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
1fb3244a 14895 return true;
c8094d83 14896
1fb3244a
MM
14897 /* All TYPEOF_TYPEs are dependent; if the argument of the `typeof'
14898 expression is not type-dependent, then it should already been
14899 have resolved. */
14900 if (TREE_CODE (type) == TYPEOF_TYPE)
14901 return true;
c8094d83 14902
5d80a306
DG
14903 /* A template argument pack is dependent if any of its packed
14904 arguments are. */
14905 if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
14906 {
14907 tree args = ARGUMENT_PACK_ARGS (type);
14908 int i, len = TREE_VEC_LENGTH (args);
14909 for (i = 0; i < len; ++i)
14910 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
14911 return true;
14912 }
14913
14914 /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
14915 be template parameters. */
14916 if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
14917 return true;
14918
1fb3244a
MM
14919 /* The standard does not specifically mention types that are local
14920 to template functions or local classes, but they should be
14921 considered dependent too. For example:
14922
c8094d83 14923 template <int I> void f() {
0cbd7506 14924 enum E { a = I };
1fb3244a
MM
14925 S<sizeof (E)> s;
14926 }
14927
14928 The size of `E' cannot be known until the value of `I' has been
14929 determined. Therefore, `E' must be considered dependent. */
14930 scope = TYPE_CONTEXT (type);
14931 if (scope && TYPE_P (scope))
14932 return dependent_type_p (scope);
14933 else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
14934 return type_dependent_expression_p (scope);
14935
14936 /* Other types are non-dependent. */
14937 return false;
14938}
14939
5552b43c
MM
14940/* Returns TRUE if TYPE is dependent, in the sense of
14941 [temp.dep.type]. */
14942
14943bool
14944dependent_type_p (tree type)
14945{
14946 /* If there are no template parameters in scope, then there can't be
14947 any dependent types. */
14948 if (!processing_template_decl)
e7e93965
MM
14949 {
14950 /* If we are not processing a template, then nobody should be
14951 providing us with a dependent type. */
14952 gcc_assert (type);
14953 gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM);
14954 return false;
14955 }
5552b43c
MM
14956
14957 /* If the type is NULL, we have not computed a type for the entity
14958 in question; in that case, the type is dependent. */
14959 if (!type)
14960 return true;
14961
14962 /* Erroneous types can be considered non-dependent. */
14963 if (type == error_mark_node)
14964 return false;
14965
14966 /* If we have not already computed the appropriate value for TYPE,
14967 do so now. */
14968 if (!TYPE_DEPENDENT_P_VALID (type))
14969 {
14970 TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
14971 TYPE_DEPENDENT_P_VALID (type) = 1;
14972 }
14973
14974 return TYPE_DEPENDENT_P (type);
14975}
14976
8d83f792
MM
14977/* Returns TRUE if EXPRESSION is dependent, according to CRITERION. */
14978
14979static bool
14980dependent_scope_ref_p (tree expression, bool criterion (tree))
14981{
14982 tree scope;
14983 tree name;
14984
50bc768d 14985 gcc_assert (TREE_CODE (expression) == SCOPE_REF);
8d83f792
MM
14986
14987 if (!TYPE_P (TREE_OPERAND (expression, 0)))
14988 return true;
14989
14990 scope = TREE_OPERAND (expression, 0);
14991 name = TREE_OPERAND (expression, 1);
14992
14993 /* [temp.dep.expr]
14994
14995 An id-expression is type-dependent if it contains a
14996 nested-name-specifier that contains a class-name that names a
14997 dependent type. */
14998 /* The suggested resolution to Core Issue 2 implies that if the
14999 qualifying type is the current class, then we must peek
15000 inside it. */
c8094d83 15001 if (DECL_P (name)
8d83f792
MM
15002 && currently_open_class (scope)
15003 && !criterion (name))
15004 return false;
15005 if (dependent_type_p (scope))
15006 return true;
15007
15008 return false;
15009}
15010
20929c7f 15011/* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
fe89d797
MM
15012 [temp.dep.constexpr]. EXPRESSION is already known to be a constant
15013 expression. */
1fb3244a 15014
14d22dd6 15015bool
1fb3244a
MM
15016value_dependent_expression_p (tree expression)
15017{
15018 if (!processing_template_decl)
15019 return false;
15020
15021 /* A name declared with a dependent type. */
7416ab02 15022 if (DECL_P (expression) && type_dependent_expression_p (expression))
1fb3244a 15023 return true;
c8094d83 15024
7416ab02
NS
15025 switch (TREE_CODE (expression))
15026 {
15027 case IDENTIFIER_NODE:
15028 /* A name that has not been looked up -- must be dependent. */
15029 return true;
15030
15031 case TEMPLATE_PARM_INDEX:
15032 /* A non-type template parm. */
15033 return true;
15034
15035 case CONST_DECL:
15036 /* A non-type template parm. */
15037 if (DECL_TEMPLATE_PARM_P (expression))
d17811fd 15038 return true;
7416ab02 15039 return false;
d36d5600 15040
7416ab02 15041 case VAR_DECL:
c8094d83 15042 /* A constant with integral or enumeration type and is initialized
0cbd7506 15043 with an expression that is value-dependent. */
7416ab02
NS
15044 if (DECL_INITIAL (expression)
15045 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
15046 && value_dependent_expression_p (DECL_INITIAL (expression)))
15047 return true;
15048 return false;
15049
15050 case DYNAMIC_CAST_EXPR:
15051 case STATIC_CAST_EXPR:
15052 case CONST_CAST_EXPR:
15053 case REINTERPRET_CAST_EXPR:
15054 case CAST_EXPR:
15055 /* These expressions are value-dependent if the type to which
0cbd7506
MS
15056 the cast occurs is dependent or the expression being casted
15057 is value-dependent. */
7416ab02
NS
15058 {
15059 tree type = TREE_TYPE (expression);
c8094d83 15060
7416ab02
NS
15061 if (dependent_type_p (type))
15062 return true;
c8094d83 15063
7416ab02
NS
15064 /* A functional cast has a list of operands. */
15065 expression = TREE_OPERAND (expression, 0);
15066 if (!expression)
15067 {
15068 /* If there are no operands, it must be an expression such
15069 as "int()". This should not happen for aggregate types
15070 because it would form non-constant expressions. */
15071 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
c8094d83 15072
7416ab02
NS
15073 return false;
15074 }
c8094d83 15075
7416ab02
NS
15076 if (TREE_CODE (expression) == TREE_LIST)
15077 {
15078 for (; expression; expression = TREE_CHAIN (expression))
d17811fd
MM
15079 if (value_dependent_expression_p (TREE_VALUE (expression)))
15080 return true;
7416ab02
NS
15081 return false;
15082 }
c8094d83 15083
d17811fd 15084 return value_dependent_expression_p (expression);
7416ab02 15085 }
c8094d83 15086
7416ab02
NS
15087 case SIZEOF_EXPR:
15088 case ALIGNOF_EXPR:
15089 /* A `sizeof' expression is value-dependent if the operand is
5d80a306 15090 type-dependent or is a pack expansion. */
d17811fd 15091 expression = TREE_OPERAND (expression, 0);
5d80a306
DG
15092 if (PACK_EXPANSION_P (expression))
15093 return true;
15094 else if (TYPE_P (expression))
d17811fd
MM
15095 return dependent_type_p (expression);
15096 return type_dependent_expression_p (expression);
100d337a 15097
7416ab02
NS
15098 case SCOPE_REF:
15099 return dependent_scope_ref_p (expression, value_dependent_expression_p);
100d337a 15100
7416ab02
NS
15101 case COMPONENT_REF:
15102 return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
15103 || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
15104
15105 case CALL_EXPR:
fe89d797
MM
15106 /* A CALL_EXPR may appear in a constant expression if it is a
15107 call to a builtin function, e.g., __builtin_constant_p. All
15108 such calls are value-dependent. */
15109 return true;
7416ab02 15110
5d80a306
DG
15111 case NONTYPE_ARGUMENT_PACK:
15112 /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
15113 is value-dependent. */
15114 {
15115 tree values = ARGUMENT_PACK_ARGS (expression);
15116 int i, len = TREE_VEC_LENGTH (values);
15117
15118 for (i = 0; i < len; ++i)
15119 if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
15120 return true;
15121
15122 return false;
15123 }
15124
cb68ec50
PC
15125 case TRAIT_EXPR:
15126 {
15127 tree type2 = TRAIT_EXPR_TYPE2 (expression);
15128 return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
15129 || (type2 ? dependent_type_p (type2) : false));
15130 }
15131
f01ec37d
SM
15132 case MODOP_EXPR:
15133 return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
15134 || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
15135
7416ab02
NS
15136 default:
15137 /* A constant expression is value-dependent if any subexpression is
0cbd7506 15138 value-dependent. */
1fb3244a
MM
15139 switch (TREE_CODE_CLASS (TREE_CODE (expression)))
15140 {
7416ab02 15141 case tcc_reference:
6615c446 15142 case tcc_unary:
c8094d83 15143 return (value_dependent_expression_p
1fb3244a 15144 (TREE_OPERAND (expression, 0)));
c8094d83 15145
6615c446
JO
15146 case tcc_comparison:
15147 case tcc_binary:
c8094d83 15148 return ((value_dependent_expression_p
1fb3244a 15149 (TREE_OPERAND (expression, 0)))
c8094d83 15150 || (value_dependent_expression_p
1fb3244a 15151 (TREE_OPERAND (expression, 1))));
c8094d83 15152
6615c446 15153 case tcc_expression:
5039610b 15154 case tcc_vl_exp:
1fb3244a
MM
15155 {
15156 int i;
5039610b 15157 for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
14d22dd6
MM
15158 /* In some cases, some of the operands may be missing.
15159 (For example, in the case of PREDECREMENT_EXPR, the
15160 amount to increment by may be missing.) That doesn't
15161 make the expression dependent. */
15162 if (TREE_OPERAND (expression, i)
15163 && (value_dependent_expression_p
15164 (TREE_OPERAND (expression, i))))
1fb3244a
MM
15165 return true;
15166 return false;
15167 }
c8094d83 15168
6615c446 15169 default:
7416ab02 15170 break;
1fb3244a
MM
15171 }
15172 }
c8094d83 15173
1fb3244a
MM
15174 /* The expression is not value-dependent. */
15175 return false;
15176}
15177
15178/* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
15179 [temp.dep.expr]. */
15180
15181bool
3a978d72 15182type_dependent_expression_p (tree expression)
1fb3244a
MM
15183{
15184 if (!processing_template_decl)
15185 return false;
15186
7efa3e22
NS
15187 if (expression == error_mark_node)
15188 return false;
10b1d5e7
MM
15189
15190 /* An unresolved name is always dependent. */
b01e6d2b
JM
15191 if (TREE_CODE (expression) == IDENTIFIER_NODE
15192 || TREE_CODE (expression) == USING_DECL)
10b1d5e7 15193 return true;
c8094d83 15194
1fb3244a
MM
15195 /* Some expression forms are never type-dependent. */
15196 if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
15197 || TREE_CODE (expression) == SIZEOF_EXPR
15198 || TREE_CODE (expression) == ALIGNOF_EXPR
cb68ec50 15199 || TREE_CODE (expression) == TRAIT_EXPR
1fb3244a
MM
15200 || TREE_CODE (expression) == TYPEID_EXPR
15201 || TREE_CODE (expression) == DELETE_EXPR
15202 || TREE_CODE (expression) == VEC_DELETE_EXPR
15203 || TREE_CODE (expression) == THROW_EXPR)
15204 return false;
15205
15206 /* The types of these expressions depends only on the type to which
15207 the cast occurs. */
15208 if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
15209 || TREE_CODE (expression) == STATIC_CAST_EXPR
15210 || TREE_CODE (expression) == CONST_CAST_EXPR
15211 || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
15212 || TREE_CODE (expression) == CAST_EXPR)
15213 return dependent_type_p (TREE_TYPE (expression));
d17811fd 15214
1fb3244a
MM
15215 /* The types of these expressions depends only on the type created
15216 by the expression. */
d17811fd
MM
15217 if (TREE_CODE (expression) == NEW_EXPR
15218 || TREE_CODE (expression) == VEC_NEW_EXPR)
09d2f85f
KL
15219 {
15220 /* For NEW_EXPR tree nodes created inside a template, either
15221 the object type itself or a TREE_LIST may appear as the
15222 operand 1. */
15223 tree type = TREE_OPERAND (expression, 1);
15224 if (TREE_CODE (type) == TREE_LIST)
15225 /* This is an array type. We need to check array dimensions
15226 as well. */
15227 return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
15228 || value_dependent_expression_p
15229 (TREE_OPERAND (TREE_VALUE (type), 1));
15230 else
15231 return dependent_type_p (type);
15232 }
1fb3244a 15233
5a57f1b2
JM
15234 if (TREE_CODE (expression) == SCOPE_REF
15235 && dependent_scope_ref_p (expression,
15236 type_dependent_expression_p))
15237 return true;
15238
15239 if (TREE_CODE (expression) == FUNCTION_DECL
15240 && DECL_LANG_SPECIFIC (expression)
15241 && DECL_TEMPLATE_INFO (expression)
15242 && (any_dependent_template_arguments_p
15243 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
15244 return true;
15245
15246 if (TREE_CODE (expression) == TEMPLATE_DECL
15247 && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
15248 return false;
15249
d17811fd
MM
15250 if (TREE_TYPE (expression) == unknown_type_node)
15251 {
15252 if (TREE_CODE (expression) == ADDR_EXPR)
15253 return type_dependent_expression_p (TREE_OPERAND (expression, 0));
c353b8e3
MM
15254 if (TREE_CODE (expression) == COMPONENT_REF
15255 || TREE_CODE (expression) == OFFSET_REF)
6cb89308
NS
15256 {
15257 if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
15258 return true;
15259 expression = TREE_OPERAND (expression, 1);
15260 if (TREE_CODE (expression) == IDENTIFIER_NODE)
15261 return false;
15262 }
3601f003
KL
15263 /* SCOPE_REF with non-null TREE_TYPE is always non-dependent. */
15264 if (TREE_CODE (expression) == SCOPE_REF)
15265 return false;
c8094d83 15266
d17811fd
MM
15267 if (TREE_CODE (expression) == BASELINK)
15268 expression = BASELINK_FUNCTIONS (expression);
c8094d83 15269
d17811fd
MM
15270 if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
15271 {
ee3071ef
NS
15272 if (any_dependent_template_arguments_p
15273 (TREE_OPERAND (expression, 1)))
d17811fd
MM
15274 return true;
15275 expression = TREE_OPERAND (expression, 0);
15276 }
b207d6e2
MM
15277 gcc_assert (TREE_CODE (expression) == OVERLOAD
15278 || TREE_CODE (expression) == FUNCTION_DECL);
c8094d83 15279
315fb5db 15280 while (expression)
d17811fd 15281 {
315fb5db
NS
15282 if (type_dependent_expression_p (OVL_CURRENT (expression)))
15283 return true;
15284 expression = OVL_NEXT (expression);
d17811fd 15285 }
315fb5db 15286 return false;
d17811fd 15287 }
c8094d83 15288
3ce5fa4f 15289 gcc_assert (TREE_CODE (expression) != TYPE_DECL);
3db45ab5 15290
1fb3244a
MM
15291 return (dependent_type_p (TREE_TYPE (expression)));
15292}
15293
d17811fd
MM
15294/* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
15295 contains a type-dependent expression. */
1fb3244a
MM
15296
15297bool
d17811fd
MM
15298any_type_dependent_arguments_p (tree args)
15299{
15300 while (args)
15301 {
7efa3e22
NS
15302 tree arg = TREE_VALUE (args);
15303
15304 if (type_dependent_expression_p (arg))
d17811fd
MM
15305 return true;
15306 args = TREE_CHAIN (args);
15307 }
15308 return false;
15309}
15310
15311/* Returns TRUE if the ARG (a template argument) is dependent. */
15312
5d80a306 15313bool
1fb3244a
MM
15314dependent_template_arg_p (tree arg)
15315{
15316 if (!processing_template_decl)
15317 return false;
15318
15319 if (TREE_CODE (arg) == TEMPLATE_DECL
15320 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15321 return dependent_template_p (arg);
5d80a306
DG
15322 else if (ARGUMENT_PACK_P (arg))
15323 {
15324 tree args = ARGUMENT_PACK_ARGS (arg);
15325 int i, len = TREE_VEC_LENGTH (args);
15326 for (i = 0; i < len; ++i)
15327 {
15328 if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15329 return true;
15330 }
15331
15332 return false;
15333 }
1fb3244a
MM
15334 else if (TYPE_P (arg))
15335 return dependent_type_p (arg);
15336 else
15337 return (type_dependent_expression_p (arg)
15338 || value_dependent_expression_p (arg));
15339}
15340
06d40de8
DG
15341/* Returns true if ARGS (a collection of template arguments) contains
15342 any types that require structural equality testing. */
15343
15344bool
15345any_template_arguments_need_structural_equality_p (tree args)
15346{
15347 int i;
15348 int j;
15349
15350 if (!args)
15351 return false;
15352 if (args == error_mark_node)
15353 return true;
15354
15355 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
15356 {
15357 tree level = TMPL_ARGS_LEVEL (args, i + 1);
15358 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
15359 {
15360 tree arg = TREE_VEC_ELT (level, j);
5d80a306
DG
15361 tree packed_args = NULL_TREE;
15362 int k, len = 1;
15363
15364 if (ARGUMENT_PACK_P (arg))
15365 {
15366 /* Look inside the argument pack. */
15367 packed_args = ARGUMENT_PACK_ARGS (arg);
15368 len = TREE_VEC_LENGTH (packed_args);
15369 }
15370
15371 for (k = 0; k < len; ++k)
15372 {
15373 if (packed_args)
15374 arg = TREE_VEC_ELT (packed_args, k);
15375
15376 if (error_operand_p (arg))
15377 return true;
15378 else if (TREE_CODE (arg) == TEMPLATE_DECL
15379 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15380 continue;
15381 else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
15382 return true;
15383 else if (!TYPE_P (arg) && TREE_TYPE (arg)
15384 && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
15385 return true;
15386 }
06d40de8
DG
15387 }
15388 }
15389
15390 return false;
15391}
15392
d17811fd
MM
15393/* Returns true if ARGS (a collection of template arguments) contains
15394 any dependent arguments. */
1fb3244a 15395
d17811fd
MM
15396bool
15397any_dependent_template_arguments_p (tree args)
1fb3244a 15398{
bf12d54d 15399 int i;
c353b8e3
MM
15400 int j;
15401
d17811fd
MM
15402 if (!args)
15403 return false;
7e497d0c
VR
15404 if (args == error_mark_node)
15405 return true;
d17811fd 15406
c353b8e3
MM
15407 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
15408 {
15409 tree level = TMPL_ARGS_LEVEL (args, i + 1);
15410 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
15411 if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
15412 return true;
15413 }
1fb3244a 15414
1fb3244a
MM
15415 return false;
15416}
15417
15418/* Returns TRUE if the template TMPL is dependent. */
15419
15420bool
15421dependent_template_p (tree tmpl)
15422{
b95cc51a
MM
15423 if (TREE_CODE (tmpl) == OVERLOAD)
15424 {
15425 while (tmpl)
15426 {
15427 if (dependent_template_p (OVL_FUNCTION (tmpl)))
15428 return true;
15429 tmpl = OVL_CHAIN (tmpl);
15430 }
15431 return false;
15432 }
15433
1fb3244a
MM
15434 /* Template template parameters are dependent. */
15435 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
15436 || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
15437 return true;
27ab0504 15438 /* So are names that have not been looked up. */
acccf788
MM
15439 if (TREE_CODE (tmpl) == SCOPE_REF
15440 || TREE_CODE (tmpl) == IDENTIFIER_NODE)
d17811fd 15441 return true;
1fb3244a
MM
15442 /* So are member templates of dependent classes. */
15443 if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
15444 return dependent_type_p (DECL_CONTEXT (tmpl));
15445 return false;
15446}
15447
d17811fd
MM
15448/* Returns TRUE if the specialization TMPL<ARGS> is dependent. */
15449
15450bool
15451dependent_template_id_p (tree tmpl, tree args)
15452{
15453 return (dependent_template_p (tmpl)
15454 || any_dependent_template_arguments_p (args));
15455}
15456
14d22dd6
MM
15457/* TYPE is a TYPENAME_TYPE. Returns the ordinary TYPE to which the
15458 TYPENAME_TYPE corresponds. Returns ERROR_MARK_NODE if no such TYPE
15459 can be found. Note that this function peers inside uninstantiated
15460 templates and therefore should be used only in extremely limited
dda04398 15461 situations. ONLY_CURRENT_P restricts this peering to the currently
c51940a2 15462 open classes hierarchy (which is required when comparing types). */
14d22dd6
MM
15463
15464tree
15465resolve_typename_type (tree type, bool only_current_p)
15466{
15467 tree scope;
15468 tree name;
15469 tree decl;
15470 int quals;
4514aa8c 15471 tree pushed_scope;
14d22dd6 15472
50bc768d 15473 gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
14d22dd6
MM
15474
15475 scope = TYPE_CONTEXT (type);
15476 name = TYPE_IDENTIFIER (type);
15477
15478 /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
15479 it first before we can figure out what NAME refers to. */
15480 if (TREE_CODE (scope) == TYPENAME_TYPE)
15481 scope = resolve_typename_type (scope, only_current_p);
15482 /* If we don't know what SCOPE refers to, then we cannot resolve the
15483 TYPENAME_TYPE. */
15484 if (scope == error_mark_node || TREE_CODE (scope) == TYPENAME_TYPE)
15485 return error_mark_node;
15486 /* If the SCOPE is a template type parameter, we have no way of
15487 resolving the name. */
15488 if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
15489 return type;
15490 /* If the SCOPE is not the current instantiation, there's no reason
15491 to look inside it. */
15492 if (only_current_p && !currently_open_class (scope))
15493 return error_mark_node;
ca099ac8
MM
15494 /* If SCOPE is a partial instantiation, it will not have a valid
15495 TYPE_FIELDS list, so use the original template. */
353b4fc0 15496 scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
14d22dd6
MM
15497 /* Enter the SCOPE so that name lookup will be resolved as if we
15498 were in the class definition. In particular, SCOPE will no
15499 longer be considered a dependent type. */
4514aa8c 15500 pushed_scope = push_scope (scope);
14d22dd6 15501 /* Look up the declaration. */
86ac0575 15502 decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
14d22dd6
MM
15503 /* Obtain the set of qualifiers applied to the TYPE. */
15504 quals = cp_type_quals (type);
15505 /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
15506 find a TEMPLATE_DECL. Otherwise, we want to find a TYPE_DECL. */
15507 if (!decl)
15508 type = error_mark_node;
15509 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
15510 && TREE_CODE (decl) == TYPE_DECL)
15511 type = TREE_TYPE (decl);
15512 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
15513 && DECL_CLASS_TEMPLATE_P (decl))
15514 {
15515 tree tmpl;
15516 tree args;
15517 /* Obtain the template and the arguments. */
15518 tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
15519 args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
15520 /* Instantiate the template. */
15521 type = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
42eaed49 15522 /*entering_scope=*/0, tf_error | tf_user);
14d22dd6
MM
15523 }
15524 else
15525 type = error_mark_node;
15526 /* Qualify the resulting type. */
15527 if (type != error_mark_node && quals)
15528 type = cp_build_qualified_type (type, quals);
15529 /* Leave the SCOPE. */
4514aa8c
NS
15530 if (pushed_scope)
15531 pop_scope (pushed_scope);
14d22dd6
MM
15532
15533 return type;
15534}
15535
d17811fd
MM
15536/* EXPR is an expression which is not type-dependent. Return a proxy
15537 for EXPR that can be used to compute the types of larger
15538 expressions containing EXPR. */
15539
15540tree
15541build_non_dependent_expr (tree expr)
15542{
0deb916c
MM
15543 tree inner_expr;
15544
c8094d83 15545 /* Preserve null pointer constants so that the type of things like
d17811fd
MM
15546 "p == 0" where "p" is a pointer can be determined. */
15547 if (null_ptr_cst_p (expr))
15548 return expr;
15549 /* Preserve OVERLOADs; the functions must be available to resolve
15550 types. */
c497db75
AO
15551 inner_expr = expr;
15552 if (TREE_CODE (inner_expr) == ADDR_EXPR)
15553 inner_expr = TREE_OPERAND (inner_expr, 0);
15554 if (TREE_CODE (inner_expr) == COMPONENT_REF)
15555 inner_expr = TREE_OPERAND (inner_expr, 1);
2226e997 15556 if (is_overloaded_fn (inner_expr)
6439fffd 15557 || TREE_CODE (inner_expr) == OFFSET_REF)
d17811fd 15558 return expr;
5ae9ba3e
MM
15559 /* There is no need to return a proxy for a variable. */
15560 if (TREE_CODE (expr) == VAR_DECL)
15561 return expr;
7433e6d4
MM
15562 /* Preserve string constants; conversions from string constants to
15563 "char *" are allowed, even though normally a "const char *"
15564 cannot be used to initialize a "char *". */
15565 if (TREE_CODE (expr) == STRING_CST)
15566 return expr;
b7c707d1
MM
15567 /* Preserve arithmetic constants, as an optimization -- there is no
15568 reason to create a new node. */
15569 if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
15570 return expr;
9b7be7b5
MM
15571 /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
15572 There is at least one place where we want to know that a
15573 particular expression is a throw-expression: when checking a ?:
15574 expression, there are special rules if the second or third
878cbb73 15575 argument is a throw-expression. */
9b7be7b5
MM
15576 if (TREE_CODE (expr) == THROW_EXPR)
15577 return expr;
47d4c811
NS
15578
15579 if (TREE_CODE (expr) == COND_EXPR)
f293ce4b
RS
15580 return build3 (COND_EXPR,
15581 TREE_TYPE (expr),
15582 TREE_OPERAND (expr, 0),
c8094d83 15583 (TREE_OPERAND (expr, 1)
f293ce4b
RS
15584 ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
15585 : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
15586 build_non_dependent_expr (TREE_OPERAND (expr, 2)));
8e1daa34
NS
15587 if (TREE_CODE (expr) == COMPOUND_EXPR
15588 && !COMPOUND_EXPR_OVERLOADED (expr))
f293ce4b
RS
15589 return build2 (COMPOUND_EXPR,
15590 TREE_TYPE (expr),
15591 TREE_OPERAND (expr, 0),
15592 build_non_dependent_expr (TREE_OPERAND (expr, 1)));
c8094d83 15593
fdeff563
NS
15594 /* If the type is unknown, it can't really be non-dependent */
15595 gcc_assert (TREE_TYPE (expr) != unknown_type_node);
3db45ab5 15596
c8094d83 15597 /* Otherwise, build a NON_DEPENDENT_EXPR.
d17811fd
MM
15598
15599 REFERENCE_TYPEs are not stripped for expressions in templates
15600 because doing so would play havoc with mangling. Consider, for
15601 example:
15602
c8094d83 15603 template <typename T> void f<T& g>() { g(); }
d17811fd
MM
15604
15605 In the body of "f", the expression for "g" will have
15606 REFERENCE_TYPE, even though the standard says that it should
15607 not. The reason is that we must preserve the syntactic form of
15608 the expression so that mangling (say) "f<g>" inside the body of
15609 "f" works out correctly. Therefore, the REFERENCE_TYPE is
15610 stripped here. */
018a5803 15611 return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
d17811fd
MM
15612}
15613
15614/* ARGS is a TREE_LIST of expressions as arguments to a function call.
15615 Return a new TREE_LIST with the various arguments replaced with
15616 equivalent non-dependent expressions. */
15617
15618tree
15619build_non_dependent_args (tree args)
15620{
15621 tree a;
15622 tree new_args;
15623
15624 new_args = NULL_TREE;
15625 for (a = args; a; a = TREE_CHAIN (a))
c8094d83 15626 new_args = tree_cons (NULL_TREE,
d17811fd
MM
15627 build_non_dependent_expr (TREE_VALUE (a)),
15628 new_args);
15629 return nreverse (new_args);
15630}
15631
e2500fed 15632#include "gt-cp-pt.h"
This page took 6.44691 seconds and 5 git commands to generate.