mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			158 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
| pragma abicoder               v2;
 | |
| 
 | |
| contract C {
 | |
|     function ggg8(int8 x) external pure returns (int256) {
 | |
|         return x;
 | |
|     }
 | |
|     function gg16(int16 x) external pure returns (int256) {
 | |
|         return x;
 | |
|     }
 | |
|     function gg32(int32 x) external pure returns (int256) {
 | |
|         return x;
 | |
|     }
 | |
|     function gg64(int64 x) external pure returns (int256) {
 | |
|         return x;
 | |
|     }
 | |
|     function g128(int128 x) external pure returns (int256) {
 | |
|         return x;
 | |
|     }
 | |
|     function f8(int256 a) external view returns (int256) {
 | |
|         int8 x = 0;
 | |
|         assembly { x := a }
 | |
|         return this.ggg8(x);
 | |
|     }
 | |
|     function f16(int256 a) external view returns (int256) {
 | |
|         int16 x = 0;
 | |
|         assembly { x := a }
 | |
|         return this.gg16(x);
 | |
|     }
 | |
|     function f32(int256 a) external view returns (int256) {
 | |
|         int32 x = 0;
 | |
|         assembly { x := a }
 | |
|         return this.gg32(x);
 | |
|     }
 | |
|     function f64(int256 a) external view returns (int256) {
 | |
|         int64 x = 0;
 | |
|         assembly { x := a }
 | |
|         return this.gg64(x);
 | |
|     }
 | |
|     function f128(int256 a) external view returns (int256) {
 | |
|         int128 x = 0;
 | |
|         assembly { x := a }
 | |
|         return this.g128(x);
 | |
|     }
 | |
| }
 | |
| // ====
 | |
| // compileViaYul: also
 | |
| // ----
 | |
| // f8(int256): 0 -> 0
 | |
| // ggg8(int8): 0 -> 0 # test validation as well as sanity check #
 | |
| // f8(int256): 1 -> 1
 | |
| // ggg8(int8): 1 -> 1
 | |
| // f8(int256): -1 -> -1
 | |
| // ggg8(int8): -1 -> -1
 | |
| // f8(int256): 0x7F -> 0x7F
 | |
| // ggg8(int8): 0x7F -> 0x7F
 | |
| // f8(int256): 0x80 -> -128
 | |
| // ggg8(int8): 0x80 -> FAILURE
 | |
| // f8(int256): 0xFE -> -2
 | |
| // ggg8(int8): 0xFE -> FAILURE
 | |
| // f8(int256): 0xFF -> -1
 | |
| // ggg8(int8): 0xFF -> FAILURE
 | |
| // f8(int256): 0x0100 -> 0x00
 | |
| // ggg8(int8): 0x0100 -> FAILURE
 | |
| // f8(int256): 0x0101 -> 0x01
 | |
| // ggg8(int8): 0x0101 -> FAILURE
 | |
| // f8(int256): 0x01FF -> -1
 | |
| // ggg8(int8): 0x01FF -> FAILURE
 | |
| // f8(int256): 0x01FE -> -2
 | |
| // ggg8(int8): 0x01FE -> FAILURE
 | |
| // f16(int256): 0 -> 0
 | |
| // gg16(int16): 0 -> 0
 | |
| // f16(int256): 1 -> 1
 | |
| // gg16(int16): 1 -> 1
 | |
| // f16(int256): -1 -> -1
 | |
| // gg16(int16): -1 -> -1
 | |
| // f16(int256): 0x7FFF -> 0x7FFF
 | |
| // gg16(int16): 0x7FFF -> 0x7FFF
 | |
| // f16(int256): 0x8000 -> -32768
 | |
| // gg16(int16): 0x8000 -> FAILURE
 | |
| // f16(int256): 0xFFFE -> -2
 | |
| // gg16(int16): 0xFFFE -> FAILURE
 | |
| // f16(int256): 0xFFFF -> -1
 | |
| // gg16(int16): 0xFFFF -> FAILURE
 | |
| // f16(int256): 0x010000 -> 0x00
 | |
| // gg16(int16): 0x010000 -> FAILURE
 | |
| // f16(int256): 0x010001 -> 0x01
 | |
| // gg16(int16): 0x010001 -> FAILURE
 | |
| // f16(int256): 0x01FFFF -> -1
 | |
| // gg16(int16): 0x01FFFF -> FAILURE
 | |
| // f16(int256): 0x01FFFE -> -2
 | |
| // gg16(int16): 0x01FFFE -> FAILURE
 | |
| // f32(int256): 0 -> 0
 | |
| // gg32(int32): 0 -> 0
 | |
| // f32(int256): 1 -> 1
 | |
| // gg32(int32): 1 -> 1
 | |
| // f32(int256): -1 -> -1
 | |
| // gg32(int32): -1 -> -1
 | |
| // f32(int256): 0x7FFFFFFF -> 0x7FFFFFFF
 | |
| // gg32(int32): 0x7FFFFFFF -> 0x7FFFFFFF
 | |
| // f32(int256): 0x80000000 -> -2147483648
 | |
| // gg32(int32): 0x80000000 -> FAILURE
 | |
| // f32(int256): 0xFFFFFFFE -> -2
 | |
| // gg32(int32): 0xFFFFFFFE -> FAILURE
 | |
| // f32(int256): 0xFFFFFFFF -> -1
 | |
| // gg32(int32): 0xFFFFFFFF -> FAILURE
 | |
| // f32(int256): 0x0100000000 -> 0x00
 | |
| // gg32(int32): 0x0100000000 -> FAILURE
 | |
| // f32(int256): 0x0100000001 -> 0x01
 | |
| // gg32(int32): 0x0100000001 -> FAILURE
 | |
| // f32(int256): 0x01FFFFFFFF -> -1
 | |
| // gg32(int32): 0x01FFFFFFFF -> FAILURE
 | |
| // f32(int256): 0x01FFFFFFFE -> -2
 | |
| // gg32(int32): 0x01FFFFFFFE -> FAILURE
 | |
| // f64(int256): 0 -> 0
 | |
| // gg64(int64): 0 -> 0
 | |
| // f64(int256): 1 -> 1
 | |
| // gg64(int64): 1 -> 1
 | |
| // f64(int256): -1 -> -1
 | |
| // gg64(int64): -1 -> -1
 | |
| // f64(int256): 0x7FFFFFFFFFFFFFFF -> 0x7FFFFFFFFFFFFFFF
 | |
| // gg64(int64): 0x7FFFFFFFFFFFFFFF -> 0x7FFFFFFFFFFFFFFF
 | |
| // f64(int256): 0x8000000000000000 -> -9223372036854775808
 | |
| // gg64(int64): 0x8000000000000000 -> FAILURE
 | |
| // f64(int256): 0xFFFFFFFFFFFFFFFE -> -2
 | |
| // gg64(int64): 0xFFFFFFFFFFFFFFFE -> FAILURE
 | |
| // f64(int256): 0xFFFFFFFFFFFFFFFF -> -1
 | |
| // gg64(int64): 0xFFFFFFFFFFFFFFFF -> FAILURE
 | |
| // f64(int256): 0x010000000000000000 -> 0x00
 | |
| // gg64(int64): 0x010000000000000000 -> FAILURE
 | |
| // f64(int256): 0x010000000000000001 -> 0x01
 | |
| // gg64(int64): 0x010000000000000001 -> FAILURE
 | |
| // f64(int256): 0x01FFFFFFFFFFFFFFFF -> -1
 | |
| // gg64(int64): 0x01FFFFFFFFFFFFFFFF -> FAILURE
 | |
| // f64(int256): 0x01FFFFFFFFFFFFFFFE -> -2
 | |
| // gg64(int64): 0x01FFFFFFFFFFFFFFFE -> FAILURE
 | |
| // f128(int256): 0 -> 0
 | |
| // g128(int128): 0 -> 0
 | |
| // f128(int256): 1 -> 1
 | |
| // g128(int128): 1 -> 1
 | |
| // f128(int256): -1 -> -1
 | |
| // g128(int128): -1 -> -1
 | |
| // f128(int256): 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -> 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
 | |
| // g128(int128): 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -> 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
 | |
| // f128(int256): 0x80000000000000000000000000000000 -> -170141183460469231731687303715884105728
 | |
| // g128(int128): 0x80000000000000000000000000000000 -> FAILURE
 | |
| // f128(int256): 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE -> -2
 | |
| // g128(int128): 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE -> FAILURE
 | |
| // f128(int256): 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -> -1
 | |
| // g128(int128): 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -> FAILURE
 | |
| // f128(int256): 0x0100000000000000000000000000000000 -> 0x00
 | |
| // g128(int128): 0x0100000000000000000000000000000000 -> FAILURE
 | |
| // f128(int256): 0x0100000000000000000000000000000001 -> 0x01
 | |
| // g128(int128): 0x0100000000000000000000000000000001 -> FAILURE
 | |
| // f128(int256): 0x01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -> -1
 | |
| // g128(int128): 0x01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -> FAILURE
 | |
| // f128(int256): 0x01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE -> -2
 | |
| // g128(int128): 0x01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE -> FAILURE
 |