diff options
| author | bors <bors@rust-lang.org> | 2021-01-21 12:18:32 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-01-21 12:18:32 +0000 |
| commit | a243ad280a4ac57c1b8427e30e31c5b505cf10de (patch) | |
| tree | 0e08f0a0eab6dc6d2bbd2178b03c3bc9d35e8ba7 /src | |
| parent | 339e19697a39a78f4d669c217b7d21109215de41 (diff) | |
| parent | d6c7a797fc90847399e5c62122278abbd4af6552 (diff) | |
| download | rust-a243ad280a4ac57c1b8427e30e31c5b505cf10de.tar.gz rust-a243ad280a4ac57c1b8427e30e31c5b505cf10de.zip | |
Auto merge of #81240 - JohnTitor:rollup-ieaz82a, r=JohnTitor
Rollup of 11 pull requests Successful merges: - #79655 (Add Vec visualization to understand capacity) - #80172 (Use consistent punctuation for 'Prelude contents' docs) - #80429 (Add regression test for mutual recursion in obligation forest) - #80601 (Improve grammar in documentation of format strings) - #81046 (Improve unknown external crate error) - #81178 (Visit only terminators when removing landing pads) - #81179 (Fix broken links with `--document-private-items` in the standard library) - #81184 (Remove unnecessary `after_run` function) - #81185 (Fix ICE in mir when evaluating SizeOf on unsized type) - #81187 (Fix typo in counters.rs) - #81219 (Document security implications of std::env::temp_dir) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustdoc/formats/renderer.rs | 15 | ||||
| -rw-r--r-- | src/librustdoc/html/render/mod.rs | 27 | ||||
| -rw-r--r-- | src/librustdoc/json/mod.rs | 11 | ||||
| -rw-r--r-- | src/test/ui/editions/edition-imports-virtual-2015-gated.stderr | 2 | ||||
| -rw-r--r-- | src/test/ui/mir/issue-80742.rs | 33 | ||||
| -rw-r--r-- | src/test/ui/mir/issue-80742.stderr | 42 | ||||
| -rw-r--r-- | src/test/ui/resolve/crate-called-as-function.rs | 3 | ||||
| -rw-r--r-- | src/test/ui/resolve/crate-called-as-function.stderr | 9 | ||||
| -rw-r--r-- | src/test/ui/resolve/missing-in-namespace.rs | 4 | ||||
| -rw-r--r-- | src/test/ui/resolve/missing-in-namespace.stderr | 14 | ||||
| -rw-r--r-- | src/test/ui/rfc-2126-extern-absolute-paths/non-existent-2.rs | 2 | ||||
| -rw-r--r-- | src/test/ui/rfc-2126-extern-absolute-paths/non-existent-2.stderr | 4 | ||||
| -rw-r--r-- | src/test/ui/traits/mutual-recursion-issue-75860.rs | 15 | ||||
| -rw-r--r-- | src/test/ui/traits/mutual-recursion-issue-75860.stderr | 16 |
14 files changed, 170 insertions, 27 deletions
diff --git a/src/librustdoc/formats/renderer.rs b/src/librustdoc/formats/renderer.rs index e84a9853d9b..c91d6decc0b 100644 --- a/src/librustdoc/formats/renderer.rs +++ b/src/librustdoc/formats/renderer.rs @@ -38,10 +38,14 @@ crate trait FormatRenderer<'tcx>: Clone { fn mod_item_out(&mut self, item_name: &str) -> Result<(), Error>; /// Post processing hook for cleanup and dumping output to files. - fn after_krate(&mut self, krate: &clean::Crate, cache: &Cache) -> Result<(), Error>; - - /// Called after everything else to write out errors. - fn after_run(&mut self, diag: &rustc_errors::Handler) -> Result<(), Error>; + /// + /// A handler is available if the renderer wants to report errors. + fn after_krate( + &mut self, + krate: &clean::Crate, + cache: &Cache, + diag: &rustc_errors::Handler, + ) -> Result<(), Error>; } /// Main method for rendering a crate. @@ -104,6 +108,5 @@ crate fn run_format<'tcx, T: FormatRenderer<'tcx>>( } } - format_renderer.after_krate(&krate, &cache)?; - format_renderer.after_run(diag) + format_renderer.after_krate(&krate, &cache, diag) } diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs index 03e091297e5..26afd705740 100644 --- a/src/librustdoc/html/render/mod.rs +++ b/src/librustdoc/html/render/mod.rs @@ -523,17 +523,12 @@ impl<'tcx> FormatRenderer<'tcx> for Context<'tcx> { Ok((cx, krate)) } - fn after_run(&mut self, diag: &rustc_errors::Handler) -> Result<(), Error> { - Arc::get_mut(&mut self.shared).unwrap().fs.close(); - let nb_errors = self.errors.iter().map(|err| diag.struct_err(&err).emit()).count(); - if nb_errors > 0 { - Err(Error::new(io::Error::new(io::ErrorKind::Other, "I/O error"), "")) - } else { - Ok(()) - } - } - - fn after_krate(&mut self, krate: &clean::Crate, cache: &Cache) -> Result<(), Error> { + fn after_krate( + &mut self, + krate: &clean::Crate, + cache: &Cache, + diag: &rustc_errors::Handler, + ) -> Result<(), Error> { let final_file = self.dst.join(&*krate.name.as_str()).join("all.html"); let settings_file = self.dst.join("settings.html"); let crate_name = krate.name; @@ -596,7 +591,15 @@ impl<'tcx> FormatRenderer<'tcx> for Context<'tcx> { &style_files, ); self.shared.fs.write(&settings_file, v.as_bytes())?; - Ok(()) + + // Flush pending errors. + Arc::get_mut(&mut self.shared).unwrap().fs.close(); + let nb_errors = self.errors.iter().map(|err| diag.struct_err(&err).emit()).count(); + if nb_errors > 0 { + Err(Error::new(io::Error::new(io::ErrorKind::Other, "I/O error"), "")) + } else { + Ok(()) + } } fn mod_item_in( diff --git a/src/librustdoc/json/mod.rs b/src/librustdoc/json/mod.rs index df7ab9b7361..64500c1d911 100644 --- a/src/librustdoc/json/mod.rs +++ b/src/librustdoc/json/mod.rs @@ -199,7 +199,12 @@ impl<'tcx> FormatRenderer<'tcx> for JsonRenderer<'tcx> { Ok(()) } - fn after_krate(&mut self, krate: &clean::Crate, cache: &Cache) -> Result<(), Error> { + fn after_krate( + &mut self, + krate: &clean::Crate, + cache: &Cache, + _diag: &rustc_errors::Handler, + ) -> Result<(), Error> { debug!("Done with crate"); let mut index = (*self.index).clone().into_inner(); index.extend(self.get_trait_items(cache)); @@ -245,8 +250,4 @@ impl<'tcx> FormatRenderer<'tcx> for JsonRenderer<'tcx> { serde_json::ser::to_writer(&file, &output).unwrap(); Ok(()) } - - fn after_run(&mut self, _diag: &rustc_errors::Handler) -> Result<(), Error> { - Ok(()) - } } diff --git a/src/test/ui/editions/edition-imports-virtual-2015-gated.stderr b/src/test/ui/editions/edition-imports-virtual-2015-gated.stderr index 56cbd882cca..06605c6f208 100644 --- a/src/test/ui/editions/edition-imports-virtual-2015-gated.stderr +++ b/src/test/ui/editions/edition-imports-virtual-2015-gated.stderr @@ -2,7 +2,7 @@ error[E0432]: unresolved import `E` --> $DIR/edition-imports-virtual-2015-gated.rs:8:5 | LL | gen_gated!(); - | ^^^^^^^^^^^^^ could not find `E` in `{{root}}` + | ^^^^^^^^^^^^^ could not find `E` in crate root | = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) diff --git a/src/test/ui/mir/issue-80742.rs b/src/test/ui/mir/issue-80742.rs new file mode 100644 index 00000000000..c06d182fd56 --- /dev/null +++ b/src/test/ui/mir/issue-80742.rs @@ -0,0 +1,33 @@ +// check-fail + +// This test used to cause an ICE in rustc_mir::interpret::step::eval_rvalue_into_place + +#![allow(incomplete_features)] +#![feature(const_evaluatable_checked)] +#![feature(const_generics)] + +use std::fmt::Debug; +use std::marker::PhantomData; +use std::mem::size_of; + +struct Inline<T> +where + [u8; size_of::<T>() + 1]: , +{ + _phantom: PhantomData<T>, + buf: [u8; size_of::<T>() + 1], +} + +impl<T> Inline<T> +where + [u8; size_of::<T>() + 1]: , +{ + pub fn new(val: T) -> Inline<T> { + todo!() + } +} + +fn main() { + let dst = Inline::<dyn Debug>::new(0); //~ ERROR + //~^ ERROR +} diff --git a/src/test/ui/mir/issue-80742.stderr b/src/test/ui/mir/issue-80742.stderr new file mode 100644 index 00000000000..2ec0e950528 --- /dev/null +++ b/src/test/ui/mir/issue-80742.stderr @@ -0,0 +1,42 @@ +error[E0599]: no function or associated item named `new` found for struct `Inline<dyn Debug>` in the current scope + --> $DIR/issue-80742.rs:31:36 + | +LL | / struct Inline<T> +LL | | where +LL | | [u8; size_of::<T>() + 1]: , +LL | | { +LL | | _phantom: PhantomData<T>, +LL | | buf: [u8; size_of::<T>() + 1], +LL | | } + | |_- function or associated item `new` not found for this +... +LL | let dst = Inline::<dyn Debug>::new(0); + | ^^^ function or associated item not found in `Inline<dyn Debug>` + | + ::: $SRC_DIR/core/src/fmt/mod.rs:LL:COL + | +LL | pub trait Debug { + | --------------- doesn't satisfy `dyn Debug: Sized` + | + = note: the method `new` exists but the following trait bounds were not satisfied: + `dyn Debug: Sized` + +error[E0277]: the size for values of type `dyn Debug` cannot be known at compilation time + --> $DIR/issue-80742.rs:31:15 + | +LL | struct Inline<T> + | - required by this bound in `Inline` +... +LL | let dst = Inline::<dyn Debug>::new(0); + | ^^^^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time + | + = help: the trait `Sized` is not implemented for `dyn Debug` +help: consider relaxing the implicit `Sized` restriction + | +LL | struct Inline<T: ?Sized> + | ^^^^^^^^ + +error: aborting due to 2 previous errors + +Some errors have detailed explanations: E0277, E0599. +For more information about an error, try `rustc --explain E0277`. diff --git a/src/test/ui/resolve/crate-called-as-function.rs b/src/test/ui/resolve/crate-called-as-function.rs new file mode 100644 index 00000000000..e8f52c0c029 --- /dev/null +++ b/src/test/ui/resolve/crate-called-as-function.rs @@ -0,0 +1,3 @@ +fn main() { + ::foo() //~ cannot find external crate `foo` in the crate root +} diff --git a/src/test/ui/resolve/crate-called-as-function.stderr b/src/test/ui/resolve/crate-called-as-function.stderr new file mode 100644 index 00000000000..eb42349aff1 --- /dev/null +++ b/src/test/ui/resolve/crate-called-as-function.stderr @@ -0,0 +1,9 @@ +error[E0425]: cannot find external crate `foo` in the crate root + --> $DIR/crate-called-as-function.rs:2:7 + | +LL | ::foo() + | ^^^ not found in the crate root + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0425`. diff --git a/src/test/ui/resolve/missing-in-namespace.rs b/src/test/ui/resolve/missing-in-namespace.rs new file mode 100644 index 00000000000..e1dedb072b7 --- /dev/null +++ b/src/test/ui/resolve/missing-in-namespace.rs @@ -0,0 +1,4 @@ +fn main() { + let _map = std::hahmap::HashMap::new(); + //~^ ERROR failed to resolve: could not find `hahmap` in `std +} diff --git a/src/test/ui/resolve/missing-in-namespace.stderr b/src/test/ui/resolve/missing-in-namespace.stderr new file mode 100644 index 00000000000..8b292aeda50 --- /dev/null +++ b/src/test/ui/resolve/missing-in-namespace.stderr @@ -0,0 +1,14 @@ +error[E0433]: failed to resolve: could not find `hahmap` in `std` + --> $DIR/missing-in-namespace.rs:2:29 + | +LL | let _map = std::hahmap::HashMap::new(); + | ^^^^^^^ not found in `std::hahmap` + | +help: consider importing this struct + | +LL | use std::collections::HashMap; + | + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0433`. diff --git a/src/test/ui/rfc-2126-extern-absolute-paths/non-existent-2.rs b/src/test/ui/rfc-2126-extern-absolute-paths/non-existent-2.rs index 4f53108b3a9..61212f299be 100644 --- a/src/test/ui/rfc-2126-extern-absolute-paths/non-existent-2.rs +++ b/src/test/ui/rfc-2126-extern-absolute-paths/non-existent-2.rs @@ -2,5 +2,5 @@ fn main() { let s = ::xcrate::S; - //~^ ERROR failed to resolve: could not find `xcrate` in `{{root}}` + //~^ ERROR failed to resolve: could not find `xcrate` in crate root } diff --git a/src/test/ui/rfc-2126-extern-absolute-paths/non-existent-2.stderr b/src/test/ui/rfc-2126-extern-absolute-paths/non-existent-2.stderr index 7395d01d8ac..8b2a6933f37 100644 --- a/src/test/ui/rfc-2126-extern-absolute-paths/non-existent-2.stderr +++ b/src/test/ui/rfc-2126-extern-absolute-paths/non-existent-2.stderr @@ -1,8 +1,8 @@ -error[E0433]: failed to resolve: could not find `xcrate` in `{{root}}` +error[E0433]: failed to resolve: could not find `xcrate` in crate root --> $DIR/non-existent-2.rs:4:15 | LL | let s = ::xcrate::S; - | ^^^^^^ could not find `xcrate` in `{{root}}` + | ^^^^^^ could not find `xcrate` in crate root error: aborting due to previous error diff --git a/src/test/ui/traits/mutual-recursion-issue-75860.rs b/src/test/ui/traits/mutual-recursion-issue-75860.rs new file mode 100644 index 00000000000..d7d7307b424 --- /dev/null +++ b/src/test/ui/traits/mutual-recursion-issue-75860.rs @@ -0,0 +1,15 @@ +pub fn iso<A, B, F1, F2>(a: F1, b: F2) -> (Box<dyn Fn(A) -> B>, Box<dyn Fn(B) -> A>) + where + F1: (Fn(A) -> B) + 'static, + F2: (Fn(B) -> A) + 'static, +{ + (Box::new(a), Box::new(b)) +} +pub fn iso_un_option<A, B>() -> (Box<dyn Fn(A) -> B>, Box<dyn Fn(B) -> A>) { + let left = |o_a: Option<_>| o_a.unwrap(); + let right = |o_b: Option<_>| o_b.unwrap(); + iso(left, right) + //~^ ERROR overflow +} + +fn main() {} diff --git a/src/test/ui/traits/mutual-recursion-issue-75860.stderr b/src/test/ui/traits/mutual-recursion-issue-75860.stderr new file mode 100644 index 00000000000..cf867ef78c3 --- /dev/null +++ b/src/test/ui/traits/mutual-recursion-issue-75860.stderr @@ -0,0 +1,16 @@ +error[E0275]: overflow evaluating the requirement `Option<_>: Sized` + --> $DIR/mutual-recursion-issue-75860.rs:11:5 + | +LL | iso(left, right) + | ^^^ + | + ::: $SRC_DIR/core/src/option.rs:LL:COL + | +LL | pub enum Option<T> { + | - required by this bound in `Option` + | + = help: consider adding a `#![recursion_limit="256"]` attribute to your crate (`mutual_recursion_issue_75860`) + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0275`. |
