From c8846eb01a88630ec8e768805438c71863725dd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Tue, 11 Aug 2015 10:21:07 +0200 Subject: [PATCH] Do not modify pops counter of LocalStack during finalization. That fixes LocalStack::size() returning incorrect values after LocalStack::finalize() has been called. --- evmjit/libevmjit/BasicBlock.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/evmjit/libevmjit/BasicBlock.cpp b/evmjit/libevmjit/BasicBlock.cpp index 69a7a91d6..a60d1ba35 100644 --- a/evmjit/libevmjit/BasicBlock.cpp +++ b/evmjit/libevmjit/BasicBlock.cpp @@ -122,17 +122,18 @@ void LocalStack::finalize(llvm::IRBuilder<>& _builder, llvm::BasicBlock& _bb) } // Add new items + auto pops = m_globalPops; // Copy pops counter to keep original value for (auto& item: m_local) { - if (m_globalPops) // Override poped global items - m_global.set(--m_globalPops, item); // using pops counter as the index + if (pops) // Override poped global items + m_global.set(--pops, item); // using pops counter as the index else m_global.push(item); } // Pop not overriden items - if (m_globalPops) - m_global.pop(m_globalPops); + if (pops) + m_global.pop(pops); } }