66c93ac8ba
Moves the CFI ui tests to the cfi directory and removes the cfi prefix from tests file names similarly to how the cfi codegen tests are organized.
48 lines
1.0 KiB
Rust
48 lines
1.0 KiB
Rust
// Check that more complex receivers work:
|
|
// * Arc<dyn Foo> as for custom receivers
|
|
// * &dyn Bar<T=Baz> for type constraints
|
|
|
|
//@ revisions: cfi kcfi
|
|
// FIXME(#122848) Remove only-linux once OSX CFI binaries work
|
|
//@ only-linux
|
|
//@ [cfi] needs-sanitizer-cfi
|
|
//@ [kcfi] needs-sanitizer-kcfi
|
|
//@ compile-flags: -C target-feature=-crt-static
|
|
//@ [cfi] compile-flags: -C codegen-units=1 -C lto -C prefer-dynamic=off -C opt-level=0
|
|
//@ [cfi] compile-flags: -Z sanitizer=cfi
|
|
//@ [kcfi] compile-flags: -Z sanitizer=kcfi
|
|
//@ [kcfi] compile-flags: -C panic=abort -C prefer-dynamic=off
|
|
//@ run-pass
|
|
|
|
use std::sync::Arc;
|
|
|
|
trait Foo {
|
|
fn foo(self: Arc<Self>);
|
|
}
|
|
|
|
struct FooImpl;
|
|
|
|
impl Foo for FooImpl {
|
|
fn foo(self: Arc<Self>) {}
|
|
}
|
|
|
|
trait Bar {
|
|
type T;
|
|
fn bar(&self) -> Self::T;
|
|
}
|
|
|
|
struct BarImpl;
|
|
|
|
impl Bar for BarImpl {
|
|
type T = i32;
|
|
fn bar(&self) -> Self::T { 7 }
|
|
}
|
|
|
|
fn main() {
|
|
let foo: Arc<dyn Foo> = Arc::new(FooImpl);
|
|
foo.foo();
|
|
|
|
let bar: &dyn Bar<T=i32> = &BarImpl;
|
|
assert_eq!(bar.bar(), 7);
|
|
}
|