https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101419
--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> --- --- gcc/tree-pass.h.jj 2021-01-27 10:10:00.525903635 +0100 +++ gcc/tree-pass.h 2021-07-12 13:10:59.621933276 +0200 @@ -208,6 +208,7 @@ protected: #define PROP_gimple_lcf (1 << 1) /* lowered control flow */ #define PROP_gimple_leh (1 << 2) /* lowered eh */ #define PROP_cfg (1 << 3) +#define PROP_objsz (1 << 4) /* object sizes computed */ #define PROP_ssa (1 << 5) #define PROP_no_crit_edges (1 << 6) #define PROP_rtl (1 << 7) --- gcc/tree-object-size.c.jj 2021-01-04 10:25:39.911221618 +0100 +++ gcc/tree-object-size.c 2021-07-12 13:19:50.021568629 +0200 @@ -1450,6 +1450,8 @@ pass_object_sizes::execute (function *fu } fini_object_sizes (); + if (!insert_min_max_p) + fun->curr_properties |= PROP_objsz; return 0; } --- gcc/tree-ssa-sccvn.c.jj 2021-06-09 10:20:08.988342285 +0200 +++ gcc/tree-ssa-sccvn.c 2021-07-12 13:14:33.482962387 +0200 @@ -925,12 +925,10 @@ copy_reference_ops_from_ref (tree ref, v + (wi::to_offset (bit_offset) >> LOG2_BITS_PER_UNIT)); /* Probibit value-numbering zero offset components of addresses the same before the pass folding - __builtin_object_size had a chance to run - (checking cfun->after_inlining does the - trick here). */ + __builtin_object_size had a chance to run. */ if (TREE_CODE (orig) != ADDR_EXPR || maybe_ne (off, 0) - || cfun->after_inlining) + || (cfun->curr_properties & PROP_objsz)) off.to_shwi (&temp.off); } } seems to work for both testcases.