GaloisInc / crucible

Crucible is a library for symbolic simulation of imperative programs
684 stars 44 forks source link

SV-COMP: Missing overrides mega-issue #941

Open RyanGlScott opened 2 years ago

RyanGlScott commented 2 years ago

crux-llvm-svcomp fails to verify certain SV-COMP programs due to missing overrides. This issue exists to categorize which functions were responsible for missing overrides most of the time. Here are the results for unreach-call:

And for no-overflow:

Some of these functions have their own, more specific issues dedicated to them. For each function, I've made an effort to include a link to the relevant issue in its list entry.

Some of these may be "wontfix". For example, __VERIFIER_nondet_charp's inclusion is dubious—see https://github.com/GaloisInc/crucible/issues/842#issuecomment-922972806. I'm also skeptical of the inclusion of functions like ldv_xmalloc and smp_send_req.

travitch commented 2 years ago

Do you have a sense for what behavior is expected for the IO operations here? Do they just "succeed" and return arbitrary bytes?

RyanGlScott commented 2 years ago

A good question. I took a brief look at some of the call sites for fflush and fopen in these benchmarks:

Bottom line: the behavior of fopen and fflush doesn't seem to matter that much for these benchmarks. I suppose we can make them behave in whatever way is most convenient.

robdockins commented 2 years ago

Well, purely by the numbers, it's clear that memcmp is the biggest bang-for-buck, followed by snprintf probably.