From 98f00351cb359175dd8f35bbd3a069947acf2aaf Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Mon, 2 Jun 2025 10:50:05 +0000 Subject: [PATCH] Fix statement-expression expansion for Kani-provided quantifiers CBMC side of https://github.com/model-checking/kani/issues/4020: re-using the same converter instance would confuse finish-gotos (when really we don't want gotos inside the statement expression to be considered at all by the main goto-converter instances). --- src/ansi-c/goto-conversion/goto_clean_expr.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/ansi-c/goto-conversion/goto_clean_expr.cpp b/src/ansi-c/goto-conversion/goto_clean_expr.cpp index 4a605141902..5e49ce90f98 100644 --- a/src/ansi-c/goto-conversion/goto_clean_expr.cpp +++ b/src/ansi-c/goto-conversion/goto_clean_expr.cpp @@ -61,9 +61,11 @@ static exprt convert_statement_expression( const quantifier_exprt &qex, const code_expressiont &code, const irep_idt &mode, - goto_convertt &converter) + symbol_table_baset &symbol_table, + message_handlert &message_handler) { goto_programt where; + goto_convertt converter{symbol_table, message_handler}; converter.goto_convert(code, where, mode); where.compute_location_numbers(); @@ -716,7 +718,8 @@ goto_convertt::clean_expr_resultt goto_convertt::clean_expr( code.operands()[0].get_named_sub()[ID_statement].id() == ID_statement_expression) { - auto res = convert_statement_expression(qex, code, mode, *this); + auto res = convert_statement_expression( + qex, code, mode, symbol_table, get_message_handler()); qex.where() = res; return clean_expr(res, mode, result_is_used); }