From ae9cc2bf3b8e82235f9ffc58ff0e9b515ffa03d3 Mon Sep 17 00:00:00 2001 From: Vladislav Abrosimov Date: Wed, 4 Jun 2025 09:19:10 +0300 Subject: [PATCH] Fix set iterators invalidation in find_parameters --- src/ProjectParameters/projectParameters.cpp | 8 ++++++-- src/ProjectParameters/projectParameters.h | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/ProjectParameters/projectParameters.cpp b/src/ProjectParameters/projectParameters.cpp index af7c038..997f57c 100644 --- a/src/ProjectParameters/projectParameters.cpp +++ b/src/ProjectParameters/projectParameters.cpp @@ -131,9 +131,9 @@ static void lookup_for_vars(set>& where_to_add if (worklist.count(result_arg)) { + worklist.erase(result_arg); processArgument(worklist, arg1, cur_instr, first_instr); processArgument(worklist, arg2, cur_instr, first_instr); - worklist.erase(result_arg); } if (instr->getOperation() == SAPFOR::CFG_OP::PARAM && worklist.count(arg1)) @@ -159,6 +159,8 @@ static void lookup_for_vars(set>& where_to_add const auto& RD = bblock->getRD_In(); map group_by_block; + + set to_erase; for (auto& arg : worklist) { if (RD.count(arg)) @@ -175,7 +177,7 @@ static void lookup_for_vars(set>& where_to_add __spf_print(1, "Please specify value of variable %s on line %d of file %s\n", arg->getValue().c_str(), line, filename); auto toAdd = make_tuple(stmt_after, var_name, MODE::BEFORE); where_to_add.insert(toAdd); - worklist.erase(arg); + to_erase.insert(arg); } else { @@ -186,6 +188,8 @@ static void lookup_for_vars(set>& where_to_add } } } + for (const auto& arg : to_erase) + worklist.erase(arg); while (bblock && group_by_block.find(bblock) == group_by_block.end()) bblock = bblock->getDom(); diff --git a/src/ProjectParameters/projectParameters.h b/src/ProjectParameters/projectParameters.h index 83a69e3..5be0d3c 100644 --- a/src/ProjectParameters/projectParameters.h +++ b/src/ProjectParameters/projectParameters.h @@ -5,7 +5,7 @@ #include #include -#include "..\GraphCall\graph_calls.h" +#include "../GraphCall/graph_calls.h" using ResultSet = std::set>;