Skip to content

Commit dfb7bf2

Browse files
committed
Report memoryguard in stack too deep error.
1 parent 9bcfcc6 commit dfb7bf2

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

libyul/backends/evm/EVMObjectCompiler.cpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
#include <libyul/backends/evm/EVMDialect.h>
2626
#include <libyul/backends/evm/OptimizedEVMCodeTransform.h>
2727

28+
#include <libyul/optimiser/FunctionCallFinder.h>
29+
2830
#include <libyul/Object.h>
2931
#include <libyul/Exceptions.h>
3032

@@ -74,7 +76,22 @@ void EVMObjectCompiler::run(Object& _object, bool _optimize)
7476
OptimizedEVMCodeTransform::UseNamedLabels::ForFirstFunctionOfEachName
7577
);
7678
if (!stackErrors.empty())
77-
BOOST_THROW_EXCEPTION(stackErrors.front());
79+
{
80+
vector<FunctionCall*> memoryGuardCalls = FunctionCallFinder::run(
81+
*_object.code,
82+
"memoryguard"_yulstring
83+
);
84+
auto stackError = stackErrors.front();
85+
string msg = stackError.comment() ? *stackError.comment() : "";
86+
if (memoryGuardCalls.empty())
87+
msg += "\nNo memoryguard was present. "
88+
"Consider using memory-safe assembly only and annotating it via "
89+
"\"/// @solidity memory-safe-assembly\".";
90+
else
91+
msg += "\nmemoryguard was present.";
92+
stackError << util::errinfo_comment(msg);
93+
BOOST_THROW_EXCEPTION(stackError);
94+
}
7895
}
7996
else
8097
{

0 commit comments

Comments
 (0)