pass the right ParamEnv to might_permit_raw_init_strict

This commit is contained in:
y21 2024-08-06 01:53:50 +02:00
parent 5ef38a3bc7
commit 4c6a3f4b6e
2 changed files with 31 additions and 14 deletions

View File

@ -1,6 +1,7 @@
#![warn(clippy::uninit_vec)] #![warn(clippy::uninit_vec)]
use std::mem::MaybeUninit; use std::mem::MaybeUninit;
use std::cell::UnsafeCell;
#[derive(Default)] #[derive(Default)]
struct MyVec { struct MyVec {
@ -12,6 +13,12 @@ union MyOwnMaybeUninit {
uninit: (), uninit: (),
} }
// https://github.com/rust-lang/rust/issues/119620
unsafe fn requires_paramenv<S>() {
let mut vec = Vec::<UnsafeCell<*mut S>>::with_capacity(1);
vec.set_len(1);
}
fn main() { fn main() {
// with_capacity() -> set_len() should be detected // with_capacity() -> set_len() should be detected
let mut vec: Vec<u8> = Vec::with_capacity(1000); let mut vec: Vec<u8> = Vec::with_capacity(1000);

View File

@ -1,5 +1,17 @@
error: calling `set_len()` immediately after reserving a buffer creates uninitialized values error: calling `set_len()` immediately after reserving a buffer creates uninitialized values
--> tests/ui/uninit_vec.rs:17:5 --> tests/ui/uninit_vec.rs:18:5
|
LL | let mut vec = Vec::<UnsafeCell<*mut S>>::with_capacity(1);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
LL | vec.set_len(1);
| ^^^^^^^^^^^^^^
|
= help: initialize the buffer or wrap the content in `MaybeUninit`
= note: `-D clippy::uninit-vec` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::uninit_vec)]`
error: calling `set_len()` immediately after reserving a buffer creates uninitialized values
--> tests/ui/uninit_vec.rs:24:5
| |
LL | let mut vec: Vec<u8> = Vec::with_capacity(1000); LL | let mut vec: Vec<u8> = Vec::with_capacity(1000);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -8,11 +20,9 @@ LL | vec.set_len(200);
| ^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^
| |
= help: initialize the buffer or wrap the content in `MaybeUninit` = help: initialize the buffer or wrap the content in `MaybeUninit`
= note: `-D clippy::uninit-vec` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::uninit_vec)]`
error: calling `set_len()` immediately after reserving a buffer creates uninitialized values error: calling `set_len()` immediately after reserving a buffer creates uninitialized values
--> tests/ui/uninit_vec.rs:24:5 --> tests/ui/uninit_vec.rs:31:5
| |
LL | vec.reserve(1000); LL | vec.reserve(1000);
| ^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^
@ -23,7 +33,7 @@ LL | vec.set_len(200);
= help: initialize the buffer or wrap the content in `MaybeUninit` = help: initialize the buffer or wrap the content in `MaybeUninit`
error: calling `set_len()` on empty `Vec` creates out-of-bound values error: calling `set_len()` on empty `Vec` creates out-of-bound values
--> tests/ui/uninit_vec.rs:31:5 --> tests/ui/uninit_vec.rs:38:5
| |
LL | let mut vec: Vec<u8> = Vec::new(); LL | let mut vec: Vec<u8> = Vec::new();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -32,7 +42,7 @@ LL | vec.set_len(200);
| ^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^
error: calling `set_len()` on empty `Vec` creates out-of-bound values error: calling `set_len()` on empty `Vec` creates out-of-bound values
--> tests/ui/uninit_vec.rs:38:5 --> tests/ui/uninit_vec.rs:45:5
| |
LL | let mut vec: Vec<u8> = Default::default(); LL | let mut vec: Vec<u8> = Default::default();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -41,7 +51,7 @@ LL | vec.set_len(200);
| ^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^
error: calling `set_len()` on empty `Vec` creates out-of-bound values error: calling `set_len()` on empty `Vec` creates out-of-bound values
--> tests/ui/uninit_vec.rs:44:5 --> tests/ui/uninit_vec.rs:51:5
| |
LL | let mut vec: Vec<u8> = Vec::default(); LL | let mut vec: Vec<u8> = Vec::default();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -50,7 +60,7 @@ LL | vec.set_len(200);
| ^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^
error: calling `set_len()` immediately after reserving a buffer creates uninitialized values error: calling `set_len()` immediately after reserving a buffer creates uninitialized values
--> tests/ui/uninit_vec.rs:61:5 --> tests/ui/uninit_vec.rs:68:5
| |
LL | let mut vec: Vec<u8> = Vec::with_capacity(1000); LL | let mut vec: Vec<u8> = Vec::with_capacity(1000);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -61,7 +71,7 @@ LL | vec.set_len(200);
= help: initialize the buffer or wrap the content in `MaybeUninit` = help: initialize the buffer or wrap the content in `MaybeUninit`
error: calling `set_len()` immediately after reserving a buffer creates uninitialized values error: calling `set_len()` immediately after reserving a buffer creates uninitialized values
--> tests/ui/uninit_vec.rs:71:5 --> tests/ui/uninit_vec.rs:78:5
| |
LL | my_vec.vec.reserve(1000); LL | my_vec.vec.reserve(1000);
| ^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^
@ -72,7 +82,7 @@ LL | my_vec.vec.set_len(200);
= help: initialize the buffer or wrap the content in `MaybeUninit` = help: initialize the buffer or wrap the content in `MaybeUninit`
error: calling `set_len()` immediately after reserving a buffer creates uninitialized values error: calling `set_len()` immediately after reserving a buffer creates uninitialized values
--> tests/ui/uninit_vec.rs:77:5 --> tests/ui/uninit_vec.rs:84:5
| |
LL | my_vec.vec = Vec::with_capacity(1000); LL | my_vec.vec = Vec::with_capacity(1000);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -83,7 +93,7 @@ LL | my_vec.vec.set_len(200);
= help: initialize the buffer or wrap the content in `MaybeUninit` = help: initialize the buffer or wrap the content in `MaybeUninit`
error: calling `set_len()` immediately after reserving a buffer creates uninitialized values error: calling `set_len()` immediately after reserving a buffer creates uninitialized values
--> tests/ui/uninit_vec.rs:52:9 --> tests/ui/uninit_vec.rs:59:9
| |
LL | let mut vec: Vec<u8> = Vec::with_capacity(1000); LL | let mut vec: Vec<u8> = Vec::with_capacity(1000);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -94,7 +104,7 @@ LL | vec.set_len(200);
= help: initialize the buffer or wrap the content in `MaybeUninit` = help: initialize the buffer or wrap the content in `MaybeUninit`
error: calling `set_len()` immediately after reserving a buffer creates uninitialized values error: calling `set_len()` immediately after reserving a buffer creates uninitialized values
--> tests/ui/uninit_vec.rs:56:9 --> tests/ui/uninit_vec.rs:63:9
| |
LL | vec.reserve(1000); LL | vec.reserve(1000);
| ^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^
@ -105,7 +115,7 @@ LL | vec.set_len(200);
= help: initialize the buffer or wrap the content in `MaybeUninit` = help: initialize the buffer or wrap the content in `MaybeUninit`
error: calling `set_len()` immediately after reserving a buffer creates uninitialized values error: calling `set_len()` immediately after reserving a buffer creates uninitialized values
--> tests/ui/uninit_vec.rs:132:9 --> tests/ui/uninit_vec.rs:139:9
| |
LL | let mut vec: Vec<T> = Vec::with_capacity(1000); LL | let mut vec: Vec<T> = Vec::with_capacity(1000);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -115,5 +125,5 @@ LL | vec.set_len(10);
| |
= help: initialize the buffer or wrap the content in `MaybeUninit` = help: initialize the buffer or wrap the content in `MaybeUninit`
error: aborting due to 11 previous errors error: aborting due to 12 previous errors