From 4d5216c2e0bdfb1b0098451215a2e7d12f65055f Mon Sep 17 00:00:00 2001 From: Christian Parpart Date: Tue, 2 Oct 2018 15:31:55 +0200 Subject: Fixes large rational number literals being wrongly interpreted. Fixes #5052. --- test/libsolidity/syntaxTests/types/rational_number_huge.sol | 10 ++++++++++ .../syntaxTests/types/rational_number_huge_fail.sol | 8 ++++++++ 2 files changed, 18 insertions(+) create mode 100644 test/libsolidity/syntaxTests/types/rational_number_huge.sol create mode 100644 test/libsolidity/syntaxTests/types/rational_number_huge_fail.sol (limited to 'test/libsolidity') diff --git a/test/libsolidity/syntaxTests/types/rational_number_huge.sol b/test/libsolidity/syntaxTests/types/rational_number_huge.sol new file mode 100644 index 00000000..378de201 --- /dev/null +++ b/test/libsolidity/syntaxTests/types/rational_number_huge.sol @@ -0,0 +1,10 @@ +contract C { + function f(uint y) public pure { + // fits FixedBytes with exactly 32-bytes + y = 0xffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000; // FixedBytes (32) + + // fits exactly into FixedBytes (32), ensures underscored literals won't hurt + y = 0xffffffff00000000ffffffff00000000ffffffff00000000ffffffff_00000000; + } +} +// ---- diff --git a/test/libsolidity/syntaxTests/types/rational_number_huge_fail.sol b/test/libsolidity/syntaxTests/types/rational_number_huge_fail.sol new file mode 100644 index 00000000..08e50656 --- /dev/null +++ b/test/libsolidity/syntaxTests/types/rational_number_huge_fail.sol @@ -0,0 +1,8 @@ +contract C { + function f(uint y) public pure { + // one byte too long for storing in Fixedbytes (would require 33 bytes) + y = 0xffffffff00000000ffffffff00000000ffffffff00000000ffffffff000000001; + } +} +// ---- +// TypeError: (142-209): Type int_const 1852...(71 digits omitted)...7281 is not implicitly convertible to expected type uint256. -- cgit