Give min and max values in warning message.

This commit is contained in:
chriseth 2017-06-26 09:49:45 +02:00
parent a895f2dccb
commit c3e5d6b7ef
2 changed files with 29 additions and 3 deletions

View File

@ -964,9 +964,17 @@ bool TypeChecker::visit(VariableDeclarationStatement const& _statement)
{
int numBits = type->numBits();
bool isSigned = type->isSigned();
string minValue;
string maxValue;
if (isSigned)
{
numBits--;
extension = ", which can hold values up to " + string((u256(1) << numBits) - 1);
minValue = "-" + bigint(bigint(1) << numBits).str();
}
else
minValue = "0";
maxValue = bigint((bigint(1) << numBits) - 1).str();
extension = ", which can hold values between " + minValue + " and " + maxValue;
}
else
solAssert(dynamic_cast<FixedPointType const*>(var.annotation().type.get()), "Unknown type.");

View File

@ -1798,14 +1798,32 @@ BOOST_AUTO_TEST_CASE(warn_var_from_zero)
}
}
)";
CHECK_WARNING(sourceCode, "uint8, which can hold");
CHECK_WARNING(sourceCode, "uint8, which can hold values between 0 and 255");
sourceCode = R"(
contract test {
function f() {
var i = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;
i;
}
}
)";
CHECK_WARNING(sourceCode, "uint256, which can hold values between 0 and 115792089237316195423570985008687907853269984665640564039457584007913129639935");
sourceCode = R"(
contract test {
function f() {
var i = -2;
i;
}
}
)";
CHECK_WARNING(sourceCode, "int8, which can hold values between -128 and 127");
sourceCode = R"(
contract test {
function f() {
for (var i = 0; i < msg.data.length; i++) { }
}
}
)";
)";
CHECK_WARNING(sourceCode, "uint8, which can hold");
}