diff --git a/src/interfaces/irdb/STARS_IRDB_Program.cpp b/src/interfaces/irdb/STARS_IRDB_Program.cpp index f79e98c359714c62c762d5abc5563b1306d98ff8..738cd067ff572d95e2e6a9418fa7e5ab45f34c3f 100644 --- a/src/interfaces/irdb/STARS_IRDB_Program.cpp +++ b/src/interfaces/irdb/STARS_IRDB_Program.cpp @@ -304,6 +304,19 @@ void STARS_IRDB_Program_t::GetBlockSuccessorTargets SuccList.push_back(STARS_InstructionID_t(irdb_insn->GetFallthrough()->GetBaseID())); if(irdb_insn->GetTarget()) SuccList.push_back(STARS_InstructionID_t(irdb_insn->GetTarget()->GetBaseID())); + + // if no IBTs or the analysis failed. + if(!irdb_insn->GetIBTargets() || !irdb_insn->GetIBTargets()->IsComplete()) + // don't include any + return; + + for(libIRDB::InstructionSet_t::iterator it=irdb_insn->GetIBTargets()->begin(); + it!=irdb_insn->GetIBTargets()->end(); ++it) + { + libIRDB::Instruction_t* target=*it; + assert(target); + SuccList.push_back(STARS_InstructionID_t(target->GetBaseID())); + } return; }