aboutsummaryrefslogtreecommitdiffstats
path: root/libevmasm
diff options
context:
space:
mode:
Diffstat (limited to 'libevmasm')
-rw-r--r--libevmasm/ControlFlowGraph.cpp7
-rw-r--r--libevmasm/ControlFlowGraph.h2
2 files changed, 5 insertions, 4 deletions
diff --git a/libevmasm/ControlFlowGraph.cpp b/libevmasm/ControlFlowGraph.cpp
index 61b24e4b..d4801562 100644
--- a/libevmasm/ControlFlowGraph.cpp
+++ b/libevmasm/ControlFlowGraph.cpp
@@ -250,10 +250,11 @@ void ControlFlowGraph::gatherKnowledge()
KnownStatePointer state = item.state;
if (block.startState)
{
- if (m_joinKnowledge)
- state->reduceToCommonKnowledge(*block.startState, !item.blocksSeen.count(item.blockId));
- else
+ // We call reduceToCommonKnowledge even in the non-join setting to get the correct
+ // sequence number
+ if (!m_joinKnowledge)
state->reset();
+ state->reduceToCommonKnowledge(*block.startState, !item.blocksSeen.count(item.blockId));
if (*state == *block.startState)
continue;
}
diff --git a/libevmasm/ControlFlowGraph.h b/libevmasm/ControlFlowGraph.h
index a6a9df8e..03a1f717 100644
--- a/libevmasm/ControlFlowGraph.h
+++ b/libevmasm/ControlFlowGraph.h
@@ -116,7 +116,7 @@ private:
unsigned m_lastUsedId = 0;
AssemblyItems const& m_items;
- bool m_joinKnowledge;
+ bool m_joinKnowledge = true;
std::map<BlockId, BasicBlock> m_blocks;
};