From 1e9e1db084fc0b0498f19cbe3b61c7c8e4b95ecf Mon Sep 17 00:00:00 2001 From: Grigorii Gusev Date: Sat, 24 Feb 2024 18:11:28 +0300 Subject: [PATCH] private_removing: bugreport_1703086913 --- .../_src/Transformations/private_removing.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/sapfor/experts/Sapfor_2017/_src/Transformations/private_removing.cpp b/sapfor/experts/Sapfor_2017/_src/Transformations/private_removing.cpp index c5d94f7..96e4ba3 100644 --- a/sapfor/experts/Sapfor_2017/_src/Transformations/private_removing.cpp +++ b/sapfor/experts/Sapfor_2017/_src/Transformations/private_removing.cpp @@ -1474,7 +1474,8 @@ static vector buildDefUsePairs(Context* ctx, const CFG_Type& CF set RD_defArgs = RD_forUseArg->second; // make copy - // delete recursive definition from RD def args: + // delete recursive and uninit definition from RD def args: + set tmpRD_defArgs; for (int defArgNum : RD_defArgs) { if (defArgNum == SAPFOR::CFG_VAL::UNINIT) @@ -1487,11 +1488,11 @@ static vector buildDefUsePairs(Context* ctx, const CFG_Type& CF SgStatement* defStmt = defInsAndBlock.first->getOperator(); auto defInsertedStmt = findInsertedStmt(insertedStmts, defStmt); if (useInsertedStmt.relatedToStmt == defInsertedStmt->relatedToStmt) - { - RD_defArgs.erase(defArgNum); - break; - } + continue; + + tmpRD_defArgs.insert(defArgNum); } + RD_defArgs.swap(tmpRD_defArgs); if (RD_defArgs.size() == 0) // argument is not initialized { @@ -1551,6 +1552,9 @@ static vector buildDefUsePairs(Context* ctx, const CFG_Type& CF else { auto defInsAndBlock = getInstructionAndBlockByNumber(CFGraph, *RD_defArgs.begin()); + if (defInsAndBlock.first == nullptr) + printInternalError(convertFileName(__FILE__).c_str(), __LINE__); + defStmt = defInsAndBlock.first->getOperator(); }