https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92279

--- Comment #3 from Martin Liška <marxin at gcc dot gnu.org> ---
Created attachment 47208
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=47208&action=edit
Reproducer

So using a revision before it disappeared I see:

$ g++ -O2 -flto ice*.ii -c && gcc -O2 -flto *.i -c && g++ *.o -O2 -flto
...
ice8.ii: In member function ‘MergeConvexHulls.constprop’:
ice8.ii:883:6: error: non-trivial conversion in ‘constructor’
  883 | void VHACD::MergeConvexHulls(const Parameters &params) {
      |      ^
struct Point64
struct Point64
# .MEM_220 = VDEF <.MEM_219>
t ={v} {CLOBBER};
during GIMPLE pass: fixup_cfg
ice8.ii:883:6: internal compiler error: verify_gimple failed
0xcf1b21 verify_gimple_in_cfg(function*, bool)
        ../../gcc/tree-cfg.c:5427
0xbcf6bf execute_function_todo
        ../../gcc/passes.c:1983
0xbd046e execute_todo
        ../../gcc/passes.c:2037
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
lto-wrapper: fatal error: g++ returned 1 exit status
compilation terminated.
/usr/bin/ld: error: lto-wrapper failed
collect2: error: ld returned 1 exit status

Where the types are following:

$ (gdb) p debug_tree(lhs_type)
 <record_type 0x7ffff7688dc8 Point64 cxx-odr-p BLK
    size <integer_cst 0x7ffff7883060 type <integer_type 0x7ffff78790a8
bitsizetype> constant 192>
    unit-size <integer_cst 0x7ffff7883030 type <integer_type 0x7ffff7879000
sizetype> constant 24>
    align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7ffff7688dc8
    fields <field_decl 0x7ffff768b260 x
        type <integer_type 0x7ffff7675dc8 int64_t public DI
            size <integer_cst 0x7ffff7864ba0 constant 64>
            unit-size <integer_cst 0x7ffff7864bb8 constant 8>
            align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7ffff7879738 precision:64 min <integer_cst 0x7ffff7864e28
-9223372036854775808> max <integer_cst 0x7ffff7864e40 9223372036854775807>>
        nonlocal DI ice9.ii:58:11 size <integer_cst 0x7ffff7864ba0 64>
unit-size <integer_cst 0x7ffff7864bb8 8>
        align:64 warn_if_not_align:0 offset_align 128
        offset <integer_cst 0x7ffff7864bd0 constant 0>
        bit-offset <integer_cst 0x7ffff7864c18 constant 0> context <record_type
0x7ffff7688dc8 Point64>
        chain <field_decl 0x7ffff768b1c8 y type <integer_type 0x7ffff7675dc8
int64_t>
            nonlocal DI ice9.ii:59:11 size <integer_cst 0x7ffff7864ba0 64>
unit-size <integer_cst 0x7ffff7864bb8 8>
            align:64 warn_if_not_align:0 offset_align 128 offset <integer_cst
0x7ffff7864bd0 0> bit-offset <integer_cst 0x7ffff7864ba0 64> context
<record_type 0x7ffff7688dc8 Point64> chain <field_decl 0x7ffff768b130 z>>>
context <record_type 0x7ffff76750a8 btConvexHullInternal>
    pointer_to_this <pointer_type 0x7ffff76a6738>>
$1 = void
(gdb) p debug_tree(rhs1_type)
 <record_type 0x7ffff7675e70 Point64 cxx-odr-p BLK
    size <integer_cst 0x7ffff7883060 type <integer_type 0x7ffff78790a8
bitsizetype> constant 192>
    unit-size <integer_cst 0x7ffff7883030 type <integer_type 0x7ffff7879000
sizetype> constant 24>
    align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7ffff7675e70
    fields <field_decl 0x7ffff7676720 x
        type <integer_type 0x7ffff7675dc8 int64_t public DI
            size <integer_cst 0x7ffff7864ba0 constant 64>
            unit-size <integer_cst 0x7ffff7864bb8 constant 8>
            align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7ffff7879738 precision:64 min <integer_cst 0x7ffff7864e28
-9223372036854775808> max <integer_cst 0x7ffff7864e40 9223372036854775807>>
        nonlocal DI ice5.ii:264:11 size <integer_cst 0x7ffff7864ba0 64>
unit-size <integer_cst 0x7ffff7864bb8 8>
        align:64 warn_if_not_align:0 offset_align 128
        offset <integer_cst 0x7ffff7864bd0 constant 0>
        bit-offset <integer_cst 0x7ffff7864c18 constant 0> context <record_type
0x7ffff7675e70 Point64>
        chain <field_decl 0x7ffff7676688 y type <integer_type 0x7ffff7675dc8
int64_t>
            nonlocal DI ice5.ii:265:11 size <integer_cst 0x7ffff7864ba0 64>
unit-size <integer_cst 0x7ffff7864bb8 8>
            align:64 warn_if_not_align:0 offset_align 128 offset <integer_cst
0x7ffff7864bd0 0> bit-offset <integer_cst 0x7ffff7864ba0 64> context
<record_type 0x7ffff7675e70 Point64> chain <field_decl 0x7ffff76765f0 z>>>
context <record_type 0x7ffff7675738 btConvexHullInternal>>

and where canonical types are the same as the types:

(gdb) p lhs_type->type_common.canonical
$3 = (tree) 0x7ffff7688dc8
(gdb) p rhs1_type->type_common.canonical
$4 = (tree) 0x7ffff7675e70

This seems wrong as the types have same ODR name and have equal declaration.
@Honza: Can you please help me with that?

Reply via email to