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); }