[Bug middle-end/88897] [9/10/11 Regression] Bogus maybe-uninitialized warning on class field (missed CSE)

2021-04-08 Thread rguenth at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88897

Richard Biener  changed:

   What|Removed |Added

   Target Milestone|--- |9.4

[Bug middle-end/88897] [9/10/11 Regression] Bogus maybe-uninitialized warning on class field (missed CSE)

2021-04-06 Thread msebor at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88897

Martin Sebor  changed:

   What|Removed |Added

Summary|Bogus maybe-uninitialized   |[9/10/11 Regression] Bogus
   |warning on class field  |maybe-uninitialized warning
   |(missed CSE)|on class field (missed CSE)

--- Comment #8 from Martin Sebor  ---
The warning first appeared in r245840 (GCC 7.0.1 20170302), ironically
committed to fix PR tree-optimization/79345 (passing yet-uninitialized member
as argument to base class constructor should warn (-Wunitialized)).  The IL
emitted just before that revision doesn't look all that different:

void foo() ()
{
  struct future_stateD.2397 _local_stateD.2411;
  struct future_stateD.2397 * _4;
  charD.10 * _6;
  voidD.45 * _7;
  boolD.2220 _8;

;;   basic block 2, loop depth 0, count 0, freq 1, maybe hot
;;prev block 0, next block 7, flags: (NEW, REACHABLE, VISITED)
;;pred:   ENTRY [100.0%]  (FALLTHRU,EXECUTABLE)
  # .MEM_3 = VDEF <.MEM_2(D)>
  # PT = nonlocal escaped null 
  # USE = nonlocal null { D.2411 } (escaped)
  # CLB = nonlocal null { D.2411 } (escaped)
  _4 = _Z3barvD.2407 ();
  # .MEM_5 = VDEF <.MEM_3>
  # USE = nonlocal null { D.2411 } (escaped)
  # CLB = nonlocal null { D.2411 } (escaped)
  _ZN12future_stateC1EvD.2402 (&_local_stateD.2411);
  # .MEM_10 = VDEF <.MEM_5>
  MEM[(struct  &)&_local_stateD.2411] ={v} {CLOBBER};
  # .MEM_11 = VDEF <.MEM_10>
  MEM[(struct optionalD.2323 *)&_local_stateD.2411]._M_engagedD.2340 = 0;
  # PT = nonlocal escaped null 
  _7 = &_4->valueD.2401;
  if (_7 != 0B)
goto ; [73.26%]
  else
goto ; [26.74%]
;;succ:   4 [73.3%]  (TRUE_VALUE,EXECUTABLE)
;;7 [26.7%]  (FALSE_VALUE,EXECUTABLE)

;;   basic block 7, loop depth 0, count 0, freq 2674, maybe hot
;;prev block 2, next block 3, flags: (NEW)
;;pred:   2 [26.7%]  (FALSE_VALUE,EXECUTABLE)
;;succ:   3 [100.0%]  (FALLTHRU)

;;   basic block 3, loop depth 0, count 0, freq 6044, maybe hot
;;prev block 7, next block 4, flags: (NEW, REACHABLE, VISITED)
;;pred:   7 [100.0%]  (FALLTHRU)
;;8 [100.0%]  (FALLTHRU)
  # .MEM_17 = PHI <.MEM_11(7), .MEM_13(8)>
  goto ; [100.00%]
;;succ:   6 [100.0%]  (FALLTHRU,EXECUTABLE)

;;   basic block 4, loop depth 0, count 0, freq 7326, maybe hot
;;prev block 3, next block 8, flags: (NEW, REACHABLE, VISITED)
;;pred:   2 [73.3%]  (TRUE_VALUE,EXECUTABLE)
  # .MEM_13 = VDEF <.MEM_11>
  MEM[(struct optionalD.2323 *)_4]._M_engagedD.2340 = 0;
  # VUSE <.MEM_13>
  _8 = MEM[(struct optionalD.2323 &)&_local_stateD.2411]._M_engagedD.2340;
  if (_8 != 0)
goto ; [54.00%]
  else
goto ; [46.00%]
;;succ:   5 [54.0%]  (TRUE_VALUE,EXECUTABLE)
;;8 [46.0%]  (FALSE_VALUE,EXECUTABLE)

;;   basic block 8, loop depth 0, count 0, freq 3370, maybe hot
;;prev block 4, next block 5, flags: (NEW)
;;pred:   4 [46.0%]  (FALSE_VALUE,EXECUTABLE)
  goto ; [100.00%]
;;succ:   3 [100.0%]  (FALLTHRU)

;;   basic block 5, loop depth 0, count 0, freq 3956, maybe hot
;;prev block 8, next block 6, flags: (NEW, REACHABLE, VISITED)
;;pred:   4 [54.0%]  (TRUE_VALUE,EXECUTABLE)
  # VUSE <.MEM_13>
  # PT = nonlocal escaped null 
  _6 = MEM[(struct temporary_bufferD.2301 &)&_local_stateD.2411]._bufferD.2303;
  # .MEM_15 = VDEF <.MEM_13>
  MEM[(struct temporary_bufferD.2301 *)_4]._bufferD.2303 = _6;
  # .MEM_16 = VDEF <.MEM_15>
  MEM[(struct optionalD.2323 *)_4]._M_engagedD.2340 = 1;
;;succ:   6 [100.0%]  (FALLTHRU,EXECUTABLE)

;;   basic block 6, loop depth 0, count 0, freq 1, maybe hot
;;prev block 5, next block 1, flags: (NEW, REACHABLE, VISITED)
;;pred:   5 [100.0%]  (FALLTHRU,EXECUTABLE)
;;3 [100.0%]  (FALLTHRU,EXECUTABLE)
  # .MEM_1 = PHI <.MEM_16(5), .MEM_17(3)>
  # .MEM_9 = VDEF <.MEM_1>
  _local_stateD.2411 ={v} {CLOBBER};
  # VUSE <.MEM_9>
  return;
;;succ:   EXIT [100.0%] 

}