From e5b4d6cc50a04885779051a2308e8e706ccc8dab Mon Sep 17 00:00:00 2001 From: Mikhail Kocharmin Date: Sat, 6 Apr 2024 17:00:29 +0300 Subject: [PATCH 1/2] dead code: removing of if-else statement --- .../_src/Transformations/dead_code.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/sapfor/experts/Sapfor_2017/_src/Transformations/dead_code.cpp b/sapfor/experts/Sapfor_2017/_src/Transformations/dead_code.cpp index 52f0458..bf9511c 100644 --- a/sapfor/experts/Sapfor_2017/_src/Transformations/dead_code.cpp +++ b/sapfor/experts/Sapfor_2017/_src/Transformations/dead_code.cpp @@ -527,20 +527,23 @@ void removeDeadCode(SgStatement* func, for (auto st = start; st != end; st = st->lexNext()) { const int var = st->variant(); - if ((var == FOR_NODE || var == WHILE_NODE || var == IF_NODE || var == SWITCH_NODE) && + if ((var == FOR_NODE || var == WHILE_NODE || var == SWITCH_NODE) && st->lexNext()->variant() == CONTROL_END) { remove.push_back(st); - continue; } - - if (var == IF_NODE) + else if (var == IF_NODE) { - SgStatement* ifS = st; - while (ifS->lexNext()->variant() == ELSEIF_NODE) + SgStatement* ifS = st->lexNext(); + while (ifS->variant() == ELSEIF_NODE) ifS = ifS->lexNext(); - if (ifS->lexNext()->variant() == CONTROL_END) + SgStatement* lastNode = st->lastNodeOfStmt(); + + while (ifS->variant() == CONTROL_END && ifS != lastNode) + ifS = ifS->lexNext(); + + if(ifS == lastNode) remove.push_back(st); } -- 2.49.1 From 5f3da5d708dd1eafae8354f50799eb8179ba1952 Mon Sep 17 00:00:00 2001 From: Mikhail Kocharmin Date: Sat, 6 Apr 2024 17:52:18 +0300 Subject: [PATCH 2/2] dead code: fix for if-else statements --- .../experts/Sapfor_2017/_src/Transformations/dead_code.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sapfor/experts/Sapfor_2017/_src/Transformations/dead_code.cpp b/sapfor/experts/Sapfor_2017/_src/Transformations/dead_code.cpp index bf9511c..615c939 100644 --- a/sapfor/experts/Sapfor_2017/_src/Transformations/dead_code.cpp +++ b/sapfor/experts/Sapfor_2017/_src/Transformations/dead_code.cpp @@ -534,11 +534,12 @@ void removeDeadCode(SgStatement* func, } else if (var == IF_NODE) { - SgStatement* ifS = st->lexNext(); - while (ifS->variant() == ELSEIF_NODE) + SgStatement* ifS = st; + while (ifS->lexNext()->variant() == ELSEIF_NODE) ifS = ifS->lexNext(); - SgStatement* lastNode = st->lastNodeOfStmt(); + SgStatement* lastNode = ifS->lastNodeOfStmt(); + ifS = ifS->lexNext(); while (ifS->variant() == CONTROL_END && ifS != lastNode) ifS = ifS->lexNext(); -- 2.49.1