https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80548
Martin Sebor <msebor at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Blocks| |24639 Last reconfirmed|2017-04-28 00:00:00 |2021-4-13 CC| |msebor at gcc dot gnu.org Known to fail| |11.0 --- Comment #2 from Martin Sebor <msebor at gcc dot gnu.org> --- Reconfirmed with GCC 11 and the IL below annotated with my comments. I don't see anything in the IL to rule out the uninitialized use: void f (int b) { int y; int x; int _1; <bb 2> [local count: 59055799]: if (b_5(D) != 0) goto <bb 3>; [33.00%] else goto <bb 11>; [67.00%] >>> b == 0 <bb 3> [local count: 19488414]: # .MEM_9 = VDEF <.MEM_8(D)> x_10 = g (); # .MEM_11 = VDEF <.MEM_9> y_12 = g (); goto <bb 6>; [100.00%] >>> b != 0 <bb 4> [local count: 1014686025]: if (b_5(D) != 0) goto <bb 5>; [5.50%] else goto <bb 10>; [94.50%] <bb 10> [local count: 958878294]: goto <bb 8>; [100.00%] <bb 5> [local count: 55807731]: <<< x_17 used when g() != 0 AND b != 0 # .MEM_14 = VDEF <.MEM_13> h (x_17, y_2); <<< warning for x_17 # .MEM_15 = VDEF <.MEM_14> y_16 = g (); goto <bb 7>; [100.00%] <bb 11> [local count: 39567385]: <<< b == 0 <bb 6> [local count: 59055799]: <<< x_6(D) uninitialized when b != 0 OR b == 0 # x_17 = PHI <x_10(3), x_6(D)(11)> <<< x_17 <-- x_6(D)(11) # y_18 = PHI <y_12(3), y_7(D)(11)> # .MEM_19 = PHI <.MEM_11(3), .MEM_8(D)(11)> <bb 7> [local count: 114863530]: # y_2 = PHI <y_18(6), y_16(5)> # .MEM_20 = PHI <.MEM_19(6), .MEM_15(5)> <bb 8> [local count: 1073741824]: # .MEM_4 = PHI <.MEM_20(7), .MEM_13(10)> # .MEM_13 = VDEF <.MEM_4> _1 = g (); if (_1 != 0) goto <bb 4>; [94.50%] >>> g() != 0 else goto <bb 9>; [5.50%] <bb 9> [local count: 59055800]: # VUSE <.MEM_13> return; Referenced Bugs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=24639 [Bug 24639] [meta-bug] bug to track all Wuninitialized issues