-
Notifications
You must be signed in to change notification settings - Fork 84
Add Mopsa-like Warning Selectivity Reporting #1838
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
base: master
Are you sure you want to change the base?
Conversation
|
There should be a reference added to Raphael Monat's paper proposing this approach. |
|
I think it's this one: https://inria.hal.science/hal-04652657v2 Should I add it to the code or just to the PR? |
|
Yes! Please add it to the code as well! |
Discovered in #1838 (comment). Should be redundant due to #1764.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This PR adds Mopsa-like warning selectivity reporting to Goblint, based on a research paper by Raphaël Monat et al. The feature tracks all checks performed during analysis and categorizes them as Error (will definitely fail), Warning (might fail), or Safe (cannot fail). This provides more detailed information about the analyzer's findings beyond traditional warning messages.
Key changes:
- Introduces a new
Checksmodule to track and export check results - Adds "dashboard" output format that includes files, timing, and check results as JSON
- Integrates check tracking throughout the codebase for integer overflow, array bounds, division by zero, assertions, memory access, double free, and string literal writes
Reviewed changes
Copilot reviewed 13 out of 13 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| src/common/util/checks.ml | New module implementing check tracking with Kind (Error/Warning/Safe) and Category enums, hash-based storage, and JSON export |
| src/util/timing/goblint_timing_intf.ml | Adds root_with_current function to get timing tree with in-progress resources |
| src/framework/analysisResultOutput.ml | Adds "dashboard" output format that exports files, timing, and checks as JSON |
| src/config/options.schema.json | Updates schema to include "dashboard" as a valid result format option |
| src/cdomain/value/cdomains/intDomain0.ml | Adds Checks.warn calls for integer overflow/underflow alongside existing warnings |
| src/cdomain/value/cdomains/int/intDomTuple.ml | Adds Checks.safe calls when overflow checks pass, with no_safe parameter to control reporting |
| src/cdomain/value/cdomains/arrayDomain.ml | Integrates check tracking for array bounds, negative array size, null byte checks, and buffer overflow detection |
| src/cdomain/value/cdomains/addressDomain.ml | Adds checks for writing to string literals |
| src/analyses/useAfterFree.ml | Adds check tracking for double free and use-after-free detection |
| src/analyses/memOutOfBounds.ml | Integrates check tracking throughout memory bounds analysis for various pointer and array access scenarios |
| src/analyses/baseInvariant.ml | Adds check tracking for division by zero in invariant analysis |
| src/analyses/base.ml | Integrates checks for division/modulo by zero, null pointer dereference, and invalid memory deallocation |
| src/analyses/assert.ml | Adds check tracking for assertion success, failure, and unknown outcomes |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
The PR adds a new kind of output inspired by this paper from R. Monat & al: https://inria.hal.science/hal-04652657v2. This output contains all the checks performed by the analyzer and their result of three types:
This output only takes into account the following checks: