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

--- Comment #7 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:9bbcee450deb0f561b096924a3f148369333e54c

commit r13-3819-g9bbcee450deb0f561b096924a3f148369333e54c
Author: David Malcolm <dmalc...@redhat.com>
Date:   Tue Nov 8 17:49:07 2022 -0500

    analyzer: eliminate region_model::eval_condition_without_cm [PR101962]

    In r12-3094-ge82e0f149b0aba I added the assumption that
    POINTER_PLUS_EXPR of non-NULL is non-NULL (for PR analyzer/101962).

    Whilst working on another bug, I noticed that this only works
    when the LHS is known to be non-NULL via
    region_model::eval_condition_without_cm, but not when it's known through
    a constraint.

    This distinction predates the original commit of the analyzer in GCC 10,
    but I believe it became irrelevant in the GCC 11 rewrite of the region
    model code (r11-2694-g808f4dfeb3a95f).

    Hence this patch eliminates region_model::eval_condition_without_cm in
    favor of all users simply calling region_model::eval_condition.  Doing
    so enables the "POINTER_PLUS_EXPR of non-NULL is non-NULL" assumption to
    also be made when the LHS is known through a constraint (e.g. a
    conditional).

    gcc/analyzer/ChangeLog:
            PR analyzer/101962
            * region-model-impl-calls.cc: Update comment.
            * region-model.cc (region_model::check_symbolic_bounds): Fix
            layout of "void" return.  Replace usage of
            eval_condition_without_cm with eval_condition.
            (region_model::eval_condition): Take over body of...
            (region_model::eval_condition_without_cm): ...this subroutine,
            dropping the latter.  Eliminating this distinction avoids issues
            where constraints were not considered when recursing.
            (region_model::compare_initial_and_pointer): Update comment.
            (region_model::symbolic_greater_than): Replace usage of
            eval_condition_without_cm with eval_condition.
            * region-model.h
            (region_model::eval_condition_without_cm): Delete decl.

    gcc/testsuite/ChangeLog:
            PR analyzer/101962
            * gcc.dg/analyzer/data-model-23.c (test_3): New test.

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

Reply via email to