diff options
| author | bors <bors@rust-lang.org> | 2018-08-06 14:07:22 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2018-08-06 14:07:22 +0000 |
| commit | 4b8089daf8046d7999310d44e5c68ccff4ab255a (patch) | |
| tree | d0af26b70ad7864085f4201d8399c4bcbfb682f1 /src/test/rustdoc | |
| parent | 78ec12df020453836c3b8990c0a8dd859b774e84 (diff) | |
| parent | b010d1f9295821f2f37de76a84ea4e26620456dd (diff) | |
| download | rust-4b8089daf8046d7999310d44e5c68ccff4ab255a.tar.gz rust-4b8089daf8046d7999310d44e5c68ccff4ab255a.zip | |
Auto merge of #52990 - Aaron1011:fix/rustdoc-auto-trait-static, r=eddyb
Fix ICE when rustdoc encounters certain usages of HRTBs Fixes #51236 Under certain circumstances, `AutoTraitFinder` could end up computing a `ParamEnv` involving two trait predicates that differed only in the region parameters involved. One of these parameters would be a HRTB, while the other would be a normal region parameter. When this `ParamEnv` was later passed to `SelectionContext`, an `Ambiguity` error would occur, since the erased versions of these predicates would be identical. To solve the issue, we de-duplicate our list of predicates as we build it up. Whenever we encounter two predicates that differ only in their assignment of region parameters (a HRTB vs a normal lifetime parameter), we pick the HRTB. This corresponds to selecting a 'stricter' bound to display in the generated documentation: we're requiring that a particular type works for all possible lifetime parameters if it's going to implement a particular auto trait.
Diffstat (limited to 'src/test/rustdoc')
| -rw-r--r-- | src/test/rustdoc/issue-51236.rs | 24 | ||||
| -rw-r--r-- | src/test/rustdoc/synthetic_auto/static-region.rs | 20 |
2 files changed, 44 insertions, 0 deletions
diff --git a/src/test/rustdoc/issue-51236.rs b/src/test/rustdoc/issue-51236.rs new file mode 100644 index 00000000000..541a1c5e19f --- /dev/null +++ b/src/test/rustdoc/issue-51236.rs @@ -0,0 +1,24 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use std::marker::PhantomData; + +pub mod traits { + pub trait Owned<'a> { + type Reader; + } +} + +// @has issue_51236/struct.Owned.html +// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//*/code' "impl<T> Send for \ +// Owned<T> where <T as Owned<'static>>::Reader: Send" +pub struct Owned<T> where T: for<'a> ::traits::Owned<'a> { + marker: PhantomData<<T as ::traits::Owned<'static>>::Reader>, +} diff --git a/src/test/rustdoc/synthetic_auto/static-region.rs b/src/test/rustdoc/synthetic_auto/static-region.rs new file mode 100644 index 00000000000..96e8b8ed5f6 --- /dev/null +++ b/src/test/rustdoc/synthetic_auto/static-region.rs @@ -0,0 +1,20 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub trait OwnedTrait<'a> { + type Reader; +} + +// @has static_region/struct.Owned.html +// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//*/code' "impl<T> Send for \ +// Owned<T> where <T as OwnedTrait<'static>>::Reader: Send" +pub struct Owned<T> where T: OwnedTrait<'static> { + marker: <T as OwnedTrait<'static>>::Reader, +} |
