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

--- Comment #8 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by David Malcolm <dmalc...@gcc.gnu.org>:

https://gcc.gnu.org/g:132902177138c09803d639e12b1daebf2b9edddc

commit r12-5585-g132902177138c09803d639e12b1daebf2b9edddc
Author: David Malcolm <dmalc...@redhat.com>
Date:   Mon Nov 29 11:47:47 2021 -0500

    analyzer: further false leak fixes due to overzealous state merging
[PR103217]

    Commit r12-5424-gf573d35147ca8433c102e1721d8c99fc432cb44b fixed a false
    positive from -Wanalyzer-malloc-leak due to overzealous state merging,
    erroneously merging two different svalues bound to a particular part
    of the store when one has sm-state.

    A further case was discovered by the reporter of PR analyzer/103217,
    which this patch fixes.  In this variant, different states have set
    different fields of a struct, and on attempting to merge them, the
    states have a different set of binding keys, leading to one state
    having an svalue with sm-state, and its peer state having a NULL value
    for that binding key.  The state merger code was erroneously treating
    them as mergeable to "UNKNOWN".  This followup patch fixes things by
    rejecting such mergers if the non-NULL svalue is not mergeable with
    "UNKNOWN".

    gcc/analyzer/ChangeLog:
            PR analyzer/103217
            * store.cc (binding_cluster::can_merge_p): For the "key is bound"
            vs "key is not bound" merger case, check that the bound svalue
            is mergeable before merging it to "unknown", rejecting the merger
            otherwise.

    gcc/testsuite/ChangeLog:
            PR analyzer/103217
            * gcc.dg/analyzer/pr103217-2.c: New test.
            * gcc.dg/analyzer/pr103217-3.c: New test.
            * gcc.dg/analyzer/pr103217-4.c: New test.
            * gcc.dg/analyzer/pr103217-5.c: New test.

    Signed-off-by: David Malcolm <dmalc...@redhat.com>

Reply via email to