Repository navigation
test: three tests that failed on CI runners (cvc5 1.1.2 and 1.4.2, slow macOS cores) - #106
Merged
Merged
Conversation
This was referenced Oct 28, 2026
…t the limits where cvc5 crashes.
…solver refutes at once.
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.
Three tests fail on CI runners for reasons outside the code they test. Both block every PR, since each PR's checks run on its merge with main.
cvc5_memory_limit.cppunder cvc5 1.4.2The test is from #48. It fails in the assertions job since #100 put cvc5 1.4.2 there (#94's run printed
Verified: small [backend=cvc5]where the test expectssolver.memory-limit).The test gives each cvc5 process 5 MB of data (
--memory-limit=5,RLIMIT_DATA), assuming cvc5 cannot solve the query within that. cvc5 1.1.2 cannot, but 1.4.2 solves it in less. Here is the overflow check's query, ascpp-verify --dump-smt2writes it, run underprlimit --data=N:unsat(error "std::bad_alloc")(error "std::bad_alloc")The limit works; only the test's assumption about cvc5's footprint fails for 1.4.2.
1 MB was not the fix. A first version gave 1 MB, which Ubuntu's cvc5 1.1.2 and the static 1.4.2 both answered with
std::bad_allochere. In CI, the release job's cvc5 is the static 1.1.2 archive, and it segfaulted at 1 MB (cvc5 terminated by signal 11: cvc5 suffered a segfault ... Looks like a NULL pointer was dereferenced.). An allocation that fails where cvc5 does not check it crashes it, and where that happens depends on the limit, the version, and the build. With the test's old query:VerifiedVerifiedSo the test no longer sits among cvc5's start-up allocations. Its function multiplies three 64-bit values, which cvc5 bit-blasts, and the limit is 16 MB: each version starts, then runs out while solving, where its allocations throw. Ubuntu's 1.1.2 and the static 1.4.2 each pass three runs of three, out of memory after 0.6 to 0.9 s; at 16 and 32 MB both report
solver.memory-limit, and without a limit the query runs for a minute.A cvc5 that crashes is still reported as a failed invocation, not as running out of memory, since a crash need not mean that. One crash does say so: GMP aborts with
GNU MP: Cannot allocate memory, which cpp-verify reports as a failed invocation today; recognizing it, as Why3's prover drivers do, is a change of its own.spec_post_unfolded.cppon a slow corefibo_strictfailed #87's macOS job three times out of three (Unresolved: fibo_strict [backend=z3] [reason=spec.fuel]where the test expects a certified counterexample). #87 does not cause it: its Layer-3 dump of this file is byte-identical with and without #87.The counterexample (
fibo(-2) == fibo(-1) == 0) is found by refinement and by the search for the ends of a domain. Both get a slice of wall-clock time: 5% of--timeout, at least 500 ms, which is 500 ms at the test's--timeout=10000. Here, with cpp-verify on one core shared with two busy loops (taskset -c 7), the slice runs out before the counterexample is found:--timeoutfibo_strictspec.fuel3 times, the counterexample 5 timesVerdicts may depend on load (wall-clock budgets stay, decision C1), so the test gets a budget its slice survives on:
--timeout=40000. On an idle machine the file takes 2.2 s either way, and every check of the file passes with the new budget.extent_separation.cppon a slow coreextent_separation.cppfailed on #93's macOS runner, a change that touches no verifier code:wrong_copyis the test's negative case: a copy loop that writes the wrong values must fail its invariant. It wrotea[n - 1 - i], a reversed copy, and finding a counterexample to its quantified invariant is a hard search. On a Linux machine, three runs ofwrong_copyalone with--jobs=1took 32.6 s and 41.9 s to fail, and the third endedUnresolved [solver.timeout]after 61.5 s.The loop now writes zeros (
out[i] = 0;). The invariantout[j] == a[j]then fails whereveraholds another value: three runs failed in 1.4 s each, and the whole file takes 0.7 s. The case still shows what it is for: under the separation of extents, a copy that is wrong fails, andcopyverifies.This was #112, moved here so that one CI run covers all three; together they unblock the stack #93 to #99, whose assertions jobs fail only on
cvc5_memory_limit.cppand whose macOS job failed on this test.