This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/63828] New: g++.dg/ipa/devirt-47.C fails for x32
- From: "hjl.tools at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 12 Nov 2014 01:08:08 +0000
- Subject: [Bug tree-optimization/63828] New: g++.dg/ipa/devirt-47.C fails for x32
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63828
Bug ID: 63828
Summary: g++.dg/ipa/devirt-47.C fails for x32
Product: gcc
Version: 5.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: hjl.tools at gmail dot com
CC: hubicka at ucw dot cz
On x32, g++.dg/ipa/devirt-47.C fails:
FAIL: g++.dg/ipa/devirt-47.C -std=gnu++11 scan-ipa-dump-times inline
"Discovered a virtual call to a known target[^\\\\n]*C::_ZTh" 1
FAIL: g++.dg/ipa/devirt-47.C -std=gnu++14 scan-ipa-dump-times inline
"Discovered a virtual call to a known target[^\\\\n]*C::_ZTh" 1
FAIL: g++.dg/ipa/devirt-47.C -std=gnu++98 scan-ipa-dump-times inline
"Discovered a virtual call to a known target[^\\\\n]*C::_ZTh" 1
FAIL: g++.dg/guality/pr55665.C -O2 line 23 p == 40
The problem is in possible_placement_new
bool
possible_placement_new (tree type, tree expected_type,
HOST_WIDE_INT cur_offset)
{
return ((TREE_CODE (type) != RECORD_TYPE
|| !TYPE_BINFO (type)
|| cur_offset >= BITS_PER_WORD
|| !polymorphic_type_binfo_p (TYPE_BINFO (type)))
&& (!TYPE_SIZE (type)
|| !tree_fits_shwi_p (TYPE_SIZE (type))
|| (cur_offset
+ (expected_type ? tree_to_uhwi (TYPE_SIZE (expected_type))
: GET_MODE_BITSIZE (Pmode))
<= tree_to_uhwi (TYPE_SIZE (type)))));
}
When cur_offset is 32, cur_offset >= BITS_PER_WORD is false since
BITS_PER_WORD is 64 for x32. We got
ipa-prop: Discovered a virtual call to a speculative target (void test(A*)/5 ->
virtual int C::_ZThn4_N1C3fooEv()/4), for stmt _6 = OBJ_TYPE_REF(_4;a_2(D)->0)
(a_2(D));
instead of "known target". What is the significance of BITS_PER_WORD here?