From d721bbe504a29c3e95d5d277758c161e2b7c8d9a Mon Sep 17 00:00:00 2001 From: chriseth Date: Mon, 3 May 2021 12:19:46 +0200 Subject: [PATCH] Respect memory model in forwarding revert inside catch. --- libsolidity/codegen/ir/IRGeneratorForStatements.cpp | 13 +------------ libsolidity/codegen/ir/IRGeneratorForStatements.h | 3 --- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/libsolidity/codegen/ir/IRGeneratorForStatements.cpp b/libsolidity/codegen/ir/IRGeneratorForStatements.cpp index e59fde079..fc33065ef 100644 --- a/libsolidity/codegen/ir/IRGeneratorForStatements.cpp +++ b/libsolidity/codegen/ir/IRGeneratorForStatements.cpp @@ -3093,7 +3093,7 @@ void IRGeneratorForStatements::handleCatch(TryStatement const& _tryStatement) if (_tryStatement.fallbackClause()) handleCatchFallback(*_tryStatement.fallbackClause()); else - rethrow(); + m_code << m_utils.forwardingRevertFunction() << "()\n"; m_code << "}\n"; } @@ -3115,17 +3115,6 @@ void IRGeneratorForStatements::handleCatchFallback(TryCatchClause const& _fallba _fallback.accept(*this); } -void IRGeneratorForStatements::rethrow() -{ - if (m_context.evmVersion().supportsReturndata()) - m_code << R"( - returndatacopy(0, 0, returndatasize()) - revert(0, returndatasize()) - )"s; - else - m_code << "revert(0, 0) // rethrow\n"s; -} - void IRGeneratorForStatements::revertWithError( string const& _signature, vector const& _parameterTypes, diff --git a/libsolidity/codegen/ir/IRGeneratorForStatements.h b/libsolidity/codegen/ir/IRGeneratorForStatements.h index 90504aa7f..f8a581b5f 100644 --- a/libsolidity/codegen/ir/IRGeneratorForStatements.h +++ b/libsolidity/codegen/ir/IRGeneratorForStatements.h @@ -103,9 +103,6 @@ private: void handleCatch(TryStatement const& _tryStatement); void handleCatchFallback(TryCatchClause const& _fallback); - /// Generates code to rethrow an exception. - void rethrow(); - /// Generates code to revert with an error. The error arguments are assumed to /// be already evaluated and available in local IRVariables, but not yet /// converted.