Skip to content

Commit 79669ec

Browse files
committed
Use new abicoder pragma.
1 parent 36f9392 commit 79669ec

File tree

277 files changed

+325
-320
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

277 files changed

+325
-320
lines changed

test/cmdlineTests/abiencoderv2_no_warning/input.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// SPDX-License-Identifier: GPL-3.0
22
pragma solidity >=0.0;
3-
pragma experimental ABIEncoderV2;
3+
pragma abicoder v2;
44

55
contract C {
66
struct S { uint x; }
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
pragma experimental ABIEncoderV2;
1+
pragma abicoder v2;
22

33
contract C {
44
function f(uint[] calldata) pure external {}
5-
}
5+
}

test/cmdlineTests/name_simplifier/input.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// SPDX-License-Identifier: GPL-3.0
22
pragma solidity >=0.0;
3-
pragma experimental ABIEncoderV2;
3+
pragma abicoder v2;
44

55
// The point of this test is to check that the
66
// AST IDs are removed from the optimized IR

test/cmdlineTests/standard_generatedSources/input.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"language": "Solidity",
33
"sources": {
44
"a.sol": {
5-
"content": "// SPDX-License-Identifier: GPL-3.0\npragma experimental ABIEncoderV2; contract A { function f(uint[] memory) public view returns (uint256) { } }"
5+
"content": "// SPDX-License-Identifier: GPL-3.0\npragma abicoder v2; contract A { function f(uint[] memory) public view returns (uint256) { } }"
66
}
77
},
88
"settings": {

test/cmdlineTests/standard_generatedSources/output.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -82,5 +82,5 @@
8282
}
8383

8484
}
85-
","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"<BYTECODE REMOVED>","opcodes":"<OPCODES REMOVED>","sourceMap":"70:74:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;83:59;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;130:7;83:59;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;669:303::-;;789:3;782:4;774:6;770:17;766:27;756:2;;807:1;804;797:12;756:2;847:6;834:20;872:94;962:3;954:6;947:4;939:6;935:17;872:94;:::i;:::-;863:103;;746:226;;;;;:::o;978:139::-;;1062:6;1049:20;1040:29;;1078:33;1105:5;1078:33;:::i;:::-;1030:87;;;;:::o;1123:403::-;;1256:2;1244:9;1235:7;1231:23;1227:32;1224:2;;;1272:1;1269;1262:12;1224:2;1342:1;1331:9;1327:17;1314:31;1372:18;1364:6;1361:30;1358:2;;;1404:1;1401;1394:12;1358:2;1431:78;1501:7;1492:6;1481:9;1477:22;1431:78;:::i;:::-;1421:88;;1286:233;1214:312;;;;:::o;1532:118::-;1619:24;1637:5;1619:24;:::i;:::-;1614:3;1607:37;1597:53;;:::o;1656:222::-;;1787:2;1776:9;1772:18;1764:26;;1800:71;1868:1;1857:9;1853:17;1844:6;1800:71;:::i;:::-;1754:124;;;;:::o;1884:278::-;;1950:2;1944:9;1934:19;;1992:4;1984:6;1980:17;2099:6;2087:10;2084:22;2063:18;2051:10;2048:34;2045:62;2042:2;;;2110:13;;:::i;:::-;2042:2;2145:10;2141:2;2134:22;1924:238;;;;:::o;2168:306::-;;2335:18;2327:6;2324:30;2321:2;;;2357:13;;:::i;:::-;2321:2;2402:4;2394:6;2390:17;2382:25;;2462:4;2456;2452:15;2444:23;;2250:224;;;:::o;2480:77::-;;2546:5;2535:16;;2525:32;;;:::o;2563:48::-;2596:9;2617:122;2690:24;2708:5;2690:24;:::i;:::-;2683:5;2680:35;2670:2;;2729:1;2726;2719:12;2670:2;2660:79;:::o"}}}}},"errors":[{"component":"general","errorCode":"3420","formattedMessage":"a.sol: Warning: Source file does not specify required compiler version!
85+
","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"<BYTECODE REMOVED>","opcodes":"<OPCODES REMOVED>","sourceMap":"56:74:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;69:59;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;116:7;69:59;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;669:303::-;;789:3;782:4;774:6;770:17;766:27;756:2;;807:1;804;797:12;756:2;847:6;834:20;872:94;962:3;954:6;947:4;939:6;935:17;872:94;:::i;:::-;863:103;;746:226;;;;;:::o;978:139::-;;1062:6;1049:20;1040:29;;1078:33;1105:5;1078:33;:::i;:::-;1030:87;;;;:::o;1123:403::-;;1256:2;1244:9;1235:7;1231:23;1227:32;1224:2;;;1272:1;1269;1262:12;1224:2;1342:1;1331:9;1327:17;1314:31;1372:18;1364:6;1361:30;1358:2;;;1404:1;1401;1394:12;1358:2;1431:78;1501:7;1492:6;1481:9;1477:22;1431:78;:::i;:::-;1421:88;;1286:233;1214:312;;;;:::o;1532:118::-;1619:24;1637:5;1619:24;:::i;:::-;1614:3;1607:37;1597:53;;:::o;1656:222::-;;1787:2;1776:9;1772:18;1764:26;;1800:71;1868:1;1857:9;1853:17;1844:6;1800:71;:::i;:::-;1754:124;;;;:::o;1884:278::-;;1950:2;1944:9;1934:19;;1992:4;1984:6;1980:17;2099:6;2087:10;2084:22;2063:18;2051:10;2048:34;2045:62;2042:2;;;2110:13;;:::i;:::-;2042:2;2145:10;2141:2;2134:22;1924:238;;;;:::o;2168:306::-;;2335:18;2327:6;2324:30;2321:2;;;2357:13;;:::i;:::-;2321:2;2402:4;2394:6;2390:17;2382:25;;2462:4;2456;2452:15;2444:23;;2250:224;;;:::o;2480:77::-;;2546:5;2535:16;;2525:32;;;:::o;2563:48::-;2596:9;2617:122;2690:24;2708:5;2690:24;:::i;:::-;2683:5;2680:35;2670:2;;2729:1;2726;2719:12;2670:2;2660:79;:::o"}}}}},"errors":[{"component":"general","errorCode":"3420","formattedMessage":"a.sol: Warning: Source file does not specify required compiler version!
8686
","message":"Source file does not specify required compiler version!","severity":"warning","sourceLocation":{"end":-1,"file":"a.sol","start":-1},"type":"Warning"}],"sources":{"a.sol":{"id":0}}}

test/cmdlineTests/standard_optimizer_generatedSources/input.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"language": "Solidity",
33
"sources": {
44
"a.sol": {
5-
"content": "// SPDX-License-Identifier: GPL-3.0\npragma experimental ABIEncoderV2; contract A { function f(uint[] memory) public view returns (uint256) { } }"
5+
"content": "// SPDX-License-Identifier: GPL-3.0\npragma abicoder v2; contract A { function f(uint[] memory) public view returns (uint256) { } }"
66
}
77
},
88
"settings": {

test/cmdlineTests/standard_optimizer_generatedSources/output.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,5 @@
3535
tail := add(headStart, 32)
3636
mstore(headStart, value0)
3737
}
38-
}","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"<BYTECODE REMOVED>","opcodes":"<OPCODES REMOVED>","sourceMap":"70:74:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;83:59;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;130:7:0;;83:59::o;14:1140:1:-;;129:2;172;160:9;151:7;147:23;143:32;140:2;;;193:6;185;178:22;140:2;238:9;225:23;267:18;308:2;300:6;297:14;294:2;;;329:6;321;314:22;294:2;372:6;361:9;357:22;347:32;;417:7;410:4;406:2;402:13;398:27;388:2;;444:6;436;429:22;388:2;485;472:16;507:2;503;500:10;497:2;;;513:9;497:2;551;547;543:11;583:2;577:9;634:2;629;621:6;617:15;613:24;687:6;675:10;672:22;667:2;655:10;652:18;649:46;646:2;;;698:9;646:2;725;718:22;775:18;;;809:15;;;;-1:-1:-1;844:11:1;;;874;;;870:20;;867:33;-1:-1:-1;864:2:1;;;918:6;910;903:22;864:2;945:6;936:15;;960:163;974:2;971:1;968:9;960:163;;;1031:17;;1019:30;;992:1;985:9;;;;;1069:12;;;;1101;;960:163;;;-1:-1:-1;1142:6:1;109:1045;-1:-1:-1;;;;;;;;109:1045:1:o;1159:177::-;1305:25;;;1293:2;1278:18;;1260:76::o"}}}}},"errors":[{"component":"general","errorCode":"3420","formattedMessage":"a.sol: Warning: Source file does not specify required compiler version!
38+
}","id":1,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"<BYTECODE REMOVED>","opcodes":"<OPCODES REMOVED>","sourceMap":"56:74:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;69:59;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;116:7:0;;69:59::o;14:1140:1:-;;129:2;172;160:9;151:7;147:23;143:32;140:2;;;193:6;185;178:22;140:2;238:9;225:23;267:18;308:2;300:6;297:14;294:2;;;329:6;321;314:22;294:2;372:6;361:9;357:22;347:32;;417:7;410:4;406:2;402:13;398:27;388:2;;444:6;436;429:22;388:2;485;472:16;507:2;503;500:10;497:2;;;513:9;497:2;551;547;543:11;583:2;577:9;634:2;629;621:6;617:15;613:24;687:6;675:10;672:22;667:2;655:10;652:18;649:46;646:2;;;698:9;646:2;725;718:22;775:18;;;809:15;;;;-1:-1:-1;844:11:1;;;874;;;870:20;;867:33;-1:-1:-1;864:2:1;;;918:6;910;903:22;864:2;945:6;936:15;;960:163;974:2;971:1;968:9;960:163;;;1031:17;;1019:30;;992:1;985:9;;;;;1069:12;;;;1101;;960:163;;;-1:-1:-1;1142:6:1;109:1045;-1:-1:-1;;;;;;;;109:1045:1:o;1159:177::-;1305:25;;;1293:2;1278:18;;1260:76::o"}}}}},"errors":[{"component":"general","errorCode":"3420","formattedMessage":"a.sol: Warning: Source file does not specify required compiler version!
3939
","message":"Source file does not specify required compiler version!","severity":"warning","sourceLocation":{"end":-1,"file":"a.sol","start":-1},"type":"Warning"}],"sources":{"a.sol":{"id":0}}}

test/externalTests/common.sh

+5-5
Original file line numberDiff line numberDiff line change
@@ -180,14 +180,14 @@ function force_solc_settings
180180

181181
function force_abi_v2
182182
{
183-
# Add "pragma experimental ABIEncoderV2" to all files.
184-
printLog "Forcibly enabling ABIEncoderV2..."
183+
# Add "pragma abi coder v2" to all files.
184+
printLog "Forcibly enabling abi coder v2..."
185185
find contracts test -name '*.sol' -type f -print0 | \
186186
while IFS= read -r -d '' file
187187
do
188188
# Only add the pragma if it is not already there.
189-
if grep -q -v 'pragma experimental ABIEncoderV2' "$file"; then
190-
sed -i -e '1 i pragma experimental ABIEncoderV2;' "$file"
189+
if grep -q -v 'pragma abicoder v2' "$file"; then
190+
sed -i -e '1 i pragma abicoder v2;' "$file"
191191
fi
192192
done
193193
}
@@ -257,7 +257,7 @@ function truffle_run_test
257257
do
258258
clean
259259
force_solc_settings "$CONFIG" "$optimize" "istanbul"
260-
# Force ABIEncoderV2 in the last step. Has to be the last because code is modified.
260+
# Force abi coder v2 in the last step. Has to be the last because code is modified.
261261
if [ "$FORCE_ABIv2" = true ]; then
262262
[[ "$optimize" =~ yul ]] && force_abi_v2
263263
fi

test/libsolidity/ABIJson/event_structs.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma experimental ABIEncoderV2;
1+
pragma abicoder v2;
22
contract C {
33
struct S { uint a; T[] sub; bytes b; }
44
struct T { uint[2] x; }

test/libsolidity/ABIJson/global_struct.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma experimental ABIEncoderV2;
1+
pragma abicoder v2;
22
struct S { uint a; }
33
contract C {
44
function f(S calldata s) external view {}

test/libsolidity/ABIJson/return_structs.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma experimental ABIEncoderV2;
1+
pragma abicoder v2;
22
contract C {
33
struct S { uint a; T[] sub; }
44
struct T { uint[2] x; }

test/libsolidity/ABIJson/return_structs_with_contracts.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma experimental ABIEncoderV2;
1+
pragma abicoder v2;
22
contract C {
33
struct S { C[] x; C y; }
44
function f() public returns (S memory s, C c) {

test/libsolidity/ABIJson/structs_in_libraries.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma experimental ABIEncoderV2;
1+
pragma abicoder v2;
22
library L {
33
struct S { uint a; T[] sub; bytes b; }
44
struct T { uint[2] x; }

test/libsolidity/SolidityEndToEndTest.cpp

+27-23
Original file line numberDiff line numberDiff line change
@@ -1983,7 +1983,7 @@ BOOST_AUTO_TEST_CASE(event_really_really_lots_of_data_from_storage)
19831983
BOOST_AUTO_TEST_CASE(event_struct_memory_v2)
19841984
{
19851985
char const* sourceCode = R"(
1986-
pragma experimental ABIEncoderV2;
1986+
pragma abicoder v2;
19871987
contract C {
19881988
struct S { uint a; }
19891989
event E(S);
@@ -2005,7 +2005,7 @@ BOOST_AUTO_TEST_CASE(event_struct_memory_v2)
20052005
BOOST_AUTO_TEST_CASE(event_struct_storage_v2)
20062006
{
20072007
char const* sourceCode = R"(
2008-
pragma experimental ABIEncoderV2;
2008+
pragma abicoder v2;
20092009
contract C {
20102010
struct S { uint a; }
20112011
event E(S);
@@ -2053,7 +2053,7 @@ BOOST_AUTO_TEST_CASE(event_dynamic_array_memory)
20532053
BOOST_AUTO_TEST_CASE(event_dynamic_array_memory_v2)
20542054
{
20552055
char const* sourceCode = R"(
2056-
pragma experimental ABIEncoderV2;
2056+
pragma abicoder v2;
20572057
contract C {
20582058
event E(uint[]);
20592059
function createEvent(uint x) public {
@@ -2078,7 +2078,7 @@ BOOST_AUTO_TEST_CASE(event_dynamic_array_memory_v2)
20782078
BOOST_AUTO_TEST_CASE(event_dynamic_nested_array_memory_v2)
20792079
{
20802080
char const* sourceCode = R"(
2081-
pragma experimental ABIEncoderV2;
2081+
pragma abicoder v2;
20822082
contract C {
20832083
event E(uint[][]);
20842084
function createEvent(uint x) public {
@@ -2136,7 +2136,7 @@ BOOST_AUTO_TEST_CASE(event_dynamic_array_storage)
21362136
BOOST_AUTO_TEST_CASE(event_dynamic_array_storage_v2)
21372137
{
21382138
char const* sourceCode = R"(
2139-
pragma experimental ABIEncoderV2;
2139+
pragma abicoder v2;
21402140
contract C {
21412141
event E(uint[]);
21422142
uint[] arr;
@@ -2167,7 +2167,7 @@ BOOST_AUTO_TEST_CASE(event_dynamic_array_storage_v2)
21672167
BOOST_AUTO_TEST_CASE(event_dynamic_nested_array_storage_v2)
21682168
{
21692169
char const* sourceCode = R"(
2170-
pragma experimental ABIEncoderV2;
2170+
pragma abicoder v2;
21712171
contract C {
21722172
event E(uint[][]);
21732173
uint[][] arr;
@@ -2332,7 +2332,7 @@ BOOST_AUTO_TEST_CASE(generic_delegatecall)
23322332

23332333
for (auto v2: {false, true})
23342334
{
2335-
string source = (v2 ? "pragma experimental ABIEncoderV2;\n" : "") + string(sourceCode);
2335+
string source = "pragma abicoder " + string(v2 ? "v2" : "v1") + ";\n" + string(sourceCode);
23362336

23372337
compileAndRun(source, 0, "Receiver");
23382338
u160 const c_receiverAddress = m_contractAddress;
@@ -2660,7 +2660,7 @@ BOOST_AUTO_TEST_CASE(storing_invalid_boolean)
26602660
BOOST_AUTO_TEST_CASE(struct_referencing)
26612661
{
26622662
static char const* sourceCode = R"(
2663-
pragma experimental ABIEncoderV2;
2663+
pragma abicoder v2;
26642664
interface I {
26652665
struct S { uint a; }
26662666
}
@@ -2803,7 +2803,7 @@ BOOST_AUTO_TEST_CASE(array_copy_storage_abi)
28032803
// NOTE: This does not really test copying from storage to ABI directly,
28042804
// because it will always copy to memory first.
28052805
char const* sourceCode = R"(
2806-
pragma experimental ABIEncoderV2;
2806+
pragma abicoder v2;
28072807
contract c {
28082808
uint8[] x;
28092809
uint16[] y;
@@ -3191,7 +3191,7 @@ BOOST_AUTO_TEST_CASE(memory_types_initialisation)
31913191
BOOST_AUTO_TEST_CASE(calldata_struct_short)
31923192
{
31933193
char const* sourceCode = R"(
3194-
pragma experimental ABIEncoderV2;
3194+
pragma abicoder v2;
31953195
contract C {
31963196
struct S { uint256 a; uint256 b; }
31973197
function f(S calldata) external pure returns (uint256) {
@@ -3214,7 +3214,7 @@ BOOST_AUTO_TEST_CASE(calldata_struct_short)
32143214
BOOST_AUTO_TEST_CASE(calldata_struct_function_type)
32153215
{
32163216
char const* sourceCode = R"(
3217-
pragma experimental ABIEncoderV2;
3217+
pragma abicoder v2;
32183218
contract C {
32193219
struct S { function (uint) external returns (uint) fn; }
32203220
function f(S calldata s) external returns (uint256) {
@@ -3263,7 +3263,7 @@ BOOST_AUTO_TEST_CASE(calldata_array_dynamic_three_dimensional)
32633263
arrayType += outerDynamicallySized ? "[]" : "[2]";
32643264

32653265
string sourceCode = R"(
3266-
pragma experimental ABIEncoderV2;
3266+
pragma abicoder v2;
32673267
contract C {
32683268
function test()" + arrayType + R"( calldata a) external returns (uint256) {
32693269
return a.length;
@@ -3865,7 +3865,7 @@ BOOST_AUTO_TEST_CASE(using_library_mappings_external)
38653865
)";
38663866
for (auto v2: {false, true})
38673867
{
3868-
string prefix = v2 ? "pragma experimental ABIEncoderV2;\n" : "";
3868+
string prefix = "pragma abicoder " + string(v2 ? "v2" : "v1") + ";\n";
38693869
compileAndRun(prefix + libSourceCode, 0, "Lib");
38703870
compileAndRun(prefix + sourceCode, 0, "Test", bytes(), map<string, Address>{{"Lib", m_contractAddress}});
38713871
ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(2), u256(0), u256(84), u256(46), u256(0), u256(198)));
@@ -5137,7 +5137,8 @@ BOOST_AUTO_TEST_CASE(abi_encodePacked)
51375137
)";
51385138
for (auto v2: {false, true})
51395139
{
5140-
compileAndRun(string(v2 ? "pragma experimental ABIEncoderV2;\n" : "") + sourceCode, 0, "C");
5140+
string prefix = "pragma abicoder " + string(v2 ? "v2" : "v1") + ";\n";
5141+
compileAndRun(prefix + sourceCode, 0, "C");
51415142
ABI_CHECK(callContractFunction("f0()"), encodeArgs(0x20, 0));
51425143
ABI_CHECK(callContractFunction("f1()"), encodeArgs(0x20, 2, "\x01\x02"));
51435144
ABI_CHECK(callContractFunction("f2()"), encodeArgs(0x20, 5, "\x01" "abc" "\x02"));
@@ -5211,7 +5212,8 @@ BOOST_AUTO_TEST_CASE(abi_encodePacked_from_storage)
52115212
)";
52125213
for (auto v2: {false, true})
52135214
{
5214-
compileAndRun(string(v2 ? "pragma experimental ABIEncoderV2;\n" : "") + sourceCode, 0, "C");
5215+
string prefix = "pragma abicoder " + string(v2 ? "v2" : "v1") + ";\n";
5216+
compileAndRun(prefix + sourceCode, 0, "C");
52155217
bytes payload = encodeArgs(0xfffff1, 0, 0xfffff2, 0, 0, 0xfffff3, 0, 0, 0xfffff4);
52165218
bytes encoded = encodeArgs(0x20, 0x122, "\x01" + asString(payload) + "\x02");
52175219
ABI_CHECK(callContractFunction("sf()"), encoded);
@@ -5281,7 +5283,8 @@ BOOST_AUTO_TEST_CASE(abi_encodePacked_from_memory)
52815283
)";
52825284
for (auto v2: {false, true})
52835285
{
5284-
compileAndRun(string(v2 ? "pragma experimental ABIEncoderV2;\n" : "") + sourceCode, 0, "C");
5286+
string prefix = "pragma abicoder " + string(v2 ? "v2" : "v1") + ";\n";
5287+
compileAndRun(prefix + sourceCode, 0, "C");
52855288
bytes payload = encodeArgs(0xfffff1, 0, 0xfffff2, 0, 0, 0xfffff3, 0, 0, 0xfffff4);
52865289
bytes encoded = encodeArgs(0x20, 0x122, "\x01" + asString(payload) + "\x02");
52875290
ABI_CHECK(callContractFunction("sf()"), encoded);
@@ -5324,7 +5327,8 @@ BOOST_AUTO_TEST_CASE(abi_encodePacked_functionPtr)
53245327
)";
53255328
for (auto v2: {false, true})
53265329
{
5327-
compileAndRun(string(v2 ? "pragma experimental ABIEncoderV2;\n" : "") + sourceCode, 0, "C");
5330+
string prefix = "pragma abicoder " + string(v2 ? "v2" : "v1") + ";\n";
5331+
compileAndRun(prefix + sourceCode, 0, "C");
53285332
string directEncoding = asString(fromHex("08" "1112131400000000000011121314000000000087" "26121ff0" "02"));
53295333
ABI_CHECK(callContractFunction("testDirect()"), encodeArgs(0x20, directEncoding.size(), directEncoding));
53305334
string arrayEncoding = asString(fromHex("08" "1112131400000000000011121314000000000087" "26121ff0" "0000000000000000" "02"));
@@ -5336,7 +5340,7 @@ BOOST_AUTO_TEST_CASE(abi_encodePacked_functionPtr)
53365340
BOOST_AUTO_TEST_CASE(abi_encodePackedV2_structs)
53375341
{
53385342
char const* sourceCode = R"(
5339-
pragma experimental ABIEncoderV2;
5343+
pragma abicoder v2;
53405344
contract C {
53415345
struct S {
53425346
uint8 a;
@@ -5378,7 +5382,7 @@ BOOST_AUTO_TEST_CASE(abi_encodePackedV2_structs)
53785382
BOOST_AUTO_TEST_CASE(abi_encodePackedV2_nestedArray)
53795383
{
53805384
char const* sourceCode = R"(
5381-
pragma experimental ABIEncoderV2;
5385+
pragma abicoder v2;
53825386
contract C {
53835387
struct S {
53845388
uint8 a;
@@ -5407,7 +5411,7 @@ BOOST_AUTO_TEST_CASE(abi_encodePackedV2_nestedArray)
54075411
BOOST_AUTO_TEST_CASE(abi_encodePackedV2_arrayOfStrings)
54085412
{
54095413
char const* sourceCode = R"(
5410-
pragma experimental ABIEncoderV2;
5414+
pragma abicoder v2;
54115415
contract C {
54125416
string[] x;
54135417
event E(string[] indexed);
@@ -5441,7 +5445,7 @@ BOOST_AUTO_TEST_CASE(event_signature_in_library)
54415445
// This tests a bug that was present where the "internal signature"
54425446
// for structs was also used for events.
54435447
char const* sourceCode = R"(
5444-
pragma experimental ABIEncoderV2;
5448+
pragma abicoder v2;
54455449
library L {
54465450
struct S {
54475451
uint8 a;
@@ -5498,7 +5502,7 @@ BOOST_AUTO_TEST_CASE(abi_encode_with_selector)
54985502
BOOST_AUTO_TEST_CASE(abi_encode_with_selectorv2)
54995503
{
55005504
char const* sourceCode = R"(
5501-
pragma experimental ABIEncoderV2;
5505+
pragma abicoder v2;
55025506
contract C {
55035507
function f0() public pure returns (bytes memory) {
55045508
return abi.encodeWithSelector(0x12345678);
@@ -5588,7 +5592,7 @@ BOOST_AUTO_TEST_CASE(abi_encode_with_signature)
55885592
BOOST_AUTO_TEST_CASE(abi_encode_with_signaturev2)
55895593
{
55905594
char const* sourceCode = R"T(
5591-
pragma experimental ABIEncoderV2;
5595+
pragma abicoder v2;
55925596
contract C {
55935597
function f0() public pure returns (bytes memory) {
55945598
return abi.encodeWithSignature("f(uint256)");

test/libsolidity/SolidityExecutionFramework.cpp

+4-3
Original file line numberDiff line numberDiff line change
@@ -132,11 +132,12 @@ bytes SolidityExecutionFramework::compileContract(
132132
string SolidityExecutionFramework::addPreamble(string const& _sourceCode)
133133
{
134134
// Silence compiler version warning
135-
string preamble = "pragma solidity >=0.0;\n";
135+
string preamble = "pragma solidity >=0.0;\n// SPDX-License-Identifier: unlicensed\n";
136136
if (
137137
solidity::test::CommonOptions::get().useABIEncoderV2 &&
138-
_sourceCode.find("pragma experimental ABIEncoderV2;") == string::npos
138+
_sourceCode.find("pragma experimental ABIEncoderV2;") == string::npos &&
139+
_sourceCode.find("pragma abicoder") == string::npos
139140
)
140-
preamble += "pragma experimental ABIEncoderV2;\n";
141+
preamble += "pragma abicoder v2;\n";
141142
return preamble + _sourceCode;
142143
}

test/libsolidity/SolidityNameAndTypeResolution.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ BOOST_AUTO_TEST_CASE(enum_external_type)
197197
BOOST_AUTO_TEST_CASE(external_struct_signatures)
198198
{
199199
char const* text = R"(
200-
pragma experimental ABIEncoderV2;
200+
pragma abicoder v2;
201201
contract Test {
202202
enum ActionChoices { GoLeft, GoRight, GoStraight, Sit }
203203
struct Simple { uint i; }
@@ -228,7 +228,7 @@ BOOST_AUTO_TEST_CASE(external_struct_signatures)
228228
BOOST_AUTO_TEST_CASE(external_struct_signatures_in_libraries)
229229
{
230230
char const* text = R"(
231-
pragma experimental ABIEncoderV2;
231+
pragma abicoder v2;
232232
library Test {
233233
enum ActionChoices { GoLeft, GoRight, GoStraight, Sit }
234234
struct Simple { uint i; }

test/libsolidity/gasTests/abiv2.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma experimental ABIEncoderV2;
1+
pragma abicoder v2;
22

33
contract C {
44
uint public a;

test/libsolidity/gasTests/abiv2_optimised.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma experimental ABIEncoderV2;
1+
pragma abicoder v2;
22

33
contract C {
44
uint public a;

0 commit comments

Comments
 (0)