Repository navigation
cvc5: GMP's failed allocation is reported as out of memory - #113
Merged
Merged
Conversation
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.
Under
--memory-limit, cvc5 can stop in three ways when an allocation fails. Two were reported as running out of memory; GMP's was not:GMP, cvc5's arithmetic library, calls
abortwith that message when its allocator returns nothing. The message says why the solver stopped, asstd::bad_allocand the SAT solver'sOutOfMemoryExceptiondo, so it now givessolver.memory-limit. This matches Why3's prover drivers, which read a prover's out-of-memory from its output (outofmemorypatterns), as Frama-C's WP reports it.A crash with no such message stays
solver.invocation-failed: cvc5 also segfaults where it dereferences an allocation it did not check, but a segfault need not come from memory. The tooling page now says so. #106 found these crashes: at a few megabytes they happen at limits that differ between versions and builds.Tests
solver_portfolio_process.testruns a fake cvc5 (Inputs/fake_cvc5.py, modegmp) that prints GMP's message and aborts, and expectssolver.memory-limitwith the limit named; its existingcrashmode still expectssolver.invocation-failed. On the base the new check fails: the fake givessolver.invocation-failed (... terminated by signal 6: GNU MP: Cannot allocate memory (size=8)).Docs
Tooling (how cvc5 stops at the limit, and that a crash is no proof of it) and release notes.