mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Merge pull request #11331 from ethereum/respectMemoryModelForwardingRevert
Respect memory model forwarding revert
This commit is contained in:
		
						commit
						1814cad4f2
					
				| @ -3792,11 +3792,13 @@ string YulUtilFunctions::forwardingRevertFunction() | ||||
| 		if (forward) | ||||
| 			return Whiskers(R"( | ||||
| 				function <functionName>() { | ||||
| 					returndatacopy(0, 0, returndatasize()) | ||||
| 					revert(0, returndatasize()) | ||||
| 					let pos := <allocateUnbounded>() | ||||
| 					returndatacopy(pos, 0, returndatasize()) | ||||
| 					revert(pos, returndatasize()) | ||||
| 				} | ||||
| 			)") | ||||
| 			("functionName", functionName) | ||||
| 			("allocateUnbounded", allocateUnboundedFunction()) | ||||
| 			.render(); | ||||
| 		else | ||||
| 			return Whiskers(R"( | ||||
|  | ||||
| @ -66,8 +66,9 @@ object "D_16" { | ||||
|                         datacopy(128, dataoffset("C_3"), _2) | ||||
|                         if iszero(create(_1, 128, _2)) | ||||
|                         { | ||||
|                             returndatacopy(_1, _1, returndatasize()) | ||||
|                             revert(_1, returndatasize()) | ||||
|                             let pos := mload(64) | ||||
|                             returndatacopy(pos, _1, returndatasize()) | ||||
|                             revert(pos, returndatasize()) | ||||
|                         } | ||||
|                         return(mload(64), _1) | ||||
|                     } | ||||
|  | ||||
| @ -136,8 +136,9 @@ object \"D_16\" { | ||||
|             } | ||||
| 
 | ||||
|             function revert_forward_1() { | ||||
|                 returndatacopy(0, 0, returndatasize()) | ||||
|                 revert(0, returndatasize()) | ||||
|                 let pos := allocate_unbounded() | ||||
|                 returndatacopy(pos, 0, returndatasize()) | ||||
|                 revert(pos, returndatasize()) | ||||
|             } | ||||
| 
 | ||||
|             function shift_right_224_unsigned(value) -> newValue { | ||||
|  | ||||
| @ -35,9 +35,9 @@ object "C_3" { | ||||
| 
 | ||||
| ======= viair_subobjects/input.sol:D ======= | ||||
| Binary: | ||||
| 608060405234156100105760006000fd5b60b680610020600039806000f350fe60806040526004361015156087576000803560e01c6326121ff0141560855734156027578081fd5b80600319360112156036578081fd5b6028806080016080811067ffffffffffffffff82111715606457634e487b7160e01b83526041600452602483fd5b508061008e60803980608083f01515607e573d82833e3d82fd5b5080604051f35b505b60006000fdfe60806040523415600f5760006000fd5b600a80601e600039806000f350fe608060405260006000fd | ||||
| 608060405234156100105760006000fd5b60ba80610020600039806000f350fe6080604052600436101515608b576000803560e01c6326121ff0141560895734156027578081fd5b80600319360112156036578081fd5b6028806080016080811067ffffffffffffffff82111715606457634e487b7160e01b83526041600452602483fd5b508061009260803980608083f015156082576040513d83823e3d81fd505b5080604051f35b505b60006000fdfe60806040523415600f5760006000fd5b600a80601e600039806000f350fe608060405260006000fd | ||||
| Binary of the runtime part: | ||||
| 60806040526004361015156087576000803560e01c6326121ff0141560855734156027578081fd5b80600319360112156036578081fd5b6028806080016080811067ffffffffffffffff82111715606457634e487b7160e01b83526041600452602483fd5b508061008e60803980608083f01515607e573d82833e3d82fd5b5080604051f35b505b60006000fdfe60806040523415600f5760006000fd5b600a80601e600039806000f350fe608060405260006000fd | ||||
| 6080604052600436101515608b576000803560e01c6326121ff0141560895734156027578081fd5b80600319360112156036578081fd5b6028806080016080811067ffffffffffffffff82111715606457634e487b7160e01b83526041600452602483fd5b508061009260803980608083f015156082576040513d83823e3d81fd505b5080604051f35b505b60006000fdfe60806040523415600f5760006000fd5b600a80601e600039806000f350fe608060405260006000fd | ||||
| Optimized IR: | ||||
| /******************************************************* | ||||
|  *                       WARNING                       * | ||||
| @ -78,8 +78,9 @@ object "D_16" { | ||||
|                         datacopy(128, dataoffset("C_3"), _2) | ||||
|                         if iszero(create(_1, 128, _2)) | ||||
|                         { | ||||
|                             returndatacopy(_1, _1, returndatasize()) | ||||
|                             revert(_1, returndatasize()) | ||||
|                             let pos := mload(64) | ||||
|                             returndatacopy(pos, _1, returndatasize()) | ||||
|                             revert(pos, returndatasize()) | ||||
|                         } | ||||
|                         return(mload(64), _1) | ||||
|                     } | ||||
|  | ||||
| @ -45,6 +45,6 @@ contract C { | ||||
| // compileViaYul: also | ||||
| // ---- | ||||
| // test() -> 5, 6, 7 | ||||
| // gas irOptimized: 345542 | ||||
| // gas irOptimized: 345942 | ||||
| // gas legacy: 500424 | ||||
| // gas legacyOptimized: 309013 | ||||
|  | ||||
| @ -18,15 +18,15 @@ contract C { | ||||
| // compileViaYul: also | ||||
| // ---- | ||||
| // constructor(), 20 wei | ||||
| // gas irOptimized: 265125 | ||||
| // gas irOptimized: 255579 | ||||
| // gas legacy: 285485 | ||||
| // gas legacyOptimized: 177957 | ||||
| // gas legacyOptimized: 177933 | ||||
| // f(uint256): 20 -> 1370859564726510389319704988634906228201275401179 | ||||
| // x() -> 1 | ||||
| // f(uint256): 20 -> FAILURE | ||||
| // x() -> 1 | ||||
| // stack(uint256): 1023 -> FAILURE | ||||
| // gas irOptimized: 853785 | ||||
| // gas irOptimized: 856335 | ||||
| // gas legacy: 981671 | ||||
| // gas legacyOptimized: 824895 | ||||
| // x() -> 1 | ||||
|  | ||||
| @ -28,6 +28,6 @@ contract C { | ||||
| // compileViaYul: also | ||||
| // ---- | ||||
| // t() -> 9 | ||||
| // gas irOptimized: 103946 | ||||
| // gas irOptimized: 103941 | ||||
| // gas legacy: 161097 | ||||
| // gas legacyOptimized: 112116 | ||||
|  | ||||
| @ -22,6 +22,6 @@ contract A { | ||||
| // ---- | ||||
| // different_salt() -> true | ||||
| // same_salt() -> true | ||||
| // gas irOptimized: 98438968 | ||||
| // gas irOptimized: 98438966 | ||||
| // gas legacy: 98439116 | ||||
| // gas legacyOptimized: 98438970 | ||||
|  | ||||
| @ -38,10 +38,10 @@ contract D { | ||||
| // f() -> 0x1 # This should work, next should throw # | ||||
| // gas legacy: 102944 | ||||
| // fview() -> FAILURE | ||||
| // gas irOptimized: 98438658 | ||||
| // gas irOptimized: 98438664 | ||||
| // gas legacy: 98438822 | ||||
| // gas legacyOptimized: 98438615 | ||||
| // fpure() -> FAILURE | ||||
| // gas irOptimized: 98438658 | ||||
| // gas irOptimized: 98438664 | ||||
| // gas legacy: 98438822 | ||||
| // gas legacyOptimized: 98438616 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user