-
Notifications
You must be signed in to change notification settings - Fork 76
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Allow incremental octagon Apron analysis #558
Comments
If I remember correctly, then indeed octagon implements some serialization/deserialization for its custom OCaml memory blocks, but if that's the case, why do we still get the exception with it? I'm not sure anymore, but maybe |
Yes. What I did in #433 was to write marshal/unmarshal functions in OCaml that converts the Environment back and forth to serializable data structures. A difficulty with patching this directly into the C level Apron is that the var type |
Right, but there isn't really any way to hook into the standard marshal/unmarshal to do that other than implementing the custom operations in C.
I don't see any other simple way of doing that though. If the new fields are added to the end of the struct, then it should still be compatible as long as those functions aren't called (any non-default var implementations would have those pointers uninitialized). But given that so far it has been impossible to serialize vars anyway, there's no existing code that would possibly do that and break. |
Good point! |
@michael-schwarz and I discussed this before – for the server mode, the marshalling is not inherently necessary, so the Apron analysis should work in the incremental server mode. |
I think with some of the changes from #545, it should be possible to make this work quite easily in server mode, because that PR exposes solver data handling functions such that server mode can do things differently. |
rlwrap ./regtest.sh 36 01 --enable server.enabled --enable server.reparse now works in server mode, so this can be considered reasonably done for the time being. If there's ever interest in implementing more marshaling in C inside Apron, then that can be done for non-server-mode incremental analysis, but that's not something on our agenda I think. |
CHANGES: * Add `setjmp`/`longjmp` analysis (goblint/analyzer#887, goblint/analyzer#970, goblint/analyzer#1015, goblint/analyzer#1019). * Refactor race analysis to lazy distribution (goblint/analyzer#1084, goblint/analyzer#1089, goblint/analyzer#1136, goblint/analyzer#1016). * Add thread-unsafe library function call analysis (goblint/analyzer#723, goblint/analyzer#1082). * Add mutex type analysis and mutex API analysis (goblint/analyzer#800, goblint/analyzer#839, goblint/analyzer#1073). * Add interval set domain and string literals domain (goblint/analyzer#901, goblint/analyzer#966, goblint/analyzer#994, goblint/analyzer#1048). * Add affine equalities analysis (goblint/analyzer#592). * Add use-after-free analysis (goblint/analyzer#1050, goblint/analyzer#1114). * Add dead code elimination transformation (goblint/analyzer#850, goblint/analyzer#979). * Add taint analysis for partial contexts (goblint/analyzer#553, goblint/analyzer#952). * Add YAML witness validation via unassume (goblint/analyzer#796, goblint/analyzer#977, goblint/analyzer#1044, goblint/analyzer#1045, goblint/analyzer#1124). * Add incremental analysis rename detection (goblint/analyzer#774, goblint/analyzer#777). * Fix address sets unsoundness (goblint/analyzer#822, goblint/analyzer#967, goblint/analyzer#564, goblint/analyzer#1032, goblint/analyzer#998, goblint/analyzer#1031). * Fix thread escape analysis unsoundness (goblint/analyzer#939, goblint/analyzer#984, goblint/analyzer#1074, goblint/analyzer#1078). * Fix many incremental analysis issues (goblint/analyzer#627, goblint/analyzer#836, goblint/analyzer#835, goblint/analyzer#841, goblint/analyzer#932, goblint/analyzer#678, goblint/analyzer#942, goblint/analyzer#949, goblint/analyzer#950, goblint/analyzer#957, goblint/analyzer#955, goblint/analyzer#954, goblint/analyzer#960, goblint/analyzer#959, goblint/analyzer#1004, goblint/analyzer#558, goblint/analyzer#1010, goblint/analyzer#1091). * Fix server mode for abstract debugging (goblint/analyzer#983, goblint/analyzer#990, goblint/analyzer#997, goblint/analyzer#1000, goblint/analyzer#1001, goblint/analyzer#1013, goblint/analyzer#1018, goblint/analyzer#1017, goblint/analyzer#1026, goblint/analyzer#1027). * Add documentation for configuration JSON schema and OCaml API (goblint/analyzer#999, goblint/analyzer#1054, goblint/analyzer#1055, goblint/analyzer#1053). * Add many library function specifications (goblint/analyzer#962, goblint/analyzer#996, goblint/analyzer#1028, goblint/analyzer#1079, goblint/analyzer#1121, goblint/analyzer#1135, goblint/analyzer#1138). * Add OCaml 5.0 support (goblint/analyzer#1003, goblint/analyzer#945, goblint/analyzer#1162).
Support for incremental runs with the octagon Apron analysis should be added.
Currently, when
incremental.save
is activated, the serialization of Apron analyses results fails, with the following error:Fatal error: exception Invalid_argument("output_value: abstract value (Custom)")
This is due too the fact that the serialization is not natively supported in Apron for
Abstract1.t
values.#433 already allowed serializing these results for comparison, but it did not solve the serialization for the incremental analysis: because in the latter, the marshaling is directly triggered by the solver, without delegating to the analyses domains to allow for special handling.
Since the octagon domain is the only domain that is serializable in Apron, we can only hope to serialize relational domains that are expressible as octagons.
The text was updated successfully, but these errors were encountered: