https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98508

Martin Sebor <msebor at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever confirmed|0                           |1
                 CC|                            |msebor at gcc dot gnu.org
          Component|c++                         |middle-end
             Blocks|                            |24639
   Last reconfirmed|                            |2021-01-05

--- Comment #3 from Martin Sebor <msebor at gcc dot gnu.org> ---
It's possible (and obviously desirable) but difficult in general, which is why
it hasn't been done yet.

But in this case it shouldn't be hard: the warning is suppressed because the
code finds the ASAN_MARK (UNPOISON, &s, 4); call in the IL below, and treats it
like any other pass-by-reference call: it assumes that it might write to s and
thus initialize it.  The "fix" is simple: teach the warning that the .ASAN
directive doesn't do that.

int main ()
{
  int D.2825;

  {
    struct S s;

    try
      {
        .ASAN_MARK (UNPOISON, &s, 4);
        s = s;
      }
    finally
      {
        .ASAN_MARK (POISON, &s, 4);
      }
  }
  D.2825 = 0;
  return D.2825;
}


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=24639
[Bug 24639] [meta-bug] bug to track all Wuninitialized issues

Reply via email to