Skip to content
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 incremental analysis on some commits of chrony #954

Closed
jerhard opened this issue Dec 21, 2022 · 2 comments · Fixed by #957
Closed

Fixpoint not reached in incremental analysis on some commits of chrony #954

jerhard opened this issue Dec 21, 2022 · 2 comments · Fixed by #957
Labels
Milestone

Comments

@jerhard
Copy link
Member

jerhard commented Dec 21, 2022

On chrony, when analyzing the commit a2372b0c3abfc85d11c1684c0fb6370cc329e5c4 non-incrementally, and analyzing the child commit 3cef7f975cd2ecdceb62c72dd31f96c515744acc incrementally, the fixpoint is not reached during the analysis of the child commit. This is with Goblint on the branch interactive_benchmarking (29d9c21).

Command line for non-incremental analysis of child-commit:

./goblint --conf conf/custom/figlet.json -v --disable incremental.load --enable incremental.save ../chrony 

Command line for incremental analysis of child commit:

./goblint --conf conf/custom/figlet.json -v --enable incremental.load --disable incremental.save ../chrony 

To build the compile db before the analysis, the following script must be run within the chrony directory:

#!/usr/bin/env bash
git clean -fdx
./configure
make -j 1 chronyd | tee build.log
compiledb --parse build.log
Message about not reached Fixpoint
Postsolving


[Warning][Unsound] No suitable function to be called at call site. Continuing with state before call. (chrony/sys_generic.c:305:5-305:66)
[Warning][Unsound] Unknown call to function *(ptr->handler). (chrony/local.c:633:6-633:46)
[Warning][Unsound] No suitable function to be called at call site. Continuing with state before call. (chrony/local.c:633:6-633:46)
[Warning][Unsound] Unknown call to function *(ptr->handler). (chrony/local.c:291:6-291:76)
[Warning][Unsound] No suitable function to be called at call site. Continuing with state before call. (chrony/local.c:291:6-291:76)
[Warning][Unsound] Unknown call to function *((inst->driver)->init). (chrony/refclock.c:247:7-247:54)
[Warning][Unsound] No suitable function to be called at call site. Continuing with state before call. (chrony/refclock.c:247:7-247:54)
[Warning][Unsound] No suitable function to be called at call site. Continuing with state before call. (chrony/socket.c:386:5-386:58)
[Warning][Unsound] No suitable function to be called at call site. Continuing with state before call. (chrony/sys_generic.c:149:3-149:45)
[Warning][Unsound] No suitable function to be called at call site. Continuing with state before call. (chrony/sys_generic.c:150:3-150:31)
Fixpoint not reached at entry state of LCL_CanSystemLeap (52620) on chrony/local.c:690:1-694:1
Origin: node 11617 "tmp___5" on chrony/reference.c:257:7-257:62
 Solver computed:
 bot
 Side-effect:
 {([Unit:(), Reversed (top or Set (varinfo)):{}, top or Set (Set (exp)):{},
    Reversed (top or Set (exp)):{}, Unit:(),
    Reversed (top or Set (Normal Lvals * booleans)):{}, Unit:(), Unit:(),
    top or Set (variables):{line}, booleans:False, MT mode:Singlethreaded,
    Thread * lifted created and Unit:(main, bot),
    value domain * array partitioning deps * Vars with Weak Update * Unit:(mapping {
                                                                             }, mapping {
                                                                                  }, {}, ()),
    top or std * lifted node:(mapping {
                                }, Unknown node), Unit:()], mapping {
                                                              })}
 Difference: {([Unit:(), Reversed (top or Set (varinfo)):{},
                top or Set (Set (exp)):{}, Reversed (top or Set (exp)):{},
                Unit:(), Reversed (top or Set (Normal Lvals * booleans)):{},
                Unit:(), Unit:(), top or Set (variables):{line}, booleans:False,
                MT mode:Singlethreaded,
                Thread * lifted created and Unit:(main, bot),
                value domain * array partitioning deps * Vars with Weak Update * Unit:(mapping {
                                                                                         }, mapping {
                                                                                              }, {}, ()),
                top or std * lifted node:(mapping {
                                            }, Unknown node), Unit:()], mapping {
                                                                          })} instead of bot
Fixpoint not reached at node 6859 "LCL_ReadRawTime(& raw);" on chrony/local.c:696:3-696:24
 Solver computed:
 bot
 Right-Hand-Side:
 Dead code
 Difference: Dead code instead of bot
Fixpoint not reached at node 6858 "drv_set_leap" on chrony/local.c:693:3-693:30
 Solver computed:
 bot
 Right-Hand-Side:
 Dead code
 Difference: Dead code instead of bot
Fixpoint not reached at node 6860 "LCL_GetOffsetCorrection(& raw, & correction,
                                                           (double *)((void *)0));" on chrony/local.c:697:3-697:50
 Solver computed:
 bot
 Right-Hand-Side:
 Dead code
 Difference: Dead code instead of bot
Fixpoint not reached at node 6861 "LCL_AccumulateOffset(correction, 0.0);" on chrony/local.c:698:3-698:40
 Solver computed:
 bot
 Right-Hand-Side:
 Dead code
 Difference: Dead code instead of bot
Fixpoint not reached at node 6862 "return;" on chrony/local.c:699:1-699:1
 Solver computed:
 bot
 Right-Hand-Side:
 Dead code
 Difference: Dead code instead of bot
Fixpoint not reached at call of LCL_CanSystemLeap (52620) on chrony/local.c:690:1-694:1
 Solver computed:
 bot
 Right-Hand-Side:
 {([Unit:(), Reversed (top or Set (varinfo)):{}, top or Set (Set (exp)):{},
    Reversed (top or Set (exp)):{}, Unit:(),
    Reversed (top or Set (Normal Lvals * booleans)):{}, Unit:(), Unit:(),
    top or Set (variables):{line}, booleans:False, MT mode:Singlethreaded,
    Thread * lifted created and Unit:(main, bot),
    value domain * array partitioning deps * Vars with Weak Update * Unit:(mapping {
                                                                             Temp {
                                                                               RETURN ->
                                                                                 (Unknown int([0,1]),[0,1])
                                                                             }
                                                                           }, mapping {
                                                                                  }, {}, ()),
    top or std * lifted node:(mapping {
                                }, Unknown node), Unit:()], mapping {
                                                              })}
Fixpoint not reached at call of LCL_CanSystemLeap (52620) on chrony/local.c:690:1-694:1
 Solver computed:
 bot
 Right-Hand-Side:
 {([Unit:(), Reversed (top or Set (varinfo)):{}, top or Set (Set (exp)):{},
    Reversed (top or Set (exp)):{}, Unit:(),
    Reversed (top or Set (Normal Lvals * booleans)):{}, Unit:(), Unit:(),
    top or Set (variables):{line}, booleans:False, MT mode:Singlethreaded,
    Thread * lifted created and Unit:(main, bot),
    value domain * array partitioning deps * Vars with Weak Update * Unit:(mapping {
                                                                             Temp {
                                                                               RETURN ->
                                                                                 (Unknown int([0,1]),[0,1])
                                                                             }
                                                                           }, mapping {
                                                                                  }, {}, ()),
    top or std * lifted node:(mapping {
                                }, Unknown node), Unit:()], mapping {
                                                              })}
 Difference: {([Unit:(), Reversed (top or Set (varinfo)):{},
                top or Set (Set (exp)):{}, Reversed (top or Set (exp)):{},
                Unit:(), Reversed (top or Set (Normal Lvals * booleans)):{},
                Unit:(), Unit:(), top or Set (variables):{line}, booleans:False,
                MT mode:Singlethreaded,
                Thread * lifted created and Unit:(main, bot),
                value domain * array partitioning deps * Vars with Weak Update * Unit:(mapping {
                                                                                         Temp {
                                                                                           RETURN ->
                                                                                             (Unknown int([0,1]),[0,1])
                                                                                         }
                                                                                       }, mapping {
                                                                                              }, {}, ()),
                top or std * lifted node:(mapping {
                                            }, Unknown node), Unit:()], mapping {
                                                                          })} instead of bot

@jerhard
Copy link
Member Author

jerhard commented Dec 21, 2022

The Dead code instead of bot that is produced here in the postsolver is noticeable. This occurs in 16 our of 18 commits for which the Fixpoint was not reached on chrony.

@jerhard
Copy link
Member Author

jerhard commented Dec 21, 2022

A possibly different Fixpoint issue occurs on the same repo, with the same settings on the incremental analyis of the child commit on other commits of chrony. Here, the Dead code instead of bot does not appear. It may or may not relate to the same underlying problem.

Parent commit:
d69ac0718366995bdd50066723c746dc0f08f344

Child commit:
1b82604f615f5ac35992697c0bea8ba7092172d1

Fixpoint not reached message
Fixpoint not reached at node 3490 "return;" on chrony/conf.c:447:1-447:1
 Solver computed:
 {([Unit:(), Reversed (top or Set (varinfo)):{}, top or Set (Set (exp)):{},
    Reversed (top or Set (exp)):{}, Unit:(),
    Reversed (top or Set (Normal Lvals * booleans)):{}, Unit:(), Unit:(),
    top or Set (variables):{line}, booleans:False, MT mode:Singlethreaded,
    Thread * lifted created and Unit:(main, bot),
    value domain * array partitioning deps * Vars with Weak Update * Unit:(mapping {
                                                                             Global {
                                                                               include_level ->
                                                                                 (Unknown int([-31,31]),[-2147483648,2147483647])
                                                                             }
                                                                             Local {
                                                                               in ->
                                                                                 {?, NULL}
                                                                               i ->
                                                                                 (Unknown int([-31,31]),[-2147483648,2147483647])
                                                                             }
                                                                             Parameter {
                                                                               filename___0 ->
                                                                                 {?, NULL}
                                                                             }
                                                                             Temp {
                                                                               tmp ->
                                                                                 {?, NULL}
                                                                             }
                                                                           }, mapping {
                                                                                  }, {}, ()),
    top or std * lifted node:(mapping {
                                }, Unknown node), Unit:()], mapping {
                                                              })}
 Right-Hand-Side:
 {([Unit:(), Reversed (top or Set (varinfo)):{}, top or Set (Set (exp)):{},
    Reversed (top or Set (exp)):{}, Unit:(),
    Reversed (top or Set (Normal Lvals * booleans)):{}, Unit:(), Unit:(),
    top or Set (variables):{line}, booleans:False, MT mode:Singlethreaded,
    Thread * lifted created and Unit:(main, bot),
    value domain * array partitioning deps * Vars with Weak Update * Unit:(mapping {
                                                                             Global {
                                                                               print_config ->
                                                                                 (1,[1,1])
                                                                               include_level ->
                                                                                 (Unknown int([-31,31]),[-2147483648,2147483647])
                                                                             }
                                                                             Local {
                                                                               in ->
                                                                                 {?, NULL}
                                                                               i ->
                                                                                 (Unknown int([-31,31]),[-2147483648,2147483647])
                                                                             }
                                                                             Parameter {
                                                                               filename___0 ->
                                                                                 {?, NULL}
                                                                             }
                                                                             Temp {
                                                                               tmp ->
                                                                                 {?, NULL}
                                                                             }
                                                                           }, mapping {
                                                                                  }, {}, ()),
    top or std * lifted node:(mapping {
                                }, Unknown node), Unit:()], mapping {
                                                              })}
 Difference: ([Unit:(), Reversed (top or Set (varinfo)):{},
               top or Set (Set (exp)):{}, Reversed (top or Set (exp)):{},
               Unit:(), Reversed (top or Set (Normal Lvals * booleans)):{},
               Unit:(), Unit:(), top or Set (variables):{line}, booleans:False,
               MT mode:Singlethreaded,
               Thread * lifted created and Unit:(main, bot),
               value domain * array partitioning deps * Vars with Weak Update * Unit:(mapping {
                                                                                        Global {
                                                                                          print_config ->
                                                                                            (1,[1,1])
                                                                                          include_level ->
                                                                                            (Unknown int([-31,31]),[-2147483648,2147483647])
                                                                                        }
                                                                                        Local {
                                                                                          in ->
                                                                                            {?, NULL}
                                                                                          i ->
                                                                                            (Unknown int([-31,31]),[-2147483648,2147483647])
                                                                                        }
                                                                                        Parameter {
                                                                                          filename___0 ->
                                                                                            {?, NULL}
                                                                                        }
                                                                                        Temp {
                                                                                          tmp ->
                                                                                            {?, NULL}
                                                                                        }
                                                                                      }, mapping {
                                                                                             }, {}, ()),
               top or std * lifted node:(mapping {
                                           }, Unknown node), Unit:()], mapping {
                                                                         }):
 not leq ([Unit:(), Reversed (top or Set (varinfo)):{},
           top or Set (Set (exp)):{}, Reversed (top or Set (exp)):{}, Unit:(),
           Reversed (top or Set (Normal Lvals * booleans)):{}, Unit:(), Unit:(),
           top or Set (variables):{line}, booleans:False,
           MT mode:Singlethreaded, Thread * lifted created and Unit:(main, bot),
           value domain * array partitioning deps * Vars with Weak Update * Unit:(mapping {
                                                                                    Global {
                                                                                      include_level ->
                                                                                        (Unknown int([-31,31]),[-2147483648,2147483647])
                                                                                    }
                                                                                    Local {
                                                                                      in ->
                                                                                        {?, NULL}
                                                                                      i ->
                                                                                        (Unknown int([-31,31]),[-2147483648,2147483647])
                                                                                    }
                                                                                    Parameter {
                                                                                      filename___0 ->
                                                                                        {?, NULL}
                                                                                    }
                                                                                    Temp {
                                                                                      tmp ->
                                                                                        {?, NULL}
                                                                                    }
                                                                                  }, mapping {
                                                                                         }, {}, ()),
           top or std * lifted node:(mapping {
                                       }, Unknown node), Unit:()], mapping {
                                                                     }) because Map: print_config =
 compound: (1,[1,1]) not same type as Uninitialized. 

@sim642 sim642 added the bug label Dec 21, 2022
@sim642 sim642 added this to the v2.2.0 milestone Apr 5, 2023
sim642 added a commit to sim642/opam-repository that referenced this issue Sep 13, 2023
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).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants