diff --git a/libsolidity/ast/Types.cpp b/libsolidity/ast/Types.cpp index 5ba3516be..6ca34824e 100644 --- a/libsolidity/ast/Types.cpp +++ b/libsolidity/ast/Types.cpp @@ -940,7 +940,7 @@ BoolResult RationalNumberType::isExplicitlyConvertibleTo(Type const& _convertTo) if (category == Category::FixedBytes) return false; else if (category == Category::Address) - return !(isNegative() || isFractional() || integerType()->numBits() > 160); + return !(isNegative() || isFractional() || !integerType() || integerType()->numBits() > 160); else if (category == Category::Integer) return false; else if (auto enumType = dynamic_cast(&_convertTo)) diff --git a/test/libsolidity/syntaxTests/types/address/literal_to_address_oversized.sol b/test/libsolidity/syntaxTests/types/address/literal_to_address_oversized.sol new file mode 100644 index 000000000..df362b2a4 --- /dev/null +++ b/test/libsolidity/syntaxTests/types/address/literal_to_address_oversized.sol @@ -0,0 +1,7 @@ +contract C { + function f() public pure { + address(0x11223345567aaaaaaaaaaaaaaaaaaaaaaaaaaaaa0112233445566778899001122); + } +} +// ---- +// TypeError 9640: (52-128): Explicit type conversion not allowed from "int_const 1239...(70 digits omitted)...8130" to "address".