https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85391
--- Comment #1 from Martin Liška <marxin at gcc dot gnu.org> ---
With following debug patch:
diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c
index fa9380cce80..7d14a923b4d 100644
--- a/gcc/ipa-devirt.c
+++ b/gcc/ipa-devirt.c
@@ -1869,7 +1869,7 @@ add_type_duplicate (odr_type val, tree type)
}
gcc_assert (val->odr_violated || !odr_must_violate);
/* Sanity check that all bases will be build same way again. */
- if (flag_checking
+ if (true//flag_checking
&& COMPLETE_TYPE_P (type) && COMPLETE_TYPE_P (val->type)
&& TREE_CODE (val->type) == RECORD_TYPE
&& TREE_CODE (type) == RECORD_TYPE
@@ -1884,7 +1884,23 @@ add_type_duplicate (odr_type val, tree type)
if (polymorphic_type_binfo_p (BINFO_BASE_BINFO
(TYPE_BINFO (type), i)))
num_poly_bases++;
+
+ if (num_poly_bases != val->bases.length ())
+ {
+ fprintf(stderr, "poly bases: %d\n", num_poly_bases);
+ for (i = 0; i < BINFO_N_BASE_BINFOS (TYPE_BINFO (type)); i++)
+ if (polymorphic_type_binfo_p (BINFO_BASE_BINFO
+ (TYPE_BINFO (type), i)))
+ debug_tree(BINFO_BASE_BINFO (TYPE_BINFO (type), i));
+ fprintf(stderr, "val bases: %d\n", val->bases.length ());
+
+ for (unsigned i = 0; i < val->bases.length (); i++)
+ debug_tree(val->bases[i]->type);
+ }
+
+
gcc_assert (num_poly_bases == val->bases.length ());
+
for (j = 0, i = 0; i < BINFO_N_BASE_BINFOS (TYPE_BINFO (type));
i++)
if (polymorphic_type_binfo_p (BINFO_BASE_BINFO
I see:
poly bases: 2
<tree_binfo 0x7ffff52aad00
type <record_type 0x7ffff5666b28 SfxViewShell addressable
needs-constructing BLK
size <integer_cst 0x7ffff5dd4030 constant 1344>
unit-size <integer_cst 0x7ffff5dd4060 constant 168>
align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7ffff5871690
attributes <tree_list 0x7ffff5d36618
purpose <identifier_node 0x7ffff5d365f0 visibility>
value <tree_list 0x7ffff5d365c8
value <string_cst 0x7ffff69978e0 type <array_type
0x7ffff5d375e8>
readonly constant static "default\000">>>
fields <field_decl 0x7ffff566d390 D.42120 type <record_type
0x7ffff5efc690 SfxShell>
ignored BLK
/home/marxin/BIG/Programming/libreoffice/include/sfx2/viewsh.hxx:145:22
size <integer_cst 0x7ffff687a1b0 constant 320>
unit-size <integer_cst 0x7ffff6994810 constant 40>
align:64 warn_if_not_align:0 offset_align 128
offset <integer_cst 0x7ffff67a7c18 constant 0>
bit-offset <integer_cst 0x7ffff67a7c60 constant 0> context
<record_type 0x7ffff5666b28 SfxViewShell> chain <field_decl 0x7ffff566d2f8
D.42119>> context <translation_unit_decl 0x7ffff58778e8
/home/marxin/BIG/Programming/libreoffice/sc/source/ui/docshell/olinefun.cxx>
chain <type_decl 0x7ffff566d428 SfxViewShell>>
bases:4 offset <integer_cst 0x7ffff67a7c18 0>>
<tree_binfo 0x7ffff5355f08
type <record_type 0x7ffff56fb5e8 ScDBFunc addressable needs-constructing
BLK
size <integer_cst 0x7ffff5b2af30 constant 8128>
unit-size <integer_cst 0x7ffff5bc8708 constant 1016>
align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7ffff56fb5e8
fields <field_decl 0x7ffff5382720 _vptr.ScDBFunc type <pointer_type
0x7ffff69a0930>
unsigned virtual DI
/home/marxin/BIG/Programming/libreoffice/sc/source/ui/inc/dbfunc.hxx:39:0
size <integer_cst 0x7ffff67a7be8 constant 64>
unit-size <integer_cst 0x7ffff67a7c00 constant 8>
align:64 warn_if_not_align:0 offset_align 128
offset <integer_cst 0x7ffff67a7c18 constant 0>
bit-offset <integer_cst 0x7ffff67a7c60 constant 0> context
<record_type 0x7ffff56fb5e8 ScDBFunc> chain <field_decl 0x7ffff53827b8
D.52057>> context <translation_unit_decl 0x7ffff5545d98
/home/marxin/BIG/Programming/libreoffice/sc/source/ui/view/dbfunc.cxx>
chain <type_decl 0x7ffff5382850 ScDBFunc>>
bases:1 offset <integer_cst 0x7ffff5dd4060 168>>
val bases: 1
<record_type 0x7ffff5871690 SfxViewShell addressable needs-constructing BLK
size <integer_cst 0x7ffff5dd4030 type <integer_type 0x7ffff67bb0a8
bitsizetype> constant 1344>
unit-size <integer_cst 0x7ffff5dd4060 type <integer_type 0x7ffff67bb000
sizetype> constant 168>
align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7ffff5871690
attributes <tree_list 0x7ffff5d36618
purpose <identifier_node 0x7ffff5d365f0 visibility>
value <tree_list 0x7ffff5d365c8
value <string_cst 0x7ffff69978e0 type <array_type 0x7ffff5d375e8>
readonly constant static "default\000">>>
fields <field_decl 0x7ffff5873688 D.33082
type <record_type 0x7ffff5efc690 SfxShell addressable
needs-constructing BLK
size <integer_cst 0x7ffff687a1b0 constant 320>
unit-size <integer_cst 0x7ffff6994810 constant 40>
align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7ffff5d490a8 attributes <tree_list 0x7ffff5d36618> fields <field_decl
0x7ffff5efd5f0 D.10874> context <translation_unit_decl 0x7ffff67b1c30
/home/marxin/BIG/Programming/libreoffice/sc/source/core/tool/detfunc.cxx>
chain <type_decl 0x7ffff5efd688 SfxShell>>
ignored BLK
/home/marxin/BIG/Programming/libreoffice/include/sfx2/viewsh.hxx:145:22 size
<integer_cst 0x7ffff687a1b0 320> unit-size <integer_cst 0x7ffff6994810 40>
align:64 warn_if_not_align:0 offset_align 128
offset <integer_cst 0x7ffff67a7c18 constant 0>
bit-offset <integer_cst 0x7ffff67a7c60 constant 0> context <record_type
0x7ffff5871690 SfxViewShell>
chain <field_decl 0x7ffff58735f0 D.33081 type <record_type
0x7ffff5d37690 SfxListener>
ignored BLK
/home/marxin/BIG/Programming/libreoffice/include/sfx2/viewsh.hxx:145:22
size <integer_cst 0x7ffff67a7c30 constant 128>
unit-size <integer_cst 0x7ffff67a7c48 constant 16>
align:64 warn_if_not_align:0 offset_align 128
offset <integer_cst 0x7ffff67c3048 constant 32>
bit-offset <integer_cst 0x7ffff67a7be8 constant 64> context
<record_type 0x7ffff5871690 SfxViewShell> chain <field_decl 0x7ffff5873558
D.33080>>> context <translation_unit_decl 0x7ffff5e6cca8
/home/marxin/BIG/Programming/libreoffice/sc/source/ui/Accessibility/AccessibleCell.cxx>
chain <type_decl 0x7ffff5873720 SfxViewShell>>