diff options
| author | bors <bors@rust-lang.org> | 2024-05-14 03:19:44 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-05-14 03:19:44 +0000 |
| commit | fba5f44bd880b83245f7d30afe55bf745a88cdf0 (patch) | |
| tree | 15bfcf5c6ef30000e6f7ea2eddf5b9466f539776 /tests | |
| parent | 9105c57b7f6623310e33f3ee7e48a3114e5190a7 (diff) | |
| parent | 32d74f18006ffd3bb9cc88e3606a69b6621b2540 (diff) | |
| download | rust-fba5f44bd880b83245f7d30afe55bf745a88cdf0.tar.gz rust-fba5f44bd880b83245f7d30afe55bf745a88cdf0.zip | |
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
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/ui/cast/ice-cast-type-with-error-124848.rs | 18 | ||||
| -rw-r--r-- | tests/ui/cast/ice-cast-type-with-error-124848.stderr | 63 | ||||
| -rw-r--r-- | tests/ui/coercion/pin-dyn-dispatch-sound.rs | 19 | ||||
| -rw-r--r-- | tests/ui/coercion/pin-dyn-dispatch-sound.stderr | 9 |
4 files changed, 109 insertions, 0 deletions
diff --git a/tests/ui/cast/ice-cast-type-with-error-124848.rs b/tests/ui/cast/ice-cast-type-with-error-124848.rs new file mode 100644 index 00000000000..9b3732b02db --- /dev/null +++ b/tests/ui/cast/ice-cast-type-with-error-124848.rs @@ -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 +} diff --git a/tests/ui/cast/ice-cast-type-with-error-124848.stderr b/tests/ui/cast/ice-cast-type-with-error-124848.stderr new file mode 100644 index 00000000000..2d86bf76d11 --- /dev/null +++ b/tests/ui/cast/ice-cast-type-with-error-124848.stderr @@ -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`. diff --git a/tests/ui/coercion/pin-dyn-dispatch-sound.rs b/tests/ui/coercion/pin-dyn-dispatch-sound.rs new file mode 100644 index 00000000000..b9d43ebac8b --- /dev/null +++ b/tests/ui/coercion/pin-dyn-dispatch-sound.rs @@ -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() {} diff --git a/tests/ui/coercion/pin-dyn-dispatch-sound.stderr b/tests/ui/coercion/pin-dyn-dispatch-sound.stderr new file mode 100644 index 00000000000..45860bfcfc7 --- /dev/null +++ b/tests/ui/coercion/pin-dyn-dispatch-sound.stderr @@ -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`. |
