Skip to content

Prefix property descriptions of panics with "Panic:" #4045

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

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
FAILURE\
Description: "assertion failed: arr.len() != 3"
Description: "Panic: assertion failed: arr.len() != 3"
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
SUCCESS\
Description: "assertion failed: sum == 6"
Description: "Panic: assertion failed: sum == 6"
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
UNDETERMINED\
Description: "assertion failed: x == 0"
Description: "Panic: assertion failed: x == 0"
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
UNREACHABLE\
Description: "assertion failed: x < 8"
Description: "Panic: assertion failed: x < 8"
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@ impl GotocCtx<'_> {
// If there is one in the MIR, use it; otherwise, explain that we can't.
assert!(!fargs.is_empty(), "Panic requires a string message");
let msg = self.extract_const_message(&fargs[0]).unwrap_or(String::from(
"This is a placeholder message; Kani doesn't support message formatted at runtime",
"Panic: This is a placeholder message; Kani doesn't support message formatted at runtime",
));
self.codegen_fatal_error(PropertyClass::Assertion, &msg, span)
}
Expand Down
13 changes: 7 additions & 6 deletions kani-compiler/src/codegen_cprover_gotoc/codegen/statement.rs
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,7 @@ impl GotocCtx<'_> {
// "index out of bounds: the length is {len} but the index is {index}",
// but CBMC only accepts static messages so we don't add values to the message.
(
"index out of bounds: the length is less than or equal to the given index",
"Panic: index out of bounds: the length is less than or equal to the given index".to_string(),
PropertyClass::Assertion,
)
}
Expand All @@ -270,22 +270,23 @@ impl GotocCtx<'_> {
// Generate a generic one here.
(
"misaligned pointer dereference: address must be a multiple of its type's \
alignment",
alignment".to_string(),
PropertyClass::SafetyCheck,
)
}
// For all other assert kind we can get the static message.
AssertMessage::NullPointerDereference => {
(msg.description().unwrap(), PropertyClass::SafetyCheck)
(msg.description().unwrap().to_string(), PropertyClass::SafetyCheck)
}
AssertMessage::Overflow { .. }
| AssertMessage::OverflowNeg { .. }
| AssertMessage::DivisionByZero { .. }
| AssertMessage::RemainderByZero { .. }
| AssertMessage::ResumedAfterReturn { .. }
| AssertMessage::ResumedAfterPanic { .. } => {
(msg.description().unwrap(), PropertyClass::Assertion)
}
| AssertMessage::ResumedAfterPanic { .. } => (
"Panic: ".to_owned() + msg.description().unwrap(),
PropertyClass::Assertion,
),
};

let (msg_str, reach_stmt) =
Expand Down
14 changes: 12 additions & 2 deletions kani-compiler/src/codegen_cprover_gotoc/overrides/hooks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,12 @@ impl GotocHook for Assert {
Stmt::block(
vec![
reach_stmt,
gcx.codegen_assert_assume(cond, PropertyClass::Assertion, &msg, caller_loc),
gcx.codegen_assert_assume(
cond,
PropertyClass::Assertion,
&("Panic: ".to_owned() + &msg),
caller_loc,
),
Stmt::goto(bb_label(target), caller_loc),
],
caller_loc,
Expand Down Expand Up @@ -272,7 +277,12 @@ impl GotocHook for Check {
Stmt::block(
vec![
reach_stmt,
gcx.codegen_assert(cond, PropertyClass::Assertion, &msg, caller_loc),
gcx.codegen_assert(
cond,
PropertyClass::Assertion,
&("Panic: ".to_owned() + &msg),
caller_loc,
),
Stmt::goto(bb_label(target), caller_loc),
],
caller_loc,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
Status: SUCCESS\
Description: "assertion failed: x * y == 33"
Description: "Panic: assertion failed: x * y == 33"
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
Status: SUCCESS\
Description: "assertion failed: x == 98"
Description: "Panic: assertion failed: x == 98"
2 changes: 1 addition & 1 deletion tests/cargo-kani/assert-reach/test.expected
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
UNREACHABLE\
Description: "assertion failed: z == x - 1"
Description: "Panic: assertion failed: z == x - 1"
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Status: SUCCESS\
Description: "assertion failed: C.x == 0"
Description: "Panic: assertion failed: C.x == 0"

VERIFICATION:- SUCCESSFUL
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Status: SUCCESS\
Description: "assertion failed: C.x == 0"
Description: "Panic: assertion failed: C.x == 0"

VERIFICATION:- SUCCESSFUL
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Status: SUCCESS\
Description: "assertion failed: range.is_none() || !range.as_ref().unwrap().is_empty()"
Description: "Panic: assertion failed: range.is_none() || !range.as_ref().unwrap().is_empty()"

VERIFICATION:- SUCCESSFUL
2 changes: 1 addition & 1 deletion tests/cargo-kani/itoa_dep/check_unsigned.expected
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Status: SUCCESS\
Description: "assertion failed: result == &output"
Description: "Panic: assertion failed: result == &output"

VERIFICATION:- SUCCESSFUL
2 changes: 1 addition & 1 deletion tests/cargo-kani/nested-dirs/crate1/a_check.expected
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
Status: SUCCESS\
Description: "assertion failed: v.len() == 3"
Description: "Panic: assertion failed: v.len() == 3"
VERIFICATION:- SUCCESSFUL
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
Status: SUCCESS\
Description: "assertion failed: result == 4"
Description: "Panic: assertion failed: result == 4"
VERIFICATION:- SUCCESSFUL
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Status: SUCCESS\
Description: "assertion failed: y - x == 0"
Description: "Panic: assertion failed: y - x == 0"

VERIFICATION:- SUCCESSFUL
2 changes: 1 addition & 1 deletion tests/cargo-kani/output-format/main.expected
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Description: "assertion failed: 1 + 1 == 2"
Description: "Panic: assertion failed: 1 + 1 == 2"
2 changes: 1 addition & 1 deletion tests/cargo-kani/small-vec/check_vec.expected
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Status: SUCCESS\
Description: "assertion failed: c < char::MAX"\
Description: "Panic: assertion failed: c < char::MAX"\
in function check_vec

VERIFICATION:- SUCCESSFUL
10 changes: 5 additions & 5 deletions tests/cargo-kani/stubbing-ws-packages/expected
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
Checking harness verify::check_no_stub...
Status: SUCCESS\
Description: "assertion failed: config == StubConfig::NoStub"
Description: "Panic: assertion failed: config == StubConfig::NoStub"
VERIFICATION:- SUCCESSFUL

Checking harness verify::check_stub_1...
Status: SUCCESS\
Description: "assertion failed: config == StubConfig::Stub1"
Description: "Panic: assertion failed: config == StubConfig::Stub1"
VERIFICATION:- SUCCESSFUL

Checking harness verify_top::check_no_stub...
Status: SUCCESS\
Description: "assertion failed: stub_id() == None"
Description: "Panic: assertion failed: stub_id() == None"
VERIFICATION:- SUCCESSFUL

Checking harness verify_top::check_stub_1...
Status: SUCCESS\
Description: "assertion failed: stub_id() == Some(1)"
Description: "Panic: assertion failed: stub_id() == Some(1)"
VERIFICATION:- SUCCESSFUL

Checking harness verify_top::check_stub_2...
Status: SUCCESS\
Description: "assertion failed: stub_id() == Some(2)"
Description: "Panic: assertion failed: stub_id() == Some(2)"

Complete - 5 successfully verified harnesses, 0 failures, 5 total.
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
fixed::VecDeque::<u8>::handle_capacity_increase.assertion\
Status: UNREACHABLE\
Description: "assertion failed: self.head < self.tail"
Description: "Panic: assertion failed: self.head < self.tail"

fixed::VecDeque::<u8>::handle_capacity_increase.assertion\
Status: UNREACHABLE\
Description: "assertion failed: self.head < self.cap()"
Description: "Panic: assertion failed: self.head < self.cap()"

fixed::VecDeque::<u8>::handle_capacity_increase.assertion\
Status: UNREACHABLE\
Description: "assertion failed: self.tail < self.cap()"
Description: "Panic: assertion failed: self.tail < self.cap()"

fixed::VecDeque::<u8>::handle_capacity_increase.assertion\
Status: UNREACHABLE\
Description: "assertion failed: self.cap().count_ones() == 1"
Description: "Panic: assertion failed: self.cap().count_ones() == 1"

VERIFICATION:- SUCCESSFUL
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
cve::VecDeque::<u8>::handle_capacity_increase.assertion\
- Status: FAILURE\
- Description: "assertion failed: self.head < self.cap()"
- Description: "Panic: assertion failed: self.head < self.cap()"
Location: src/cve.rs

Failed Checks: assertion failed: self.head < self.cap()
Failed Checks: Panic: assertion failed: self.head < self.cap()
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
cve::VecDeque::<u8>::handle_capacity_increase.assertion\
Status: SUCCESS\
Description: "assertion failed: self.head < self.cap()"\
Description: "Panic: assertion failed: self.head < self.cap()"\
Location: src/cve.rs

cve::VecDeque::<u8>::handle_capacity_increase.assertion\
Status: SUCCESS\
Description: "assertion failed: self.tail < self.cap()"\
Description: "Panic: assertion failed: self.tail < self.cap()"\
Location: src/cve.rs

cve::VecDeque::<u8>::handle_capacity_increase.assertion\
Status: SUCCESS\
Description: "assertion failed: self.cap().count_ones() == 1"\
Description: "Panic: assertion failed: self.cap().count_ones() == 1"\
Location: src/cve.rs

VERIFICATION:- SUCCESSFUL
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
fixed::VecDeque::<u8>::handle_capacity_increase.assertion\
Status: SUCCESS\
Description: "assertion failed: self.head < self.cap()"\
Description: "Panic: assertion failed: self.head < self.cap()"\
Location: src/fixed.rs

fixed::VecDeque::<u8>::handle_capacity_increase.assertion\
Status: SUCCESS\
Description: "assertion failed: self.tail < self.cap()"\
Description: "Panic: assertion failed: self.tail < self.cap()"\
Location: src/fixed.rs

fixed::VecDeque::<u8>::handle_capacity_increase.assertion\
Status: SUCCESS\
Description: "assertion failed: self.cap().count_ones() == 1"\
Description: "Panic: assertion failed: self.cap().count_ones() == 1"\
Location: src/fixed.rs

VERIFICATION:- SUCCESSFUL
Expand Down
2 changes: 1 addition & 1 deletion tests/expected/abort/expected
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Status: UNREACHABLE\
Description: ""This is unreachable""\
Description: "Panic: "This is unreachable""\
in function main

Status: FAILURE\
Expand Down
2 changes: 1 addition & 1 deletion tests/expected/arbitrary/duration.expected
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Status: SATISFIED\
Description: "Max nanos"

Status: SUCCESS\
Description: ""Is Zero""
Description: "Panic: "Is Zero""

6 of 6 cover properties satisfied
1 successfully verified harnesses, 0 failures
10 changes: 5 additions & 5 deletions tests/expected/arbitrary/ptrs/pointer_generator.expected
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
Checking harness check_arbitrary_ptr...

Status: SUCCESS\
Description: ""OutOfBounds""
Description: "Panic: "OutOfBounds""

Status: SUCCESS\
Description: ""InBounds""
Description: "Panic: "InBounds""

Status: SUCCESS\
Description: ""NullPtr""
Description: "Panic: "NullPtr""

Status: FAILURE\
Description: ""DeadObject""
Description: "Panic: "DeadObject""

Status: SATISFIED\
Description: "Dangling"

Status: UNREACHABLE\
Description: ""Dangling write""
Description: "Panic: "Dangling write""

Verification failed for - check_arbitrary_ptr
8 changes: 4 additions & 4 deletions tests/expected/arbitrary/ptrs/pointer_inbounds.expected
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ Description: "Smaller"
Checking harness check_alignment...

Status: SUCCESS\
Description: ""Aligned""
Description: "Panic: "Aligned""

Status: SUCCESS\
Description: ""Unaligned""
Description: "Panic: "Unaligned""

Checking harness check_inbounds_initialized...

Status: SUCCESS\
Description: ""ValidRead""
Description: "Panic: "ValidRead""

Checking harness check_inbounds...

Expand All @@ -34,6 +34,6 @@ Status: SATISFIED\
Description: "Initialized"

Status: SUCCESS\
Description: ""ValidWrite""
Description: "Panic: "ValidWrite""

Complete - 4 successfully verified harnesses, 0 failures, 4 total.
2 changes: 1 addition & 1 deletion tests/expected/arith_checks/expected
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Failed Checks: attempt to subtract with overflow
Failed Checks: Panic: attempt to subtract with overflow
8 changes: 4 additions & 4 deletions tests/expected/assert-eq-chained/expected
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
Status: SUCCESS\
Description: "assertion failed: x > 3 == true"
Description: "Panic: assertion failed: x > 3 == true"

Status: SUCCESS\
Description: "assertion failed: x == 1 == false"
Description: "Panic: assertion failed: x == 1 == false"

Status: SUCCESS\
Description: "assertion failed: x < 10 != false"
Description: "Panic: assertion failed: x < 10 != false"

Status: FAILURE\
Description: "assertion failed: x == 7 != false"
Description: "Panic: assertion failed: x == 7 != false"

VERIFICATION:- FAILED
6 changes: 3 additions & 3 deletions tests/expected/assert-location/assert-false/expected
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
line 18 assertion failed: false: FAILURE
line 23 "{}", s: FAILURE
line 27 "Fail with custom static message": FAILURE
line 18 Panic: assertion failed: false: FAILURE
line 23 Panic: "{}", s: FAILURE
line 27 Panic: "Fail with custom static message": FAILURE
4 changes: 2 additions & 2 deletions tests/expected/assert-location/debug-assert/expected
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
line 13 "This should fail and stop the execution": FAILURE
line 14 "This should be unreachable": SUCCESS
line 13 Panic: "This should fail and stop the execution": FAILURE
line 14 Panic: "This should be unreachable": SUCCESS
6 changes: 3 additions & 3 deletions tests/expected/coroutines/expected
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
SUCCESS\
Description: "assertion failed: res == CoroutineState::Yielded(val)"
Description: "Panic: assertion failed: res == CoroutineState::Yielded(val)"

SUCCESS\
Description: "assertion failed: res == CoroutineState::Complete(!val)"
Description: "Panic: assertion failed: res == CoroutineState::Complete(!val)"

UNREACHABLE\
Description: "coroutine resumed after completion"
Description: "Panic: coroutine resumed after completion"

VERIFICATION:- SUCCESSFUL
2 changes: 1 addition & 1 deletion tests/expected/coroutines/pin/expected
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Description: "unexpected yield from resume"\
in function main

UNREACHABLE\
Description: "coroutine resumed after completion"
Description: "Panic: coroutine resumed after completion"
in function main::{closure#0}

VERIFICATION:- SUCCESSFUL
Loading
Loading