Auto merge of #102526 - matthiaskrgr:rollup-9o6p98c, r=matthiaskrgr
Rollup of 7 pull requests Successful merges: - #102361 (Fix ICE in const_trait check code) - #102373 (Flush delayed bugs before codegen) - #102483 (create def ids for impl traits during ast lowering) - #102490 (Generate synthetic region from `impl` even in closure body within an associated fn) - #102492 (Don't lower assoc bindings just to deny them) - #102493 (Group together more size assertions.) - #102521 (rustdoc: add missing margin to no-docblock methods) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
de341fe668
29 changed files with 209 additions and 92 deletions
|
|
@ -718,7 +718,7 @@ fn item_trait(w: &mut Buffer, cx: &mut Context<'_>, it: &clean::Item, t: &clean:
|
|||
if toggled {
|
||||
write!(w, "<details class=\"rustdoc-toggle method-toggle\" open><summary>");
|
||||
}
|
||||
write!(w, "<div id=\"{}\" class=\"method has-srclink\">", id);
|
||||
write!(w, "<section id=\"{}\" class=\"method has-srclink\">", id);
|
||||
render_rightside(w, cx, m, t, RenderMode::Normal);
|
||||
write!(w, "<h4 class=\"code-header\">");
|
||||
render_assoc_item(
|
||||
|
|
@ -730,7 +730,7 @@ fn item_trait(w: &mut Buffer, cx: &mut Context<'_>, it: &clean::Item, t: &clean:
|
|||
RenderMode::Normal,
|
||||
);
|
||||
w.write_str("</h4>");
|
||||
w.write_str("</div>");
|
||||
w.write_str("</section>");
|
||||
if toggled {
|
||||
write!(w, "</summary>");
|
||||
w.push_buffer(content);
|
||||
|
|
|
|||
|
|
@ -2006,7 +2006,10 @@ in storage.js plus the media query with (min-width: 701px)
|
|||
.method-toggle summary,
|
||||
.implementors-toggle summary,
|
||||
.impl,
|
||||
#implementors-list > .docblock {
|
||||
#implementors-list > .docblock,
|
||||
.impl-items > section,
|
||||
.methods > section
|
||||
{
|
||||
margin-bottom: 0.75em;
|
||||
}
|
||||
|
||||
|
|
|
|||
8
src/test/rustdoc-gui/no-docblock.goml
Normal file
8
src/test/rustdoc-gui/no-docblock.goml
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
// This test checks that there are margins applied to methods with no docblocks.
|
||||
goto: file://|DOC_PATH|/test_docs/trait.TraitWithNoDocblocks.html
|
||||
// Check that the two methods are more than 24px apart.
|
||||
compare-elements-position-near-false: ("//*[@id='tymethod.first_fn']", "//*[@id='tymethod.second_fn']", {"y": 24})
|
||||
|
||||
goto: file://|DOC_PATH|/test_docs/struct.TypeWithNoDocblocks.html
|
||||
// Check that the two methods are more than 24px apart.
|
||||
compare-elements-position-near-false: ("//*[@id='method.first_fn']", "//*[@id='method.second_fn']", {"y": 24})
|
||||
|
|
@ -6,7 +6,7 @@ assert-css: (".sidebar", {"display": "block", "left": "-1000px"})
|
|||
|
||||
// Scroll down.
|
||||
scroll-to: "//h2[@id='blanket-implementations']"
|
||||
assert-window-property: {"pageYOffset": "639"}
|
||||
assert-window-property: {"pageYOffset": "651"}
|
||||
|
||||
// Open the sidebar menu.
|
||||
click: ".sidebar-menu-toggle"
|
||||
|
|
@ -21,11 +21,11 @@ assert-window-property: {"pageYOffset": "0"}
|
|||
// Close the sidebar menu. Make sure the scroll position gets restored.
|
||||
click: ".sidebar-menu-toggle"
|
||||
wait-for-css: (".sidebar", {"left": "-1000px"})
|
||||
assert-window-property: {"pageYOffset": "639"}
|
||||
assert-window-property: {"pageYOffset": "651"}
|
||||
|
||||
// Now test that scrollability returns when the browser window is just resized.
|
||||
click: ".sidebar-menu-toggle"
|
||||
wait-for-css: (".sidebar", {"left": "0px"})
|
||||
assert-window-property: {"pageYOffset": "0"}
|
||||
size: (900, 600)
|
||||
assert-window-property: {"pageYOffset": "639"}
|
||||
assert-window-property: {"pageYOffset": "651"}
|
||||
|
|
|
|||
|
|
@ -355,3 +355,15 @@ impl<R: std::io::Read> std::iter::Iterator for NotableStructWithLongName<R> {
|
|||
|
||||
fn next(&mut self) -> Option<Self::Item> { () }
|
||||
}
|
||||
|
||||
pub trait TraitWithNoDocblocks {
|
||||
fn first_fn(&self);
|
||||
fn second_fn(&self);
|
||||
}
|
||||
|
||||
pub struct TypeWithNoDocblocks;
|
||||
|
||||
impl TypeWithNoDocblocks {
|
||||
pub fn first_fn(&self) {}
|
||||
pub fn second_fn(&self) {}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
<div id="associatedconstant.YOLO" class="method has-srclink"><a class="srclink rightside" href="../src/foo/anchors.rs.html#16">source</a><h4 class="code-header">const <a href="#associatedconstant.YOLO" class="constant">YOLO</a>: <a class="primitive" href="{{channel}}/std/primitive.u32.html">u32</a></h4></div>
|
||||
<section id="associatedconstant.YOLO" class="method has-srclink"><a class="srclink rightside" href="../src/foo/anchors.rs.html#16">source</a><h4 class="code-header">const <a href="#associatedconstant.YOLO" class="constant">YOLO</a>: <a class="primitive" href="{{channel}}/std/primitive.u32.html">u32</a></h4></section>
|
||||
|
|
@ -1 +1 @@
|
|||
<div id="method.bar" class="method has-srclink"><a class="srclink rightside" href="../src/foo/anchors.rs.html#23">source</a><h4 class="code-header">fn <a href="#method.bar" class="fnname">bar</a>()</h4></div>
|
||||
<section id="method.bar" class="method has-srclink"><a class="srclink rightside" href="../src/foo/anchors.rs.html#23">source</a><h4 class="code-header">fn <a href="#method.bar" class="fnname">bar</a>()</h4></section>
|
||||
|
|
@ -1 +1 @@
|
|||
<div id="tymethod.foo" class="method has-srclink"><a class="srclink rightside" href="../src/foo/anchors.rs.html#20">source</a><h4 class="code-header">fn <a href="#tymethod.foo" class="fnname">foo</a>()</h4></div>
|
||||
<section id="tymethod.foo" class="method has-srclink"><a class="srclink rightside" href="../src/foo/anchors.rs.html#20">source</a><h4 class="code-header">fn <a href="#tymethod.foo" class="fnname">foo</a>()</h4></section>
|
||||
|
|
@ -1 +1 @@
|
|||
<div id="associatedtype.T" class="method has-srclink"><a class="srclink rightside" href="../src/foo/anchors.rs.html#13">source</a><h4 class="code-header">type <a href="#associatedtype.T" class="associatedtype">T</a></h4></div>
|
||||
<section id="associatedtype.T" class="method has-srclink"><a class="srclink rightside" href="../src/foo/anchors.rs.html#13">source</a><h4 class="code-header">type <a href="#associatedtype.T" class="associatedtype">T</a></h4></section>
|
||||
|
|
@ -18,10 +18,10 @@ pub struct S<T>(T);
|
|||
// @has - '//pre[@class="rust trait"]/code/span[@class="where"]' ': Clone'
|
||||
#[const_trait]
|
||||
pub trait Tr<T> {
|
||||
// @!has - '//div[@id="method.a"]/h4[@class="code-header"]' '~const'
|
||||
// @has - '//div[@id="method.a"]/h4[@class="code-header"]/a[@class="trait"]' 'Clone'
|
||||
// @!has - '//div[@id="method.a"]/h4[@class="code-header"]/span[@class="where"]' '~const'
|
||||
// @has - '//div[@id="method.a"]/h4[@class="code-header"]/span[@class="where fmt-newline"]' ': Clone'
|
||||
// @!has - '//section[@id="method.a"]/h4[@class="code-header"]' '~const'
|
||||
// @has - '//section[@id="method.a"]/h4[@class="code-header"]/a[@class="trait"]' 'Clone'
|
||||
// @!has - '//section[@id="method.a"]/h4[@class="code-header"]/span[@class="where"]' '~const'
|
||||
// @has - '//section[@id="method.a"]/h4[@class="code-header"]/span[@class="where fmt-newline"]' ': Clone'
|
||||
fn a<A: ~const Clone + ~const Destruct>()
|
||||
where
|
||||
Option<A>: ~const Clone + ~const Destruct,
|
||||
|
|
|
|||
28
src/test/ui/borrowck/issue-102209.rs
Normal file
28
src/test/ui/borrowck/issue-102209.rs
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
use std::marker::PhantomData;
|
||||
|
||||
pub struct NfaBuilder<'brand> {
|
||||
brand: PhantomData<&'brand mut &'brand mut ()>,
|
||||
}
|
||||
|
||||
impl NfaBuilder<'_> {
|
||||
pub fn with<R, F: FnOnce(NfaBuilder<'_>) -> R>(f: F) -> R {
|
||||
Brand::with(|brand| {
|
||||
f(Self { brand: brand.lt })
|
||||
//~^ ERROR lifetime may not live long enough
|
||||
//~| ERROR lifetime may not live long enough
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy)]
|
||||
pub struct Brand<'brand> {
|
||||
lt: PhantomData<&'brand mut &'brand mut ()>,
|
||||
}
|
||||
|
||||
impl Brand<'_> {
|
||||
pub fn with<R, F: FnOnce(Brand<'_>) -> R>(f: F) -> R {
|
||||
f(Self { lt: PhantomData })
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
22
src/test/ui/borrowck/issue-102209.stderr
Normal file
22
src/test/ui/borrowck/issue-102209.stderr
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
error: lifetime may not live long enough
|
||||
--> $DIR/issue-102209.rs:10:29
|
||||
|
|
||||
LL | impl NfaBuilder<'_> {
|
||||
| -- lifetime `'2` appears in the `impl`'s self type
|
||||
LL | pub fn with<R, F: FnOnce(NfaBuilder<'_>) -> R>(f: F) -> R {
|
||||
LL | Brand::with(|brand| {
|
||||
| ----- has type `Brand<'1>`
|
||||
LL | f(Self { brand: brand.lt })
|
||||
| ^^^^^^^^ this usage requires that `'1` must outlive `'2`
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/issue-102209.rs:10:29
|
||||
|
|
||||
LL | impl NfaBuilder<'_> {
|
||||
| -- lifetime `'1` appears in the `impl`'s self type
|
||||
...
|
||||
LL | f(Self { brand: brand.lt })
|
||||
| ^^^^^^^^ this usage requires that `'1` must outlive `'static`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
|
@ -9,7 +9,7 @@ note: generator is not `Send` as this value is used across a yield
|
|||
--> $DIR/generator-print-verbose-1.rs:35:9
|
||||
|
|
||||
LL | let _non_send_gen = make_non_send_generator();
|
||||
| ------------- has type `Opaque(DefId(0:34 ~ generator_print_verbose_1[749a]::make_non_send_generator::{opaque#0}), [])` which is not `Send`
|
||||
| ------------- has type `Opaque(DefId(0:44 ~ generator_print_verbose_1[749a]::make_non_send_generator::{opaque#0}), [])` which is not `Send`
|
||||
LL | yield;
|
||||
| ^^^^^ yield occurs here, with `_non_send_gen` maybe used later
|
||||
LL | };
|
||||
|
|
@ -35,17 +35,17 @@ note: required because it's used within this generator
|
|||
|
|
||||
LL | || {
|
||||
| ^^
|
||||
note: required because it appears within the type `Opaque(DefId(0:39 ~ generator_print_verbose_1[749a]::make_gen2::{opaque#0}), [std::sync::Arc<std::cell::RefCell<i32>>])`
|
||||
note: required because it appears within the type `Opaque(DefId(0:45 ~ generator_print_verbose_1[749a]::make_gen2::{opaque#0}), [std::sync::Arc<std::cell::RefCell<i32>>])`
|
||||
--> $DIR/generator-print-verbose-1.rs:41:30
|
||||
|
|
||||
LL | pub fn make_gen2<T>(t: T) -> impl Generator<Return = T> {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
note: required because it appears within the type `Opaque(DefId(0:42 ~ generator_print_verbose_1[749a]::make_non_send_generator2::{opaque#0}), [])`
|
||||
note: required because it appears within the type `Opaque(DefId(0:46 ~ generator_print_verbose_1[749a]::make_non_send_generator2::{opaque#0}), [])`
|
||||
--> $DIR/generator-print-verbose-1.rs:47:34
|
||||
|
|
||||
LL | fn make_non_send_generator2() -> impl Generator<Return = Arc<RefCell<i32>>> {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: required because it captures the following types: `Opaque(DefId(0:42 ~ generator_print_verbose_1[749a]::make_non_send_generator2::{opaque#0}), [])`, `()`
|
||||
= note: required because it captures the following types: `Opaque(DefId(0:46 ~ generator_print_verbose_1[749a]::make_non_send_generator2::{opaque#0}), [])`, `()`
|
||||
note: required because it's used within this generator
|
||||
--> $DIR/generator-print-verbose-1.rs:52:20
|
||||
|
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
error[E0700]: hidden type for `Opaque(DefId(0:11 ~ impl_trait_captures[1afc]::foo::{opaque#0}), [ReStatic, T, ReEarlyBound(0, 'a)])` captures lifetime that does not appear in bounds
|
||||
error[E0700]: hidden type for `Opaque(DefId(0:13 ~ impl_trait_captures[1afc]::foo::{opaque#0}), [ReStatic, T, ReEarlyBound(0, 'a)])` captures lifetime that does not appear in bounds
|
||||
--> $DIR/impl-trait-captures.rs:11:5
|
||||
|
|
||||
LL | fn foo<'a, T>(x: &T) -> impl Foo<'a> {
|
||||
| -- hidden type `&ReFree(DefId(0:8 ~ impl_trait_captures[1afc]::foo), BrNamed(DefId(0:13 ~ impl_trait_captures[1afc]::foo::'_), '_)) T` captures the anonymous lifetime defined here
|
||||
| -- hidden type `&ReFree(DefId(0:8 ~ impl_trait_captures[1afc]::foo), BrNamed(DefId(0:12 ~ impl_trait_captures[1afc]::foo::'_), '_)) T` captures the anonymous lifetime defined here
|
||||
LL | x
|
||||
| ^
|
||||
|
|
||||
help: to declare that the `impl Trait` captures `ReFree(DefId(0:8 ~ impl_trait_captures[1afc]::foo), BrNamed(DefId(0:13 ~ impl_trait_captures[1afc]::foo::'_), '_))`, you can add an explicit `ReFree(DefId(0:8 ~ impl_trait_captures[1afc]::foo), BrNamed(DefId(0:13 ~ impl_trait_captures[1afc]::foo::'_), '_))` lifetime bound
|
||||
help: to declare that the `impl Trait` captures `ReFree(DefId(0:8 ~ impl_trait_captures[1afc]::foo), BrNamed(DefId(0:12 ~ impl_trait_captures[1afc]::foo::'_), '_))`, you can add an explicit `ReFree(DefId(0:8 ~ impl_trait_captures[1afc]::foo), BrNamed(DefId(0:12 ~ impl_trait_captures[1afc]::foo::'_), '_))` lifetime bound
|
||||
|
|
||||
LL | fn foo<'a, T>(x: &T) -> impl Foo<'a> + ReFree(DefId(0:8 ~ impl_trait_captures[1afc]::foo), BrNamed(DefId(0:13 ~ impl_trait_captures[1afc]::foo::'_), '_)) {
|
||||
LL | fn foo<'a, T>(x: &T) -> impl Foo<'a> + ReFree(DefId(0:8 ~ impl_trait_captures[1afc]::foo), BrNamed(DefId(0:12 ~ impl_trait_captures[1afc]::foo::'_), '_)) {
|
||||
| ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
error: aborting due to previous error
|
||||
|
|
|
|||
15
src/test/ui/rfc-2632-const-trait-impl/issue-102156.rs
Normal file
15
src/test/ui/rfc-2632-const-trait-impl/issue-102156.rs
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
#![feature(allocator_api)]
|
||||
#![feature(const_trait_impl)]
|
||||
|
||||
use core::convert::{From, TryFrom};
|
||||
//~^ ERROR
|
||||
//~| ERROR
|
||||
|
||||
use std::pin::Pin;
|
||||
use std::alloc::Allocator;
|
||||
impl<T: ?Sized, A: Allocator> const From<Box<T, A>> for Pin<Box<T, A>>
|
||||
where
|
||||
A: 'static,
|
||||
{}
|
||||
|
||||
pub fn main() {}
|
||||
19
src/test/ui/rfc-2632-const-trait-impl/issue-102156.stderr
Normal file
19
src/test/ui/rfc-2632-const-trait-impl/issue-102156.stderr
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
error[E0433]: failed to resolve: maybe a missing crate `core`?
|
||||
--> $DIR/issue-102156.rs:4:5
|
||||
|
|
||||
LL | use core::convert::{From, TryFrom};
|
||||
| ^^^^ maybe a missing crate `core`?
|
||||
|
|
||||
= help: consider adding `extern crate core` to use the `core` crate
|
||||
|
||||
error[E0433]: failed to resolve: maybe a missing crate `core`?
|
||||
--> $DIR/issue-102156.rs:4:5
|
||||
|
|
||||
LL | use core::convert::{From, TryFrom};
|
||||
| ^^^^ maybe a missing crate `core`?
|
||||
|
|
||||
= help: consider adding `extern crate core` to use the `core` crate
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0433`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue