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

--- Comment #2 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:f1c807e887d43551bca0acc16a438d880cfaf7c9

commit r10-6383-gf1c807e887d43551bca0acc16a438d880cfaf7c9
Author: David Malcolm <dmalc...@redhat.com>
Date:   Fri Jan 31 12:05:03 2020 -0500

    analyzer: fix ICE getting void return value (PR 93379)

    PR analyzer/93379 reports an ICE within
    region_model::update_for_return_superedge when writing the
    returned svalue_id to the lhs of the call_stmt

    The root cause is that this analyzer code assumed that for any call
    with a non-NULL gimple_call_lhs, the called fndecl would have non-void
    return type, and thus that a non-null svalue_id would be returned from
    region_model::pop_frame.  This isn't the case e.g. for a call with
    conflicting types where the callee returns void but the caller assumes
    int.

    This patch fixes the ICE by moving the check for null result so that
    it also guards setting the lhs.

    gcc/analyzer/ChangeLog:
        PR analyzer/93379
        * region-model.cc (region_model::update_for_return_superedge):
        Move check for null result so that it also guards setting the
        lhs.

    gcc/testsuite/ChangeLog:
        PR analyzer/93379
        * gcc.dg/analyzer/torture/pr93379-2.c: New test.
        * gcc.dg/analyzer/torture/pr93379.c: New test.

Reply via email to