|
| std::unique_ptr< operation > | clone () const override |
| const gcall & | get_gcall () const |
| void | execute (operation_context &op_ctxt) const override |
| bool | supports_bulk_merge_p () const final override |
| void | add_any_events_for_eedge (const exploded_edge &eedge, checker_path &out_path) const override |
| const call_and_return_op * | dyn_cast_call_and_return_op () const final override |
| tree | map_expr_from_caller_to_callee (tree callee_fndecl, tree caller_expr, callsite_expr *out) const |
| tree | map_expr_from_callee_to_caller (tree callee_fndecl, tree callee_expr, callsite_expr *out) const |
| | call_and_return_op (const gcall &call_stmt) |
| const known_function * | maybe_get_known_function (const call_details &cd) const |
| const gimple & | get_stmt () const |
| void | print_as_edge_label (pretty_printer *pp, bool user_facing) const override |
| bool | defines_ssa_name_p (const_tree ssa_name) const final override |
| void | walk_load_store_addr_ops (void *, walk_stmt_load_store_addr_fn, walk_stmt_load_store_addr_fn, walk_stmt_load_store_addr_fn) const final override |
| const gimple * | maybe_get_stmt () const final override |
| void | execute_on_state (operation_context &op_ctxt, program_state dst_state) const |
| bool | execute_for_feasibility (const exploded_edge &, feasibility_state &, region_model_context *, std::unique_ptr< rejected_constraint > *out_rc) const override |
| virtual bool | execute_for_feasibility (const exploded_edge &, feasibility_state &, region_model_context *, std::unique_ptr< rejected_constraint > @endverbatim *) const |
| void | dump () const |
| virtual void | update_state_for_bulk_merger (const program_state &, program_state &) const |
| virtual const control_flow_op * | dyn_cast_control_flow_op () const |
| virtual const phis_for_edge_op * | dyn_cast_phis_for_edge_op () const |
| enum kind | get_kind () const |
A concrete operation subclass representing the effect of a GIMPLE_CALL stmt.
If the function is identified and has a known body, either simulate
it interprocedurally by pushing a stack frame and transitioning to the
callee, or simulate it intraprocedurally by replaying a summary of the
effects of the call.
If the function is identified but has an unknown body,
simulate it intraprocedurally, either using a known_function
subclass for precision, or following conservative rules that
assume various side-effects.
If the function is unidentified (for some kinds of dynamic calls),
simulate it intraprocedurally, following conservative rules that
assume various side-effects.
In the various intraprocedural simulation cases, the exploded edge will
correspond to the underlying superedge.
In the interprocedural simulation case, the exploded edge will
link two supernodes in different functions, and thus will require
custom edge info.
Various subclasses exist for handling awkward special cases,
such as longjmp.