mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-21 14:50:57 +08:00
* gimple-fold.c (gimple_get_virt_method_for_binfo): Use ctor_for_folding.
From-SVN: r202002
This commit is contained in:
parent
0987ffe7c1
commit
2aa3da06e0
@ -1,3 +1,7 @@
|
||||
2013-08-26 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* gimple-fold.c (gimple_get_virt_method_for_binfo): Use ctor_for_folding.
|
||||
|
||||
2013-08-26 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* ipa.c (comdat_can_be_unshared_p_1): C++ constructors and destructors
|
||||
|
@ -3097,7 +3097,7 @@ tree
|
||||
gimple_get_virt_method_for_binfo (HOST_WIDE_INT token, tree known_binfo)
|
||||
{
|
||||
unsigned HOST_WIDE_INT offset, size;
|
||||
tree v, fn, vtable;
|
||||
tree v, fn, vtable, init;
|
||||
|
||||
vtable = v = BINFO_VTABLE (known_binfo);
|
||||
/* If there is no virtual methods table, leave the OBJ_TYPE_REF alone. */
|
||||
@ -3117,14 +3117,24 @@ gimple_get_virt_method_for_binfo (HOST_WIDE_INT token, tree known_binfo)
|
||||
v = TREE_OPERAND (v, 0);
|
||||
|
||||
if (TREE_CODE (v) != VAR_DECL
|
||||
|| !DECL_VIRTUAL_P (v)
|
||||
|| !DECL_INITIAL (v)
|
||||
|| DECL_INITIAL (v) == error_mark_node)
|
||||
|| !DECL_VIRTUAL_P (v))
|
||||
return NULL_TREE;
|
||||
init = ctor_for_folding (v);
|
||||
|
||||
/* The virtual tables should always be born with constructors.
|
||||
and we always should assume that they are avaialble for
|
||||
folding. At the moment we do not stream them in all cases,
|
||||
but it should never happen that ctor seem unreachable. */
|
||||
gcc_assert (init);
|
||||
if (init == error_mark_node)
|
||||
{
|
||||
gcc_assert (in_lto_p);
|
||||
return NULL_TREE;
|
||||
}
|
||||
gcc_checking_assert (TREE_CODE (TREE_TYPE (v)) == ARRAY_TYPE);
|
||||
size = tree_low_cst (TYPE_SIZE (TREE_TYPE (TREE_TYPE (v))), 1);
|
||||
offset += token * size;
|
||||
fn = fold_ctor_reference (TREE_TYPE (TREE_TYPE (v)), DECL_INITIAL (v),
|
||||
fn = fold_ctor_reference (TREE_TYPE (TREE_TYPE (v)), init,
|
||||
offset, size, vtable);
|
||||
if (!fn || integer_zerop (fn))
|
||||
return NULL_TREE;
|
||||
|
Loading…
x
Reference in New Issue
Block a user