|
2 | 2 | - **Feature Request Issue:** <https://github.com/model-checking/kani/issues/600>
|
3 | 3 | - **RFC PR:** <https://github.com/model-checking/kani/pull/2272>
|
4 | 4 | - **Status:** Unstable
|
5 |
| -- **Version:** 0 |
6 |
| -- **Proof-of-concept:** <https://github.com/model-checking/kani/pull/2315> |
| 5 | +- **Version:** 1 |
| 6 | +- **Proof-of-concept:** |
| 7 | + * Version 0: <https://github.com/model-checking/kani/pull/2315> |
| 8 | + * Version 1: <https://github.com/model-checking/kani/pull/2532> |
7 | 9 |
|
8 | 10 | -------------------
|
9 | 11 |
|
@@ -95,20 +97,23 @@ Note that it's important that we provide the user with this feedback:
|
95 | 97 | 2. **(Outcome)**: What's the actual result that Kani produced after the analysis?
|
96 | 98 | This will avoid a potential scenario where the user doesn't know for sure if the attribute has had an effect when verifying the harness.
|
97 | 99 |
|
| 100 | +Therefore, the representation must make clear both the expectation and the outcome. |
98 | 101 | Below, we show how we'll represent this result.
|
99 | 102 |
|
100 |
| -#### Recommended Representation: Changes to overall result |
101 | 103 |
|
102 |
| -The representation must make clear both the expectation and the outcome. |
103 |
| -Moreover, the overall result must change according to the verification results (i.e., the failures that were found). |
| 104 | +#### Recommended Representation: As a Global Condition |
104 | 105 |
|
105 |
| -Using the `#[kani::should_panic]` attribute will return one of the following results: |
106 |
| - 1. `VERIFICATION:- FAILED (encountered no panics, but at least one was expected)` if there were no failures. |
107 |
| - 2. `VERIFICATION:- FAILED (encountered failures other than panics, which were unexpected)` if there were failures but not all them had `prop.property_class() == "assertion"`. |
108 |
| - 3. `VERIFICATION:- SUCCESSFUL (encountered one or more panics as expected)` otherwise. |
| 106 | +The `#[kani::should_panic]` attribute essentially behaves as a property that depends on other properties. |
| 107 | +This makes it well-suited for integration within the framework of [Global Conditions](https://model-checking.github.io/kani/rfc/rfcs/0007-global-conditions.html). |
109 | 108 |
|
110 |
| -Note that the criteria to achieve a `SUCCESSFUL` result depends on all failures having the property class `"assertion"`. |
111 |
| -If they don't, then the failed properties may contain UB, so we return a `FAILED` result instead. |
| 109 | +Using the `#[kani::should_panic]` attribute will enable the global condition with name `should_panic`. |
| 110 | +Following the format for global conditions, the outcome will be one of the following: |
| 111 | + 1. `` - `should_panic`: FAILURE (encountered no panics, but at least one was expected)`` if there were no failures. |
| 112 | + 2. `` - `should_panic`: FAILURE (encountered failures other than panics, which were unexpected)`` if there were failures but not all them had `prop.property_class() == "assertion"`. |
| 113 | + 3. `` - `should_panic`: SUCCESS (encountered one or more panics as expected)`` otherwise. |
| 114 | + |
| 115 | +Note that the criteria to achieve a `SUCCESS` status depends on all failed properties having the property class `"assertion"`. |
| 116 | +If they don't, then the failed properties may contain UB, so we return a `FAILURE` status instead. |
112 | 117 |
|
113 | 118 | ### Multiple Harnesses
|
114 | 119 |
|
|
0 commit comments