https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93100
Martin Sebor <msebor at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Known to fail| |10.2.1, 11.0, 9.3.0 CC| |msebor at gcc dot gnu.org Component|sanitizer |middle-end Last reconfirmed|2020-01-09 00:00:00 |2021-4-16 Status|NEW |ASSIGNED Depends on| |98508 Assignee|unassigned at gcc dot gnu.org |msebor at gcc dot gnu.org --- Comment #2 from Martin Sebor <msebor at gcc dot gnu.org> --- Reconfirming with GCC 11. The reason for the false negative is that instrumentation functions injected by the sanitizers look to the warning like they might initialize the variables. That's simply because the warning hasn't been taught they're special and don't write to the variables. The patch in pr98508 comment 5 enables the warning. Let me submit it for GCC 12. void f () { struct A b; struct A a; int _1; <bb 2> : # .MEM_4 = VDEF <.MEM_3(D)> .ASAN_MARK (UNPOISON, &a, 8); <<< assumed to write to a # VUSE <.MEM_4> _1 = a.i; <<< missing warning if (_1 != 0) goto <bb 3>; [INV] else goto <bb 4>; [INV] <bb 3> : # .MEM_5 = VDEF <.MEM_4> b = a; <bb 4> : # .MEM_2 = PHI <.MEM_4(2), .MEM_5(3)> # .MEM_6 = VDEF <.MEM_2> .ASAN_MARK (POISON, &a, 8); # VUSE <.MEM_6> return; } Referenced Bugs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98508 [Bug 98508] Sanitizer disable -Wall and -Wextra