mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Fix allocation of byte arrays.
This commit is contained in:
parent
b1ab81ef22
commit
c8ac861832
@ -47,6 +47,7 @@ Compiler Features:
|
|||||||
|
|
||||||
Bugfixes:
|
Bugfixes:
|
||||||
* Tests: Fix chain parameters to make ipc tests work with newer versions of cpp-ethereum.
|
* Tests: Fix chain parameters to make ipc tests work with newer versions of cpp-ethereum.
|
||||||
|
* Code Generator: Fix allocation of byte arrays (zeroed out too much memory).
|
||||||
|
|
||||||
### 0.4.24 (2018-05-16)
|
### 0.4.24 (2018-05-16)
|
||||||
|
|
||||||
|
@ -510,7 +510,7 @@ void CompilerUtils::zeroInitialiseMemoryArray(ArrayType const& _type)
|
|||||||
codecopy(memptr, codesize(), size)
|
codecopy(memptr, codesize(), size)
|
||||||
memptr := add(memptr, size)
|
memptr := add(memptr, size)
|
||||||
})");
|
})");
|
||||||
templ("element_size", to_string(_type.baseType()->memoryHeadSize()));
|
templ("element_size", to_string(_type.isByteArray() ? 1 : _type.baseType()->memoryHeadSize()));
|
||||||
m_context.appendInlineAssembly(templ.render(), {"length", "memptr"});
|
m_context.appendInlineAssembly(templ.render(), {"length", "memptr"});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -8060,7 +8060,7 @@ BOOST_AUTO_TEST_CASE(create_memory_array_allocation_size)
|
|||||||
// multiple of 32
|
// multiple of 32
|
||||||
char const* sourceCode = R"(
|
char const* sourceCode = R"(
|
||||||
contract C {
|
contract C {
|
||||||
function f() public pure returns (uint d1, uint d2, uint d3) {
|
function f() public pure returns (uint d1, uint d2, uint d3, uint memsize) {
|
||||||
bytes memory b1 = new bytes(31);
|
bytes memory b1 = new bytes(31);
|
||||||
bytes memory b2 = new bytes(32);
|
bytes memory b2 = new bytes(32);
|
||||||
bytes memory b3 = new bytes(256);
|
bytes memory b3 = new bytes(256);
|
||||||
@ -8069,12 +8069,13 @@ BOOST_AUTO_TEST_CASE(create_memory_array_allocation_size)
|
|||||||
d1 := sub(b2, b1)
|
d1 := sub(b2, b1)
|
||||||
d2 := sub(b3, b2)
|
d2 := sub(b3, b2)
|
||||||
d3 := sub(b4, b3)
|
d3 := sub(b4, b3)
|
||||||
|
memsize := msize()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)";
|
)";
|
||||||
compileAndRun(sourceCode);
|
compileAndRun(sourceCode);
|
||||||
ABI_CHECK(callContractFunction("f()"), encodeArgs(0x40, 0x40, 0x20 + 256));
|
ABI_CHECK(callContractFunction("f()"), encodeArgs(0x40, 0x40, 0x20 + 256, 0x260));
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(memory_arrays_of_various_sizes)
|
BOOST_AUTO_TEST_CASE(memory_arrays_of_various_sizes)
|
||||||
|
Loading…
Reference in New Issue
Block a user