mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #7496 from ethereum/arraysOfRecursiveStructs
Fix internal compiler error for arrays of recursive structs.
This commit is contained in:
commit
641c06d50d
@ -16,6 +16,7 @@ Bugfixes:
|
|||||||
* Code Generator: Fix internal error when popping a dynamic storage array of mappings.
|
* Code Generator: Fix internal error when popping a dynamic storage array of mappings.
|
||||||
* Name Resolver: Fix wrong source location when warning on shadowed aliases in import declarations.
|
* Name Resolver: Fix wrong source location when warning on shadowed aliases in import declarations.
|
||||||
* Scanner: Fix multi-line natspec comment parsing with triple slashes when file is encoded with CRLF instead of LF.
|
* Scanner: Fix multi-line natspec comment parsing with triple slashes when file is encoded with CRLF instead of LF.
|
||||||
|
* Type System: Fix arrays of recursive structs.
|
||||||
* Yul Optimizer: Fix reordering bug in connection with shifted one and mul/div-instructions in for loop conditions.
|
* Yul Optimizer: Fix reordering bug in connection with shifted one and mul/div-instructions in for loop conditions.
|
||||||
|
|
||||||
|
|
||||||
|
@ -2050,6 +2050,8 @@ unsigned StructType::calldataOffsetOfMember(std::string const& _member) const
|
|||||||
|
|
||||||
bool StructType::isDynamicallyEncoded() const
|
bool StructType::isDynamicallyEncoded() const
|
||||||
{
|
{
|
||||||
|
if (recursive())
|
||||||
|
return true;
|
||||||
solAssert(interfaceType(false).get(), "");
|
solAssert(interfaceType(false).get(), "");
|
||||||
for (auto t: memoryMemberTypes())
|
for (auto t: memoryMemberTypes())
|
||||||
{
|
{
|
||||||
|
@ -0,0 +1,12 @@
|
|||||||
|
contract Test {
|
||||||
|
struct RecursiveStruct {
|
||||||
|
RecursiveStruct[] vals;
|
||||||
|
}
|
||||||
|
|
||||||
|
function func() public pure {
|
||||||
|
RecursiveStruct[1] memory val = [ RecursiveStruct(new RecursiveStruct[](42)) ];
|
||||||
|
assert(val[0].vals.length == 42);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// -----
|
||||||
|
// func() ->
|
@ -0,0 +1,10 @@
|
|||||||
|
contract Test {
|
||||||
|
struct RecursiveStruct {
|
||||||
|
RecursiveStruct[] vals;
|
||||||
|
}
|
||||||
|
|
||||||
|
function func() private pure {
|
||||||
|
RecursiveStruct[1] memory val;
|
||||||
|
val;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user