/Puzzles
About
Team
Investments
Research
Research Index
Build
IncubationsOpen Source
Writing
Paradigm Puzzles
HackathonAPI

Terms, Disclosures, Privacy

LinkedIn, Twitter, Contact

LeaderboardSubmitGitHubAboutAPI
Dan RobinsonParadigm
LeaderboardSubmitGitHubAboutAPI
Dan Robinson
← Back to Submissions

array_literal_trailing_negative_element

Pending

Submitted, awaiting the pre-agent gates.

Author
@forwardsecrecy
Points
0
Verdict
—
Resolution
—
Submitted
Jul 24, 2026, 08:01 PM
Reviewed
—

Source

// SPDX-License-Identifier: MIT
pragma solidity 0.8.35;

/* ===ARENA-MANIFEST===
{
  "deploy": { "contract": "C", "args": [], "value": 0 },
  "entry":   { "function": "f", "args": [] },
  "lane":    "C",
  "feature": "array-literal-trailing-negative-literal-element-over-reject",
  "note":    "An array literal whose TYPE-DETERMINING first element is explicitly typed, followed by a bare NEGATIVE literal element, fails to lower: solidity-lean fails closed (over_reject) on a program solc 0.8.35 accepts and runs. int256[2] memory a = [int256(2), -1]; return a[1]; must return -1; solidity-lean refuses the whole contract. The bug is POSITIONAL and sign-specific - the element order is the discriminator. OVER-REJECTS: [int256(2), -1] and [-1, int256(-2), -3] (a bare negative literal in a NON-FIRST position). AGREES with solc: [-1, int256(2)] (the SAME bare negative literal, but FIRST - so it is not merely 'a bare negative literal in an array literal'), [int256(1), 2] (bare literal in a non-first position but POSITIVE - so it is not merely 'a bare literal in a non-first position'), [int256(-1), int256(-2)] (all elements explicitly cast), [int256(-1)] (single element), and [uint256(1), 2] (unsigned). Those two controls together pin it: it needs BOTH a non-first position AND a negative value. Distinct from the other constant-folding gaps I reported: 'negative-constant-in-abiencode-arg' needs a builtin-argument position and yields a wrong observable (spurious Panic(0), lane S) rather than failing closed, and it has no positional asymmetry; 'negated-fractional-literal-constant' needs a FRACTIONAL literal (-1.5) and fires in any position including the first. Here the literal is an ordinary negative INTEGER and moving it to the front makes the program lower fine."
}
===END-ARENA-MANIFEST=== */

contract C {
    function f() external pure returns (int256) {
        // solc+EVM: -1   |   solidity-lean: over_reject (fails closed)
        int256[2] memory a = [int256(2), -1];
        return a[1];
    }
}