CFI: Handle dyn with no principal
In user-facing Rust, `dyn` always has at least one predicate following it. Unfortunately, because we filter out marker traits from receivers at callsites and `dyn Sync` is, for example, legal, this results in us having `dyn` types with no predicates on occasion in our alias set encoding. This patch handles cases where there are no predicates in a `dyn` type which are relevant to its alias set. Fixes #122998
This commit is contained in:
parent
6a92312a1e
commit
ea4518522f
2 changed files with 35 additions and 13 deletions
21
tests/ui/sanitizer/cfi-drop-no-principal.rs
Normal file
21
tests/ui/sanitizer/cfi-drop-no-principal.rs
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
// Check that dropping a trait object without a principal trait succeeds
|
||||
|
||||
//@ needs-sanitizer-cfi
|
||||
// FIXME(#122848) Remove only-linux once OSX CFI binaries works
|
||||
//@ only-linux
|
||||
//@ compile-flags: --crate-type=bin -Cprefer-dynamic=off -Clto -Zsanitizer=cfi
|
||||
//@ compile-flags: -C target-feature=-crt-static -C codegen-units=1 -C opt-level=0
|
||||
// FIXME(#118761) Should be run-pass once the labels on drop are compatible.
|
||||
// This test is being landed ahead of that to test that the compiler doesn't ICE while labeling the
|
||||
// callsite for a drop, but the vtable doesn't have the correct label yet.
|
||||
//@ build-pass
|
||||
|
||||
struct CustomDrop;
|
||||
|
||||
impl Drop for CustomDrop {
|
||||
fn drop(&mut self) {}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let _ = Box::new(CustomDrop) as Box<dyn Send>;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue