Rollup merge of #130826 - fmease:compiler-mv-obj-safe-dyn-compat, r=compiler-errors
Compiler: Rename "object safe" to "dyn compatible" Completed T-lang FCP: https://github.com/rust-lang/lang-team/issues/286#issuecomment-2338905118. Tracking issue: https://github.com/rust-lang/rust/issues/130852 Excludes `compiler/rustc_codegen_cranelift` (to be filed separately). Includes Stable MIR. Regarding https://github.com/rust-lang/rust/labels/relnotes, I guess I will manually open a https://github.com/rust-lang/rust/labels/relnotes-tracking-issue since this change affects everything (compiler, library, tools, docs, books, everyday language). r? ghost
This commit is contained in:
@@ -183,8 +183,8 @@ fn check_object_overlap<'tcx>(
|
||||
|
||||
// check for overlap with the automatic `impl Trait for dyn Trait`
|
||||
if let ty::Dynamic(data, ..) = trait_ref.self_ty().kind() {
|
||||
// This is something like impl Trait1 for Trait2. Illegal
|
||||
// if Trait1 is a supertrait of Trait2 or Trait2 is not object safe.
|
||||
// This is something like `impl Trait1 for Trait2`. Illegal if
|
||||
// Trait1 is a supertrait of Trait2 or Trait2 is not dyn-compatible.
|
||||
|
||||
let component_def_ids = data.iter().flat_map(|predicate| {
|
||||
match predicate.skip_binder() {
|
||||
@@ -197,7 +197,8 @@ fn check_object_overlap<'tcx>(
|
||||
});
|
||||
|
||||
for component_def_id in component_def_ids {
|
||||
if !tcx.is_object_safe(component_def_id) {
|
||||
if !tcx.is_dyn_compatible(component_def_id) {
|
||||
// FIXME(dyn_compat_renaming): Rename test and update comment.
|
||||
// Without the 'object_safe_for_dispatch' feature this is an error
|
||||
// which will be reported by wfcheck. Ignore it here.
|
||||
// This is tested by `coherence-impl-trait-for-trait-object-safe.rs`.
|
||||
|
||||
@@ -109,16 +109,16 @@ pub(crate) fn orphan_check_impl(
|
||||
//
|
||||
// auto trait AutoTrait {}
|
||||
//
|
||||
// trait ObjectSafeTrait {
|
||||
// trait DynCompatibleTrait {
|
||||
// fn f(&self) where Self: AutoTrait;
|
||||
// }
|
||||
//
|
||||
// We can allow f to be called on `dyn ObjectSafeTrait + AutoTrait`.
|
||||
// We can allow f to be called on `dyn DynCompatibleTrait + AutoTrait`.
|
||||
//
|
||||
// If we didn't deny `impl AutoTrait for dyn Trait`, it would be unsound
|
||||
// for the ObjectSafeTrait shown above to be object safe because someone
|
||||
// could take some type implementing ObjectSafeTrait but not AutoTrait,
|
||||
// unsize it to `dyn ObjectSafeTrait`, and call .f() which has no
|
||||
// for the `DynCompatibleTrait` shown above to be dyn-compatible because someone
|
||||
// could take some type implementing `DynCompatibleTrait` but not `AutoTrait`,
|
||||
// unsize it to `dyn DynCompatibleTrait`, and call `.f()` which has no
|
||||
// concrete implementation (issue #50781).
|
||||
enum LocalImpl {
|
||||
Allow,
|
||||
|
||||
Reference in New Issue
Block a user