Fix for stack overflow problems due large output from Z3. #870
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.
These changes turn
read_out
inask_process
into a tail-recursion, so that OCaml doesn't run into stack overflows.I encountered this problem while dumping proofs from Z3, which sometimes are large (many lines of output). It surprised me that OCaml would run out of stack space relatively quickly, but more importantly it didn't provide any useful error messages (just "segfault (core dumped)" in non-descript thread with empty stack trace (empty even in debug mode)).
I tried catching
Failure _
,Stack_overflow
, and_
inread_out
, but none of this worked; I suppose when the stack is full, OCaml can't find room for a proper error message. I tried setting a pre-allocated Boolean to true upon "with _ -> ...", but even that segfaults before it gets there. If OCaml experts out there know how to make it provide us with a useful error message, please let me know!