-
Notifications
You must be signed in to change notification settings - Fork 12.9k
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 #125098 - jhpratt:rollup-2qm4gga, r=jhpratt
Rollup of 4 pull requests Successful merges: - #116675 ([ptr] Document maximum allocation size) - #124997 (Fix ICE while casting a type with error) - #125072 (Add test for dynamic dispatch + Pin::new soundness) - #125090 (Migrate fuchsia docs from `pm` to `ffx`) r? `@ghost` `@rustbot` modify labels: rollup
- Loading branch information
Showing
7 changed files
with
157 additions
and
20 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
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`. |