mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #9823 from ethereum/develop
Merge develop into breaking.
This commit is contained in:
@@ -54,6 +54,12 @@ bytes SolidityExecutionFramework::multiSourceCompileContract(
|
||||
m_compiler.setRevertStringBehaviour(m_revertStrings);
|
||||
if (!m_compiler.compile())
|
||||
{
|
||||
// The testing framework expects an exception for
|
||||
// "unimplemented" yul IR generation.
|
||||
if (m_compileViaYul)
|
||||
for (auto const& error: m_compiler.errors())
|
||||
if (error->type() == langutil::Error::Type::CodeGenerationError)
|
||||
BOOST_THROW_EXCEPTION(*error);
|
||||
langutil::SourceReferenceFormatter formatter(std::cerr);
|
||||
|
||||
for (auto const& error: m_compiler.errors())
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
contract C {
|
||||
function f(int a, int b) public pure returns (int) {
|
||||
return a % b;
|
||||
}
|
||||
}
|
||||
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// f(int256,int256): 7, 5 -> 2
|
||||
// f(int256,int256): 7, -5 -> 2
|
||||
// f(int256,int256): -7, 5 -> -2
|
||||
// f(int256,int256): -7, 5 -> -2
|
||||
// f(int256,int256): -5, -5 -> 0
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
contract C {
|
||||
struct S {
|
||||
bool[] b;
|
||||
}
|
||||
|
||||
function f() public returns (uint256, bool[][2] memory, S[2] memory, uint256) {
|
||||
return (
|
||||
5,
|
||||
[new bool[](1), new bool[](2)],
|
||||
[S(new bool[](2)), S(new bool[](5))],
|
||||
6
|
||||
);
|
||||
}
|
||||
|
||||
function g() public returns (uint256, uint256) {
|
||||
(uint256 a, , , uint256 b) = this.f();
|
||||
return (a, b);
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// g() -> 5, 6
|
||||
@@ -0,0 +1,28 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C {
|
||||
event Nudge();
|
||||
event SomeArgs(uint, uint);
|
||||
event Caller(address, uint);
|
||||
function f() payable external {
|
||||
emit Nudge();
|
||||
emit SomeArgs(134, 567);
|
||||
emit Caller(msg.sender, msg.value);
|
||||
}
|
||||
function g_data() pure internal returns (uint) {
|
||||
assert(true);
|
||||
}
|
||||
function g() external {
|
||||
emit SomeArgs(g_data(), g_data());
|
||||
}
|
||||
bool x = true;
|
||||
function h_data() view internal returns (uint) {
|
||||
assert(x);
|
||||
}
|
||||
function h() external {
|
||||
x = false;
|
||||
emit SomeArgs(h_data(), h_data());
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6328: (440-449): Assertion violation happens here.
|
||||
@@ -0,0 +1,39 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C {
|
||||
function f() external {
|
||||
bytes32 t1 = bytes32(uint256(0x1234));
|
||||
log0(t1);
|
||||
log1(t1, t1);
|
||||
log2(t1, t1, t1);
|
||||
log3(t1, t1, t1, t1);
|
||||
log4(t1, t1, t1, t1, t1);
|
||||
}
|
||||
function g_data() pure internal returns (bytes32) {
|
||||
assert(true);
|
||||
return bytes32(uint256(0x5678));
|
||||
}
|
||||
function g() external {
|
||||
// To test that the function call is actually visited.
|
||||
log0(g_data());
|
||||
log1(g_data(), g_data());
|
||||
log2(g_data(), g_data(), g_data());
|
||||
log3(g_data(), g_data(), g_data(), g_data());
|
||||
log4(g_data(), g_data(), g_data(), g_data(), g_data());
|
||||
}
|
||||
bool x = true;
|
||||
function h_data() view internal returns (bytes32) {
|
||||
assert(x);
|
||||
}
|
||||
function h() external {
|
||||
// To test that the function call is actually visited.
|
||||
x = false;
|
||||
log0(h_data());
|
||||
log1(h_data(), h_data());
|
||||
log2(h_data(), h_data(), h_data());
|
||||
log3(h_data(), h_data(), h_data(), h_data());
|
||||
log4(h_data(), h_data(), h_data(), h_data(), h_data());
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6328: (668-677): Assertion violation happens here.
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
contract C {
|
||||
function f() public pure returns(string[5] calldata) {
|
||||
return ["h", "e", "l", "l", "o"];
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// TypeError 6359: (122-147): Return argument type string memory[5] memory is not implicitly convertible to expected type (type of first return variable) string calldata[5] calldata.
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
contract C {
|
||||
function f1() public pure returns(string calldata) {
|
||||
return "hello";
|
||||
}
|
||||
|
||||
function f2() public pure returns(string calldata) {
|
||||
return unicode"hello";
|
||||
}
|
||||
|
||||
function f3() public pure returns(bytes calldata) {
|
||||
return hex"68656c6c6f";
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// TypeError 6359: (85-92): Return argument type literal_string "hello" is not implicitly convertible to expected type (type of first return variable) string calldata.
|
||||
// TypeError 6359: (173-187): Return argument type literal_string "hello" is not implicitly convertible to expected type (type of first return variable) string calldata.
|
||||
// TypeError 6359: (267-282): Return argument type literal_string "hello" is not implicitly convertible to expected type (type of first return variable) bytes calldata.
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
contract C {
|
||||
function g(string calldata _s) public {}
|
||||
function h(bytes calldata _b) public {}
|
||||
|
||||
function f() public {
|
||||
g("hello");
|
||||
g(unicode"hello");
|
||||
h(hex"68656c6c6f");
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// TypeError 9553: (139-146): Invalid type for argument in function call. Invalid implicit conversion from literal_string "hello" to string calldata requested.
|
||||
// TypeError 9553: (159-173): Invalid type for argument in function call. Invalid implicit conversion from literal_string "hello" to string calldata requested.
|
||||
// TypeError 9553: (186-201): Invalid type for argument in function call. Invalid implicit conversion from literal_string "hello" to bytes calldata requested.
|
||||
Reference in New Issue
Block a user