re PR c++/60992 (ICE in tsubst_copy, at cp/pt.c:12637)
PR c++/60992 * pt.c (tsubst_copy) [VAR_DECL]: Try lookup first. Add a new variable to local_specializations. From-SVN: r211188
This commit is contained in:
parent
918621d3a8
commit
093e62d274
2 changed files with 19 additions and 8 deletions
|
@ -1,5 +1,9 @@
|
|||
2014-06-03 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/60992
|
||||
* pt.c (tsubst_copy) [VAR_DECL]: Try lookup first. Add a new
|
||||
variable to local_specializations.
|
||||
|
||||
PR c++/60848
|
||||
* call.c (is_std_init_list): Check CLASSTYPE_TEMPLATE_INFO.
|
||||
|
||||
|
|
23
gcc/cp/pt.c
23
gcc/cp/pt.c
|
@ -12730,14 +12730,19 @@ tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
|
|||
r = retrieve_local_specialization (t);
|
||||
if (r == NULL_TREE)
|
||||
{
|
||||
if (DECL_ANON_UNION_VAR_P (t))
|
||||
/* First try name lookup to find the instantiation. */
|
||||
r = lookup_name (DECL_NAME (t));
|
||||
if (r)
|
||||
{
|
||||
/* Just use name lookup to find a member alias for an
|
||||
anonymous union, but then add it to the hash table. */
|
||||
r = lookup_name (DECL_NAME (t));
|
||||
gcc_assert (DECL_ANON_UNION_VAR_P (r));
|
||||
register_local_specialization (r, t);
|
||||
/* Make sure that the one we found is the one we want. */
|
||||
tree ctx = tsubst (DECL_CONTEXT (t), args,
|
||||
complain, in_decl);
|
||||
if (ctx != DECL_CONTEXT (r))
|
||||
r = NULL_TREE;
|
||||
}
|
||||
|
||||
if (r)
|
||||
/* OK */;
|
||||
else
|
||||
{
|
||||
/* This can happen for a variable used in a
|
||||
|
@ -12771,10 +12776,12 @@ tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
|
|||
else if (decl_constant_var_p (r))
|
||||
/* A use of a local constant decays to its value.
|
||||
FIXME update for core DR 696. */
|
||||
return integral_constant_value (r);
|
||||
r = integral_constant_value (r);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
/* Remember this for subsequent uses. */
|
||||
if (local_specializations)
|
||||
register_local_specialization (r, t);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
Loading…
Add table
Reference in a new issue