fix UB in dom tree builder

This commit is contained in:
2025-06-04 09:18:24 +03:00
parent b454858647
commit c6a0c73287
2 changed files with 4 additions and 8 deletions

View File

@@ -73,13 +73,7 @@ namespace SAPFOR
const std::vector<BasicBlock*>& getNext() const { return next; } const std::vector<BasicBlock*>& getNext() const { return next; }
const std::vector<BasicBlock*>& getPrev() const { return prev; } const std::vector<BasicBlock*>& getPrev() const { return prev; }
BasicBlock* getDom() const BasicBlock* getDom() const
{ {
if (!directDominator)
{
__spf_print(1, "%s\n", "the dominator tree was built with an error or was not built at all");
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
}
return directDominator; return directDominator;
} }

View File

@@ -64,6 +64,8 @@ namespace SAPFOR {
int w = vertex[i]; int w = vertex[i];
for (BasicBlock* v : vertices[w]->getPrev()) { for (BasicBlock* v : vertices[w]->getPrev()) {
if (dfs_num[v] == -1)
continue;
int u = Eval(dfs_num[v]); int u = Eval(dfs_num[v]);
if (semi[u] < semi[w]) if (semi[u] < semi[w])
@@ -97,4 +99,4 @@ namespace SAPFOR {
void buildDominatorTree(std::vector<BasicBlock*>& blocks) { void buildDominatorTree(std::vector<BasicBlock*>& blocks) {
DominatorFinder finder(blocks); DominatorFinder finder(blocks);
} }
} }