diff options
| author | Michael Goulet <michael@errs.io> | 2023-07-16 22:42:46 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2023-07-25 15:15:25 +0000 |
| commit | c02d1a65534244532aba0f42a6719d87084865d2 (patch) | |
| tree | 00a28abc9d73408e9d4e15a7f4962d0af1c0a9c9 /compiler/rustc_middle/src | |
| parent | 24eefd08e25b8ffec2df092f0add812ed58875a0 (diff) | |
| download | rust-c02d1a65534244532aba0f42a6719d87084865d2.tar.gz rust-c02d1a65534244532aba0f42a6719d87084865d2.zip | |
Restore tuple unsizing feature gate
Diffstat (limited to 'compiler/rustc_middle/src')
| -rw-r--r-- | compiler/rustc_middle/src/traits/mod.rs | 12 | ||||
| -rw-r--r-- | compiler/rustc_middle/src/traits/structural_impls.rs | 2 |
2 files changed, 11 insertions, 3 deletions
diff --git a/compiler/rustc_middle/src/traits/mod.rs b/compiler/rustc_middle/src/traits/mod.rs index b7ffed57a0b..fb791d564a2 100644 --- a/compiler/rustc_middle/src/traits/mod.rs +++ b/compiler/rustc_middle/src/traits/mod.rs @@ -657,6 +657,9 @@ pub enum ImplSource<'tcx, N> { /// Successful resolution for a builtin trait. Builtin(Vec<N>), + // Unsizing a tuple like `(A, B, ..., X)` to `(A, B, ..., Y)` if `X` unsizes to `Y` + TupleUnsizing(Vec<N>), + /// ImplSource for trait upcasting coercion TraitUpcasting(ImplSourceTraitUpcastingData<N>), } @@ -665,7 +668,7 @@ impl<'tcx, N> ImplSource<'tcx, N> { pub fn nested_obligations(self) -> Vec<N> { match self { ImplSource::UserDefined(i) => i.nested, - ImplSource::Param(n, _) | ImplSource::Builtin(n) => n, + ImplSource::Param(n, _) | ImplSource::Builtin(n) | ImplSource::TupleUnsizing(n) => n, ImplSource::Object(d) => d.nested, ImplSource::TraitUpcasting(d) => d.nested, } @@ -674,7 +677,7 @@ impl<'tcx, N> ImplSource<'tcx, N> { pub fn borrow_nested_obligations(&self) -> &[N] { match self { ImplSource::UserDefined(i) => &i.nested, - ImplSource::Param(n, _) | ImplSource::Builtin(n) => &n, + ImplSource::Param(n, _) | ImplSource::Builtin(n) | ImplSource::TupleUnsizing(n) => &n, ImplSource::Object(d) => &d.nested, ImplSource::TraitUpcasting(d) => &d.nested, } @@ -683,7 +686,7 @@ impl<'tcx, N> ImplSource<'tcx, N> { pub fn borrow_nested_obligations_mut(&mut self) -> &mut [N] { match self { ImplSource::UserDefined(i) => &mut i.nested, - ImplSource::Param(n, _) | ImplSource::Builtin(n) => n, + ImplSource::Param(n, _) | ImplSource::Builtin(n) | ImplSource::TupleUnsizing(n) => n, ImplSource::Object(d) => &mut d.nested, ImplSource::TraitUpcasting(d) => &mut d.nested, } @@ -701,6 +704,9 @@ impl<'tcx, N> ImplSource<'tcx, N> { }), ImplSource::Param(n, ct) => ImplSource::Param(n.into_iter().map(f).collect(), ct), ImplSource::Builtin(n) => ImplSource::Builtin(n.into_iter().map(f).collect()), + ImplSource::TupleUnsizing(n) => { + ImplSource::TupleUnsizing(n.into_iter().map(f).collect()) + } ImplSource::Object(o) => ImplSource::Object(ImplSourceObjectData { vtable_base: o.vtable_base, nested: o.nested.into_iter().map(f).collect(), diff --git a/compiler/rustc_middle/src/traits/structural_impls.rs b/compiler/rustc_middle/src/traits/structural_impls.rs index e2cd118500b..b7bce05300d 100644 --- a/compiler/rustc_middle/src/traits/structural_impls.rs +++ b/compiler/rustc_middle/src/traits/structural_impls.rs @@ -17,6 +17,8 @@ impl<'tcx, N: fmt::Debug> fmt::Debug for traits::ImplSource<'tcx, N> { write!(f, "ImplSourceParamData({:?}, {:?})", n, ct) } + super::ImplSource::TupleUnsizing(ref d) => write!(f, "{:?}", d), + super::ImplSource::TraitUpcasting(ref d) => write!(f, "{:?}", d), } } |
