Submitted, awaiting the pre-agent gates.
// SPDX-License-Identifier: MIT
pragma solidity 0.8.35;
/* ===ARENA-MANIFEST===
{
"deploy": { "contract": "C", "args": [], "value": 0 },
"entry": { "function": "f", "args": [] },
"lane": "C",
"feature": "negated-fractional-literal-constant-over-reject",
"note": "A NEGATED FRACTIONAL literal (a rational constant such as -1.5) anywhere in a constant expression fails to lower: solidity-lean fails closed (over_reject) on a program solc 0.8.35 accepts and runs. return -1.5 * 2; must return int256 -3; solidity-lean refuses the whole contract. The trigger is the negative FRACTIONAL OPERAND, not the sign of the result and not the position. OVER-REJECTS: -1.5 * 2 (result -3), -1.5 * 0 (result 0 - non-negative result still fails), -0.5 * -2 (result +1 - both operands negative), -2.5 * 2, -3.0 / 1.5, and it fires in every position tried: bare return, a local int256 initializer (int256 v = -1.5 * 2), an if condition, and an abi.encode argument. AGREES with solc: 1.5 * 2 (positive fractional), 1.5 * 2 - 6 and 3 - 1.5 * 2 (fractional operands, NEGATIVE result, no negated fractional literal), 1e18 / 1e9, 0.5 + 0.5, 0.5 ether, 2 ** 10, and - crucially - return -3 (a negated INTEGER literal in the same position). Distinct from 'negative-constant-in-abiencode-arg': that one needs a negative INTEGER literal, produces a wrong observable (spurious Panic(0), lane S), and only fires in a builtin-argument position (return K is fine); this one needs a FRACTIONAL literal, fails closed (lane C), and reproduces with no builtin call anywhere. Related sub-case: abi.encode(-0.5 ether) instead produces a wrong observable rather than failing closed."
}
===END-ARENA-MANIFEST=== */
contract C {
function f() external pure returns (int256) {
// solc+EVM: -3 | solidity-lean: over_reject (fails closed)
return -1.5 * 2;
}
}