Repository navigation
merge queue: checking #2450 + #2390 + #2407 together on master (320e8bf), stacked on #2411, #2446 and #2449 - #2455
Closed
mergify[bot] wants to merge 12 commits into
Closed
mergify[bot] wants to merge 12 commits into
mergify[bot] wants to merge 12 commits into
Conversation
Every callback registration allocated two empty CString buffers for its handle name and full name. Keep unnamed callback, iterator and constant handles without owned names and return the shared empty C string for those properties. Named scopes and signals retain their owned strings. Extend existing public API regressions to check empty callback and iterator names alongside the named hierarchy. Validation: all 68 VPI unit/API tests, all 10 ignored cocotb integrations, all-target clippy with warnings denied, and workspace formatting. Change-Id: Ibf866696869af6e0ab4b5e2720e9c2a8a8f7a738
IEEE 1800-2023 6.16 makes a single character of a string variable a `byte`, and 6.16.3 declares `function byte getc(int i)`; 6.11 makes `byte` a signed 2-state type. Celox typed `s[i]` and `s.getc(i)` as unsigned 8-bit values, so a character code above 127 converted to a positive integer. Type them as signed bytes. Impact: a character with code 128..255 now reads as a negative value when it is widened, compared or printed as a number (`int n = s[0]` gives -1 for 8'hff, `s[0] < 0` is true, `%0d` prints -1). ASCII characters, `putc`, assignments of characters to 8-bit variables and string contents are unchanged. The shared string::characters_are_signed_bytes case checks the LRM values. xezim 0.11.3 agrees; Verilator 5.052 and Icarus 13.0 read the code as 255. The Verilator disagreement is retained with a standalone probe, and the case joins Icarus' existing getc limitation. sv-tests conformance is unchanged. Change-Id: I394404abf48a74110753cecf60a1e35952fa5924
Support `ref` and `const ref` formals of functions and tasks (IEEE 1800-2023 13.5.2). A formal is the actual itself: calls are inlined, so the inlined body names the actual's storage instead of a copy. Writes are visible at once, other names of the actual alias it, and a task keeps the reference while it is suspended. Calls without reference formals lower as before. Actuals can be variables (scalars, strings, class handles, queues, dynamic and associative arrays, unpacked arrays, and reference formals of the caller), class and static properties, whose object is evaluated at the call, and elements of fixed-size unpacked arrays, whose position is fixed at the call. A select past such an element reads and writes nothing instead of reaching the next element. Handles and positions held across a suspension are private to each forked activation. A formal bound to a property can be passed on to `output` and `inout` arguments. Reference formals may have container types. `const` carries over to following formals with the direction (13.3). The analyzer rejects static subroutines with reference formals, actuals that are expressions, constants, part-selects or nets, actuals of non-equivalent types (6.22.2), writes to `const ref` formals (also through selects passed to writable arguments and `$readmemb`/`$readmemh` destinations), nonblocking writes to `ref` formals (6.21), uses in `fork ... join_any/join_none` outside fork-variable initializers (9.3.2), and `ref` calls in continuous assignments or event expressions (13.4.1). `ref static`, elements of dynamically sized arrays (outdated references), elements of properties, members of unpacked structures and run-time selects of a formal bound to an element remain unsupported. New shared cases in `references.vtest` pass on all backends. Verilator, Icarus and xezim failures are retained as executed evidence with an adapter-free probe; xezim's copy semantics and subarray-element failure are reviewed as `sv_ref_copy_semantics` and `sv_ref_subarray_element`. Change-Id: I0402167840488bdc299af95f29abbfad8c2782ca
Enum-typed expressions accept `first`, `last`, `next(N)`, `prev(N)`, `num`
and `name` (IEEE 1800-2023 6.19.5), with or without parentheses (6.19.5.7),
on variables, array and container elements, class properties, static
properties, function and method results, casts, enum constants and the
results of other enum methods.
Types now carry the members of an enumeration with their names, base
width, signedness and state count. The methods bind to a new
`Callee::Lookup` IR call that evaluates its selector once and returns the
value of the first key it matches by case equality, else a default; the
frontend lowers it to multiplexers whose selector copies share one node.
A receiver with side effects therefore runs once, and only designs that
call these methods pay for them.
`next`/`prev` wrap around and take the count modulo the number of
members; a value that is no member, including one with unknown bits,
gives the base type's default initial value ('x for a 4-state base,
Table 6-7). `name` returns the empty string for such a value (6.19.5.6).
Change-Id: Icf20fb1bef13ec48958bd50e14f82790e72f516a
A static local of a process may now have a run-time initializer, such as `string s = v.name();` or `C h = new;`. IEEE 1800-2023 6.8 allows any run-time expression and runs it once, before any initial or always procedure starts; Celox runs it, in declaration order, in the existing time-zero initializer process, and keeps the local (and every static local it reads) as module storage. An initializer that reads an automatic variable could only run on each entry and is still rejected, as are non-constant initializers of function statics. IEEE 1800-2023 6.21 says that "an explicit static keyword shall be required when an initialization value is specified as part of a static variable's declaration". Celox already accepts the keyword-less form with a constant initializer, and existing sources (including the sv-tests case 6.19.5.6) omit it, so a keyword-less run-time initializer is accepted in a procedure that runs once, such as `initial`, where running it at time zero instead of on entry cannot repeat. In an `always` procedure it stays rejected, because its author likely meant it to run on every entry; the `static` keyword states the intent there. sv-tests: 6.19.5.6 enum_name, 8.7 constructor and 8.7 constructor_param now pass in both state modes. Change-Id: I99990f956dd5985eb2d1087631ae1f918f2bbd0a
Queued writes cloned the full deposit map into the open clock-edge batch after every input write. Keep that batch attached to the current deposits and freeze its map once before a member transitions again or before replay. Closed batches retain their own per-edge values and callback overrides keep the existing replay behavior. This avoids repeated full-map and BigUint copies while collecting simultaneous input writes. Extend the queued-edge regression stimulus with overwritten data deposits before and after clock transitions. Validation: focused edge-value regression, all 68 VPI unit/API tests, all 10 ignored cocotb integrations, all-target clippy with warnings denied, and workspace formatting. Change-Id: I2a51a4eca0ff3f094e20b289f003f23344612ea6
This was referenced Oct 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
This is a merge queue draft opened by Mergify. Nobody needs to act on it.
Mergify opened it for batch super-cerise-lqkmpq of the
changesqueue, to test #2450, #2390 and #2407 before they merge intomaster.What this draft tests
Mergify checks that #2450, #2390 and #2407 still pass CI once combined with everything queued ahead of them. CI runs on this draft's code, built in this order:
masterat320e8bfe8bb8f2The check is speculative: it assumes the pull requests ahead will merge, so it starts without waiting for them.
🕵️ Where it stands: failed, splitting the batch
The checks of this draft failed. Mergify splits this batch to find which pull request is responsible.
Follow the
changesqueue in the dashboardWhat happens next
Tip
A red check is not necessarily caused by this batch. These checks run on a tip that also carries the commits of the 3 pull requests ahead, so a failure here can come from them as much as from #2450 + #2390 + #2407. See only this batch's changes.
Queued ahead of this batch
These pull requests entered the queue before this batch and are not part of it.
Metadata for CI tooling, read by
mergify ci1 scope
coreRequired conditions of queue rule
changesfor mergecheck-success = Queue validationmaster]:check-neutral = @github-actions/Lint & Formatcheck-skipped = @github-actions/Lint & Formatcheck-success = @github-actions/Lint & Formatmaster]:check-neutral = @github-actions/Rust Test & NAPI Buildcheck-skipped = @github-actions/Rust Test & NAPI Buildcheck-success = @github-actions/Rust Test & NAPI Buildmaster]:check-neutral = @github-actions/JS Test (Ubuntu)check-skipped = @github-actions/JS Test (Ubuntu)check-success = @github-actions/JS Test (Ubuntu)master]:check-neutral = @github-actions/Queue validationcheck-skipped = @github-actions/Queue validationcheck-success = @github-actions/Queue validationcheck-success = Conventional Commit titledepends-on=celox-sim/celox#2390[⛓️ feat(sv): implement enumerated type methods #2390 [stack]]depends-on = celox-sim/celox#2449[⛓️ perf(vpi): avoid allocating empty names for temporary handles #2449]number != 2450master]:check-success = @github-actions/Conventional Commit titlecheck-neutral = @github-actions/Conventional Commit titlecheck-skipped = @github-actions/Conventional Commit titleRequired conditions to stay in the queue
-conflict-draft-head ~= ^(integration/|renovate/veryl-crates$|upgrade/veryl-|release-please--branches--master--components--celox$|master$)-head ~= ^renovate/-label = release:holddepends-on=celox-sim/celox#2390[⛓️ feat(sv): implement enumerated type methods #2390 [stack]]base ~= ^(master|develop)$base ~= ^stack/body ~= (?m)^Depends-On:head != release-please--branches--master--components--celoxlabel = merge-readydepends-on = celox-sim/celox#2449[⛓️ perf(vpi): avoid allocating empty names for temporary handles #2449]number != 2450master]:check-success = @github-actions/Lint & Formatcheck-neutral = @github-actions/Lint & Formatcheck-skipped = @github-actions/Lint & Formatmaster]:check-success = @github-actions/Rust Test & NAPI Buildcheck-neutral = @github-actions/Rust Test & NAPI Buildcheck-skipped = @github-actions/Rust Test & NAPI Buildmaster]:check-neutral = @github-actions/JS Test (Ubuntu)check-skipped = @github-actions/JS Test (Ubuntu)check-success = @github-actions/JS Test (Ubuntu)master]:check-success = @github-actions/Conventional Commit titlecheck-neutral = @github-actions/Conventional Commit titlecheck-skipped = @github-actions/Conventional Commit titlemaster]:check-skipped = @github-actions/Queue validationcheck-neutral = @github-actions/Queue validationcheck-success = @github-actions/Queue validation