mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Do not allocate memory objects if they will be assigned directly.
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
contract C {
|
||||
struct S { uint x; uint y; uint z; }
|
||||
function memorySize() internal pure returns (uint s) {
|
||||
assembly { s := mload(0x40) }
|
||||
}
|
||||
function withValue() public pure returns (uint) {
|
||||
S memory x = S(1, 2, 3);
|
||||
uint memorySizeBefore = memorySize();
|
||||
S memory t = x;
|
||||
uint memorySizeAfter = memorySize();
|
||||
return memorySizeAfter - memorySizeBefore;
|
||||
}
|
||||
function withoutValue() public pure returns (uint) {
|
||||
uint memorySizeBefore = memorySize();
|
||||
S memory t;
|
||||
uint memorySizeAfter = memorySize();
|
||||
return memorySizeAfter - memorySizeBefore;
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// withValue() -> 0x00
|
||||
// withoutValue() -> 0x60
|
||||
Reference in New Issue
Block a user