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 ¶ms) { | ^ 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?