mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			28 lines
		
	
	
		
			953 B
		
	
	
	
		
			Solidity
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
		
			953 B
		
	
	
	
		
			Solidity
		
	
	
	
	
	
| // since the copy always copies whole slots, we have to make sure that the source size maxes
 | |
| // out a whole slot and at the same time there are still elements left in the target at that point
 | |
| contract c {
 | |
|     bytes8[4] data1; // fits into one slot
 | |
|     bytes10[6] data2; // 4 elements need two slots
 | |
| 
 | |
|     function test() public returns (bytes10 r1, bytes10 r2, bytes10 r3) {
 | |
|         data1[0] = bytes8(uint64(1));
 | |
|         data1[1] = bytes8(uint64(2));
 | |
|         data1[2] = bytes8(uint64(3));
 | |
|         data1[3] = bytes8(uint64(4));
 | |
|         for (uint256 i = 0; i < data2.length; ++i)
 | |
|             data2[i] = bytes10(uint80(0xffff00 | (1 + i)));
 | |
|         data2 = data1;
 | |
|         r1 = data2[3];
 | |
|         r2 = data2[4];
 | |
|         r3 = data2[5];
 | |
|     }
 | |
| }
 | |
| // ====
 | |
| // compileToEwasm: also
 | |
| // compileViaYul: also
 | |
| // ----
 | |
| // test() -> 0x04000000000000000000000000000000000000000000000000, 0x0, 0x0
 | |
| // gas irOptimized: 93855
 | |
| // gas legacy: 97451
 | |
| // gas legacyOptimized: 94200
 |