diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-07-29 17:46:42 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-29 17:46:42 +0200 |
| commit | 2e9d962a8b22f4ee57ac1c729b2424a332f8de2b (patch) | |
| tree | 187866ed5d72c65ad386fb091bd3b957c26b8acb | |
| parent | 4db3d12e6f395babed53dee1d209a5c8699a5ae6 (diff) | |
| parent | 29f5d8f00f5c0287e8991d5818bd87942e6f4563 (diff) | |
| download | rust-2e9d962a8b22f4ee57ac1c729b2424a332f8de2b.tar.gz rust-2e9d962a8b22f4ee57ac1c729b2424a332f8de2b.zip | |
Rollup merge of #127882 - compiler-errors:cfi-sized-self-gat, r=oli-obk
Don't elaborate associated types with Sized bounds in `trait_object_ty` in cfi The elaboration mechanism introduced in #123005 didn't filter for associated types with `Self: Sized` bounds, which since #112319 has excluded them from the object type. Fixes #127881 cc `@maurer` `@rcvalle`
| -rw-r--r-- | compiler/rustc_sanitizers/src/cfi/typeid/itanium_cxx_abi/transform.rs | 1 | ||||
| -rw-r--r-- | tests/ui/sanitizer/cfi-sized-associated-ty.rs | 38 |
2 files changed, 39 insertions, 0 deletions
diff --git a/compiler/rustc_sanitizers/src/cfi/typeid/itanium_cxx_abi/transform.rs b/compiler/rustc_sanitizers/src/cfi/typeid/itanium_cxx_abi/transform.rs index 7837c72393d..e628c17aca3 100644 --- a/compiler/rustc_sanitizers/src/cfi/typeid/itanium_cxx_abi/transform.rs +++ b/compiler/rustc_sanitizers/src/cfi/typeid/itanium_cxx_abi/transform.rs @@ -232,6 +232,7 @@ fn trait_object_ty<'tcx>(tcx: TyCtxt<'tcx>, poly_trait_ref: ty::PolyTraitRef<'tc tcx.associated_items(super_poly_trait_ref.def_id()) .in_definition_order() .filter(|item| item.kind == ty::AssocKind::Type) + .filter(|item| !tcx.generics_require_sized_self(item.def_id)) .map(move |assoc_ty| { super_poly_trait_ref.map_bound(|super_trait_ref| { let alias_ty = diff --git a/tests/ui/sanitizer/cfi-sized-associated-ty.rs b/tests/ui/sanitizer/cfi-sized-associated-ty.rs new file mode 100644 index 00000000000..f5b4e22e9d9 --- /dev/null +++ b/tests/ui/sanitizer/cfi-sized-associated-ty.rs @@ -0,0 +1,38 @@ +// Check that we only elaborate non-`Self: Sized` associated types when +// erasing the receiver from trait ref. + +//@ 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 + +trait Foo { + type Bar<'a> + where + Self: Sized; + + fn test(&self); +} + +impl Foo for () { + type Bar<'a> = () + where + Self: Sized; + + fn test(&self) {} +} + +fn test(x: &dyn Foo) { + x.test(); +} + +fn main() { + test(&()); +} |
