You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#![feature(ptr_metadata)]use std::ptr::NonNull;traitSampleTrait{fnget_value(&self) -> i32;}structSampleStruct{value:i32,}implSampleTraitforSampleStruct{fnget_value(&self) -> i32{self.value}}#[cfg(kani)]#[kani::proof]fnmain(){// Create a SampleTrait object from SampleStructlet sample_struct = SampleStruct{value: kani::any()};let trait_object:&dynSampleTrait = &sample_struct;// Get the raw data pointer and metadata for the trait objectlet trait_ptr = NonNull::new(trait_object as*constdynSampleTraitas*mut()).unwrap();let metadata = std::ptr::metadata(trait_object);// Create NonNull<dyn SampleTrait> from the data pointer and metadatalet nonnull_trait_object:NonNull<dynSampleTrait> = NonNull::from_raw_parts(trait_ptr, metadata);unsafe{// Ensure trait method and member is preserved
kani::assert( trait_object.get_value() == nonnull_trait_object.as_ref().get_value(),"trait method and member must correctly preserve");}}
using the following command line invocation:
cargo kani
with Kani version: 0.56.0
Platform: MacOS M2
I expected to see verification results but received the following compilation error:
error: Failed to compile `kani_bugs` due to an internal compiler error.: error: internal compiler error: Kani unexpectedly panicked at panicked at cprover_bindings/src/goto_program/stmt.rs:172:9:
assertion `left == right` failed: Error: assign statement with unequal types lhs StructTag("tag-_80076268767659083946749461790619121878::FatPtr") rhs Pointer { typ: TypeDef { name: "_80076268767659083946749461790619121878Inner", typ: StructTag("tag-Unit") } }
left: StructTag("tag-_80076268767659083946749461790619121878::FatPtr")
right: Pointer { typ: TypeDef { name: "_80076268767659083946749461790619121878Inner", typ: StructTag("tag-Unit") } }.
This issue still persists with assigning sample_struct with a concrete value such as:
…ait objects (#3636)
Add a match arm for the
`AggregateKind::RawPtr(TyKind::RigidTy(RigidTy::Dynamic(..)))` case.
Pointers to trait objects [are
fat](https://github.com/rust-lang/rust/blob/master/library/core/src/ptr/metadata.rs#L20-#L27),
so generate a fat pointer for the rvalue.
Resolves#3631
By submitting this pull request, I confirm that my contribution is made
under the terms of the Apache 2.0 and MIT licenses.
This issue is related to the NonNull module verification.
This is a POC:
using the following command line invocation:
with Kani version: 0.56.0
Platform: MacOS M2
I expected to see verification results but received the following compilation error:
This issue still persists with assigning
sample_struct
with a concrete value such as:@zhassan-aws
The text was updated successfully, but these errors were encountered: