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

SV-COMP: Missing overrides mega-issue #941

Open
33 tasks
RyanGlScott opened this issue Dec 10, 2021 · 3 comments
Open
33 tasks

SV-COMP: Missing overrides mega-issue #941

RyanGlScott opened this issue Dec 10, 2021 · 3 comments
Labels
crucible crux llvm SV-COMP Issues related to making crux eligible to participate in SV-COMP.

Comments

@RyanGlScott
Copy link
Contributor

RyanGlScott commented Dec 10, 2021

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 #842 (comment). I'm also skeptical of the inclusion of functions like ldv_xmalloc and smp_send_req.

@RyanGlScott RyanGlScott added llvm crucible crux SV-COMP Issues related to making crux eligible to participate in SV-COMP. labels Dec 10, 2021
@travitch
Copy link
Contributor

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

@RyanGlScott
Copy link
Contributor Author

RyanGlScott commented Dec 10, 2021

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

  • busybox-1.22.0/hostid.c calls fflush on NULL, which flushes all open output streams. This is expected to pass on the no-overflow category, which seems reasonable I guess.
  • loop-industry-pattern/aiob_1.c, loop-industry-pattern/ofuf_1.c, and friends use fopen to open a file named in.eds (which, AFAICT, doesn't exist) with r mode. If the fopen fails, there is no way to ever reach_error(). If the fopen succeeds, the rest of the program runs. As far as I can tell, nothing in the remainder of the program ever uses the FILE* that fopen returns.

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
Copy link
Contributor

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
crucible crux llvm SV-COMP Issues related to making crux eligible to participate in SV-COMP.
Projects
None yet
Development

No branches or pull requests

3 participants