From: Ankur Saini Date: Wed, 25 Aug 2021 07:03:06 +0000 (+0530) Subject: analyzer: Impose recursion limit on indirect calls. X-Git-Tag: basepoints/gcc-13~5174 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=43a5d46feabd93ba78983919234f05f5fc9a0982;p=thirdparty%2Fgcc.git analyzer: Impose recursion limit on indirect calls. 2021-08-25 Ankur Saini gcc/analyzer/ChangeLog: PR analyzer/101980 * engine.cc (exploded_graph::maybe_create_dynamic_call): Don't create calls if max recursion limit is reached. --- diff --git a/gcc/analyzer/engine.cc b/gcc/analyzer/engine.cc index 4ee92794941b..9c604d1eb8cd 100644 --- a/gcc/analyzer/engine.cc +++ b/gcc/analyzer/engine.cc @@ -3059,6 +3059,20 @@ exploded_graph::maybe_create_dynamic_call (const gcall *call, new_point.push_to_call_stack (sn_exit, next_point.get_supernode()); + + /* Impose a maximum recursion depth and don't analyze paths + that exceed it further. + This is something of a blunt workaround, but it only + applies to recursion (and mutual recursion), not to + general call stacks. */ + if (new_point.get_call_string ().calc_recursion_depth () + > param_analyzer_max_recursion_depth) + { + if (logger) + logger->log ("rejecting call edge: recursion limit exceeded"); + return false; + } + next_state.push_call (*this, node, call, uncertainty); if (next_state.m_valid)