[Bug analyzer/94999] internal compiler error: in saved_diagnostic

dmalcolm at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri May 8 13:14:46 GMT 2020


David Malcolm <dmalcolm at gcc dot gnu.org> changed:

           What    |Removed                     |Added
         Resolution|---                         |DUPLICATE
             Status|UNCONFIRMED                 |RESOLVED
             Blocks|                            |95006

--- Comment #1 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
Thanks for filing this.

I'm able to reproduce this with the revision in question
(f883c46b4877f637e0fa5025b4d6b5c9040ec566), but it's fixed in GCC 10.1

It's an assertion failure here:

#1  0x000000000242ee44 in ana::saved_diagnostic::saved_diagnostic
(this=0x3c6ca60, sm=0x0, enode=0x3ce0b20, 
    snode=0x332a110, stmt=0x0, stmt_finder=0x0, var=<tree 0x0>, state=0,
    at ../../src/gcc/analyzer/diagnostic-manager.cc:84
84        gcc_assert (m_stmt || m_stmt_finder);

when handling a false positive from -Wanalyzer-use-of-uninitialized-value,
which I removed in r10-8012-g78b9783774bfd3540f38f5b1e3c7fc9f719653d7.

The diagnostic is generated when analyzing the return from mk_entry to
memory_ensure_mapped_range on this code:

static struct entry
mk_entry(uint64_t start, uint64_t end)
    return (struct entry) {safe_calloc(end - start, 1), start, end};

I think -fanalyzer is failing to handle a CONSTRUCTOR tree code (on those
{...}), and thus is erroneously treating the return value as uninitialized,
when the code looks correct to me.

The failure to handle CONSTRUCTOR tree codes is PR analyzer/94447, so I'm going
to close this out as a duplicate of that bug; clearly it needs to be fixed in
order to reimplement -Wanalyzer-use-of-uninitialized-value; adding to the
analyzer-uninit tracker bug.

*** This bug has been marked as a duplicate of bug 94447 ***

Referenced Bugs:

[Bug 95006] Reimplement -Wanalyzer-use-of-uninitialized-value

More information about the Gcc-bugs mailing list