diff options
| author | Michael Goulet <michael@errs.io> | 2024-09-05 07:02:26 -0400 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2024-10-05 18:36:47 -0400 |
| commit | 6371ef6e964a72ca3b4c7557312d8808e98f4ff3 (patch) | |
| tree | 9e66de863d98c67ed1d623e12c9d4553b2b0de26 /tests/ui/raw-ref-op | |
| parent | 9096f4fafa2ac2d771f866337b4ee7064cde8575 (diff) | |
| download | rust-6371ef6e964a72ca3b4c7557312d8808e98f4ff3.tar.gz rust-6371ef6e964a72ca3b4c7557312d8808e98f4ff3.zip | |
Evaluating place expr that is never read from does not diverge
Diffstat (limited to 'tests/ui/raw-ref-op')
| -rw-r--r-- | tests/ui/raw-ref-op/never-place-isnt-diverging.rs | 13 | ||||
| -rw-r--r-- | tests/ui/raw-ref-op/never-place-isnt-diverging.stderr | 20 |
2 files changed, 33 insertions, 0 deletions
diff --git a/tests/ui/raw-ref-op/never-place-isnt-diverging.rs b/tests/ui/raw-ref-op/never-place-isnt-diverging.rs new file mode 100644 index 00000000000..52f4158dbc9 --- /dev/null +++ b/tests/ui/raw-ref-op/never-place-isnt-diverging.rs @@ -0,0 +1,13 @@ +#![feature(never_type)] + +fn make_up_a_value<T>() -> T { + unsafe { + //~^ ERROR mismatched types + let x: *const ! = 0 as _; + &raw const *x; + // Since `*x` is `!`, HIR typeck used to think that it diverges + // and allowed the block to coerce to any value, leading to UB. + } +} + +fn main() {} diff --git a/tests/ui/raw-ref-op/never-place-isnt-diverging.stderr b/tests/ui/raw-ref-op/never-place-isnt-diverging.stderr new file mode 100644 index 00000000000..9eba57dde8f --- /dev/null +++ b/tests/ui/raw-ref-op/never-place-isnt-diverging.stderr @@ -0,0 +1,20 @@ +error[E0308]: mismatched types + --> $DIR/never-place-isnt-diverging.rs:4:5 + | +LL | fn make_up_a_value<T>() -> T { + | - expected this type parameter +LL | / unsafe { +LL | | +LL | | let x: *const ! = 0 as _; +LL | | &raw const *x; +LL | | // Since `*x` is `!`, HIR typeck used to think that it diverges +LL | | // and allowed the block to coerce to any value, leading to UB. +LL | | } + | |_____^ expected type parameter `T`, found `()` + | + = note: expected type parameter `T` + found unit type `()` + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0308`. |
