https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104076
--- Comment #3 from Martin Sebor <msebor at gcc dot gnu.org> --- Looking at the IL before r12-6694 I'm not sure I see what could be done to keep the warning from triggering but maybe someone has an idea for a solution I'm not seeing, in case this comes back with a different test case. struct S2 f2 (bool b) { const struct S1 D.2507[1]; ... <bb 2> : cleanup.1_26 = 0; cleanup.2_27 = 0; if (b_28(D) != 0) goto <bb 3>; [INV] else goto <bb 4>; [INV] <bb 3> : f1 (); goto <bb 6>; [INV] <bb 4> : _29 = &D.2507; <<< &D.2507 _30 = _29; _31 = 0; cleanup.1_32 = 1; S1::S1 (_30, 0); <bb 5> : _35 = _30 + 1; _36 = _31 + -1; retval.0_37 = _29; _38 = 0; cleanup.2_39 = 1; D.2529.array = &D.2507; D.2529.nelts = 1; S2::S2 (&D.2525, D.2529); <bb 6> : # _7 = PHI <_29(5), _44(D)(3)> <<< _7 == _29(5) == &D.2507 or undefined # _9 = PHI <_38(5), _45(D)(3)> # cleanup.1_13 = PHI <cleanup.1_32(5), cleanup.1_26(3)> # cleanup.2_15 = PHI <cleanup.2_39(5), cleanup.2_27(3)> if (cleanup.2_15 != 0) goto <bb 7>; [INV] else goto <bb 10>; [INV] <bb 7> : _46 = &D.2507 + 1; <bb 8> : # _5 = PHI <_46(7), _47(9)> if (&D.2507 == _5) goto <bb 10>; [INV] else goto <bb 9>; [INV] <bb 9> : _47 = _5 + 18446744073709551615; S1::~S1 (_47); goto <bb 8>; [INV] <bb 10> : D.2507 ={v} {CLOBBER}; <<< D.2507 clobbered if (cleanup.1_13 != 0) goto <bb 11>; [INV] else goto <bb 15>; [INV] <bb 11> : if (_7 != 0B) goto <bb 12>; [INV] else goto <bb 15>; [INV] <bb 12> : _1 = -_9; _2 = (sizetype) _1; _50 = _7 + _2; <bb 13> : # _11 = PHI <_50(12), _51(14)> <<< _11 points to &D.2507 if (_11 == _7) <<< -Wdangling-pointer goto <bb 15>; [INV] else goto <bb 14>; [INV] <bb 14> : _51 = _11 + 18446744073709551615; <<< _51 S1::~S1 (_51); goto <bb 13>; [INV] <bb 15> : return D.2525; ... } cc1plus.r12-6693: all warnings being treated as errors