Type after shift should be type of left operand.

This commit is contained in:
chriseth
2016-12-12 11:12:12 +01:00
parent b8b4f5e9f9
commit 2df60bec92
2 changed files with 57 additions and 5 deletions
+15
View File
@@ -8505,6 +8505,21 @@ BOOST_AUTO_TEST_CASE(shift_left_uint8)
BOOST_CHECK(callContractFunction("f(uint8,uint8)", u256(0x66), u256(8)) == encodeArgs(u256(0)));
}
BOOST_AUTO_TEST_CASE(shift_left_larger_type)
{
char const* sourceCode = R"(
contract C {
function f() returns (int8) {
uint8 x = 255;
int8 y = 1;
return a << b;
}
}
)";
compileAndRun(sourceCode, 0, "C");
BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(1) << 255));
}
BOOST_AUTO_TEST_CASE(shift_left_assignment)
{
char const* sourceCode = R"(