Skip to content

merge queue: checking #2425 on master (e7ec496), stacked on #2322 - #2431

Closed
mergify[bot] wants to merge 4 commits into
masterfrom
mergify/merge-queue/ab0f43b6ae
Closed

mergify[bot] wants to merge 4 commits into
masterfrom
mergify/merge-queue/ab0f43b6ae

Conversation

@mergify

@mergify mergify Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Note

This is a merge queue draft opened by Mergify. Nobody needs to act on it.
Mergify opened it for batch innovative-chouquette-v7c383 of the changes queue, to test #2425 before it merges into master. Pushing to this branch or closing this pull request removes #2425 from the queue.

What this draft tests

Mergify checks that #2425 still passes CI once combined with everything queued ahead of it. CI runs on this draft's code, built in this order:

  1. master at e7ec496
  2. the pull request queued ahead of this batch, listed below, which brings the tip to af305fc
  3. #2425, the pull request of this batch

The check is speculative: it assumes the pull requests ahead will merge, so it starts without waiting for them.

🎉 Where it stands: checks passed

CI passed on this draft.

Follow the changes queue in the dashboard

What happens next

  • Once the pull requests ahead have merged, Mergify merges #2425 into master and closes this draft.
  • If a pull request ahead fails or leaves the queue without merging, this batch is requeued and checked again on a new draft: these checks assumed it would merge.

Tip

A red check is not necessarily caused by this batch. These checks run on a tip that also carries the commits of the pull request ahead, so a failure here can come from it as much as from #2425. See only this batch's changes.

Queued ahead of this batch

This pull request entered the queue before this batch and is not part of it.

Metadata for CI tooling, read by mergify ci
---
all_scopes: false
checking_base_sha: af305fc55d03d418585d71b10c423d8e8ca16a65
previous_check_retries: []
previous_failed_batches: []
pull_requests:
  - number: 2425
    scopes:
      - core
scopes:
  - core
...
1 scope
  • core
Required conditions of queue rule changes for merge
  • check-success = Conventional Commit title
  • check-success = Queue validation
  • any of [🛡 GitHub repository ruleset rule master]:
    • check-success = @github-actions/Lint & Format
    • check-neutral = @github-actions/Lint & Format
    • check-skipped = @github-actions/Lint & Format
  • any of [🛡 GitHub repository ruleset rule master]:
    • check-success = @github-actions/Rust Test & NAPI Build
    • check-neutral = @github-actions/Rust Test & NAPI Build
    • check-skipped = @github-actions/Rust Test & NAPI Build
  • any of [🛡 GitHub repository ruleset rule master]:
    • check-success = @github-actions/JS Test (Ubuntu)
    • check-neutral = @github-actions/JS Test (Ubuntu)
    • check-skipped = @github-actions/JS Test (Ubuntu)
  • any of [🛡 GitHub repository ruleset rule master]:
    • check-success = @github-actions/Conventional Commit title
    • check-neutral = @github-actions/Conventional Commit title
    • check-skipped = @github-actions/Conventional Commit title
  • any of [🛡 GitHub repository ruleset rule master]:
    • check-success = @github-actions/Queue validation
    • check-neutral = @github-actions/Queue validation
    • check-skipped = @github-actions/Queue validation
Required conditions to stay in the queue
Queue graph

The diagram is not laid out in queue order, so a node's position says nothing about when it merges.

graph LR
    d3df45e170c34ee5bd3bf75806aa8949["innovative-chouquette-v7c383<br/>#2425<br/>scopes: core"]
    fef20c9ca986447a867ece300fefad60["ordinary-asperge-1zgt04<br/>#2430<br/>scopes: core"]
    d3df45e170c34ee5bd3bf75806aa8949 --> fef20c9ca986447a867ece300fefad60
    style d3df45e170c34ee5bd3bf75806aa8949 fill:#6366f1,color:#fff
Loading

tignear and others added 4 commits October 28, 2026 19:11
UVM stops at unknown package `process`. Bind the built-in process type,
state enum and methods, and execute them against dynamic scheduler
activations through a shared host-request family on every backend.

Implement self/status/kill/await/suspend/resume and per-process RNG state
(IEEE 1800-2023 9.7, 18.13.3-18.13.5). Support std::process and its state type
(26.7). Keep process references independent of heap object IDs. Retain exposed
identities after completion, preserve FINISHED on no-op controls, cancel
all descendants through completed parents, and wake status/await observers.
Suspended delays keep their original deadline; event waits rearm without
consuming suspended edges; level waits recheck immediately. Conditional-event
waits discard host pulses during suspension and rearm module counters and
automatic gates after checkpoint restoration. Checkpoints preserve control
state. Reject invalid construction, inheritance and calls. Pre-scan nested
statements and omitted-argument defaults before classifying waits, so a process
call later in a loop cannot leave earlier level waits insensitive on resume.
Recompute activation-local event probes from current shared cells before taking
resumed event baselines. Program exit clears suspended/awaiting/observer state;
resume ignores dead activations, so saved delays cannot revive their continuations.

User packages and classes named process retain their declarations, including
package state constants, typedefs and self functions from another source file. The
explicit std::process name remains unambiguous. Cancellation checks implicit
program completion, including self-kill and descendant cancellation, and
runs final procedures. Program $exit notifies observers of every sibling and
descendant after the whole program has ended, including suspended targets
and checkpoint-restored observers. Pending predicate reevaluations do not
notify other status waiters. External kill releases the target frame and local
bindings while preserving handle identity and RNG state; self-kill retires
after saving the current frame. During finalization, kill does not trigger a
second implicit finish that would skip cleanup. All final bodies share one
process identity and RNG, including draw-only bodies and stop/resume; the
identity remains RUNNING until the final phase ends (9.2.3). Save the running
caller's frame before ancestor kill can retire it, retaining its latest RNG
draw. set_randstate converts packed actuals to its string
formal before storing handles. Typed heap-helper operands retain formal
sizing, mutable receiver locations and GC roots across host boundaries.

Support final procedures in timed shared cases. Check final output after
all final procedures have run, preserving partial writes around simulator
finish notices. Scripts must avoid reads of another final procedure's writes
because final order is unspecified (9.2.3). External staging rejects post-finish
signal reads unless every design final is empty or only prints literals or
simulation time. Inspect emitted, cross-file preprocessed SV and conservatively
reject function/argument effects, including implicit calls and escaped names.
Output expectations and values captured before finish remain supported.
A script starting with
run_to_finish introduces no auxiliary settler program that could suppress
implicit completion. Add eighteen process cases and two final-harness cases
across native/image/parallel native, Cranelift/parallel Cranelift and WASM.

Validation:
- Full SV: 6,307 passed; 20 existing skipped. API regressions: 16 passed,
  including 2state/4state checkpoint/RNG, host/HDL final-kill tests, and
  shared final identity/RNG across a draw-only body and stop/resume, plus
  suspended iff waits with host pulses and checkpoint replay on all four
  backends in both state modes. The three resume review regressions replay
  checkpoints twice in each configuration, including nested calls and defaults,
  automatic event expressions and handles ended by program exit.
  Three private scheduler regressions verify bounded mutual-wait progress,
  frame/local-binding reclamation with RNG retention after 16 external kills,
  and program-exit suspension/wakeup cleanup,
  on native/interpreter/Cranelift/WASM in both state modes.
- Units: design 17, frontend-core 23, runtime 80, SV analyzer 874 (3 ignored),
  SV frontend 11; shared-suite units 58 (3 ignored). Existing process/fork/
  state-file integration: 37 passed. Affected and consumer Clippy passed.
- NAPI/JS: 435 passed. Retained-report tests: 4; report-gate tests: 7.
- Original six process cases retain exactly 13 external failures. Fourteen review
  and final-harness cases pass 5/14 in Verilator, 3/14 in Icarus and 5/14 in
  pinned xezim. The qualified-package typedef case passes all three tools;
  shared final identity/RNG passes Verilator. Their twenty-nine exact failures
  are retained with original assertions intact.
  The nine fresh selected reports for the resume cases pass the comparison
  gate; prior rows, assertions and exclusions are preserved. xezim's automatic
  compound wait already wakes at time0, isolated with observations before and
  during suspension; classify that startup failure separately from resume.
  Final-order staging regressions cover direct/indirect writes, macro expansion,
  hierarchy, argument effects and safe output/captured-value checks; the entire
  existing SV catalogue satisfies the restriction. Both final-output cases were
  rerun with Verilator, Icarus and pinned xezim; their fresh reports match the
  retained failure contracts without changing evidence. Default/external suite
  Clippy and both suite doctests pass.
- Fourteen adapter-free Top/Wrapped repro sources accompany process discrepancies;
  the eight review repros also pass Celox in both state modes (32 runs).
  The two resume probes also pass both tops in both state modes (8 runs).
  Static function state across three finals also passes both state modes.
- sv-tests CI reported exactly eight improvements: four chapter-9 process
  cases in both state modes. Each also passes local simulation. Update only
  those eight expectations; the resulting file matches all 3,300 CI rows.
- UVM in both state modes passes unknown process and stops at the existing
  class type parameter value blocker. Full UVM execution is not claimed.

Exposed identities remain allocated until simulation teardown. Portable state
files reject exposed process handles; in-memory checkpoints support them.
This is an independent master-based change without a Depends-On stack.

Preserve four-state class properties
alongside process fields. Process handles remain two-state and null-initialized;
only logic/reg/implicit integral fields store unknown planes. Added a native
and interpreter checkpoint regression with a process field between two
four-state logic fields. Full SV 6,336 passed (20 existing ignored), process API
17 passed, analyzer 879 passed (3 existing ignored), affected/API Clippy,
NAPI/JS 435 and plugin integrations passed. Both sets of retained external
validation records are preserved; shared case sources are unchanged.

Integration with concurrent assertions on master e7ec496: full SV 6,362
passed (20 existing ignored), process API 17 and concurrent assertion API 5
passed, retained-report checks 4 passed, formatting passed. The only manual
conflict was combining the two sets of xezim review records; code merged
without manual changes.

Change-Id: If6cc12a12722e66f75d4833a527ec1247b2a83ab
On the native x86 and arm64 backends, a store wider than 64 bits into a
4-state variable wrote its mask plane only when the source register had
wide mask chunks. A wide register loaded from a 2-state variable, or
produced by a 2-state operation, has at most a scalar mask, so the
destination kept a stale mask and read back as X or Z.

This showed up in 4-state simulation of a concatenation assignment from a
2-state value wider than 64 bits in a process, `{x, y, z} = w`: the value
is captured in a 4-state temporary and its slices are assigned, so the
targets read 0 (or X for 4-state targets), while Cranelift and wasm gave
the right values. The store now always writes every mask bit: the source's
wide mask chunks when it has them, otherwise its scalar mask for the low
chunk and zero above.

Change-Id: If46d411b2f1bc2e1aa4f99f79033b09df4e11067
@mergify mergify Bot closed this Oct 28, 2026
@mergify
mergify Bot deleted the mergify/merge-queue/ab0f43b6ae branch October 28, 2026 12:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant