analyzer: avoid ICE with missing arguments (PR 93375)
authorDavid Malcolm <dmalcolm@redhat.com>
Wed, 22 Jan 2020 21:26:38 +0000 (16:26 -0500)
committerDavid Malcolm <dmalcolm@redhat.com>
Thu, 23 Jan 2020 16:24:16 +0000 (11:24 -0500)
commit648796dab42b6e839f10fee5835f24cd2016a9f4
tree364511210390da46f64c760f2c83b64632d8a137
parent6d00f052ef209bacdd93f503b0c5fb428cc6c434
analyzer: avoid ICE with missing arguments (PR 93375)

PR analyzer/93375 reports an ICE under certain circumstances
involving a call where the number of arguments at the callsite
is less than the parameter count of the callee,

Specifically, the ICE occurs when pruning a checker_path for a
diagnostic, when attempting to maintain which expression is of
interest through such a call.

The root cause is an assumption that there were enough arguments at
the callsite, within callgraph_superedge's methods for mapping
expressions between callee and caller.

This patch adds checks for this to the relevant methods, fixing the ICE.

gcc/analyzer/ChangeLog:
PR analyzer/93375
* supergraph.cc (callgraph_superedge::get_arg_for_parm): Fail
gracefully is the number of parameters at the callee exceeds the
number of arguments at the call stmt.
(callgraph_superedge::get_parm_for_arg): Likewise.

gcc/testsuite/ChangeLog:
PR analyzer/93375
* gcc.dg/analyzer/pr93375.c: New test.
gcc/analyzer/ChangeLog
gcc/analyzer/supergraph.cc
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/analyzer/pr93375.c [new file with mode: 0644]