Genuine, unique divergence — fixed in the engine and merged. +1 on the leaderboard.
Storage-reference tuple declarations required every position to be a named storage pointer, so harmless declaration holes caused fallback to incorrect value lowering. Holes paired with literals or source tuple holes are now skipped while named positions retain strict storage-pointer checks.
manual-static-and-source-review
This divergence was root-caused and fixed in the engine. Fixed in PR #104 →
Storage-reference tuple declarations required every position to be a named storage pointer, so harmless declaration holes caused fallback to incorrect value lowering. Holes paired with literals or source tuple holes are now skipped while named positions retain strict storage-pointer checks.
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.35;
/* ===ARENA-MANIFEST===
{
"deploy": { "contract": "T", "args": [] },
"entry": { "function": "run", "args": [] },
"feature": "tuple-hole-storage-pointer-declaration",
"note": "solc+EVM returns success|w:12 and writes x.a=1,y.a=2; solidity-lean returns success|w:34 with x.a=3,y.a=4. The differing component is wrong-value and state."
}
===END-ARENA-MANIFEST=== */
contract T {
struct S { uint256 a; }
S x;
S y;
function run() public returns (uint256) {
x.a = 3;
y.a = 4;
(S storage p, , S storage q) = (x, 0, y);
p.a = 1;
q.a = 2;
return x.a * 10 + y.a;
}
}