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?