goblint / analyzer

Static analysis framework for C
https://goblint.in.tum.de
MIT License
160 stars 72 forks source link

Tracking Benchmark Changes for Thesis #1417

Open michael-schwarz opened 2 months ago

michael-schwarz commented 2 months ago

The branch I used to benchmark for my thesis diverges at d8be117080e1f6d0bdc9e8331e888f2d3ac2cf7c.

This draft MR is not intended to be merged but should allow me to keep an overview of the changes and see what should be maybe back-ported.

Back-ported:

To consider:

Hotfixes:

michael-schwarz commented 2 months ago
[Debug] cava.c:1507:9-1507:27 (alloc@sid:459@tid:[main]): write less precise than mine-W-interval
  write: (value:⊤, size:1024, no zeroinit:true)
  less precise than
  mine-W-interval: (value:⊤, size:1024, no zeroinit:true)
  diff: 1024 instead of 1024
 [Debug] cava.c:3552:5-3553:47 (alloc@sid:2113@tid:[main, input_fifo@cava.c:1931:5-1932:83]): protection more precise than write
  protection: Uninitialized
  more precise than
  write: (trivial arrays:Array: (value:Uninitialized, size:4096, no zeroinit:false), IntDomLifter(intdomtuple):1)
  reverse diff: compound: (trivial arrays:Array: (value:Uninitialized, size:4096, no zeroinit:false), IntDomLifter(intdomtuple):1) not same type as Uninitialized

both seem fishy.

sim642 commented 2 months ago

cava has a lot of missing library functions though, so how exactly are you intending to analyze it without losing all precision from invalidations? I'm not sure how correctly those invalidations work with the more involved privatizations.

michael-schwarz commented 1 week ago

I now added the same handling we have for the non-relational privatizations upon threadenter with unknown function also to the relational privatization.

While that may be of questionable nature, handling this differently in different privatizations is even more so.