mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			43 lines
		
	
	
		
			831 B
		
	
	
	
		
			Solidity
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			831 B
		
	
	
	
		
			Solidity
		
	
	
	
	
	
| ==== Source: ExtCall.sol ====
 | |
| interface Unknown {
 | |
|     function callme() external;
 | |
| }
 | |
| 
 | |
| contract ExtCall {
 | |
|     uint x;
 | |
| 
 | |
|     bool lock;
 | |
|     modifier mutex {
 | |
|         require(!lock);
 | |
|         lock = true;
 | |
|         _;
 | |
|         lock = false;
 | |
|     }
 | |
| 
 | |
|     function setX(uint y) mutex public {
 | |
|         x = y;
 | |
|     }
 | |
| 
 | |
|     function xMut(Unknown u) public {
 | |
|         uint x_prev = x;
 | |
|         u.callme();
 | |
|         assert(x_prev == x);
 | |
|     }
 | |
| }
 | |
| ==== Source: ExtCall.t.sol ====
 | |
| import "ExtCall.sol";
 | |
| 
 | |
| contract ExtCallTest {
 | |
|     ExtCall call;
 | |
| 
 | |
|     function setUp() public {
 | |
|         call = new ExtCall();
 | |
|     }
 | |
| }
 | |
| // ====
 | |
| // SMTEngine: all
 | |
| // SMTIgnoreCex: yes
 | |
| // ----
 | |
| // Warning 6328: (ExtCall.sol:362-381): CHC: Assertion violation happens here.
 | |
| // Warning 4588: (ExtCall.t.sol:110-123): Assertion checker does not yet implement this type of function call.
 |