diff --git a/test/libsolidity/semanticTests/functionCall/precompile_extcodesize_check.sol b/test/libsolidity/semanticTests/functionCall/precompile_extcodesize_check.sol new file mode 100644 index 000000000..7a9025e26 --- /dev/null +++ b/test/libsolidity/semanticTests/functionCall/precompile_extcodesize_check.sol @@ -0,0 +1,25 @@ +interface Identity { + function selectorAndAppendValue(uint value) external pure returns (uint); +} +contract C { + Identity constant i = Identity(address(0x0004)); + function testHighLevel() external pure returns (bool) { + // Should fail because `extcodesize(4) = 0` + i.selectorAndAppendValue(5); + return true; + } + function testLowLevel() external view returns (uint value) { + (bool success, bytes memory ret) = + address(4).staticcall( + abi.encodeWithSelector(Identity.selectorAndAppendValue.selector, uint(5)) + ); + value = abi.decode(ret, (uint)); + } + +} +// ==== +// compileViaYul: also +// EVMVersion: >=constantinople +// ---- +// testHighLevel() -> FAILURE +// testLowLevel() -> 0xc76596d400000000000000000000000000000000000000000000000000000000