From 8272da0aea29a171bb56e47795ba68c1b5735044 Mon Sep 17 00:00:00 2001 From: wechman Date: Tue, 12 Jul 2022 12:20:22 +0200 Subject: [PATCH] Add test: operator_parameter_with_wrong_data_location --- libsolidity/ast/Types.cpp | 1 - .../operator_parameter_with_wrong_data_location.sol | 10 ++++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 test/libsolidity/syntaxTests/operators/custom/operator_parameter_with_wrong_data_location.sol diff --git a/libsolidity/ast/Types.cpp b/libsolidity/ast/Types.cpp index 7d8bef9cd..bc28d2253 100644 --- a/libsolidity/ast/Types.cpp +++ b/libsolidity/ast/Types.cpp @@ -403,7 +403,6 @@ FunctionDefinition const* Type::userDefinedOperator(Token _token, ASTNode const& function.libraryFunction() ? function.typeViaContractName() : function.type() ); solAssert(functionType && !functionType->parameterTypes().empty()); - // TODO does this work (data location)? solAssert(isImplicitlyConvertibleTo(*functionType->parameterTypes().front())); if ((_unaryOperation && function.parameterList().parameters().size() == 1) || (!_unaryOperation && function.parameterList().parameters().size() == 2)) diff --git a/test/libsolidity/syntaxTests/operators/custom/operator_parameter_with_wrong_data_location.sol b/test/libsolidity/syntaxTests/operators/custom/operator_parameter_with_wrong_data_location.sol new file mode 100644 index 000000000..35a549e55 --- /dev/null +++ b/test/libsolidity/syntaxTests/operators/custom/operator_parameter_with_wrong_data_location.sol @@ -0,0 +1,10 @@ +struct S { uint128 x; } + +using {add as +} for S; + +function add(S memory, S storage) returns (S memory) { + return S(0); +} + +// ---- +// TypeError 1884: (32-35): The function "add" needs to have two parameters of equal type to be used for the operator +.