From 79c5d032fee1d9e96db9540dbafd312626d7711a Mon Sep 17 00:00:00 2001 From: chriseth Date: Fri, 18 Dec 2015 13:56:37 +0100 Subject: [PATCH] Fix bug preventing overloads of different array types. --- libsolidity/ast/Types.cpp | 2 ++ test/libsolidity/SolidityNameAndTypeResolution.cpp | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/libsolidity/ast/Types.cpp b/libsolidity/ast/Types.cpp index 493470225..e5a120ee3 100644 --- a/libsolidity/ast/Types.cpp +++ b/libsolidity/ast/Types.cpp @@ -831,6 +831,8 @@ bool ArrayType::operator==(Type const& _other) const other.isDynamicallySized() != isDynamicallySized() ) return false; + if (*other.baseType() != *baseType()) + return false; return isDynamicallySized() || length() == other.length(); } diff --git a/test/libsolidity/SolidityNameAndTypeResolution.cpp b/test/libsolidity/SolidityNameAndTypeResolution.cpp index 1242e801a..45ac48aab 100644 --- a/test/libsolidity/SolidityNameAndTypeResolution.cpp +++ b/test/libsolidity/SolidityNameAndTypeResolution.cpp @@ -2743,6 +2743,17 @@ BOOST_AUTO_TEST_CASE(invalid_args_creating_memory_array) BOOST_CHECK(expectError(text) == Error::Type::TypeError); } +BOOST_AUTO_TEST_CASE(function_overload_array_type) +{ + char const* text = R"( + contract M { + function f(uint[] values); + function f(int[] values); + } + )"; + BOOST_CHECK(success(text)); +} + /*BOOST_AUTO_TEST_CASE(inline_array_declaration_and_passing) { char const* text = R"(