mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Extend view pure test suite.
This commit is contained in:
parent
d9a8f2aace
commit
f5be38bff1
@ -0,0 +1,8 @@
|
||||
contract C {
|
||||
function k() public view {
|
||||
assembly { jump(2) }
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning: (63-70): Jump instructions and labels are low-level EVM features that can lead to incorrect stack access. Because of that they are discouraged. Please consider using "switch", "if" or "for" statements instead.
|
||||
// TypeError: (63-70): Function declared as view, but this expression (potentially) modifies the state and thus requires non-payable (the default) or payable.
|
@ -0,0 +1,21 @@
|
||||
contract C {
|
||||
function f() view public {
|
||||
bytes32 x = keccak256("abc");
|
||||
bytes32 y = sha256("abc");
|
||||
address z = ecrecover(bytes32(1), uint8(2), bytes32(3), bytes32(4));
|
||||
require(true);
|
||||
assert(true);
|
||||
x; y; z;
|
||||
}
|
||||
function g() public {
|
||||
bytes32 x = keccak256("abc");
|
||||
bytes32 y = sha256("abc");
|
||||
address z = ecrecover(bytes32(1), uint8(2), bytes32(3), bytes32(4));
|
||||
require(true);
|
||||
assert(true);
|
||||
x; y; z;
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning: (17-261): Function state mutability can be restricted to pure
|
||||
// Warning: (266-505): Function state mutability can be restricted to pure
|
@ -0,0 +1,23 @@
|
||||
contract C {
|
||||
function f() view public {
|
||||
address(this).transfer(1);
|
||||
}
|
||||
function g() view public {
|
||||
require(address(this).send(2));
|
||||
}
|
||||
function h() view public {
|
||||
selfdestruct(address(this));
|
||||
}
|
||||
function i() view public {
|
||||
require(address(this).delegatecall(""));
|
||||
}
|
||||
function j() view public {
|
||||
require(address(this).call(""));
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// TypeError: (52-77): Function declared as view, but this expression (potentially) modifies the state and thus requires non-payable (the default) or payable.
|
||||
// TypeError: (132-153): Function declared as view, but this expression (potentially) modifies the state and thus requires non-payable (the default) or payable.
|
||||
// TypeError: (201-228): Function declared as view, but this expression (potentially) modifies the state and thus requires non-payable (the default) or payable.
|
||||
// TypeError: (283-313): Function declared as view, but this expression (potentially) modifies the state and thus requires non-payable (the default) or payable.
|
||||
// TypeError: (369-391): Function declared as view, but this expression (potentially) modifies the state and thus requires non-payable (the default) or payable.
|
@ -1,7 +1,10 @@
|
||||
contract C {
|
||||
uint x;
|
||||
function f() pure public { g(); }
|
||||
function g() view public {}
|
||||
function g() view public { x; }
|
||||
function h() view public { i(); }
|
||||
function i() public { x = 2; }
|
||||
}
|
||||
// ----
|
||||
// TypeError: (44-47): Function declared as pure, but this expression (potentially) reads from the environment or state and thus requires "view".
|
||||
// Warning: (55-82): Function state mutability can be restricted to pure
|
||||
// TypeError: (56-59): Function declared as pure, but this expression (potentially) reads from the environment or state and thus requires "view".
|
||||
// TypeError: (130-133): Function declared as view, but this expression (potentially) modifies the state and thus requires non-payable (the default) or payable.
|
||||
|
@ -0,0 +1,12 @@
|
||||
contract C {
|
||||
uint constant x = 2;
|
||||
function f() view public returns (uint) {
|
||||
return x;
|
||||
}
|
||||
function g() public returns (uint) {
|
||||
return x;
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning: (42-107): Function state mutability can be restricted to pure
|
||||
// Warning: (112-172): Function state mutability can be restricted to pure
|
@ -0,0 +1,6 @@
|
||||
contract D {}
|
||||
contract C {
|
||||
function f() public view { new D(); }
|
||||
}
|
||||
// ----
|
||||
// TypeError: (58-65): Function declared as view, but this expression (potentially) modifies the state and thus requires non-payable (the default) or payable.
|
@ -0,0 +1,18 @@
|
||||
contract C {
|
||||
function f() pure public {
|
||||
function () external nonpayFun;
|
||||
nonpayFun();
|
||||
}
|
||||
function g() pure public {
|
||||
function () external view viewFun;
|
||||
viewFun();
|
||||
}
|
||||
function h() view public {
|
||||
function () external nonpayFun;
|
||||
nonpayFun();
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// TypeError: (92-103): Function declared as pure, but this expression (potentially) modifies the state and thus requires non-payable (the default) or payable.
|
||||
// TypeError: (193-202): Function declared as pure, but this expression (potentially) reads from the environment or state and thus requires "view".
|
||||
// TypeError: (289-300): Function declared as view, but this expression (potentially) modifies the state and thus requires non-payable (the default) or payable.
|
@ -0,0 +1,15 @@
|
||||
contract C {
|
||||
struct S { uint a; }
|
||||
S s;
|
||||
function f() pure public {
|
||||
S storage x = s;
|
||||
x;
|
||||
}
|
||||
function g() view public {
|
||||
S storage x = s;
|
||||
x.a = 1;
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// TypeError: (100-101): Function declared as pure, but this expression (potentially) reads from the environment or state and thus requires "view".
|
||||
// TypeError: (184-187): Function declared as view, but this expression (potentially) modifies the state and thus requires non-payable (the default) or payable.
|
@ -0,0 +1,12 @@
|
||||
contract D {
|
||||
uint x;
|
||||
modifier viewm(uint) { uint a = x; _; a; }
|
||||
modifier nonpayablem(uint) { x = 2; _; }
|
||||
}
|
||||
contract C is D {
|
||||
function f() viewm(0) pure public {}
|
||||
function g() nonpayablem(0) view public {}
|
||||
}
|
||||
// ----
|
||||
// TypeError: (154-162): Function declared as pure, but this expression (potentially) reads from the environment or state and thus requires "view".
|
||||
// TypeError: (195-209): Function declared as view, but this expression (potentially) modifies the state and thus requires non-payable (the default) or payable.
|
@ -0,0 +1,16 @@
|
||||
contract D {
|
||||
uint x;
|
||||
function f() public view { x; }
|
||||
function g() public pure {}
|
||||
}
|
||||
contract C1 is D {
|
||||
function f() public {}
|
||||
function g() public view {}
|
||||
}
|
||||
contract C2 is D {
|
||||
function g() public {}
|
||||
}
|
||||
// ----
|
||||
// TypeError: (118-140): Overriding function changes state mutability from "view" to "nonpayable".
|
||||
// TypeError: (145-172): Overriding function changes state mutability from "pure" to "view".
|
||||
// TypeError: (198-220): Overriding function changes state mutability from "pure" to "nonpayable".
|
@ -0,0 +1,8 @@
|
||||
contract C {
|
||||
uint x;
|
||||
function f() public pure returns (uint) {
|
||||
return x;
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// TypeError: (86-87): Function declared as pure, but this expression (potentially) reads from the environment or state and thus requires "view".
|
@ -0,0 +1,13 @@
|
||||
contract C {
|
||||
struct S { uint x; }
|
||||
S s;
|
||||
function f() pure internal returns (S storage) {
|
||||
return s;
|
||||
}
|
||||
function g() pure public {
|
||||
f().x;
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// TypeError: (115-116): Function declared as pure, but this expression (potentially) reads from the environment or state and thus requires "view".
|
||||
// TypeError: (163-168): Function declared as pure, but this expression (potentially) reads from the environment or state and thus requires "view".
|
@ -5,4 +5,8 @@ contract C {
|
||||
function g() pure public returns (bytes4) {
|
||||
return this.f.selector ^ this.x.selector;
|
||||
}
|
||||
function h() view public returns (bytes4) {
|
||||
x;
|
||||
return this.f.selector ^ this.x.selector;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user