From fdd59818e2abf6043f4d45aeb157e95956c71088 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Wed, 27 Mar 2024 18:26:51 -0400 Subject: analyzer: fix ICE due to type mismatch when replaying call summary [PR114473] gcc/analyzer/ChangeLog: PR analyzer/114473 * call-summary.cc (call_summary_replay::convert_svalue_from_summary): Assert that the types match. (call_summary_replay::convert_region_from_summary): Likewise. (call_summary_replay::convert_region_from_summary_1): Add missing cast for the deref of RK_SYMBOLIC case. gcc/testsuite/ChangeLog: PR analyzer/114473 * gcc.dg/analyzer/call-summaries-pr114473.c: New test. Signed-off-by: David Malcolm --- gcc/analyzer/call-summary.cc | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'gcc/analyzer') diff --git a/gcc/analyzer/call-summary.cc b/gcc/analyzer/call-summary.cc index a569bb9..c2c9c71 100644 --- a/gcc/analyzer/call-summary.cc +++ b/gcc/analyzer/call-summary.cc @@ -235,6 +235,11 @@ call_summary_replay::convert_svalue_from_summary (const svalue *summary_sval) const svalue *caller_sval = convert_svalue_from_summary_1 (summary_sval); + if (caller_sval) + if (summary_sval->get_type () && caller_sval->get_type ()) + gcc_assert (types_compatible_p (summary_sval->get_type (), + caller_sval->get_type ())); + /* Add to cache. */ add_svalue_mapping (summary_sval, caller_sval); @@ -552,6 +557,11 @@ call_summary_replay::convert_region_from_summary (const region *summary_reg) const region *caller_reg = convert_region_from_summary_1 (summary_reg); + if (caller_reg) + if (summary_reg->get_type () && caller_reg->get_type ()) + gcc_assert (types_compatible_p (summary_reg->get_type (), + caller_reg->get_type ())); + /* Add to cache. */ add_region_mapping (summary_reg, caller_reg); @@ -603,6 +613,8 @@ call_summary_replay::convert_region_from_summary_1 (const region *summary_reg) = get_caller_model ()->deref_rvalue (caller_ptr_sval, NULL_TREE, get_ctxt ()); + caller_reg = mgr->get_cast_region (caller_reg, + summary_reg->get_type ()); return caller_reg; } break; -- cgit v1.1