forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Auto merge of rust-lang#125096 - jhpratt:rollup-aj2qwsg, r=jhpratt
Rollup of 5 pull requests Successful merges: - rust-lang#116675 ([ptr] Document maximum allocation size) - rust-lang#124807 (Migrate `run-make/rustdoc-io-error` to `rmake.rs`) - rust-lang#124997 (Fix ICE while casting a type with error) - rust-lang#125072 (Add test for dynamic dispatch + Pin::new soundness) - rust-lang#125090 (Migrate fuchsia docs from `pm` to `ffx`) r? `@ghost` `@rustbot` modify labels: rollup
- Loading branch information
Showing
10 changed files
with
189 additions
and
41 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
// This test verifies that rustdoc doesn't ICE when it encounters an IO error | ||
// while generating files. Ideally this would be a rustdoc-ui test, so we could | ||
// verify the error message as well. | ||
// | ||
// It operates by creating a temporary directory and modifying its | ||
// permissions so that it is not writable. We have to take special care to set | ||
// the permissions back to normal so that it's able to be deleted later. | ||
|
||
use run_make_support::{rustdoc, tmp_dir}; | ||
use std::fs; | ||
|
||
fn main() { | ||
let out_dir = tmp_dir().join("rustdoc-io-error"); | ||
let output = fs::create_dir(&out_dir).unwrap(); | ||
let mut permissions = fs::metadata(&out_dir).unwrap().permissions(); | ||
let original_permissions = permissions.clone(); | ||
permissions.set_readonly(true); | ||
fs::set_permissions(&out_dir, permissions.clone()).unwrap(); | ||
|
||
let output = rustdoc().input("foo.rs").output(&out_dir).command_output(); | ||
|
||
// Changing back permissions. | ||
fs::set_permissions(&out_dir, original_permissions).unwrap(); | ||
|
||
// Checks that rustdoc failed with the error code 1. | ||
#[cfg(unix)] | ||
assert_eq!(output.status.code().unwrap(), 1); | ||
assert!(!output.status.success()); | ||
let stderr = String::from_utf8(output.stderr).unwrap(); | ||
|
||
assert!(stderr.contains("error: couldn't generate documentation: Permission denied")); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
// Regression test for ICE #124848 | ||
// Tests that there is no ICE when a cast | ||
// involves a type with error | ||
|
||
use std::cell::Cell; | ||
|
||
struct MyType<'a>(Cell<Option<&'unpinned mut MyType<'a>>>, Pin); | ||
//~^ ERROR use of undeclared lifetime name `'unpinned` | ||
//~| ERROR cannot find type `Pin` in this scope | ||
|
||
fn main() { | ||
let mut unpinned = MyType(Cell::new(None)); | ||
//~^ ERROR his struct takes 2 arguments but 1 argument was supplied | ||
let bad_addr = &unpinned as *const Cell<Option<&'a mut MyType<'a>>> as usize; | ||
//~^ ERROR use of undeclared lifetime name `'a` | ||
//~| ERROR use of undeclared lifetime name `'a` | ||
//~| ERROR casting `&MyType<'_>` as `*const Cell<Option<&mut MyType<'_>>>` is invalid | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
error[E0261]: use of undeclared lifetime name `'unpinned` | ||
--> $DIR/ice-cast-type-with-error-124848.rs:7:32 | ||
| | ||
LL | struct MyType<'a>(Cell<Option<&'unpinned mut MyType<'a>>>, Pin); | ||
| - ^^^^^^^^^ undeclared lifetime | ||
| | | ||
| help: consider introducing lifetime `'unpinned` here: `'unpinned,` | ||
|
||
error[E0261]: use of undeclared lifetime name `'a` | ||
--> $DIR/ice-cast-type-with-error-124848.rs:14:53 | ||
| | ||
LL | fn main() { | ||
| - help: consider introducing lifetime `'a` here: `<'a>` | ||
... | ||
LL | let bad_addr = &unpinned as *const Cell<Option<&'a mut MyType<'a>>> as usize; | ||
| ^^ undeclared lifetime | ||
|
||
error[E0261]: use of undeclared lifetime name `'a` | ||
--> $DIR/ice-cast-type-with-error-124848.rs:14:67 | ||
| | ||
LL | fn main() { | ||
| - help: consider introducing lifetime `'a` here: `<'a>` | ||
... | ||
LL | let bad_addr = &unpinned as *const Cell<Option<&'a mut MyType<'a>>> as usize; | ||
| ^^ undeclared lifetime | ||
|
||
error[E0412]: cannot find type `Pin` in this scope | ||
--> $DIR/ice-cast-type-with-error-124848.rs:7:60 | ||
| | ||
LL | struct MyType<'a>(Cell<Option<&'unpinned mut MyType<'a>>>, Pin); | ||
| ^^^ not found in this scope | ||
| | ||
help: consider importing this struct | ||
| | ||
LL + use std::pin::Pin; | ||
| | ||
|
||
error[E0061]: this struct takes 2 arguments but 1 argument was supplied | ||
--> $DIR/ice-cast-type-with-error-124848.rs:12:24 | ||
| | ||
LL | let mut unpinned = MyType(Cell::new(None)); | ||
| ^^^^^^----------------- an argument is missing | ||
| | ||
note: tuple struct defined here | ||
--> $DIR/ice-cast-type-with-error-124848.rs:7:8 | ||
| | ||
LL | struct MyType<'a>(Cell<Option<&'unpinned mut MyType<'a>>>, Pin); | ||
| ^^^^^^ | ||
help: provide the argument | ||
| | ||
LL | let mut unpinned = MyType(Cell::new(None), /* value */); | ||
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
|
||
error[E0606]: casting `&MyType<'_>` as `*const Cell<Option<&mut MyType<'_>>>` is invalid | ||
--> $DIR/ice-cast-type-with-error-124848.rs:14:20 | ||
| | ||
LL | let bad_addr = &unpinned as *const Cell<Option<&'a mut MyType<'a>>> as usize; | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
|
||
error: aborting due to 6 previous errors | ||
|
||
Some errors have detailed explanations: E0061, E0261, E0412, E0606. | ||
For more information about an error, try `rustc --explain E0061`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
use std::marker::PhantomPinned; | ||
use std::pin::Pin; | ||
|
||
trait MyUnpinTrait { | ||
fn into_pinned_type(self: Pin<&mut Self>) -> Pin<&mut PhantomPinned>; | ||
} | ||
impl MyUnpinTrait for PhantomPinned { | ||
fn into_pinned_type(self: Pin<&mut Self>) -> Pin<&mut PhantomPinned> { | ||
self | ||
} | ||
} | ||
impl Unpin for dyn MyUnpinTrait {} //~ ERROR E0321 | ||
|
||
// It would be unsound for this function to compile. | ||
fn pin_it(not_yet_pinned: &mut PhantomPinned) -> Pin<&mut PhantomPinned> { | ||
Pin::new(not_yet_pinned as &mut dyn MyUnpinTrait).into_pinned_type() | ||
} | ||
|
||
fn main() {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
error[E0321]: cross-crate traits with a default impl, like `Unpin`, can only be implemented for a struct/enum type, not `(dyn MyUnpinTrait + 'static)` | ||
--> $DIR/pin-dyn-dispatch-sound.rs:12:1 | ||
| | ||
LL | impl Unpin for dyn MyUnpinTrait {} | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't implement cross-crate trait with a default impl for non-struct/enum type | ||
|
||
error: aborting due to 1 previous error | ||
|
||
For more information about this error, try `rustc --explain E0321`. |