Skip to content

Slang Tests: solx-mlir :: conditional.sol fails on Linux ARM64 + macOS x86 since #563 — solc --mlir-action=print-init emits nothing, and the matrix was skipped on both the PR and the merge queue #591

Description

@nebasuke

Summary

main's Slang Tests have a second failure independent of the Windows melior one (#589/#590): since #563 (feat(slang): complete lvalues and assignment, merged 2026-07-22 11:36) the MLIR lit test solx-mlir :: conditional.sol fails on Linux ARM64 gnu and macOS x86, deterministically, while Linux x86, macOS arm64 (and Windows, once past #590's fix) pass:

FAIL: solx-mlir :: conditional.sol
Exit Code: 2
solc --mlir-action=print-init …/solx-mlir/tests/lit/conditional.sol 2>/dev/null | FileCheck … # RUN: at line 2
FileCheck error: '<stdin>' is empty.

The failing RUN line is the solc pipeline (line 2), not the solx one (line 1): solc produces empty stdout, and because the RUN line has 2>/dev/null, whatever solc printed on stderr (error or crash report) is invisible in CI.

Evidence

Deterministic per platform across three independent runs of current main content:

Run Linux x86 Linux ARM64 macOS arm64 macOS x86
main post-#563 (29916365666) ❌ conditional.sol ❌ conditional.sol
PR #590 verification (29923864614) ❌ conditional.sol ❌ conditional.sol
az-slang-expression-tail (29922499671) ❌ conditional.sol ❌ conditional.sol

The last main run before #563 (29912409528, 10:34) was green on both now-failing legs. In every failing job, conditional.sol is the only failing test (63/64 pass).

Infra is ruled out: passing and failing legs of the same run sync solx-solidity to the same rev (af7333e) and hit same-keyed solc caches (v2-solc-<OS>-<arch>-mlir-boost1.83.0-af7333e…-script622e2341). Same solc source, same test input, divergent result split by platform.

Analysis

#563 did not touch solx-solidity — it rewrote solx-mlir/tests/lit/conditional.sol (among other lit tests) and the solx-slang conditional/lvalue lowering. So the pinned solc's --mlir-action=print-init is being fed new test content it has never been checked against, and on two platform builds it emits nothing while on the others it emits output that satisfies FileCheck. Same source behaving differently per platform build points at platform-dependent behavior in solc's MLIR frontend on the new constructs (UB is the usual suspect), but the 2>/dev/null means we can't see what solc actually said — reproducing on an ARM64 runner with stderr captured is the first diagnostic step.

Why it reached main unseen

Slang Tests' matrix is label-gated and was skipped on both gates:

So the first-ever execution of these lit tests on ARM64/macOS-x86 with #563's content was the post-merge push. Same advisory-gating trap as previously seen with the integration suites.

Suggested next steps

  1. Diagnose: re-run solc --mlir-action=print-init solx-mlir/tests/lit/conditional.sol on a Linux ARM64 runner with stderr captured to see the actual error/crash. (Worth fixing generally: the lit RUN lines' 2>/dev/null discards exactly the information needed when this class of failure hits CI.)
  2. Unblock main: depending on what stderr shows — fix the solc-side handling, adjust the test, or temporarily XFAIL conditional.sol on the affected platforms with a reference to this issue.
  3. Process: consider auto-applying ci:slang (or running the matrix) when solx-mlir//solx-slang/ paths change, and/or running the matrix in merge_group, so slang changes can't merge with the suite skipped on every gate.

Found while verifying #590 (the Windows melior proc-macro fix): this failure is what keeps that verification run red despite the Windows leg passing, and it will keep Slang Tests on main red after #590 merges.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions