Repository navigation
Integrate experimental Go frontend with symbolic semantic expectations - #469
Draft
CaelmBleidd wants to merge 6 commits into
Draft
CaelmBleidd wants to merge 6 commits into
CaelmBleidd wants to merge 6 commits into
Conversation
CaelmBleidd
force-pushed
the
caelmbleidd/go-integration-tests
branch
from
October 9, 2026 10:59
44d678e to
4d8528a
Compare
Import the SSA/JacoDB frontend from buraindo/go-jacodb at 717bd41 onto current main. Add native semantic assertions and witness replay, fix the reproduced arithmetic and collection defects, and keep pointer metadata local to Go. Pin the exporter toolchain, add CI, enforce style, and document the remaining experimental boundaries.
Replace the original coverage smoke factories with explicit categorized properties using the shared TestRunner. Require both discovery of expected branches and consistency of every collected execution. Preserve native oracle comparisons and witness replay, expose structured pointer/interface values and argument snapshots, and keep the newly detected frontend/model failures visible in the draft integration.
CaelmBleidd
force-pushed
the
caelmbleidd/go-integration-tests
branch
from
October 9, 2026 13:19
670f659 to
6f89767
Compare
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.
The original Go prototype only checked execution and instruction coverage. This integration adapts it to current
mainand tests input-dependent Go results, panics and mutations through the sharedTestRunner. The reproduced failures are fixed, with selected results independently checked by native Go. The frontend remains experimental.The prototype comes from
buraindo/go-jacodbat717bd41613fbc4bb8d8a0af43f3900bab824dcb8. Its Go-specific JacoDB API is separately pinned to816194b963; other frontends retain their dependency. The branch is rebased ontomainat70a88e3d6a0156c4e7b40d912e9c1d31e9530a12.Implementation
copyandappend, including nested values. Composite slice copies read a source snapshot one element per machine step, preserving overlapping ranges and symbolic lengths under the normal budgets. Pointer fields inside copied structs keep their shared pointee; scalar-pointer conversions preserve nil and round-trip equality.limit + 1.build/generated/gousing pinned Go 1.22.3; add boundedci-govalidation.Tests and local validation
All 103 original examples have explicitly registered semantic tests in thematic packages for arithmetic, arrays, maps, slices, strings, control flow, calls, exceptions, globals, objects, pointers, types and algorithms. Catalog checks require one registration per sample and a native oracle for every constant regression.
checkDiscoveredPropertiesrequires a witness for each expected property and checks that every collected execution satisfies an expectation.checkMatchesadditionally requires a one-to-one match. Mutation checks inspect snapshots before and after the call.mapLoopLen.gofmt,validateProjectListandgit diff --checkpass. Native replay process handling is shared, and non-obvious Kotlin literals use named arguments.The
mapLoopLenexpectation now follows the source's zero-initialized keys instead of assuming max-minus-min with an added zero. Native replay checks this behavior independently.assertCreatureFailNoCommaallows partial instruction coverage because its guaranteed assertion panic makes the following return unreachable; every execution must still panic. Existing bounded manual/unreachable-loop exceptions retain their semantic checks.These are bounded local observations: exploration uses finite timeouts and a 100-state limit. CI for the updated commit is tracked separately.
Review focus and boundaries
Review input-shape constraints and model refinement, value copying, pointer conversion metadata, interface dispatch, primitive-map invariants and the separately pinned Go JacoDB dependency.
Channels/goroutines/select, unsafe and several conversions remain unsupported. Full rune/UTF-8 iteration and preservation of invalid UTF-8 in resolved text are incomplete. Float-to-integer validation covers finite representable values. Collection sizes use a nonnegative BV32 domain and input slice capacity equals length. External calls and function inputs retain prototype mocks; resolved snapshots and JSON replay do not preserve arbitrary alias graphs. General pointer/interface identity, reference map keys, standard-library integration and arbitrary-project workflows need broader validation. Map-zero regressions cover selected structs, arrays and named scalars; nil-map regressions currently cover integer keys/values. See
usvm-go/README.md.