From 9d5b4150d49b2c202c9439d2f6d4878f832c1fc7 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Mon, 26 Apr 2021 18:28:24 +0100 Subject: [PATCH] Throw StackTooDeep earlier (with sourcelocatiom) for inline assembly issues --- libsolidity/codegen/ContractCompiler.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libsolidity/codegen/ContractCompiler.cpp b/libsolidity/codegen/ContractCompiler.cpp index 30f517238..53b18419d 100644 --- a/libsolidity/codegen/ContractCompiler.cpp +++ b/libsolidity/codegen/ContractCompiler.cpp @@ -855,12 +855,6 @@ bool ContractCompiler::visit(InlineAssembly const& _inlineAssembly) ); solAssert(variable->type()->sizeOnStack() == 1, ""); solAssert(suffix == "slot", ""); - if (stackDiff > 16 || stackDiff < 1) - BOOST_THROW_EXCEPTION( - StackTooDeepError() << - errinfo_sourceLocation(_inlineAssembly.location()) << - errinfo_comment("Stack too deep(" + to_string(stackDiff) + "), try removing local variables.") - ); } else if (variable->type()->dataStoredIn(DataLocation::CallData)) { @@ -877,6 +871,12 @@ bool ContractCompiler::visit(InlineAssembly const& _inlineAssembly) else solAssert(suffix.empty(), ""); + if (stackDiff > 16 || stackDiff < 1) + BOOST_THROW_EXCEPTION( + StackTooDeepError() << + errinfo_sourceLocation(_inlineAssembly.location()) << + errinfo_comment("Stack too deep(" + to_string(stackDiff) + "), try removing local variables.") + ); _assembly.appendInstruction(swapInstruction(stackDiff)); _assembly.appendInstruction(Instruction::POP); }