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

--- Comment #1 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:c9543403c19fdc3c3b5a8db8546340de085bd14e

commit r12-5815-gc9543403c19fdc3c3b5a8db8546340de085bd14e
Author: David Malcolm <dmalc...@redhat.com>
Date:   Mon Dec 6 14:04:35 2021 -0500

    analyzer: fix equivalence class state purging [PR103533]

    Whilst debugging state explosions seen when enabling taint detection
    with -fanalyzer (PR analyzer/103533), I noticed that constraint
    manager instances could contain stray, redundant constants, such
    as this instance:

    constraint_manager:
      equiv classes:
        ec0: {(int)0 == [m_constant]â0â}
        ec1: {(size_t)4 == [m_constant]â4â}
      constraints:

    where there are two equivalence classes, each just containing a
    constant, with no constraints using them.

    This patch makes constraint_manager::canonicalize more aggressive
    about purging state, handling the case of purging a redundant
    EC containing just a constant.

    gcc/analyzer/ChangeLog:
            PR analyzer/103533
            * constraint-manager.cc (equiv_class::contains_non_constant_p):
            New.
            (constraint_manager::canonicalize): Call it when determining
            redundant ECs.
            (selftest::test_purging): New selftest.
            (selftest::run_constraint_manager_tests): Likewise.
            * constraint-manager.h (equiv_class::contains_non_constant_p):
            New decl.

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

Reply via email to