Fix removal of memory stores in inline assembly blocks.

This commit is contained in:
chriseth
2022-06-10 17:32:28 +02:00
committed by Daniel Kirchner
parent 14cdb76e4b
commit 51ef6a62da
4 changed files with 15 additions and 2 deletions
+9 -1
View File
@@ -31,6 +31,8 @@
#include <libyul/ControlFlowSideEffectsCollector.h>
#include <libyul/AST.h>
#include <libyul/backends/evm/EVMDialect.h>
#include <libsolutil/CommonData.h>
#include <libevmasm/Instruction.h>
@@ -76,7 +78,13 @@ void UnusedStoreEliminator::run(OptimiserStepContext& _context, Block& _ast)
ignoreMemory
};
rse(_ast);
rse.changeUndecidedTo(State::Unused, Location::Memory);
if (
auto evmDialect = dynamic_cast<EVMDialect const*>(&_context.dialect);
evmDialect && evmDialect->providesObjectAccess()
)
rse.changeUndecidedTo(State::Unused, Location::Memory);
else
rse.changeUndecidedTo(State::Used, Location::Memory);
rse.changeUndecidedTo(State::Used, Location::Storage);
rse.scheduleUnusedForDeletion();