Print @src and @use-src locations in AsmPrinter

This commit is contained in:
Mathias Baumann
2021-08-03 15:29:52 +02:00
parent c89b46c55e
commit 2ee6c7be64
34 changed files with 1319 additions and 109 deletions
+1
View File
@@ -165,6 +165,7 @@ EOF
# Replace escaped newlines by actual newlines for readability
# shellcheck disable=SC1003
sed -i.bak -E -e 's/\\n/\'$'\n/g' "$stdout_path"
sed -i.bak -e 's/\(^[ ]*auxdata: \)0x[0-9a-f]*$/\1<AUXDATA REMOVED>/' "$stdout_path"
rm "$stdout_path.bak"
else
sed -i.bak -e '/^Warning: This is a pre-release compiler version, please do not use it in production./d' "$stderr_path"
@@ -6,12 +6,16 @@ Optimized IR:
* !USE AT YOUR OWN RISK! *
*=====================================================*/
/// @use-src 0:"constant_optimizer_yul/input.sol", 1:"#utility.yul"
object "C_12" {
code {
{
/// @src 0:61:418
mstore(64, 128)
if callvalue() { revert(0, 0) }
/// @src 0:103:238
sstore(0, shl(180, 1))
/// @src 0:61:418
let _1 := datasize("C_12_deployed")
codecopy(128, dataoffset("C_12_deployed"), _1)
return(128, _1)
@@ -20,9 +24,12 @@ object "C_12" {
object "C_12_deployed" {
code {
{
/// @src 0:61:418
mstore(64, 128)
if callvalue() { revert(0, 0) }
/// @src 0:279:410
sstore(0, 0x1000000000000000000000000000000000000000000000)
/// @src 0:61:418
stop()
}
}
+4 -1
View File
@@ -25,11 +25,13 @@ object "C_81" {
memPtr := mload(64)
}
/// @src 0:82:370
function constructor_C_81() {
/// @src 0:82:370
}
/// @src 0:82:370
function revert_error_ca66f745a3ce8ff40e2ccaf1ad45db7774001b90d25810abd9040049be7bf4bb() {
revert(0, 0)
@@ -212,8 +214,8 @@ object "C_81" {
converted := cleanup_t_int256(value)
}
/// @src 0:96:368
function fun_f_80(var_a_4, var_b_6, var_c_8, var_d_10) -> var__13, var__15, var__17, var__19 {
/// @src 0:96:368
/// @src 0:160:164
let zero_t_uint256_1 := zero_value_for_split_t_uint256()
var__13 := zero_t_uint256_1
@@ -336,6 +338,7 @@ object "C_81" {
leave
}
/// @src 0:82:370
function panic_error_0x11() {
mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)
@@ -6,9 +6,11 @@ Optimized IR:
* !USE AT YOUR OWN RISK! *
*=====================================================*/
/// @use-src 0:"ir_compiler_inheritance_nosubobjects/input.sol", 1:"#utility.yul"
object "C_7" {
code {
{
/// @src 0:82:117
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("C_7_deployed")
@@ -19,6 +21,7 @@ object "C_7" {
object "C_7_deployed" {
code {
{
/// @src 0:82:117
mstore(64, 128)
revert(0, 0)
}
@@ -35,9 +38,11 @@ Optimized IR:
* !USE AT YOUR OWN RISK! *
*=====================================================*/
/// @use-src 0:"ir_compiler_inheritance_nosubobjects/input.sol", 1:"#utility.yul"
object "D_10" {
code {
{
/// @src 0:118:137
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("D_10_deployed")
@@ -48,6 +53,7 @@ object "D_10" {
object "D_10_deployed" {
code {
{
/// @src 0:118:137
mstore(64, 128)
revert(0, 0)
}
@@ -6,9 +6,11 @@ Optimized IR:
* !USE AT YOUR OWN RISK! *
*=====================================================*/
/// @use-src 0:"ir_compiler_subobjects/input.sol", 1:"#utility.yul"
object "C_3" {
code {
{
/// @src 0:82:95
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("C_3_deployed")
@@ -19,6 +21,7 @@ object "C_3" {
object "C_3_deployed" {
code {
{
/// @src 0:82:95
mstore(64, 128)
revert(0, 0)
}
@@ -35,9 +38,11 @@ Optimized IR:
* !USE AT YOUR OWN RISK! *
*=====================================================*/
/// @use-src 0:"ir_compiler_subobjects/input.sol", 1:"#utility.yul"
object "D_16" {
code {
{
/// @src 0:96:165
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("D_16_deployed")
@@ -48,6 +53,7 @@ object "D_16" {
object "D_16_deployed" {
code {
{
/// @src 0:96:165
mstore(64, 128)
if iszero(lt(calldatasize(), 4))
{
@@ -56,17 +62,22 @@ object "D_16" {
{
if callvalue() { revert(_1, _1) }
if slt(add(calldatasize(), not(3)), _1) { revert(_1, _1) }
/// @src 0:149:156
let _2 := datasize("C_3")
let _3 := add(128, _2)
if or(gt(_3, 0xffffffffffffffff), lt(_3, 128))
let _3 := add(/** @src 0:96:165 */ 128, /** @src 0:149:156 */ _2)
if or(gt(_3, 0xffffffffffffffff), lt(_3, /** @src 0:96:165 */ 128))
/// @src 0:149:156
{
/// @src 0:96:165
mstore(_1, shl(224, 0x4e487b71))
mstore(4, 0x41)
revert(_1, 0x24)
}
datacopy(128, dataoffset("C_3"), _2)
if iszero(create(_1, 128, _2))
/// @src 0:149:156
datacopy(/** @src 0:96:165 */ 128, /** @src 0:149:156 */ dataoffset("C_3"), _2)
if iszero(create(/** @src 0:96:165 */ _1, 128, /** @src 0:149:156 */ _2))
{
/// @src 0:96:165
let pos := mload(64)
returndatacopy(pos, _1, returndatasize())
revert(pos, returndatasize())
@@ -80,6 +91,7 @@ object "D_16" {
object "C_3" {
code {
{
/// @src 0:82:95
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("C_3_deployed")
@@ -90,6 +102,7 @@ object "D_16" {
object "C_3_deployed" {
code {
{
/// @src 0:82:95
mstore(64, 128)
revert(0, 0)
}
@@ -6,9 +6,11 @@ Optimized IR:
* !USE AT YOUR OWN RISK! *
*=====================================================*/
/// @use-src 0:"ir_with_assembly_no_memoryguard_creation/input.sol", 1:"#utility.yul"
object "D_12" {
code {
{
/// @src 0:82:161
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("D_12_deployed")
@@ -19,6 +21,7 @@ object "D_12" {
object "D_12_deployed" {
code {
{
/// @src 0:82:161
mstore(64, 128)
if iszero(lt(calldatasize(), 4))
{
@@ -6,9 +6,11 @@ Optimized IR:
* !USE AT YOUR OWN RISK! *
*=====================================================*/
/// @use-src 0:"ir_with_assembly_no_memoryguard_runtime/input.sol", 1:"#utility.yul"
object "D_8" {
code {
{
/// @src 0:82:153
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("D_8_deployed")
@@ -19,6 +21,7 @@ object "D_8" {
object "D_8_deployed" {
code {
{
/// @src 0:82:153
mstore(64, 128)
if iszero(lt(calldatasize(), 4))
{
@@ -6,13 +6,17 @@ Optimized IR:
* !USE AT YOUR OWN RISK! *
*=====================================================*/
/// @use-src 0:"keccak_optimization_deploy_code/input.sol", 1:"#utility.yul"
object "C_12" {
code {
{
/// @src 0:62:463
mstore(64, 128)
if callvalue() { revert(0, 0) }
/// @src 0:103:275
mstore(0, 100)
sstore(0, keccak256(0, 32))
/// @src 0:62:463
let _1 := datasize("C_12_deployed")
codecopy(128, dataoffset("C_12_deployed"), _1)
return(128, _1)
@@ -21,10 +25,13 @@ object "C_12" {
object "C_12_deployed" {
code {
{
/// @src 0:62:463
mstore(64, 128)
if callvalue() { revert(0, 0) }
/// @src 0:317:454
mstore(0, 100)
sstore(0, 17385872270140913825666367956517731270094621555228275961425792378517567244498)
/// @src 0:62:463
stop()
}
}
@@ -6,9 +6,11 @@ Optimized IR:
* !USE AT YOUR OWN RISK! *
*=====================================================*/
/// @use-src 0:"keccak_optimization_low_runs/input.sol", 1:"#utility.yul"
object "C_7" {
code {
{
/// @src 0:62:285
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("C_7_deployed")
@@ -19,10 +21,13 @@ object "C_7" {
object "C_7_deployed" {
code {
{
/// @src 0:62:285
mstore(64, 128)
if callvalue() { revert(0, 0) }
/// @src 0:109:277
mstore(0, 100)
sstore(0, keccak256(0, 32))
/// @src 0:62:285
stop()
}
}
+11 -2
View File
@@ -6,9 +6,11 @@ Optimized IR:
* !USE AT YOUR OWN RISK! *
*=====================================================*/
/// @use-src 0:"name_simplifier/input.sol", 1:"#utility.yul"
object "C_59" {
code {
{
/// @src 0:346:625
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("C_59_deployed")
@@ -19,6 +21,7 @@ object "C_59" {
object "C_59_deployed" {
code {
{
/// @src 0:346:625
mstore(64, 128)
if iszero(lt(calldatasize(), 4))
{
@@ -90,14 +93,18 @@ object "C_59" {
if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }
mstore(64, newFreePtr)
}
/// @src 0:381:623
function fun_sumArray(var_s_mpos) -> var, var_mpos
{
/// @src 0:346:625
if iszero(mload(var_s_mpos)) { panic_error_0x32() }
sstore(0x00, mload(mload(add(var_s_mpos, 32))))
sstore(/** @src 0:472:473 */ 0x00, /** @src 0:346:625 */ mload(/** @src 0:469:474 */ mload(/** @src 0:346:625 */ add(var_s_mpos, 32))))
if iszero(lt(1, mload(var_s_mpos))) { panic_error_0x32() }
let _1 := mload(mload(add(var_s_mpos, 64)))
let _1 := mload(/** @src 0:489:494 */ mload(/** @src 0:346:625 */ add(var_s_mpos, 64)))
sstore(0x02, _1)
/// @src 0:500:619
var := _1
/// @src 0:346:625
let memPtr := mload(64)
let newFreePtr := add(memPtr, 160)
if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }
@@ -107,8 +114,10 @@ object "C_59" {
mstore(add(memPtr, 64), "ngstringlongstringlongstringlong")
mstore(add(memPtr, 96), "stringlongstringlongstringlongst")
mstore(add(memPtr, 128), "ring")
/// @src 0:500:619
var_mpos := memPtr
}
/// @src 0:346:625
function panic_error_0x32()
{
mstore(0, shl(224, 0x4e487b71))
+15 -4
View File
@@ -6,9 +6,11 @@ Optimized IR:
* !USE AT YOUR OWN RISK! *
*=====================================================*/
/// @use-src 0:"optimizer_array_sload/input.sol", 1:"#utility.yul"
object "Arraysum_34" {
code {
{
/// @src 0:80:429
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("Arraysum_34_deployed")
@@ -19,6 +21,7 @@ object "Arraysum_34" {
object "Arraysum_34_deployed" {
code {
{
/// @src 0:80:429
mstore(64, 128)
if iszero(lt(calldatasize(), 4))
{
@@ -28,19 +31,27 @@ object "Arraysum_34" {
if callvalue() { revert(_1, _1) }
if slt(add(calldatasize(), not(3)), _1) { revert(_1, _1) }
let var_sum := _1
let var_i := _1
/// @src 0:368:378
let var_i := /** @src 0:80:429 */ _1
let _2 := sload(_1)
/// @src 0:364:423
for { }
lt(var_i, _2)
/** @src 0:380:397 */ lt(var_i, _2)
/// @src 0:368:378
{
/// @src 0:80:429
if eq(var_i, not(0)) { panic_error_0x11() }
var_i := add(var_i, 1)
/// @src 0:399:402
var_i := /** @src 0:80:429 */ add(var_i, 1)
}
/// @src 0:399:402
{
/// @src 0:80:429
mstore(_1, _1)
let _3 := sload(add(18569430475105882587588266137607568536673111973893317399460219858819262702947, var_i))
if gt(var_sum, not(_3)) { panic_error_0x11() }
var_sum := add(var_sum, _3)
/// @src 0:407:423
var_sum := /** @src 0:80:429 */ add(var_sum, _3)
}
let memPos := mload(64)
return(memPos, sub(abi_encode_uint256(memPos, var_sum), memPos))
+4 -1
View File
@@ -25,11 +25,13 @@ object "C_15" {
memPtr := mload(64)
}
/// @src 0:59:147
function constructor_C_15() {
/// @src 0:59:147
}
/// @src 0:59:147
function revert_error_ca66f745a3ce8ff40e2ccaf1ad45db7774001b90d25810abd9040049be7bf4bb() {
@@ -217,10 +219,11 @@ object "C_15" {
mstore(64, newFreePtr)
}
/// @src 0:93:145
function fun_f_14(var__7_mpos, var_e_10) {
/// @src 0:93:145
}
/// @src 0:59:147
function panic_error_0x41() {
mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)
@@ -5,8 +5,10 @@
* !USE AT YOUR OWN RISK! *
*=====================================================*/
/// @use-src 0:\"A\", 1:\"#utility.yul\"
object \"C_7\" {
code {
/// @src 0:79:121
mstore(64, 128)
if callvalue()
{
@@ -25,6 +27,7 @@ object \"C_7\" {
}
object \"C_7_deployed\" {
code {
/// @src 0:79:121
mstore(64, 128)
if iszero(lt(calldatasize(), 4))
{
@@ -56,8 +59,10 @@ object \"C_7\" {
{ tail := add(headStart, 0) }
function allocate_unbounded() -> memPtr
{ memPtr := mload(64) }
/// @src 0:92:119
function fun_f_6()
{ }
/// @src 0:79:121
function revert_error_42b3090547df1d2001c96683413b8cf91c1b902ef5e3cb8d9f6f304cf7446f74()
{ revert(0, 0) }
function revert_error_ca66f745a3ce8ff40e2ccaf1ad45db7774001b90d25810abd9040049be7bf4bb()
@@ -24,11 +24,13 @@ object \"C_7\" {
memPtr := mload(64)
}
/// @src 0:79:121
function constructor_C_7() {
/// @src 0:79:121
}
/// @src 0:79:121
function revert_error_ca66f745a3ce8ff40e2ccaf1ad45db7774001b90d25810abd9040049be7bf4bb() {
revert(0, 0)
@@ -76,10 +78,11 @@ object \"C_7\" {
memPtr := mload(64)
}
/// @src 0:92:119
function fun_f_6() {
/// @src 0:92:119
}
/// @src 0:79:121
function revert_error_42b3090547df1d2001c96683413b8cf91c1b902ef5e3cb8d9f6f304cf7446f74() {
revert(0, 0)
@@ -24,11 +24,13 @@ object \"C_3\" {
memPtr := mload(64)
}
/// @src 0:79:92
function constructor_C_3() {
/// @src 0:79:92
}
/// @src 0:79:92
function revert_error_ca66f745a3ce8ff40e2ccaf1ad45db7774001b90d25810abd9040049be7bf4bb() {
revert(0, 0)
@@ -98,11 +100,13 @@ object \"D_16\" {
memPtr := mload(64)
}
/// @src 0:93:146
function constructor_D_16() {
/// @src 0:93:146
}
/// @src 0:93:146
function revert_error_ca66f745a3ce8ff40e2ccaf1ad45db7774001b90d25810abd9040049be7bf4bb() {
revert(0, 0)
@@ -150,8 +154,8 @@ object \"D_16\" {
memPtr := mload(64)
}
/// @src 0:106:144
function fun_f_15() {
/// @src 0:106:144
/// @src 0:134:141
let _1 := allocate_unbounded()
@@ -168,6 +172,7 @@ object \"D_16\" {
let var_c_8_address := expr_12_address
}
/// @src 0:93:146
function panic_error_0x41() {
mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)
@@ -226,11 +231,13 @@ object \"D_16\" {
memPtr := mload(64)
}
/// @src 0:79:92
function constructor_C_3() {
/// @src 0:79:92
}
/// @src 0:79:92
function revert_error_ca66f745a3ce8ff40e2ccaf1ad45db7774001b90d25810abd9040049be7bf4bb() {
revert(0, 0)
+4 -1
View File
@@ -25,11 +25,13 @@ object "test_11" {
memPtr := mload(64)
}
/// @src 0:79:169
function constructor_test_11() {
/// @src 0:79:169
}
/// @src 0:79:169
function revert_error_ca66f745a3ce8ff40e2ccaf1ad45db7774001b90d25810abd9040049be7bf4bb() {
revert(0, 0)
@@ -87,8 +89,8 @@ object "test_11" {
cleaned := iszero(iszero(value))
}
/// @src 0:99:167
function fun_f_10() -> var__5 {
/// @src 0:99:167
/// @src 0:133:137
let zero_t_bool_1 := zero_value_for_split_t_bool()
var__5 := zero_t_bool_1
@@ -100,6 +102,7 @@ object "test_11" {
leave
}
/// @src 0:79:169
function revert_error_42b3090547df1d2001c96683413b8cf91c1b902ef5e3cb8d9f6f304cf7446f74() {
revert(0, 0)
+17 -4
View File
@@ -12,9 +12,11 @@ Optimized IR:
* !USE AT YOUR OWN RISK! *
*=====================================================*/
/// @use-src 0:"viair_subobjects/input.sol", 1:"#utility.yul"
object "C_3" {
code {
{
/// @src 0:82:95
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("C_3_deployed")
@@ -25,6 +27,7 @@ object "C_3" {
object "C_3_deployed" {
code {
{
/// @src 0:82:95
mstore(64, 128)
revert(0, 0)
}
@@ -47,9 +50,11 @@ Optimized IR:
* !USE AT YOUR OWN RISK! *
*=====================================================*/
/// @use-src 0:"viair_subobjects/input.sol", 1:"#utility.yul"
object "D_16" {
code {
{
/// @src 0:96:165
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("D_16_deployed")
@@ -60,6 +65,7 @@ object "D_16" {
object "D_16_deployed" {
code {
{
/// @src 0:96:165
mstore(64, 128)
if iszero(lt(calldatasize(), 4))
{
@@ -68,17 +74,22 @@ object "D_16" {
{
if callvalue() { revert(_1, _1) }
if slt(add(calldatasize(), not(3)), _1) { revert(_1, _1) }
/// @src 0:149:156
let _2 := datasize("C_3")
let _3 := add(128, _2)
if or(gt(_3, 0xffffffffffffffff), lt(_3, 128))
let _3 := add(/** @src 0:96:165 */ 128, /** @src 0:149:156 */ _2)
if or(gt(_3, 0xffffffffffffffff), lt(_3, /** @src 0:96:165 */ 128))
/// @src 0:149:156
{
/// @src 0:96:165
mstore(_1, shl(224, 0x4e487b71))
mstore(4, 0x41)
revert(_1, 0x24)
}
datacopy(128, dataoffset("C_3"), _2)
if iszero(create(_1, 128, _2))
/// @src 0:149:156
datacopy(/** @src 0:96:165 */ 128, /** @src 0:149:156 */ dataoffset("C_3"), _2)
if iszero(create(/** @src 0:96:165 */ _1, 128, /** @src 0:149:156 */ _2))
{
/// @src 0:96:165
let pos := mload(64)
returndatacopy(pos, _1, returndatasize())
revert(pos, returndatasize())
@@ -92,6 +103,7 @@ object "D_16" {
object "C_3" {
code {
{
/// @src 0:82:95
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("C_3_deployed")
@@ -102,6 +114,7 @@ object "D_16" {
object "C_3_deployed" {
code {
{
/// @src 0:82:95
mstore(64, 128)
revert(0, 0)
}
@@ -6,9 +6,11 @@ Optimized IR:
* !USE AT YOUR OWN RISK! *
*=====================================================*/
/// @use-src 0:"yul_optimizer_steps/input.sol", 1:"#utility.yul"
object "C_7" {
code {
{
/// @src 0:80:112
mstore(64, 128)
if callvalue()
{
@@ -26,6 +28,7 @@ object "C_7" {
object "C_7_deployed" {
code {
{
/// @src 0:80:112
mstore(64, 128)
if iszero(lt(calldatasize(), 4))
{
@@ -53,6 +53,7 @@ object \"C_54\" {
cleaned := value
}
/// @src 0:175:223
function constructor_C_54(var__init_12) {
/// @src 0:175:223
@@ -70,6 +71,7 @@ object \"C_54\" {
let expr_17 := expr_16
}
/// @src 0:79:428
function convert_t_int256_to_t_int256(value) -> converted {
converted := cleanup_t_int256(value)
@@ -303,17 +305,18 @@ object \"C_54\" {
mstore(64, newFreePtr)
}
/// @src 0:343:426
function fun_f2_53() -> var__42 {
/// @src 0:343:426
/// @src 0:375:378
let zero_t_int256_4 := zero_value_for_split_t_int256()
var__42 := zero_t_int256_4
var__42 := modifier_m_40(var__42)
}
/// @src 0:79:428
/// @src 0:343:426
function fun_f2_53_inner(_8) -> var__42 {
/// @src 0:343:426
var__42 := _8
/// @src 0:392:400
@@ -359,9 +362,10 @@ object \"C_54\" {
leave
}
/// @src 0:79:428
/// @src 0:226:302
function fun_f_30() -> var__23 {
/// @src 0:226:302
/// @src 0:262:265
let zero_t_int256_1 := zero_value_for_split_t_int256()
var__23 := zero_t_int256_1
@@ -379,9 +383,10 @@ object \"C_54\" {
leave
}
/// @src 0:79:428
/// @src 0:152:171
function getter_fun_stateVar_10() -> ret {
/// @src 0:152:171
let slot := 0
let offset := 0
@@ -389,6 +394,7 @@ object \"C_54\" {
ret := read_from_storage_split_dynamic_t_int256(slot, offset)
}
/// @src 0:79:428
function increment_t_int256(value) -> ret {
value := cleanup_t_int256(value)
@@ -396,8 +402,8 @@ object \"C_54\" {
ret := add(value, 1)
}
/// @src 0:304:341
function modifier_m_40(var__42) -> _5 {
/// @src 0:304:341
_5 := var__42
/// @src 0:322:332
@@ -409,6 +415,7 @@ object \"C_54\" {
_5 := fun_f2_53_inner(var__42)
}
/// @src 0:79:428
function panic_error_0x11() {
mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)
@@ -599,6 +606,7 @@ object \"D_72\" {
cleaned := value
}
/// @src 0:175:223
function constructor_C_54(var__init_12) {
/// @src 0:175:223
@@ -616,7 +624,9 @@ object \"D_72\" {
let expr_17 := expr_16
}
/// @src 1:91:166
/// @src 1:113:164
function constructor_D_72(var__init2_63) {
/// @src 1:107:108
let expr_60 := 0x03
@@ -635,6 +645,7 @@ object \"D_72\" {
update_storage_value_offset_0t_int256_to_t_int256(0x00, expr_68)
}
/// @src 1:91:166
function convert_t_int256_to_t_int256(value) -> converted {
converted := cleanup_t_int256(value)
@@ -894,17 +905,18 @@ object \"D_72\" {
mstore(64, newFreePtr)
}
/// @src 0:343:426
function fun_f2_53() -> var__42 {
/// @src 0:343:426
/// @src 0:375:378
let zero_t_int256_4 := zero_value_for_split_t_int256()
var__42 := zero_t_int256_4
var__42 := modifier_m_40(var__42)
}
/// @src 1:91:166
/// @src 0:343:426
function fun_f2_53_inner(_8) -> var__42 {
/// @src 0:343:426
var__42 := _8
/// @src 0:392:400
@@ -950,9 +962,10 @@ object \"D_72\" {
leave
}
/// @src 1:91:166
/// @src 0:226:302
function fun_f_30() -> var__23 {
/// @src 0:226:302
/// @src 0:262:265
let zero_t_int256_1 := zero_value_for_split_t_int256()
var__23 := zero_t_int256_1
@@ -970,9 +983,10 @@ object \"D_72\" {
leave
}
/// @src 1:91:166
/// @src 0:152:171
function getter_fun_stateVar_10() -> ret {
/// @src 0:152:171
let slot := 0
let offset := 0
@@ -980,6 +994,7 @@ object \"D_72\" {
ret := read_from_storage_split_dynamic_t_int256(slot, offset)
}
/// @src 1:91:166
function increment_t_int256(value) -> ret {
value := cleanup_t_int256(value)
@@ -987,8 +1002,8 @@ object \"D_72\" {
ret := add(value, 1)
}
/// @src 0:304:341
function modifier_m_40(var__42) -> _5 {
/// @src 0:304:341
_5 := var__42
/// @src 0:322:332
@@ -1000,6 +1015,7 @@ object \"D_72\" {
_5 := fun_f2_53_inner(var__42)
}
/// @src 1:91:166
function panic_error_0x11() {
mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)
@@ -0,0 +1,24 @@
{
"language": "Solidity",
"sources":
{
"C":
{
"content": "//SPDX-License-Identifier: GPL-2.0\npragma solidity >=0.0;\npragma abicoder v2;\n\ncontract C\n{\n int constant constVar = 41;\n int immutable immutVar = 42;\n int public stateVar;\n\n constructor(int _init)\n {\n stateVar = _init;\n }\n\n function f() external pure returns (int)\n {\n return constVar + immutVar;\n }\n modifier m()\n {\n stateVar++;\n _;\n }\n function f2() m public returns (int)\n {\n return stateVar + this.f() + immutVar;\n }\n}\n"
},
"D":
{
"content": "//SPDX-License-Identifier: GPL-2.0\npragma solidity >=0.0;\npragma abicoder v2;\nimport \"C\";\n\ncontract D is C(3)\n{\n constructor(int _init2)\n {\n stateVar += _init2;\n }\n}\n"
}
},
"settings":
{
"viaIR": true,
"optimizer": { "enabled": true },
"outputSelection":
{
"*": { "*": ["evm.assembly"] }
}
}
}
@@ -0,0 +1,888 @@
{"contracts":{"C":{"C":{"evm":{"assembly":" /* \"C\":79:428 contract C... */
mstore(0x40, 0xa0)
jumpi(tag_1, iszero(callvalue))
0x00
dup1
revert
tag_1:
bytecodeSize
codesize
dup2
swap1
sub
0xa0
0x1f
dup3
add
not(0x1f)
and
dup2
add
swap1
sub(shl(0x40, 0x01), 0x01)
dup3
gt
swap1
dup3
lt
or
iszero
tag_2
jumpi
mstore(0x00, shl(0xe0, 0x4e487b71))
mstore(0x04, 0x41)
revert(0x00, 0x24)
tag_2:
0x40
mstore
dup1
dup3
0xa0
codecopy
0x20
dup2
slt
iszero
tag_3
jumpi
0x00
dup1
revert
tag_3:
pop
pop
tag_4
mload(0xa0)
/* \"C\":147:149 42 */
mstore(0x80, 0x2a)
0x00
/* \"C\":79:428 contract C... */
sstore
/* \"C\":175:223 constructor(int _init)... */
jump
/* \"C\":79:428 contract C... */
tag_4:
mload(0x40)
dataSize(sub_0)
dup1
dataOffset(sub_0)
dup4
codecopy
mload(0x80)
dup3
assignImmutable(\"0xe4b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10\")
dup1
dup3
return
stop
sub_0: assembly {
/* \"C\":79:428 contract C... */
mstore(0x40, 0x80)
jumpi(tag_1, lt(calldatasize, 0x04))
0x00
dup1
calldataload
0xe0
shr
0x26121ff0
dup2
eq
tag_3
jumpi
0x793816ec
dup2
eq
tag_4
jumpi
0x9942ec6f
dup2
eq
tag_5
jumpi
jump(tag_2)
tag_3:
jumpi(tag_6, iszero(callvalue))
dup2
dup3
revert
tag_6:
tag_7
calldatasize
tag_8
jump\t// in
tag_7:
/* \"C\":279:298 constVar + immutVar */
tag_9
/* \"C\":290:298 immutVar */
immutable(\"0xe4b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10\")
/* \"C\":279:298 constVar + immutVar */
tag_10
jump\t// in
tag_9:
/* \"C\":79:428 contract C... */
mload(0x40)
dup2
dup2
mstore
0x20
dup2
return
tag_4:
jumpi(tag_13, iszero(callvalue))
dup2
dup3
revert
tag_13:
tag_14
calldatasize
tag_8
jump\t// in
tag_14:
dup2
sload
mload(0x40)
dup2
dup2
mstore
0x20
dup2
return
tag_5:
jumpi(tag_16, iszero(callvalue))
dup2
dup3
revert
tag_16:
tag_17
calldatasize
tag_8
jump\t// in
tag_17:
/* \"C\":375:378 int */
tag_9
tag_19
jump\t// in
/* \"C\":79:428 contract C... */
tag_2:
pop
pop
tag_1:
0x00
dup1
revert
tag_8:
0x00
not(0x03)
dup3
add
slt
iszero
tag_23
jumpi
0x00
dup1
revert
tag_23:
pop
jump\t// out
tag_24:
0x00
0x20
dup3
dup5
sub
slt
iszero
tag_26
jumpi
0x00
dup1
revert
tag_26:
pop
mload
swap2
swap1
pop
jump\t// out
tag_10:
0x00
sub(shl(0xff, 0x01), 0x2a)
dup3
sgt
0x01
and
iszero
tag_30
jumpi
tag_30
tag_31
jump\t// in
tag_30:
pop
/* \"C\":117:119 41 */
0x29
/* \"C\":79:428 contract C... */
add
swap1
jump\t// out
tag_32:
0x00
dup1
dup3
slt
dup1
iszero
sub(shl(0xff, 0x01), 0x01)
dup5
swap1
sub
dup6
sgt
and
iszero
tag_35
jumpi
tag_35
tag_31
jump\t// in
tag_35:
shl(0xff, 0x01)
dup4
swap1
sub
dup5
slt
dup2
and
iszero
tag_37
jumpi
tag_37
tag_31
jump\t// in
tag_37:
pop
pop
add
swap1
jump\t// out
/* \"C\":304:341 modifier m()... */
tag_19:
0x00
/* \"C\":79:428 contract C... */
dup1
sload
/* \"C\":304:341 modifier m()... */
dup2
swap1
sub(shl(0xff, 0x01), 0x01)
/* \"C\":79:428 contract C... */
dup2
eq
iszero
tag_40
jumpi
tag_40
tag_31
jump\t// in
tag_40:
0x01
add
dup1
dup3
sstore
/* \"C\":403:407 this */
address
/* \"C\":403:411 this.f() */
extcodesize
tag_41
jumpi
/* \"C\":79:428 contract C... */
dup2
dup3
revert
/* \"C\":403:411 this.f() */
tag_41:
/* \"C\":79:428 contract C... */
mload(0x40)
shl(0xe4, 0x026121ff)
/* \"C\":403:411 this.f() */
dup2
mstore
0x20
/* \"C\":79:428 contract C... */
dup2
/* \"C\":403:411 this.f() */
0x04
/* \"C\":79:428 contract C... */
dup2
/* \"C\":403:407 this */
address
/* \"C\":403:411 this.f() */
gas
staticcall
dup1
tag_42
jumpi
/* \"C\":79:428 contract C... */
mload(0x40)
returndatasize
dup6
dup3
returndatacopy
returndatasize
dup2
revert
/* \"C\":403:411 this.f() */
tag_42:
/* \"C\":79:428 contract C... */
dup4
/* \"C\":403:411 this.f() */
dup2
iszero
tag_43
jumpi
returndatasize
/* \"C\":79:428 contract C... */
0x1f
add
not(0x1f)
and
/* \"C\":117:119 41 */
dup4
add
0xffffffffffffffff
dup2
gt
dup5
dup3
lt
or
iszero
tag_44
jumpi
shl(0xe0, 0x4e487b71)
/* \"C\":79:428 contract C... */
dup7
mstore
0x41
/* \"C\":403:411 this.f() */
0x04
/* \"C\":79:428 contract C... */
mstore
0x24
dup7
revert
/* \"C\":117:119 41 */
tag_44:
/* \"C\":79:428 contract C... */
0x40
/* \"C\":117:119 41 */
mstore
/* \"C\":403:411 this.f() */
tag_45
returndatasize
dup5
add
dup5
tag_24
jump\t// in
tag_45:
swap1
pop
tag_43:
/* \"C\":392:411 stateVar + this.f() */
tag_46
dup2
dup6
tag_32
jump\t// in
tag_46:
swap5
pop
pop
pop
pop
pop
/* \"C\":392:422 stateVar + this.f() + immutVar */
tag_47
/* \"C\":414:422 immutVar */
immutable(\"0xe4b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10\")
/* \"C\":392:422 stateVar + this.f() + immutVar */
dup3
tag_32
jump\t// in
tag_47:
/* \"C\":336:337 _ */
swap2
pop
pop
/* \"C\":304:341 modifier m()... */
swap1
jump\t// out
/* \"C\":79:428 contract C... */
tag_31:
mstore(0x00, shl(0xe0, 0x4e487b71))
mstore(0x04, 0x11)
revert(0x00, 0x24)
auxdata: <AUXDATA REMOVED>
}
"}}},"D":{"D":{"evm":{"assembly":" /* \"D\":91:166 contract D is C(3)... */
mstore(0x40, 0xa0)
jumpi(tag_1, iszero(callvalue))
0x00
dup1
revert
tag_1:
bytecodeSize
codesize
dup2
swap1
sub
0xa0
0x1f
dup3
add
not(0x1f)
and
dup2
add
swap1
sub(shl(0x40, 0x01), 0x01)
dup3
gt
swap1
dup3
lt
or
iszero
tag_2
jumpi
mstore(0x00, shl(0xe0, 0x4e487b71))
mstore(0x04, 0x41)
revert(0x00, 0x24)
tag_2:
0x40
mstore
dup1
dup3
0xa0
codecopy
0x20
dup2
slt
iszero
tag_3
jumpi
0x00
dup1
revert
tag_3:
pop
pop
tag_4
mload(0xa0)
tag_5
jump\t// in
tag_4:
mload(0x40)
dataSize(sub_0)
dup1
dataOffset(sub_0)
dup4
codecopy
mload(0x80)
dup3
assignImmutable(\"0xe4b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10\")
dup1
dup3
return
/* \"D\":113:164 constructor(int _init2)... */
tag_5:
/* \"C\":147:149 42 */
mstore(0x80, 0x2a)
/* \"D\":107:108 3 */
0x03
0x00
/* \"D\":91:166 contract D is C(3)... */
sstore
sub(shl(0xff, 0x01), 0x04)
dup2
sgt
0x01
and
iszero
tag_8
jumpi
mstore(0x00, shl(0xe0, 0x4e487b71))
mstore(0x04, 0x11)
revert(0x00, 0x24)
tag_8:
/* \"D\":107:108 3 */
0x03
/* \"D\":91:166 contract D is C(3)... */
add
0x00
sstore
/* \"D\":113:164 constructor(int _init2)... */
jump\t// out
stop
sub_0: assembly {
/* \"D\":91:166 contract D is C(3)... */
mstore(0x40, 0x80)
jumpi(tag_1, lt(calldatasize, 0x04))
0x00
dup1
calldataload
0xe0
shr
0x26121ff0
dup2
eq
tag_3
jumpi
0x793816ec
dup2
eq
tag_4
jumpi
0x9942ec6f
dup2
eq
tag_5
jumpi
jump(tag_2)
tag_3:
jumpi(tag_6, iszero(callvalue))
dup2
dup3
revert
tag_6:
tag_7
calldatasize
tag_8
jump\t// in
tag_7:
/* \"C\":279:298 constVar + immutVar */
tag_9
/* \"C\":290:298 immutVar */
immutable(\"0xe4b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10\")
/* \"C\":279:298 constVar + immutVar */
tag_10
jump\t// in
tag_9:
/* \"D\":91:166 contract D is C(3)... */
mload(0x40)
dup2
dup2
mstore
0x20
dup2
return
tag_4:
jumpi(tag_13, iszero(callvalue))
dup2
dup3
revert
tag_13:
tag_14
calldatasize
tag_8
jump\t// in
tag_14:
dup2
sload
mload(0x40)
dup2
dup2
mstore
0x20
dup2
return
tag_5:
jumpi(tag_16, iszero(callvalue))
dup2
dup3
revert
tag_16:
tag_17
calldatasize
tag_8
jump\t// in
tag_17:
/* \"C\":375:378 int */
tag_9
tag_19
jump\t// in
/* \"D\":91:166 contract D is C(3)... */
tag_2:
pop
pop
tag_1:
0x00
dup1
revert
tag_8:
0x00
not(0x03)
dup3
add
slt
iszero
tag_23
jumpi
0x00
dup1
revert
tag_23:
pop
jump\t// out
tag_24:
0x00
0x20
dup3
dup5
sub
slt
iszero
tag_26
jumpi
0x00
dup1
revert
tag_26:
pop
mload
swap2
swap1
pop
jump\t// out
tag_10:
0x00
sub(shl(0xff, 0x01), 0x2a)
dup3
sgt
0x01
and
iszero
tag_30
jumpi
tag_30
tag_31
jump\t// in
tag_30:
pop
/* \"C\":117:119 41 */
0x29
/* \"D\":91:166 contract D is C(3)... */
add
swap1
jump\t// out
tag_32:
0x00
dup1
dup3
slt
dup1
iszero
sub(shl(0xff, 0x01), 0x01)
dup5
swap1
sub
dup6
sgt
and
iszero
tag_35
jumpi
tag_35
tag_31
jump\t// in
tag_35:
shl(0xff, 0x01)
dup4
swap1
sub
dup5
slt
dup2
and
iszero
tag_37
jumpi
tag_37
tag_31
jump\t// in
tag_37:
pop
pop
add
swap1
jump\t// out
/* \"C\":304:341 modifier m()... */
tag_19:
0x00
/* \"D\":91:166 contract D is C(3)... */
dup1
sload
/* \"C\":304:341 modifier m()... */
dup2
swap1
sub(shl(0xff, 0x01), 0x01)
/* \"D\":91:166 contract D is C(3)... */
dup2
eq
iszero
tag_40
jumpi
tag_40
tag_31
jump\t// in
tag_40:
0x01
add
dup1
dup3
sstore
/* \"C\":403:407 this */
address
/* \"C\":403:411 this.f() */
extcodesize
tag_41
jumpi
/* \"D\":91:166 contract D is C(3)... */
dup2
dup3
revert
/* \"C\":403:411 this.f() */
tag_41:
/* \"D\":91:166 contract D is C(3)... */
mload(0x40)
shl(0xe4, 0x026121ff)
/* \"C\":403:411 this.f() */
dup2
mstore
0x20
/* \"D\":91:166 contract D is C(3)... */
dup2
/* \"C\":403:411 this.f() */
0x04
/* \"D\":91:166 contract D is C(3)... */
dup2
/* \"C\":403:407 this */
address
/* \"C\":403:411 this.f() */
gas
staticcall
dup1
tag_42
jumpi
/* \"D\":91:166 contract D is C(3)... */
mload(0x40)
returndatasize
dup6
dup3
returndatacopy
returndatasize
dup2
revert
/* \"C\":403:411 this.f() */
tag_42:
/* \"D\":91:166 contract D is C(3)... */
dup4
/* \"C\":403:411 this.f() */
dup2
iszero
tag_43
jumpi
returndatasize
/* \"D\":91:166 contract D is C(3)... */
0x1f
add
not(0x1f)
and
/* \"C\":117:119 41 */
dup4
add
0xffffffffffffffff
dup2
gt
dup5
dup3
lt
or
iszero
tag_44
jumpi
shl(0xe0, 0x4e487b71)
/* \"D\":91:166 contract D is C(3)... */
dup7
mstore
0x41
/* \"C\":403:411 this.f() */
0x04
/* \"D\":91:166 contract D is C(3)... */
mstore
0x24
dup7
revert
/* \"C\":117:119 41 */
tag_44:
/* \"D\":91:166 contract D is C(3)... */
0x40
/* \"C\":117:119 41 */
mstore
/* \"C\":403:411 this.f() */
tag_45
returndatasize
dup5
add
dup5
tag_24
jump\t// in
tag_45:
swap1
pop
tag_43:
/* \"C\":392:411 stateVar + this.f() */
tag_46
dup2
dup6
tag_32
jump\t// in
tag_46:
swap5
pop
pop
pop
pop
pop
/* \"C\":392:422 stateVar + this.f() + immutVar */
tag_47
/* \"C\":414:422 immutVar */
immutable(\"0xe4b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10\")
/* \"C\":392:422 stateVar + this.f() + immutVar */
dup3
tag_32
jump\t// in
tag_47:
/* \"C\":336:337 _ */
swap2
pop
pop
/* \"C\":304:341 modifier m()... */
swap1
jump\t// out
/* \"D\":91:166 contract D is C(3)... */
tag_31:
mstore(0x00, shl(0xe0, 0x4e487b71))
mstore(0x04, 0x11)
revert(0x00, 0x24)
auxdata: <AUXDATA REMOVED>
}
"}}}},"sources":{"C":{"id":0},"D":{"id":1}}}
@@ -24,11 +24,13 @@ object \"C_11\" {
memPtr := mload(64)
}
/// @src 0:78:164
function constructor_C_11() {
/// @src 0:78:164
}
/// @src 0:78:164
function revert_error_ca66f745a3ce8ff40e2ccaf1ad45db7774001b90d25810abd9040049be7bf4bb() {
revert(0, 0)
@@ -150,8 +152,8 @@ object \"C_11\" {
mstore(64, newFreePtr)
}
/// @src 0:91:162
function fun_f_10() -> var__5_mpos {
/// @src 0:91:162
/// @src 0:127:140
let zero_t_string_memory_ptr_1_mpos := zero_value_for_split_t_string_memory_ptr()
var__5_mpos := zero_t_string_memory_ptr_1_mpos
@@ -161,6 +163,7 @@ object \"C_11\" {
leave
}
/// @src 0:78:164
function panic_error_0x41() {
mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)
@@ -24,11 +24,13 @@ object \"C_11\" {
memPtr := mload(64)
}
/// @src 0:78:158
function constructor_C_11() {
/// @src 0:78:158
}
/// @src 0:78:158
function revert_error_ca66f745a3ce8ff40e2ccaf1ad45db7774001b90d25810abd9040049be7bf4bb() {
revert(0, 0)
@@ -90,8 +92,8 @@ object \"C_11\" {
converted := 0x6162636162630000000000000000000000000000000000000000000000000000
}
/// @src 0:91:156
function fun_f_10() -> var__5 {
/// @src 0:91:156
/// @src 0:127:134
let zero_t_bytes32_1 := zero_value_for_split_t_bytes32()
var__5 := zero_t_bytes32_1
@@ -101,6 +103,7 @@ object \"C_11\" {
leave
}
/// @src 0:78:158
function revert_error_42b3090547df1d2001c96683413b8cf91c1b902ef5e3cb8d9f6f304cf7446f74() {
revert(0, 0)
@@ -24,11 +24,13 @@ object \"C_11\" {
memPtr := mload(64)
}
/// @src 0:78:159
function constructor_C_11() {
/// @src 0:78:159
}
/// @src 0:78:159
function revert_error_ca66f745a3ce8ff40e2ccaf1ad45db7774001b90d25810abd9040049be7bf4bb() {
revert(0, 0)
@@ -94,8 +96,8 @@ object \"C_11\" {
converted := shift_left_224(cleanup_t_rational_1633837924_by_1(value))
}
/// @src 0:91:157
function fun_f_10() -> var__5 {
/// @src 0:91:157
/// @src 0:127:133
let zero_t_bytes4_1 := zero_value_for_split_t_bytes4()
var__5 := zero_t_bytes4_1
@@ -107,6 +109,7 @@ object \"C_11\" {
leave
}
/// @src 0:78:159
function revert_error_42b3090547df1d2001c96683413b8cf91c1b902ef5e3cb8d9f6f304cf7446f74() {
revert(0, 0)
@@ -24,11 +24,13 @@ object \"C_11\" {
memPtr := mload(64)
}
/// @src 0:78:243
function constructor_C_11() {
/// @src 0:78:243
}
/// @src 0:78:243
function revert_error_ca66f745a3ce8ff40e2ccaf1ad45db7774001b90d25810abd9040049be7bf4bb() {
revert(0, 0)
@@ -150,8 +152,8 @@ object \"C_11\" {
mstore(64, newFreePtr)
}
/// @src 0:91:241
function fun_f_10() -> var__5_mpos {
/// @src 0:91:241
/// @src 0:127:140
let zero_t_string_memory_ptr_1_mpos := zero_value_for_split_t_string_memory_ptr()
var__5_mpos := zero_t_string_memory_ptr_1_mpos
@@ -161,6 +163,7 @@ object \"C_11\" {
leave
}
/// @src 0:78:243
function panic_error_0x41() {
mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)
@@ -24,11 +24,13 @@ object \"C_11\" {
memPtr := mload(64)
}
/// @src 0:78:159
function constructor_C_11() {
/// @src 0:78:159
}
/// @src 0:78:159
function revert_error_ca66f745a3ce8ff40e2ccaf1ad45db7774001b90d25810abd9040049be7bf4bb() {
revert(0, 0)
@@ -94,8 +96,8 @@ object \"C_11\" {
converted := shift_left_224(cleanup_t_rational_2864434397_by_1(value))
}
/// @src 0:91:157
function fun_f_10() -> var__5 {
/// @src 0:91:157
/// @src 0:127:133
let zero_t_bytes4_1 := zero_value_for_split_t_bytes4()
var__5 := zero_t_bytes4_1
@@ -107,6 +109,7 @@ object \"C_11\" {
leave
}
/// @src 0:78:159
function revert_error_42b3090547df1d2001c96683413b8cf91c1b902ef5e3cb8d9f6f304cf7446f74() {
revert(0, 0)
+1 -1
View File
@@ -108,7 +108,7 @@ Error expectError(string const& _source, bool _allowWarnings = false)
return *error;
}
tuple<optional<ObjectParser::SourceNameMap>, ErrorList> tryGetSourceLocationMapping(string _source)
tuple<optional<SourceNameMap>, ErrorList> tryGetSourceLocationMapping(string _source)
{
vector<string> lines;
boost::split(lines, _source, boost::is_any_of("\n"));