Merge pull request #13130 from ethereum/check-overflow-after-add-sub-operations

Check overflow after add sub operations
This commit is contained in:
chriseth
2022-06-27 15:33:57 +02:00
committed by GitHub
49 changed files with 450 additions and 434 deletions
@@ -19,6 +19,6 @@ contract c {
// compileToEwasm: also
// ----
// test() -> 0xffffffff, 0x0000000000000000000000000a00090008000700060005000400030002000100, 0x0000000000000000000000000000000000000000000000000000000000000000
// gas irOptimized: 124757
// gas legacy: 186184
// gas legacyOptimized: 165682
// gas irOptimized: 124817
// gas legacy: 186028
// gas legacyOptimized: 165692
@@ -38,10 +38,10 @@ contract c {
// compileViaYul: true
// ----
// test1(uint256[][]): 0x20, 2, 0x40, 0x40, 2, 23, 42 -> 2, 65
// gas irOptimized: 180766
// gas irOptimized: 180769
// test2(uint256[][2]): 0x20, 0x40, 0x40, 2, 23, 42 -> 2, 65
// gas irOptimized: 157564
// gas irOptimized: 157567
// test3(uint256[2][]): 0x20, 2, 23, 42, 23, 42 -> 2, 65
// gas irOptimized: 134630
// gas irOptimized: 134633
// test4(uint256[2][2]): 23, 42, 23, 42 -> 65
// gas irOptimized: 111268
// gas irOptimized: 111271
@@ -38,12 +38,12 @@ contract Test {
}
// ----
// test() -> 24
// gas irOptimized: 226694
// gas legacy: 227133
// gas legacyOptimized: 226547
// gas irOptimized: 226700
// gas legacy: 227121
// gas legacyOptimized: 226557
// test1() -> 3
// test2() -> 6
// test3() -> 24
// gas irOptimized: 133254
// gas legacy: 134295
// gas legacyOptimized: 133383
// gas irOptimized: 133260
// gas legacy: 134283
// gas legacyOptimized: 133393
@@ -14,9 +14,9 @@ contract c {
// ----
// storageEmpty -> 1
// fill() ->
// gas irOptimized: 519616
// gas legacy: 521710
// gas legacyOptimized: 516922
// gas irOptimized: 519490
// gas legacy: 521584
// gas legacyOptimized: 517027
// storageEmpty -> 0
// halfClear() ->
// storageEmpty -> 0
@@ -12,9 +12,9 @@ contract c {
// ----
// storageEmpty -> 1
// fill() ->
// gas irOptimized: 465440
// gas legacy: 471400
// gas legacyOptimized: 467400
// gas irOptimized: 465380
// gas legacy: 471280
// gas legacyOptimized: 467500
// storageEmpty -> 0
// clear() ->
// storageEmpty -> 1
@@ -23,7 +23,7 @@ contract c {
}
// ----
// test() -> 1, 2, 3
// gas irOptimized: 2280132
// gas irOptimized: 2280147
// gas legacy: 2273434
// gas legacyOptimized: 2261820
// gas legacyOptimized: 2261844
// storageEmpty -> 1
@@ -18,7 +18,7 @@ contract c {
}
// ----
// test() -> 38, 28, 18
// gas irOptimized: 186364
// gas irOptimized: 186370
// gas legacy: 189492
// gas legacyOptimized: 178294
// gas legacyOptimized: 178318
// storageEmpty -> 1
@@ -18,7 +18,7 @@ contract c {
}
// ----
// test() -> 20, 10
// gas irOptimized: 158009
// gas irOptimized: 158020
// gas legacy: 159279
// gas legacyOptimized: 152921
// gas legacyOptimized: 152937
// storageEmpty -> 1
@@ -16,7 +16,7 @@ contract c {
}
// ----
// test() -> true
// gas irOptimized: 180539
// gas legacy: 228685
// gas legacyOptimized: 209662
// gas irOptimized: 176111
// gas legacy: 224093
// gas legacyOptimized: 205152
// storageEmpty -> 1
@@ -15,6 +15,6 @@ contract c {
}
// ----
// test() -> 0
// gas irOptimized: 173650
// gas irOptimized: 174126
// gas legacy: 216790
// gas legacyOptimized: 203886
// gas legacyOptimized: 204003
@@ -21,9 +21,9 @@ contract D is B, C {
}
// ----
// constructor(): 2, 0 ->
// gas irOptimized: 154366
// gas legacy: 170665
// gas legacyOptimized: 145396
// gas irOptimized: 154331
// gas legacy: 170115
// gas legacyOptimized: 145429
// i() -> 2
// j() -> 2
// k() -> 1
@@ -12,8 +12,8 @@ contract D is C {
}
// ----
// constructor(): 2, 0 ->
// gas irOptimized: 123982
// gas legacy: 139250
// gas legacyOptimized: 119367
// gas irOptimized: 123966
// gas legacy: 138700
// gas legacyOptimized: 119400
// i() -> 2
// k() -> 1
@@ -13,6 +13,6 @@ contract C {
// ----
// createEvent(uint256): 42 ->
// ~ emit E(uint256[]): 0x20, 0x03, 0x2a, 0x2b, 0x2c
// gas irOptimized: 113517
// gas legacy: 116393
// gas legacyOptimized: 114415
// gas irOptimized: 113514
// gas legacy: 116381
// gas legacyOptimized: 114425
@@ -14,6 +14,6 @@ contract C {
// ----
// createEvent(uint256): 42 ->
// ~ emit E(uint256[]): 0x20, 0x03, 0x2a, 0x2b, 0x2c
// gas irOptimized: 113517
// gas legacy: 116393
// gas legacyOptimized: 114415
// gas irOptimized: 113514
// gas legacy: 116381
// gas legacyOptimized: 114425
@@ -16,5 +16,5 @@ contract C {
// createEvent(uint256): 42 ->
// ~ emit E(uint256[][]): 0x20, 0x02, 0x40, 0xa0, 0x02, 0x2a, 0x2b, 0x02, 0x2c, 0x2d
// gas irOptimized: 185145
// gas legacy: 187621
// gas legacyOptimized: 184551
// gas legacy: 187603
// gas legacyOptimized: 184566
@@ -33,9 +33,9 @@ contract test {
// EVMVersion: >=constantinople
// ----
// constructor()
// gas irOptimized: 443542
// gas legacy: 765640
// gas legacyOptimized: 541810
// gas irOptimized: 444190
// gas legacy: 757857
// gas legacyOptimized: 539866
// encode_inline_asm(bytes): 0x20, 0 -> 0x20, 0
// encode_inline_asm(bytes): 0x20, 1, "f" -> 0x20, 4, "Zg=="
// encode_inline_asm(bytes): 0x20, 2, "fo" -> 0x20, 4, "Zm8="
@@ -51,10 +51,10 @@ contract test {
// encode_no_asm(bytes): 0x20, 5, "fooba" -> 0x20, 8, "Zm9vYmE="
// encode_no_asm(bytes): 0x20, 6, "foobar" -> 0x20, 8, "Zm9vYmFy"
// encode_inline_asm_large()
// gas irOptimized: 1385042
// gas legacy: 1652033
// gas legacyOptimized: 1201033
// gas irOptimized: 1382042
// gas legacy: 1646033
// gas legacyOptimized: 1206033
// encode_no_asm_large()
// gas irOptimized: 3335099
// gas legacy: 4777077
// gas legacyOptimized: 2890077
// gas irOptimized: 3311099
// gas legacy: 4723077
// gas legacyOptimized: 2909077
@@ -176,9 +176,9 @@ contract DepositContract is IDepositContract, ERC165 {
}
// ----
// constructor()
// gas irOptimized: 1433406
// gas legacy: 2435803
// gas legacyOptimized: 1775425
// gas irOptimized: 1432633
// gas legacy: 2427722
// gas legacyOptimized: 1773892
// supportsInterface(bytes4): 0x0 -> 0
// supportsInterface(bytes4): 0xffffffff00000000000000000000000000000000000000000000000000000000 -> false # defined to be false by ERC-165 #
// supportsInterface(bytes4): 0x01ffc9a700000000000000000000000000000000000000000000000000000000 -> true # ERC-165 id #
@@ -48,9 +48,9 @@ contract test {
}
// ----
// constructor()
// gas irOptimized: 1878547
// gas legacy: 2478955
// gas legacyOptimized: 1877737
// gas irOptimized: 1876171
// gas legacy: 2471603
// gas legacyOptimized: 1876669
// div(int256,int256): 3141592653589793238, 88714123 -> 35412542528203691288251815328
// gas irOptimized: 22137
// gas legacy: 22767
@@ -48,9 +48,9 @@ contract test {
}
// ----
// constructor()
// gas irOptimized: 1737100
// gas legacy: 2248594
// gas legacyOptimized: 1749096
// gas irOptimized: 1735588
// gas legacy: 2241243
// gas legacyOptimized: 1748028
// div(uint256,uint256): 3141592653589793238, 88714123 -> 35412542528203691288251815328
// gas irOptimized: 22004
// gas legacy: 22497
@@ -33,9 +33,9 @@ contract test {
}
// ----
// constructor()
// gas irOptimized: 438112
// gas legacy: 671453
// gas legacyOptimized: 480242
// gas irOptimized: 422763
// gas legacy: 654526
// gas legacyOptimized: 474842
// prb_pi() -> 3141592656369545286
// gas irOptimized: 57478
// gas legacy: 98903
@@ -297,5 +297,5 @@ contract Test {
// verifyTx() -> true
// ~ emit Verified(string): 0x20, 0x16, "Successfully verified."
// gas irOptimized: 95261
// gas legacy: 113731
// gas legacy: 113239
// gas legacyOptimized: 83670
@@ -49,9 +49,9 @@ contract test {
}
// ----
// constructor()
// gas irOptimized: 691317
// gas legacy: 1127730
// gas legacyOptimized: 753807
// gas irOptimized: 678980
// gas legacy: 1103242
// gas legacyOptimized: 745184
// toSlice(string): 0x20, 11, "hello world" -> 11, 0xa0
// gas irOptimized: 22660
// gas legacy: 23190
@@ -69,6 +69,6 @@ contract test {
// gas legacy: 31621
// gas legacyOptimized: 27914
// benchmark(string,bytes32): 0x40, 0x0842021, 8, "solidity" -> 0x2020
// gas irOptimized: 2040019
// gas legacy: 4356286
// gas legacyOptimized: 2268278
// gas irOptimized: 2017767
// gas legacy: 4294510
// gas legacyOptimized: 2327982
@@ -23,9 +23,9 @@ contract C {
// ----
// constructor(), 1 ether ->
// gas irOptimized: 270677
// gas legacy: 464030
// gas legacyOptimized: 304049
// gas irOptimized: 270449
// gas legacy: 456680
// gas legacyOptimized: 302975
// f(uint256): 0 -> FAILURE
// f(uint256): 1 -> FAILURE
// f(uint256): 2 -> FAILURE
@@ -26,9 +26,9 @@ contract C {
// revertStrings: debug
// ----
// constructor(), 1 ether ->
// gas irOptimized: 428679
// gas legacy: 832976
// gas legacyOptimized: 509560
// gas irOptimized: 428444
// gas legacy: 825625
// gas legacyOptimized: 508492
// f(uint256): 0 -> FAILURE, hex"08c379a0", 0x20, 37, "Target contract does not contain", " code"
// f(uint256): 1 -> FAILURE, hex"08c379a0", 0x20, 37, "Target contract does not contain", " code"
// f(uint256): 2 -> FAILURE, hex"08c379a0", 0x20, 37, "Target contract does not contain", " code"
@@ -17,9 +17,9 @@ contract C {
// EVMVersion: >=byzantium
// ----
// constructor(), 20 wei
// gas irOptimized: 184221
// gas irOptimized: 184005
// gas legacy: 294335
// gas legacyOptimized: 174279
// gas legacyOptimized: 173427
// f(uint256): 20 -> 1370859564726510389319704988634906228201275401179
// x() -> 1
// f(uint256): 20 -> FAILURE
@@ -27,7 +27,7 @@ contract C {
// stack(uint256): 1023 -> FAILURE
// gas irOptimized: 260987
// gas legacy: 483942
// gas legacyOptimized: 298807
// gas legacyOptimized: 302349
// x() -> 1
// stack(uint256): 10 -> 693016686122178122849713379390321835634789309880
// x() -> 2
@@ -27,5 +27,5 @@ contract C {
// ----
// t() -> 9
// gas irOptimized: 99064
// gas legacy: 158955
// gas legacyOptimized: 108788
// gas legacy: 152137
// gas legacyOptimized: 107793
@@ -16,7 +16,7 @@ contract C {
// ----
// constructor(): 3 ->
// gas irOptimized: 125477
// gas legacy: 209361
// gas legacyOptimized: 139324
// gas legacy: 202011
// gas legacyOptimized: 139552
// f() -> 84, 23
// m(uint256): 3 -> 7
@@ -21,6 +21,6 @@ contract A {
// EVMVersion: >=constantinople
// ----
// f(), 10 ether -> 3007, 3008, 3009
// gas irOptimized: 257206
// gas legacy: 422501
// gas legacyOptimized: 287472
// gas irOptimized: 268645
// gas legacy: 402016
// gas legacyOptimized: 288087
@@ -113,9 +113,9 @@ contract ERC20 {
// ----
// constructor()
// ~ emit Transfer(address,address,uint256): #0x00, #0x1212121212121212121212121212120000000012, 0x14
// gas irOptimized: 364503
// gas legacy: 860880
// gas legacyOptimized: 420959
// gas irOptimized: 362054
// gas legacy: 852973
// gas legacyOptimized: 419237
// totalSupply() -> 20
// gas irOptimized: 23415
// gas legacy: 23653
@@ -40,4 +40,4 @@ contract D {
// ----
// library: "A":L
// test() -> 3
// gas legacy: 130369
// gas legacy: 123521
@@ -96,9 +96,9 @@ contract ERC20 {
// ----
// constructor()
// ~ emit Transfer(address,address,uint256): #0x00, #0x1212121212121212121212121212120000000012, 0x14
// gas irOptimized: 357114
// gas legacy: 832643
// gas legacyOptimized: 416135
// gas irOptimized: 357746
// gas legacy: 824737
// gas legacyOptimized: 414462
// totalSupply() -> 20
// gas irOptimized: 23415
// gas legacy: 23524
@@ -20,7 +20,7 @@ contract test {
// ----
// constructor(), 20 wei ->
// gas irOptimized: 176219
// gas legacy: 265006
// gas legacyOptimized: 182842
// gas irOptimized: 176003
// gas legacy: 257656
// gas legacyOptimized: 183070
// sendAmount(uint256): 5 -> 8
@@ -19,7 +19,7 @@ contract test {
// ----
// constructor(), 20 wei ->
// gas irOptimized: 177083
// gas legacy: 266728
// gas legacyOptimized: 184762
// gas irOptimized: 176867
// gas legacy: 259378
// gas legacyOptimized: 183682
// sendAmount(uint256): 5 -> 8
@@ -26,9 +26,9 @@ contract C {
// index(uint256): 10 -> true
// index(uint256): 20 -> true
// index(uint256): 0xFF -> true
// gas irOptimized: 135578
// gas legacy: 247324
// gas legacyOptimized: 149578
// gas irOptimized: 135584
// gas legacy: 244264
// gas legacyOptimized: 152128
// accessIndex(uint256,int256): 10, 1 -> 2
// accessIndex(uint256,int256): 10, 0 -> 1
// accessIndex(uint256,int256): 10, 11 -> FAILURE, hex"4e487b71", 0x32
@@ -17,32 +17,32 @@ contract C {
// test_indices(uint256): 1 ->
// test_indices(uint256): 129 ->
// gas irOptimized: 3018687
// gas legacy: 3070431
// gas legacyOptimized: 3010325
// gas legacy: 3068883
// gas legacyOptimized: 3011615
// test_indices(uint256): 5 ->
// gas irOptimized: 372543
// gas legacy: 369211
// gas legacyOptimized: 366089
// gas legacy: 369151
// gas legacyOptimized: 366139
// test_indices(uint256): 10 ->
// test_indices(uint256): 15 ->
// gas irOptimized: 72860
// test_indices(uint256): 0xFF ->
// gas irOptimized: 3410255
// gas legacy: 3512637
// gas legacyOptimized: 3395047
// gas legacy: 3509577
// gas legacyOptimized: 3397597
// test_indices(uint256): 1000 ->
// gas irOptimized: 18206122
// gas legacy: 18611999
// gas legacyOptimized: 18166944
// gas legacy: 18599999
// gas legacyOptimized: 18176944
// test_indices(uint256): 129 ->
// gas irOptimized: 2756955
// gas legacy: 2771961
// gas legacyOptimized: 2714999
// gas legacy: 2770413
// gas legacyOptimized: 2716289
// test_indices(uint256): 128 ->
// gas irOptimized: 411903
// gas legacy: 466504
// gas legacyOptimized: 416888
// gas legacy: 464968
// gas legacyOptimized: 418168
// test_indices(uint256): 1 ->
// gas irOptimized: 368571
// gas legacy: 363401
// gas legacyOptimized: 361799
// gas legacy: 363389
// gas legacyOptimized: 361809
@@ -52,18 +52,18 @@ contract C {
// ----
// test_zeroed_indicies(uint256): 1 ->
// test_zeroed_indicies(uint256): 5 ->
// gas irOptimized: 131192
// gas legacy: 132331
// gas legacyOptimized: 129514
// gas irOptimized: 131177
// gas legacy: 132301
// gas legacyOptimized: 129539
// test_zeroed_indicies(uint256): 10 ->
// gas irOptimized: 174810
// gas legacy: 177248
// gas legacyOptimized: 172062
// gas irOptimized: 174780
// gas legacy: 177188
// gas legacyOptimized: 172112
// test_zeroed_indicies(uint256): 15 ->
// gas irOptimized: 198070
// gas legacy: 201828
// gas legacyOptimized: 194352
// gas irOptimized: 198025
// gas legacy: 201738
// gas legacyOptimized: 194427
// test_zeroed_indicies(uint256): 0xFF ->
// gas irOptimized: 6098680
// gas legacy: 6160863
// gas legacyOptimized: 6024902
// gas irOptimized: 6097915
// gas legacy: 6159333
// gas legacyOptimized: 6026177