https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120780
--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> --- We have, in .optimized: __write_overflow_field (-1, 0); always executed, unless kmemdup_noprof (...) == 0. At objsize time we have __p_size_field_121 = -1; ... <bb 54> [local count: 536073660]: if (__p_size_field_121 < 0) goto <bb 55>; [33.00%] else goto <bb 56>; [67.00%] <bb 55> [local count: 176904307]: __write_overflow_field (__p_size_field_121, 0); --- <bb 48> [local count: 1072147320]: - _114 = &MEM[(struct ieee80211_sub_if_data *)ifmsh_15 + -16B].vif.bss_conf.mcast_rate; - _115 = __builtin_dynamic_object_size (_114, 0); - __p_size_116 = (const size_t) _115; - _117 = &setup_20(D)->mcast_rate; - _118 = __builtin_dynamic_object_size (_117, 0); - __q_size_119 = (const size_t) _118; - _120 = __builtin_dynamic_object_size (_114, 1); - __p_size_field_121 = (const size_t) _120; + __p_size_116 = -1; + __q_size_119 = -1; + __p_size_field_121 = -1; not sure how we arrive at those sizes - are we possibly confused by the + -16B in the MEM? enum { NUM_NL80211_BANDS }; ... int mcast_rate[NUM_NL80211_BANDS]; (probably too much reduced - that's 6 originally, but still with the same result). It's interesting that we have <bb 2> [local count: 1073741824]: sdata_14 = IEEE80211_DEV_TO_SUB_IF (dev_12(D)); ifmsh_15 = &sdata_14->u.mesh; so there's some odd "upcasting" happening here with applying a negative offset to &sdata_14->u.mesh, it's definitely "interesting", and objsz might think it can figure the size of what's being looked at (maybe again too much reduced here, ieee80211_if_mesh is quite a bit larger originally). Also interesting that the original doesn't reference vif.bss_conf.mcast_rate but vif.bss_conf.chanctx_conf - cvise must have reduced this somehow. So possibly the reduction is invalid, I'll attach the original preprocessed source.