diff --git a/test/cmdlineTests/optimizer_array_sload/output b/test/cmdlineTests/optimizer_array_sload/output index 31c17a0a5548..d4ca7fd8d254 100644 --- a/test/cmdlineTests/optimizer_array_sload/output +++ b/test/cmdlineTests/optimizer_array_sload/output @@ -20,30 +20,35 @@ object "Arraysum_33" { code { { mstore(64, 128) - if iszero(lt(calldatasize(), 4)) + let _1 := 4 + if iszero(lt(calldatasize(), _1)) { - let _1 := 0 - if eq(0x81d73423, shr(224, calldataload(_1))) + let _2 := 0 + if eq(0x81d73423, shr(224, calldataload(_2))) { - if callvalue() { revert(_1, _1) } - if slt(add(calldatasize(), not(3)), _1) { revert(_1, _1) } - let vloc_sum := _1 - let vloc_i := _1 - let _2 := sload(_1) + if callvalue() { revert(_2, _2) } + if slt(add(calldatasize(), not(3)), _2) { revert(_2, _2) } + let vloc_sum := _2 + let vloc_i := _2 + let _3 := sload(_2) for { } - lt(vloc_i, _2) + lt(vloc_i, _3) { - if gt(vloc_i, not(1)) { revert(_1, _1) } + if gt(vloc_i, not(1)) { revert(_2, _2) } vloc_i := add(vloc_i, 1) } { - mstore(_1, _1) - let _3 := sload(add(keccak256(_1, 0x20), vloc_i)) - if gt(vloc_sum, not(_3)) { revert(_1, _1) } - vloc_sum := add(vloc_sum, _3) + mstore(_2, _2) + let _4 := sload(add(keccak256(_2, 0x20), vloc_i)) + if gt(vloc_sum, not(_4)) + { + mstore(_2, shl(225, 0x0fc12e35)) + revert(_2, _1) + } + vloc_sum := add(vloc_sum, _4) } - let memPos := allocateMemory(_1) - return(memPos, sub(abi_encode_uint(memPos, _1), memPos)) + let memPos := allocateMemory(_2) + return(memPos, sub(abi_encode_uint(memPos, _2), memPos)) } } revert(0, 0) diff --git a/test/cmdlineTests/recovery_ast_constructor/output b/test/cmdlineTests/recovery_ast_constructor/output index d4a7d02884b6..bae2a098babb 100644 --- a/test/cmdlineTests/recovery_ast_constructor/output +++ b/test/cmdlineTests/recovery_ast_constructor/output @@ -105,7 +105,8 @@ JSON AST: "statements": [ null - ] + ], + "unchecked": false }, "children": [], "id": 8, @@ -187,6 +188,10 @@ JSON AST: "src": "433:6:0" }, { + "attributes": + { + "unchecked": false + }, "children": [ { diff --git a/test/cmdlineTests/standard_only_ast_requested/output.json b/test/cmdlineTests/standard_only_ast_requested/output.json index 16f8bfddba93..0eee92949204 100644 --- a/test/cmdlineTests/standard_only_ast_requested/output.json +++ b/test/cmdlineTests/standard_only_ast_requested/output.json @@ -1 +1 @@ -{"sources":{"A":{"ast":{"absolutePath":"A","exportedSymbols":{"C":[6]},"id":7,"license":"GPL-3.0","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity",">=","0.0"],"nodeType":"PragmaDirective","src":"36:22:0"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":6,"linearizedBaseContracts":[6],"name":"C","nodeType":"ContractDefinition","nodes":[{"body":{"id":4,"nodeType":"Block","src":"97:2:0","statements":[]},"functionSelector":"26121ff0","id":5,"implemented":true,"kind":"function","modifiers":[],"name":"f","nodeType":"FunctionDefinition","parameters":{"id":2,"nodeType":"ParameterList","parameters":[],"src":"82:2:0"},"returnParameters":{"id":3,"nodeType":"ParameterList","parameters":[],"src":"97:0:0"},"scope":6,"src":"72:27:0","stateMutability":"pure","virtual":false,"visibility":"public"}],"scope":7,"src":"59:42:0"}],"src":"36:65:0"},"id":0}}} +{"sources":{"A":{"ast":{"absolutePath":"A","exportedSymbols":{"C":[6]},"id":7,"license":"GPL-3.0","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity",">=","0.0"],"nodeType":"PragmaDirective","src":"36:22:0"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":6,"linearizedBaseContracts":[6],"name":"C","nodeType":"ContractDefinition","nodes":[{"body":{"id":4,"nodeType":"Block","src":"97:2:0","statements":[],"unchecked":false},"functionSelector":"26121ff0","id":5,"implemented":true,"kind":"function","modifiers":[],"name":"f","nodeType":"FunctionDefinition","parameters":{"id":2,"nodeType":"ParameterList","parameters":[],"src":"82:2:0"},"returnParameters":{"id":3,"nodeType":"ParameterList","parameters":[],"src":"97:0:0"},"scope":6,"src":"72:27:0","stateMutability":"pure","virtual":false,"visibility":"public"}],"scope":7,"src":"59:42:0"}],"src":"36:65:0"},"id":0}}} diff --git a/test/libsolidity/GasMeter.cpp b/test/libsolidity/GasMeter.cpp index a02a3eeeb65a..cd8c0e8800ef 100644 --- a/test/libsolidity/GasMeter.cpp +++ b/test/libsolidity/GasMeter.cpp @@ -224,7 +224,7 @@ BOOST_AUTO_TEST_CASE(function_calls) uint data2; function f(uint x) public { if (x > 7) - data2 = g(x**8) + 1; + unchecked { data2 = g(x**8) + 1; } else data = 1; } @@ -245,7 +245,7 @@ BOOST_AUTO_TEST_CASE(multiple_external_functions) uint data2; function f(uint x) public { if (x > 7) - data2 = g(x**8) + 1; + unchecked { data2 = g(x**8) + 1; } else data = 1; } @@ -264,10 +264,10 @@ BOOST_AUTO_TEST_CASE(exponent_size) char const* sourceCode = R"( contract A { function f(uint x) public returns (uint) { - return x ** 0; + unchecked { return x ** 0; } } function g(uint x) public returns (uint) { - return x ** 0x100; + unchecked { return x ** 0x100; } } function h(uint x) public returns (uint) { unchecked { return x ** 0x10000; } @@ -330,29 +330,31 @@ BOOST_AUTO_TEST_CASE(complex_control_flow) char const* sourceCode = R"( contract log { function ln(int128 x) public pure returns (int128 result) { - int128 t = x / 256; - int128 y = 5545177; - x = t; - t = x * 16; if (t <= 1000000) { x = t; y = y - 2772588; } - t = x * 4; if (t <= 1000000) { x = t; y = y - 1386294; } - t = x * 2; if (t <= 1000000) { x = t; y = y - 693147; } - t = x + x / 2; if (t <= 1000000) { x = t; y = y - 405465; } - t = x + x / 4; if (t <= 1000000) { x = t; y = y - 223144; } - t = x + x / 8; if (t <= 1000000) { x = t; y = y - 117783; } - t = x + x / 16; if (t <= 1000000) { x = t; y = y - 60624; } - t = x + x / 32; if (t <= 1000000) { x = t; y = y - 30771; } - t = x + x / 64; if (t <= 1000000) { x = t; y = y - 15504; } - t = x + x / 128; if (t <= 1000000) { x = t; y = y - 7782; } - t = x + x / 256; if (t <= 1000000) { x = t; y = y - 3898; } - t = x + x / 512; if (t <= 1000000) { x = t; y = y - 1951; } - t = x + x / 1024; if (t <= 1000000) { x = t; y = y - 976; } - t = x + x / 2048; if (t <= 1000000) { x = t; y = y - 488; } - t = x + x / 4096; if (t <= 1000000) { x = t; y = y - 244; } - t = x + x / 8192; if (t <= 1000000) { x = t; y = y - 122; } - t = x + x / 16384; if (t <= 1000000) { x = t; y = y - 61; } - t = x + x / 32768; if (t <= 1000000) { x = t; y = y - 31; } - t = x + x / 65536; if (t <= 1000000) { y = y - 15; } - return y; + unchecked { + int128 t = x / 256; + int128 y = 5545177; + x = t; + t = x * 16; if (t <= 1000000) { x = t; y = y - 2772588; } + t = x * 4; if (t <= 1000000) { x = t; y = y - 1386294; } + t = x * 2; if (t <= 1000000) { x = t; y = y - 693147; } + t = x + x / 2; if (t <= 1000000) { x = t; y = y - 405465; } + t = x + x / 4; if (t <= 1000000) { x = t; y = y - 223144; } + t = x + x / 8; if (t <= 1000000) { x = t; y = y - 117783; } + t = x + x / 16; if (t <= 1000000) { x = t; y = y - 60624; } + t = x + x / 32; if (t <= 1000000) { x = t; y = y - 30771; } + t = x + x / 64; if (t <= 1000000) { x = t; y = y - 15504; } + t = x + x / 128; if (t <= 1000000) { x = t; y = y - 7782; } + t = x + x / 256; if (t <= 1000000) { x = t; y = y - 3898; } + t = x + x / 512; if (t <= 1000000) { x = t; y = y - 1951; } + t = x + x / 1024; if (t <= 1000000) { x = t; y = y - 976; } + t = x + x / 2048; if (t <= 1000000) { x = t; y = y - 488; } + t = x + x / 4096; if (t <= 1000000) { x = t; y = y - 244; } + t = x + x / 8192; if (t <= 1000000) { x = t; y = y - 122; } + t = x + x / 16384; if (t <= 1000000) { x = t; y = y - 61; } + t = x + x / 32768; if (t <= 1000000) { x = t; y = y - 31; } + t = x + x / 65536; if (t <= 1000000) { y = y - 15; } + return y; + } } } )"; diff --git a/test/libsolidity/SolidityCompiler.cpp b/test/libsolidity/SolidityCompiler.cpp index 13f714e5e90a..045ac167a905 100644 --- a/test/libsolidity/SolidityCompiler.cpp +++ b/test/libsolidity/SolidityCompiler.cpp @@ -37,7 +37,7 @@ BOOST_AUTO_TEST_CASE(does_not_include_creation_time_only_internal_functions) contract C { uint x; constructor() { f(); } - function f() internal { for (uint i = 0; i < 10; ++i) x += 3 + i; } + function f() internal { unchecked { for (uint i = 0; i < 10; ++i) x += 3 + i; } } } )"; compiler().setOptimiserSettings(solidity::test::CommonOptions::get().optimize); diff --git a/test/libsolidity/semanticTests/arithmetics/divisiod_by_zero.sol b/test/libsolidity/semanticTests/arithmetics/divisiod_by_zero.sol index 0ccc0acb5e48..b3d068643ec4 100644 --- a/test/libsolidity/semanticTests/arithmetics/divisiod_by_zero.sol +++ b/test/libsolidity/semanticTests/arithmetics/divisiod_by_zero.sol @@ -11,6 +11,6 @@ contract C { // compileViaYul: also // ---- // div(uint256,uint256): 7, 2 -> 3 -// div(uint256,uint256): 7, 0 -> FAILURE # throws # +// div(uint256,uint256): 7, 0 -> FAILURE, hex"1f825c6a" # throws # // mod(uint256,uint256): 7, 2 -> 1 -// mod(uint256,uint256): 7, 0 -> FAILURE # throws # +// mod(uint256,uint256): 7, 0 -> FAILURE, hex"1f825c6a" # throws # diff --git a/test/libsolidity/semanticTests/storage/packed_storage_overflow.sol b/test/libsolidity/semanticTests/storage/packed_storage_overflow.sol index 1add71622de0..4a84544caa2f 100644 --- a/test/libsolidity/semanticTests/storage/packed_storage_overflow.sol +++ b/test/libsolidity/semanticTests/storage/packed_storage_overflow.sol @@ -4,7 +4,7 @@ contract C { uint16 b; function f() public returns (uint256, uint256, uint256, uint256) { - a++; + unchecked { a++; } uint256 c = b; delete b; unchecked { a -= 2; } diff --git a/test/libsolidity/semanticTests/viaYul/detect_add_overflow.sol b/test/libsolidity/semanticTests/viaYul/detect_add_overflow.sol index f16e4dac589b..5a4ed8c7e524 100644 --- a/test/libsolidity/semanticTests/viaYul/detect_add_overflow.sol +++ b/test/libsolidity/semanticTests/viaYul/detect_add_overflow.sol @@ -7,12 +7,12 @@ contract C { } } // ==== -// compileViaYul: true +// compileViaYul: also // ---- // f(uint256,uint256): 5, 6 -> 11 // f(uint256,uint256): -2, 1 -> -1 -// f(uint256,uint256): -2, 2 -> FAILURE -// f(uint256,uint256): 2, -2 -> FAILURE +// f(uint256,uint256): -2, 2 -> FAILURE, hex"1f825c6a" +// f(uint256,uint256): 2, -2 -> FAILURE, hex"1f825c6a" // g(uint8,uint8): 128, 64 -> 192 // g(uint8,uint8): 128, 127 -> 255 -// g(uint8,uint8): 128, 128 -> FAILURE +// g(uint8,uint8): 128, 128 -> FAILURE, hex"1f825c6a" diff --git a/test/libsolidity/semanticTests/viaYul/detect_add_overflow_signed.sol b/test/libsolidity/semanticTests/viaYul/detect_add_overflow_signed.sol index 6e44c44baa3f..a9a924d4beb8 100644 --- a/test/libsolidity/semanticTests/viaYul/detect_add_overflow_signed.sol +++ b/test/libsolidity/semanticTests/viaYul/detect_add_overflow_signed.sol @@ -7,7 +7,7 @@ contract C { } } // ==== -// compileViaYul: true +// compileViaYul: also // ---- // f(int256,int256): 5, 6 -> 11 // f(int256,int256): -2, 1 -> -1 @@ -16,12 +16,12 @@ contract C { // f(int256,int256): -5, -6 -> -11 // f(int256,int256): 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0, 0x0F -> 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF // f(int256,int256): 0x0F, 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 -> 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -// f(int256,int256): 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 1 -> FAILURE -// f(int256,int256): 1, 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -> FAILURE +// f(int256,int256): 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 1 -> FAILURE, hex"1f825c6a" +// f(int256,int256): 1, 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -> FAILURE, hex"1f825c6a" // f(int256,int256): 0x8000000000000000000000000000000000000000000000000000000000000001, -1 -> 0x8000000000000000000000000000000000000000000000000000000000000000 // f(int256,int256): -1, 0x8000000000000000000000000000000000000000000000000000000000000001 -> 0x8000000000000000000000000000000000000000000000000000000000000000 -// f(int256,int256): 0x8000000000000000000000000000000000000000000000000000000000000000, -1 -> FAILURE -// f(int256,int256): -1, 0x8000000000000000000000000000000000000000000000000000000000000000 -> FAILURE +// f(int256,int256): 0x8000000000000000000000000000000000000000000000000000000000000000, -1 -> FAILURE, hex"1f825c6a" +// f(int256,int256): -1, 0x8000000000000000000000000000000000000000000000000000000000000000 -> FAILURE, hex"1f825c6a" // g(int8,int8): 5, 6 -> 11 // g(int8,int8): -2, 1 -> -1 // g(int8,int8): -2, 2 -> 0 @@ -29,9 +29,9 @@ contract C { // g(int8,int8): -5, -6 -> -11 // g(int8,int8): 126, 1 -> 127 // g(int8,int8): 1, 126 -> 127 -// g(int8,int8): 127, 1 -> FAILURE -// g(int8,int8): 1, 127 -> FAILURE +// g(int8,int8): 127, 1 -> FAILURE, hex"1f825c6a" +// g(int8,int8): 1, 127 -> FAILURE, hex"1f825c6a" // g(int8,int8): -127, -1 -> -128 // g(int8,int8): -1, -127 -> -128 -// g(int8,int8): -127, -2 -> FAILURE -// g(int8,int8): -2, -127 -> FAILURE +// g(int8,int8): -127, -2 -> FAILURE, hex"1f825c6a" +// g(int8,int8): -2, -127 -> FAILURE, hex"1f825c6a" diff --git a/test/libsolidity/semanticTests/viaYul/detect_div_overflow.sol b/test/libsolidity/semanticTests/viaYul/detect_div_overflow.sol index 1de251b61f8a..801c8e586ada 100644 --- a/test/libsolidity/semanticTests/viaYul/detect_div_overflow.sol +++ b/test/libsolidity/semanticTests/viaYul/detect_div_overflow.sol @@ -10,18 +10,18 @@ contract C { } } // ==== -// compileViaYul: true +// compileViaYul: also // ---- // f(uint256,uint256): 10, 3 -> 3 -// f(uint256,uint256): 1, 0 -> FAILURE -// f(uint256,uint256): 0, 0 -> FAILURE +// f(uint256,uint256): 1, 0 -> FAILURE, hex"1f825c6a" +// f(uint256,uint256): 0, 0 -> FAILURE, hex"1f825c6a" // f(uint256,uint256): 0, 1 -> 0 // g(int8,int8): -10, 3 -> -3 // g(int8,int8): -10, -3 -> 3 -// g(int8,int8): -10, 0 -> FAILURE +// g(int8,int8): -10, 0 -> FAILURE, hex"1f825c6a" // g(int8,int8): -128, 1 -> -128 // g(int8,int8): -128, -2 -> 64 // g(int8,int8): -128, 2 -> -64 -// g(int8,int8): -128, -1 -> FAILURE +// g(int8,int8): -128, -1 -> FAILURE, hex"1f825c6a" // g(int8,int8): -127, -1 -> 127 // h(uint256,uint256): 0x8000000000000000000000000000000000000000000000000000000000000000, -1 -> 0 diff --git a/test/libsolidity/semanticTests/viaYul/detect_mod_zero.sol b/test/libsolidity/semanticTests/viaYul/detect_mod_zero.sol index 6340c71c385d..3b6c9f32ed6b 100644 --- a/test/libsolidity/semanticTests/viaYul/detect_mod_zero.sol +++ b/test/libsolidity/semanticTests/viaYul/detect_mod_zero.sol @@ -7,19 +7,19 @@ contract C { } } // ==== -// compileViaYul: true +// compileViaYul: also // ---- // f(uint256,uint256): 10, 3 -> 1 // f(uint256,uint256): 10, 2 -> 0 // f(uint256,uint256): 11, 2 -> 1 // f(uint256,uint256): 2, 2 -> 0 -// f(uint256,uint256): 1, 0 -> FAILURE -// f(uint256,uint256): 0, 0 -> FAILURE +// f(uint256,uint256): 1, 0 -> FAILURE, hex"1f825c6a" +// f(uint256,uint256): 0, 0 -> FAILURE, hex"1f825c6a" // f(uint256,uint256): 0, 1 -> 0 // g(uint8,uint8): 10, 3 -> 1 // g(uint8,uint8): 10, 2 -> 0 // g(uint8,uint8): 11, 2 -> 1 // g(uint8,uint8): 2, 2 -> 0 -// g(uint8,uint8): 1, 0 -> FAILURE -// g(uint8,uint8): 0, 0 -> FAILURE +// g(uint8,uint8): 1, 0 -> FAILURE, hex"1f825c6a" +// g(uint8,uint8): 0, 0 -> FAILURE, hex"1f825c6a" // g(uint8,uint8): 0, 1 -> 0 diff --git a/test/libsolidity/semanticTests/viaYul/detect_mod_zero_signed.sol b/test/libsolidity/semanticTests/viaYul/detect_mod_zero_signed.sol index d93e18d063c5..8402a37974b9 100644 --- a/test/libsolidity/semanticTests/viaYul/detect_mod_zero_signed.sol +++ b/test/libsolidity/semanticTests/viaYul/detect_mod_zero_signed.sol @@ -7,7 +7,7 @@ contract C { } } // ==== -// compileViaYul: true +// compileViaYul: also // ---- // f(int256,int256): 10, 3 -> 1 // f(int256,int256): 10, 2 -> 0 @@ -16,9 +16,9 @@ contract C { // f(int256,int256): 10, -3 -> 1 // f(int256,int256): -10, -3 -> -1 // f(int256,int256): 2, 2 -> 0 -// f(int256,int256): 1, 0 -> FAILURE -// f(int256,int256): -1, 0 -> FAILURE -// f(int256,int256): 0, 0 -> FAILURE +// f(int256,int256): 1, 0 -> FAILURE, hex"1f825c6a" +// f(int256,int256): -1, 0 -> FAILURE, hex"1f825c6a" +// f(int256,int256): 0, 0 -> FAILURE, hex"1f825c6a" // f(int256,int256): 0, 1 -> 0 // f(int256,int256): 0, -1 -> 0 // g(int8,int8): 10, 3 -> 1 @@ -28,8 +28,8 @@ contract C { // g(int8,int8): 10, -3 -> 1 // g(int8,int8): -10, -3 -> -1 // g(int8,int8): 2, 2 -> 0 -// g(int8,int8): 1, 0 -> FAILURE -// g(int8,int8): -1, 0 -> FAILURE -// g(int8,int8): 0, 0 -> FAILURE +// g(int8,int8): 1, 0 -> FAILURE, hex"1f825c6a" +// g(int8,int8): -1, 0 -> FAILURE, hex"1f825c6a" +// g(int8,int8): 0, 0 -> FAILURE, hex"1f825c6a" // g(int8,int8): 0, 1 -> 0 // g(int8,int8): 0, -1 -> 0 diff --git a/test/libsolidity/semanticTests/viaYul/detect_mul_overflow.sol b/test/libsolidity/semanticTests/viaYul/detect_mul_overflow.sol index c4975868682d..62982aca6b08 100644 --- a/test/libsolidity/semanticTests/viaYul/detect_mul_overflow.sol +++ b/test/libsolidity/semanticTests/viaYul/detect_mul_overflow.sol @@ -7,31 +7,31 @@ contract C { } } // ==== -// compileViaYul: true +// compileViaYul: also // ---- // f(uint256,uint256): 5, 6 -> 30 // f(uint256,uint256): -1, 1 -> -1 -// f(uint256,uint256): -1, 2 -> FAILURE -// f(uint256,uint256): 0x8000000000000000000000000000000000000000000000000000000000000000, 2 -> FAILURE +// f(uint256,uint256): -1, 2 -> FAILURE, hex"1f825c6a" +// f(uint256,uint256): 0x8000000000000000000000000000000000000000000000000000000000000000, 2 -> FAILURE, hex"1f825c6a" // f(uint256,uint256): 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 2 -> -2 -// f(uint256,uint256): 2, 0x8000000000000000000000000000000000000000000000000000000000000000 -> FAILURE +// f(uint256,uint256): 2, 0x8000000000000000000000000000000000000000000000000000000000000000 -> FAILURE, hex"1f825c6a" // f(uint256,uint256): 2, 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -> -2 -// f(uint256,uint256): 0x0100000000000000000000000000000000, 0x0100000000000000000000000000000000 -> FAILURE +// f(uint256,uint256): 0x0100000000000000000000000000000000, 0x0100000000000000000000000000000000 -> FAILURE, hex"1f825c6a" // f(uint256,uint256): 0x0100000000000000000000000000000000, 0x00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -> 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 // f(uint256,uint256): 0x00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 0x0100000000000000000000000000000000 -> 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 // f(uint256,uint256): 0x0100000000000000000000000000000001, 0x00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -> -1 // f(uint256,uint256): 0x00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 0x0100000000000000000000000000000001 -> -1 -// f(uint256,uint256): 0x0100000000000000000000000000000002, 0x00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -> FAILURE -// f(uint256,uint256): 0x00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 0x0100000000000000000000000000000002 -> FAILURE +// f(uint256,uint256): 0x0100000000000000000000000000000002, 0x00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -> FAILURE, hex"1f825c6a" +// f(uint256,uint256): 0x00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 0x0100000000000000000000000000000002 -> FAILURE, hex"1f825c6a" // f(uint256,uint256): -1, 0 -> 0 // f(uint256,uint256): 0, -1 -> 0 // g(uint8,uint8): 5, 6 -> 30 -// g(uint8,uint8): 0x80, 2 -> FAILURE +// g(uint8,uint8): 0x80, 2 -> FAILURE, hex"1f825c6a" // g(uint8,uint8): 0x7F, 2 -> 254 // g(uint8,uint8): 2, 0x7F -> 254 -// g(uint8,uint8): 0x10, 0x10 -> FAILURE +// g(uint8,uint8): 0x10, 0x10 -> FAILURE, hex"1f825c6a" // g(uint8,uint8): 0x0F, 0x11 -> 0xFF -// g(uint8,uint8): 0x0F, 0x12 -> FAILURE -// g(uint8,uint8): 0x12, 0x0F -> FAILURE +// g(uint8,uint8): 0x0F, 0x12 -> FAILURE, hex"1f825c6a" +// g(uint8,uint8): 0x12, 0x0F -> FAILURE, hex"1f825c6a" // g(uint8,uint8): 0xFF, 0 -> 0 // g(uint8,uint8): 0, 0xFF -> 0 diff --git a/test/libsolidity/semanticTests/viaYul/detect_mul_overflow_signed.sol b/test/libsolidity/semanticTests/viaYul/detect_mul_overflow_signed.sol index 930a24ed7135..0ac23484cc36 100644 --- a/test/libsolidity/semanticTests/viaYul/detect_mul_overflow_signed.sol +++ b/test/libsolidity/semanticTests/viaYul/detect_mul_overflow_signed.sol @@ -7,52 +7,43 @@ contract C { } } // ==== -// compileViaYul: true +// compileViaYul: also // ---- // f(int256,int256): 5, 6 -> 30 // f(int256,int256): -1, 1 -> -1 -// f(int256,int256): -1, 2 -> -2 -// # positive, positive # +// f(int256,int256): -1, 2 -> -2 # positive, positive # // f(int256,int256): 0x3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 2 -> 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE -// f(int256,int256): 0x4000000000000000000000000000000000000000000000000000000000000000, 2 -> FAILURE +// f(int256,int256): 0x4000000000000000000000000000000000000000000000000000000000000000, 2 -> FAILURE, hex"1f825c6a" // f(int256,int256): 2, 0x3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -> 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE -// f(int256,int256): 2, 0x4000000000000000000000000000000000000000000000000000000000000000 -> FAILURE -// # positive, negative # +// f(int256,int256): 2, 0x4000000000000000000000000000000000000000000000000000000000000000 -> FAILURE, hex"1f825c6a" # positive, negative # // f(int256,int256): 0x4000000000000000000000000000000000000000000000000000000000000000, -2 -> 0x8000000000000000000000000000000000000000000000000000000000000000 -// f(int256,int256): 0x4000000000000000000000000000000000000000000000000000000000000001, -2 -> FAILURE +// f(int256,int256): 0x4000000000000000000000000000000000000000000000000000000000000001, -2 -> FAILURE, hex"1f825c6a" // f(int256,int256): 2, 0xC000000000000000000000000000000000000000000000000000000000000000 -> 0x8000000000000000000000000000000000000000000000000000000000000000 -// f(int256,int256): 2, 0xBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -> FAILURE -// # negative, positive # +// f(int256,int256): 2, 0xBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -> FAILURE, hex"1f825c6a" # negative, positive # // f(int256,int256): -2, 0x4000000000000000000000000000000000000000000000000000000000000000 -> 0x8000000000000000000000000000000000000000000000000000000000000000 -// f(int256,int256): -2, 0x4000000000000000000000000000000000000000000000000000000000000001 -> FAILURE +// f(int256,int256): -2, 0x4000000000000000000000000000000000000000000000000000000000000001 -> FAILURE, hex"1f825c6a" // f(int256,int256): 0xC000000000000000000000000000000000000000000000000000000000000000, 2 -> 0x8000000000000000000000000000000000000000000000000000000000000000 -// f(int256,int256): 0xBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 2 -> FAILURE -// # negative, negative # +// f(int256,int256): 0xBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 2 -> FAILURE, hex"1f825c6a" # negative, negative # // f(int256,int256): 0xC000000000000000000000000000000000000000000000000000000000000001, -2 -> 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE -// f(int256,int256): 0xC000000000000000000000000000000000000000000000000000000000000000, -2 -> FAILURE +// f(int256,int256): 0xC000000000000000000000000000000000000000000000000000000000000000, -2 -> FAILURE, hex"1f825c6a" // f(int256,int256): -2, 0xC000000000000000000000000000000000000000000000000000000000000001 -> 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE -// f(int256,int256): -2, 0xC000000000000000000000000000000000000000000000000000000000000000 -> FAILURE -// # small type # +// f(int256,int256): -2, 0xC000000000000000000000000000000000000000000000000000000000000000 -> FAILURE, hex"1f825c6a" # small type # // g(int8,int8): 5, 6 -> 30 // g(int8,int8): -1, 1 -> -1 -// g(int8,int8): -1, 2 -> -2 -// # positive, positive # +// g(int8,int8): -1, 2 -> -2 # positive, positive # // g(int8,int8): 63, 2 -> 126 -// g(int8,int8): 64, 2 -> FAILURE +// g(int8,int8): 64, 2 -> FAILURE, hex"1f825c6a" // g(int8,int8): 2, 63 -> 126 -// g(int8,int8): 2, 64 -> FAILURE -// # positive, negative # +// g(int8,int8): 2, 64 -> FAILURE, hex"1f825c6a" # positive, negative # // g(int8,int8): 64, -2 -> -128 -// g(int8,int8): 65, -2 -> FAILURE +// g(int8,int8): 65, -2 -> FAILURE, hex"1f825c6a" // g(int8,int8): 2, -64 -> -128 -// g(int8,int8): 2, -65 -> FAILURE -// # negative, positive # +// g(int8,int8): 2, -65 -> FAILURE, hex"1f825c6a" # negative, positive # // g(int8,int8): -2, 64 -> -128 -// g(int8,int8): -2, 65 -> FAILURE +// g(int8,int8): -2, 65 -> FAILURE, hex"1f825c6a" // g(int8,int8): -64, 2 -> -128 -// g(int8,int8): -65, 2 -> FAILURE -// # negative, negative # +// g(int8,int8): -65, 2 -> FAILURE, hex"1f825c6a" # negative, negative # // g(int8,int8): -63, -2 -> 126 -// g(int8,int8): -64, -2 -> FAILURE +// g(int8,int8): -64, -2 -> FAILURE, hex"1f825c6a" // g(int8,int8): -2, -63 -> 126 -// g(int8,int8): -2, -64 -> FAILURE +// g(int8,int8): -2, -64 -> FAILURE, hex"1f825c6a" diff --git a/test/libsolidity/semanticTests/viaYul/detect_sub_overflow.sol b/test/libsolidity/semanticTests/viaYul/detect_sub_overflow.sol index 5342052ff514..b4962360c719 100644 --- a/test/libsolidity/semanticTests/viaYul/detect_sub_overflow.sol +++ b/test/libsolidity/semanticTests/viaYul/detect_sub_overflow.sol @@ -7,11 +7,11 @@ contract C { } } // ==== -// compileViaYul: true +// compileViaYul: also // ---- // f(uint256,uint256): 6, 5 -> 1 // f(uint256,uint256): 6, 6 -> 0 -// f(uint256,uint256): 5, 6 -> FAILURE +// f(uint256,uint256): 5, 6 -> FAILURE, hex"1f825c6a" // g(uint8,uint8): 6, 5 -> 1 // g(uint8,uint8): 6, 6 -> 0 -// g(uint8,uint8): 5, 6 -> FAILURE +// g(uint8,uint8): 5, 6 -> FAILURE, hex"1f825c6a" diff --git a/test/libsolidity/semanticTests/viaYul/detect_sub_overflow_signed.sol b/test/libsolidity/semanticTests/viaYul/detect_sub_overflow_signed.sol index 1a87ef9ec216..1ccc18b09d4b 100644 --- a/test/libsolidity/semanticTests/viaYul/detect_sub_overflow_signed.sol +++ b/test/libsolidity/semanticTests/viaYul/detect_sub_overflow_signed.sol @@ -7,7 +7,7 @@ contract C { } } // ==== -// compileViaYul: true +// compileViaYul: also // ---- // f(int256,int256): 5, 6 -> -1 // f(int256,int256): -2, 1 -> -3 @@ -16,16 +16,16 @@ contract C { // f(int256,int256): 2, 2 -> 0 // f(int256,int256): -5, -6 -> 1 // f(int256,int256): 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0, -15 -> 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -// f(int256,int256): 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0, -16 -> FAILURE -// f(int256,int256): 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, -1 -> FAILURE +// f(int256,int256): 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0, -16 -> FAILURE, hex"1f825c6a" +// f(int256,int256): 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, -1 -> FAILURE, hex"1f825c6a" // f(int256,int256): 15, 0x8000000000000000000000000000000000000000000000000000000000000010 -> 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -// f(int256,int256): 16, 0x8000000000000000000000000000000000000000000000000000000000000010 -> FAILURE -// f(int256,int256): 1, 0x8000000000000000000000000000000000000000000000000000000000000000 -> FAILURE +// f(int256,int256): 16, 0x8000000000000000000000000000000000000000000000000000000000000010 -> FAILURE, hex"1f825c6a" +// f(int256,int256): 1, 0x8000000000000000000000000000000000000000000000000000000000000000 -> FAILURE, hex"1f825c6a" // f(int256,int256): -1, 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -> 0x8000000000000000000000000000000000000000000000000000000000000000 -// f(int256,int256): -2, 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -> FAILURE +// f(int256,int256): -2, 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -> FAILURE, hex"1f825c6a" // f(int256,int256): 0x8000000000000000000000000000000000000000000000000000000000000001, 1 -> 0x8000000000000000000000000000000000000000000000000000000000000000 -// f(int256,int256): 0x8000000000000000000000000000000000000000000000000000000000000001, 2 -> FAILURE -// f(int256,int256): 0x8000000000000000000000000000000000000000000000000000000000000000, 1 -> FAILURE +// f(int256,int256): 0x8000000000000000000000000000000000000000000000000000000000000001, 2 -> FAILURE, hex"1f825c6a" +// f(int256,int256): 0x8000000000000000000000000000000000000000000000000000000000000000, 1 -> FAILURE, hex"1f825c6a" // g(int8,int8): 5, 6 -> -1 // g(int8,int8): -2, 1 -> -3 // g(int8,int8): -2, 2 -> -4 @@ -34,9 +34,9 @@ contract C { // g(int8,int8): -5, -6 -> 1 // g(int8,int8): 126, -1 -> 127 // g(int8,int8): 1, -126 -> 127 -// g(int8,int8): 127, -1 -> FAILURE -// g(int8,int8): 1, -127 -> FAILURE +// g(int8,int8): 127, -1 -> FAILURE, hex"1f825c6a" +// g(int8,int8): 1, -127 -> FAILURE, hex"1f825c6a" // g(int8,int8): -127, 1 -> -128 // g(int8,int8): -1, 127 -> -128 -// g(int8,int8): -127, 2 -> FAILURE -// g(int8,int8): -2, 127 -> FAILURE +// g(int8,int8): -127, 2 -> FAILURE, hex"1f825c6a" +// g(int8,int8): -2, 127 -> FAILURE, hex"1f825c6a" diff --git a/test/libsolidity/semanticTests/viaYul/exp_neg_overflow.sol b/test/libsolidity/semanticTests/viaYul/exp_neg_overflow.sol index a55cbebaa11c..c3a5064d4643 100644 --- a/test/libsolidity/semanticTests/viaYul/exp_neg_overflow.sol +++ b/test/libsolidity/semanticTests/viaYul/exp_neg_overflow.sol @@ -7,7 +7,7 @@ contract C { } } // ==== -// compileViaYul: true +// compileViaYul: also // ---- // f(int8,uint256): 2, 6 -> 64 // f(int8,uint256): 2, 7 -> FAILURE diff --git a/test/libsolidity/semanticTests/viaYul/exp_overflow.sol b/test/libsolidity/semanticTests/viaYul/exp_overflow.sol index c23b61a86d7a..18074226a5fc 100644 --- a/test/libsolidity/semanticTests/viaYul/exp_overflow.sol +++ b/test/libsolidity/semanticTests/viaYul/exp_overflow.sol @@ -7,7 +7,7 @@ contract C { } } // ==== -// compileViaYul: true +// compileViaYul: also // ---- // f(uint8,uint8): 2, 7 -> 0x80 // f(uint8,uint8): 2, 8 -> FAILURE diff --git a/test/libsolidity/semanticTests/viaYul/unary_operations.sol b/test/libsolidity/semanticTests/viaYul/unary_operations.sol index 17f7dba4f09a..efdf5cdf3c39 100644 --- a/test/libsolidity/semanticTests/viaYul/unary_operations.sol +++ b/test/libsolidity/semanticTests/viaYul/unary_operations.sol @@ -101,8 +101,8 @@ contract C { // postdecr_s8(int8): -5 -> -5, -6 // preincr_u8(uint8): 255 -> FAILURE // postincr_u8(uint8): 255 -> FAILURE -// preincr_u8(uint8): 254 -> FAILURE -// postincr_u8(uint8): 254 -> FAILURE +// preincr_u8(uint8): 254 -> FAILURE, hex"1f825c6a" +// postincr_u8(uint8): 254 -> FAILURE, hex"1f825c6a" // predecr_u8(uint8): 0 -> FAILURE // postdecr_u8(uint8): 0 -> FAILURE // predecr_u8(uint8): 1 -> 0