-
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
Fixpoint not reached in some incremental runs on chrony #1091
Comments
The fixpoint is not reached at a call:
The line number |
The fixpoint is also not reached for this commit where only a function is added. Goblint accurately detects that only a function definition is added, and there are no |
@stilscher pointed out that this may have to do with anonymous types in C. Indeed, it turns out the type of Previously, there were similar fixpoint issues that were caused by different names and/or |
Something about anonymous structs came up in #678 but maybe that aspect wasn't fixed? |
I had a look at the previously mentioned commit where only a function was added. For the parent commit of that commit, at the node, where the incremental analysis of the child does not reach the fixpoint, the solver computes From this, I would conclude for the child commit, that the right-hand-side that is not subsumed, that yields Computed value in non-incremental run
|
The first commit of Goblint in the recent past where I still have to have a look whether there are other issues at the previous commit that may mask the issue in the previous commit (e.g. if more runs were failing due to other reasons). Edit: With the parent commit of 53938bc, which is d025538, no fixpoint issue appears on the tested |
Undoing the changes to the |
This morning @jerhard and I were able to narrow it down: It is the addition of relifting to the CPA, that causes the analysis to start failing. Curiously, CPA is |
I removed the |
When deactivating the |
That is very strange: You said you are not using partitioned arrays, right? |
Issue #1091 was caused by the join/widen (and corresponding smart operations) for unions in ValueDomain not return the same element. The optimization in PMap that returns the unchanged map when two physically identical maps were joined was thus yielding a different value in the from-scratch run compared to the incremental run.
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).
Using the current
master
, 35 runs of the incremental analysis do not reach the fixpoint on chrony. This occurred with the regular incremental configuration. In all of the 35 runs, the unreached fixpoint is detected at the same code location withinchrony
.In the experiments, it does not manifest in the runs where the incremental postsolver is active (with reluctant incremental analysis on or off).
Difference between rhs and computed solution.
The text was updated successfully, but these errors were encountered: