|
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