diff options
| author | bors <bors@rust-lang.org> | 2019-05-22 08:22:17 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2019-05-22 08:22:17 +0000 |
| commit | 37ff5d388f8c004ca248adb635f1cc84d347eda0 (patch) | |
| tree | 460137db1b121095313303ae6c78f2698bd15159 /src/librustc/ty | |
| parent | 1cc822c261f5c94a41eb725755fdda7ca6efbda2 (diff) | |
| parent | ce2ee305f9165c037ecddddb5792588a15ff6c37 (diff) | |
| download | rust-37ff5d388f8c004ca248adb635f1cc84d347eda0.tar.gz rust-37ff5d388f8c004ca248adb635f1cc84d347eda0.zip | |
Auto merge of #59445 - alexreg:ban-multi-trait-objects-via-aliases, r=oli-obk
Ban multi-trait objects via trait aliases Obviously, multi-trait objects are not normally supported, so they should not be supported via trait aliases. This has been factored out from the previous PR https://github.com/rust-lang/rust/pull/55994 (see point 1). r? @Centril CC @nikomatsakis ------------------ ### RELNOTES: We now allow `dyn Send + fmt::Debug` with equivalent semantics to `dyn fmt::Debug + Send`. That is, the order of the mentioned traits does not matter wrt. principal/not-principal traits. This is a small change that might deserve a mention in the blog post because it is a language change but most likely not. See https://github.com/rust-lang/rust/blob/ce2ee305f9165c037ecddddb5792588a15ff6c37/src/test/ui/traits/wf-trait-object-reverse-order.rs. // @Centril
Diffstat (limited to 'src/librustc/ty')
| -rw-r--r-- | src/librustc/ty/mod.rs | 14 | ||||
| -rw-r--r-- | src/librustc/ty/query/mod.rs | 3 |
2 files changed, 8 insertions, 9 deletions
diff --git a/src/librustc/ty/mod.rs b/src/librustc/ty/mod.rs index b60ef557cb8..4d242265e61 100644 --- a/src/librustc/ty/mod.rs +++ b/src/librustc/ty/mod.rs @@ -1075,25 +1075,25 @@ impl<'a, 'gcx, 'tcx> GenericPredicates<'tcx> { #[derive(Clone, Copy, PartialEq, Eq, Hash, RustcEncodable, RustcDecodable, HashStable)] pub enum Predicate<'tcx> { - /// Corresponds to `where Foo: Bar<A,B,C>`. `Foo` here would be + /// Corresponds to `where Foo: Bar<A, B, C>`. `Foo` here would be /// the `Self` type of the trait reference and `A`, `B`, and `C` /// would be the type parameters. Trait(PolyTraitPredicate<'tcx>), - /// where `'a: 'b` + /// `where 'a: 'b` RegionOutlives(PolyRegionOutlivesPredicate<'tcx>), - /// where `T: 'a` + /// `where T: 'a` TypeOutlives(PolyTypeOutlivesPredicate<'tcx>), - /// where `<T as TraitRef>::Name == X`, approximately. + /// `where <T as TraitRef>::Name == X`, approximately. /// See the `ProjectionPredicate` struct for details. Projection(PolyProjectionPredicate<'tcx>), /// no syntax: `T` well-formed WellFormed(Ty<'tcx>), - /// trait must be object-safe + /// Trait must be object-safe. ObjectSafe(DefId), /// No direct syntax. May be thought of as `where T: FnFoo<...>` @@ -1234,7 +1234,7 @@ impl<'tcx> TraitPredicate<'tcx> { self.trait_ref.def_id } - pub fn input_types<'a>(&'a self) -> impl DoubleEndedIterator<Item=Ty<'tcx>> + 'a { + pub fn input_types<'a>(&'a self) -> impl DoubleEndedIterator<Item = Ty<'tcx>> + 'a { self.trait_ref.input_types() } @@ -2400,7 +2400,7 @@ impl<'a, 'gcx, 'tcx> AdtDef { pub fn discriminants( &'a self, tcx: TyCtxt<'a, 'gcx, 'tcx>, - ) -> impl Iterator<Item=(VariantIdx, Discr<'tcx>)> + Captures<'gcx> + 'a { + ) -> impl Iterator<Item = (VariantIdx, Discr<'tcx>)> + Captures<'gcx> + 'a { let repr_type = self.repr.discr_type(); let initial = repr_type.initial_discriminant(tcx.global_tcx()); let mut prev_discr = None::<Discr<'tcx>>; diff --git a/src/librustc/ty/query/mod.rs b/src/librustc/ty/query/mod.rs index 18d575f7364..be52b7e6451 100644 --- a/src/librustc/ty/query/mod.rs +++ b/src/librustc/ty/query/mod.rs @@ -100,8 +100,7 @@ pub use self::on_disk_cache::OnDiskCache; rustc_query_append! { [define_queries!][ <'tcx> Other { - /// Run analysis passes on the crate + /// Runs analysis passes on the crate. [] fn analysis: Analysis(CrateNum) -> Result<(), ErrorReported>, - }, ]} |
