Rollup merge of #64967 - ecstatic-morse:issue-64945, r=oli-obk
Don't mark borrows of zero-sized arrays as indirectly mutable Resolves #64945 r? @oli-obk
This commit is contained in:
commit
ccf1d9ca93
4 changed files with 93 additions and 16 deletions
31
src/test/ui/consts/const-eval/generic-slice.rs
Normal file
31
src/test/ui/consts/const-eval/generic-slice.rs
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
// Several variants of #64945.
|
||||
|
||||
// This struct is not important, we just use it to put `T` and `'a` in scope for our associated
|
||||
// consts.
|
||||
struct Generic<'a, T>(std::marker::PhantomData<&'a T>);
|
||||
|
||||
impl<'a, T: 'static> Generic<'a, T> {
|
||||
const EMPTY_SLICE: &'a [T] = {
|
||||
let x: &'a [T] = &[];
|
||||
x
|
||||
};
|
||||
|
||||
const EMPTY_SLICE_REF: &'a &'static [T] = {
|
||||
let x: &'static [T] = &[];
|
||||
&x
|
||||
//~^ ERROR `x` does not live long enough
|
||||
};
|
||||
}
|
||||
|
||||
static mut INTERIOR_MUT_AND_DROP: &'static [std::cell::RefCell<Vec<i32>>] = {
|
||||
let x: &[_] = &[];
|
||||
x
|
||||
};
|
||||
|
||||
static mut INTERIOR_MUT_AND_DROP_REF: &'static &'static [std::cell::RefCell<Vec<i32>>] = {
|
||||
let x: &[_] = &[];
|
||||
&x
|
||||
//~^ ERROR `x` does not live long enough
|
||||
};
|
||||
|
||||
fn main() {}
|
||||
30
src/test/ui/consts/const-eval/generic-slice.stderr
Normal file
30
src/test/ui/consts/const-eval/generic-slice.stderr
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
error[E0597]: `x` does not live long enough
|
||||
--> $DIR/generic-slice.rs:15:9
|
||||
|
|
||||
LL | impl<'a, T: 'static> Generic<'a, T> {
|
||||
| -- lifetime `'a` defined here
|
||||
...
|
||||
LL | &x
|
||||
| ^^
|
||||
| |
|
||||
| borrowed value does not live long enough
|
||||
| using this value as a constant requires that `x` is borrowed for `'a`
|
||||
LL |
|
||||
LL | };
|
||||
| - `x` dropped here while still borrowed
|
||||
|
||||
error[E0597]: `x` does not live long enough
|
||||
--> $DIR/generic-slice.rs:27:5
|
||||
|
|
||||
LL | &x
|
||||
| ^^
|
||||
| |
|
||||
| borrowed value does not live long enough
|
||||
| using this value as a static requires that `x` is borrowed for `'static`
|
||||
LL |
|
||||
LL | };
|
||||
| - `x` dropped here while still borrowed
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0597`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue