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

Reply via email to