https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90576
--- Comment #2 from Martin Liška <marxin at gcc dot gnu.org> --- So the problem can be reproduced when only factor.cc is compiled with -flto -Os. Problematic comparison is: for (pivot = temp.pivots.next; pivot != &temp.pivots; pivot = pivot->next) { eliminatePivot(pivot->idx, pivot->pos, eps ); } } I reduced that to problematic call to: #0 aliasing_component_refs_p (ref1=0x7ffff73cd480, ref1_alias_set=15, base1_alias_set=6, offset1=..., max_size1=..., ref2=0x7ffff7441030, ref2_alias_set=15, base2_alias_set=13, offset2=..., max_size2=..., ref2_is_decl=false) true is returned for: (gdb) p print_generic_expr (stderr, ref1, 0) this_16(D)->temp.pivots.next$8 = void (gdb) p print_generic_expr (stderr, ref2, 0) _1090->next$9 = void (gdb) p debug_tree(ref1) <component_ref 0x7ffff73cd480 type <pointer_type 0x7ffff759d690 type <record_type 0x7ffff758e888 Pring addressable BLK size <integer_cst 0x7ffff7786ed0 constant 256> unit-size <integer_cst 0x7ffff7786fc0 constant 32> align:64 warn_if_not_align:0 symtab:0 alias-set 13 canonical-type 0x7ffff758e888 fields <field_decl 0x7ffff758ded8 next> context <record_type 0x7ffff758e738 CLUFactor> pointer_to_this <pointer_type 0x7ffff759d690>> public unsigned DI size <integer_cst 0x7ffff7786b70 constant 64> unit-size <integer_cst 0x7ffff7786b88 constant 8> align:64 warn_if_not_align:0 symtab:0 alias-set 15 structural-equality pointer_to_this <pointer_type 0x7ffff75a1b28> reference_to_this <reference_type 0x7ffff759d738>> arg:0 <component_ref 0x7ffff73cd4b0 type <record_type 0x7ffff758e888 Pring> arg:0 <component_ref 0x7ffff73cd4e0 type <record_type 0x7ffff758e7e0 Temp> arg:0 <mem_ref 0x7ffff73ce0c8 type <record_type 0x7ffff758e738 CLUFactor> arg:0 <ssa_name 0x7ffff7315a68 type <pointer_type 0x7ffff759fdc8> visited var <parm_decl 0x7ffff7731500 this> def_stmt GIMPLE_NOP version:16 ptr-info 0x7ffff76c0eb8> arg:1 <integer_cst 0x7ffff75b79c0 constant 0>> arg:1 <field_decl 0x7ffff758d8e8 temp> factor.cc:1369:23 start: factor.cc:1369:23 finish: factor.cc:1369:23> arg:1 <field_decl 0x7ffff758dbe0 pivots type <record_type 0x7ffff758e888 Pring> nonlocal BLK clufactor.h:75:15 size <integer_cst 0x7ffff7786ed0 256> unit-size <integer_cst 0x7ffff7786fc0 32> align:64 warn_if_not_align:0 offset_align 128 offset <integer_cst 0x7ffff7786fc0 32> bit-offset <integer_cst 0x7ffff7786be8 constant 0> context <record_type 0x7ffff758e7e0 Temp> chain <field_decl 0x7ffff758db48 pivot_col>> factor.cc:1369:28 start: factor.cc:1369:28 finish: factor.cc:1369:28> arg:1 <field_decl 0x7ffff758ded8 next type <pointer_type 0x7ffff758e5e8 type <record_type 0x7ffff758e690 Pring> unsigned DI size <integer_cst 0x7ffff7786b70 64> unit-size <integer_cst 0x7ffff7786b88 8> align:64 warn_if_not_align:0 symtab:0 alias-set -1 structural-equality reference_to_this <reference_type 0x7ffff758ee70>> unsigned nonlocal DI clufactor.h:53:14 size <integer_cst 0x7ffff7786b70 64> unit-size <integer_cst 0x7ffff7786b88 8> align:64 warn_if_not_align:0 offset_align 128 offset <integer_cst 0x7ffff7786ba0 constant 0> bit-offset <integer_cst 0x7ffff7786be8 0> context <record_type 0x7ffff758e888 Pring> chain <field_decl 0x7ffff758de40 prev type <pointer_type 0x7ffff758e5e8> unsigned nonlocal DI clufactor.h:54:14 size <integer_cst 0x7ffff7786b70 64> unit-size <integer_cst 0x7ffff7786b88 8> align:64 warn_if_not_align:0 offset_align 128 offset <integer_cst 0x7ffff7786ba0 0> bit-offset <integer_cst 0x7ffff7786b70 64> context <record_type 0x7ffff758e888 Pring> chain <field_decl 0x7ffff758dda8 idx>>> factor.cc:1369:35 start: factor.cc:1369:35 finish: factor.cc:1369:35> (gdb) p debug_tree(ref2) <component_ref 0x7ffff7441030 type <pointer_type 0x7ffff759d690 type <record_type 0x7ffff758e888 Pring addressable BLK size <integer_cst 0x7ffff7786ed0 constant 256> unit-size <integer_cst 0x7ffff7786fc0 constant 32> align:64 warn_if_not_align:0 symtab:0 alias-set 13 canonical-type 0x7ffff758e888 fields <field_decl 0x7ffff758ded8 next> context <record_type 0x7ffff758e738 CLUFactor> pointer_to_this <pointer_type 0x7ffff759d690>> public unsigned DI size <integer_cst 0x7ffff7786b70 constant 64> unit-size <integer_cst 0x7ffff7786b88 constant 8> align:64 warn_if_not_align:0 symtab:0 alias-set 15 structural-equality pointer_to_this <pointer_type 0x7ffff75a1b28> reference_to_this <reference_type 0x7ffff759d738>> arg:0 <mem_ref 0x7ffff743b500 type <record_type 0x7ffff758e888 Pring> arg:0 <ssa_name 0x7ffff743cee8 type <pointer_type 0x7ffff759d690> visited def_stmt _1090 = _1088->prev; version:1090 ptr-info 0x7ffff75e6228> arg:1 <integer_cst 0x7ffff7638dc8 constant 0>> arg:1 <field_decl 0x7ffff758ded8 next type <pointer_type 0x7ffff758e5e8 type <record_type 0x7ffff758e690 Pring> unsigned DI size <integer_cst 0x7ffff7786b70 64> unit-size <integer_cst 0x7ffff7786b88 8> align:64 warn_if_not_align:0 symtab:0 alias-set -1 structural-equality reference_to_this <reference_type 0x7ffff758ee70>> unsigned nonlocal DI clufactor.h:53:14 size <integer_cst 0x7ffff7786b70 64> unit-size <integer_cst 0x7ffff7786b88 8> align:64 warn_if_not_align:0 offset_align 128 offset <integer_cst 0x7ffff7786ba0 constant 0> bit-offset <integer_cst 0x7ffff7786be8 constant 0> context <record_type 0x7ffff758e888 Pring> chain <field_decl 0x7ffff758de40 prev type <pointer_type 0x7ffff758e5e8> unsigned nonlocal DI clufactor.h:54:14 size <integer_cst 0x7ffff7786b70 64> unit-size <integer_cst 0x7ffff7786b88 8> align:64 warn_if_not_align:0 offset_align 128 offset <integer_cst 0x7ffff7786ba0 0> bit-offset <integer_cst 0x7ffff7786b70 64> context <record_type 0x7ffff758e888 Pring> chain <field_decl 0x7ffff758dda8 idx>>> factor.cc:1079:7 start: factor.cc:1079:7 finish: factor.cc:1079:7> (gdb) p offset1 $12 = { <poly_int_pod<1, long>> = { coeffs = {3392} }, <No data fields>} (gdb) p offset2 $13 = { <poly_int_pod<1, long>> = { coeffs = {0} }, <No data fields>} (gdb) p max_size1 $14 = { <poly_int_pod<1, long>> = { coeffs = {64} }, <No data fields>} (gdb) p max_size2 $15 = { <poly_int_pod<1, long>> = { coeffs = {64} }, <No data fields>} I hope it will be enough information. Honza?