summaryrefslogtreecommitdiffstats
path: root/src/tools/clippy/tests/ui/vec_box_sized.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/clippy/tests/ui/vec_box_sized.rs')
-rw-r--r--src/tools/clippy/tests/ui/vec_box_sized.rs37
1 files changed, 35 insertions, 2 deletions
diff --git a/src/tools/clippy/tests/ui/vec_box_sized.rs b/src/tools/clippy/tests/ui/vec_box_sized.rs
index f4e27fe4b..49eaf8e06 100644
--- a/src/tools/clippy/tests/ui/vec_box_sized.rs
+++ b/src/tools/clippy/tests/ui/vec_box_sized.rs
@@ -1,12 +1,28 @@
+//@no-rustfix
+
#![allow(dead_code)]
+#![feature(allocator_api)]
+
+use std::alloc::{AllocError, Allocator, Layout};
+use std::ptr::NonNull;
struct SizedStruct(i32);
struct UnsizedStruct([i32]);
struct BigStruct([i32; 10000]);
+struct DummyAllocator;
+unsafe impl Allocator for DummyAllocator {
+ fn allocate(&self, layout: Layout) -> Result<NonNull<[u8]>, AllocError> {
+ todo!()
+ }
+ unsafe fn deallocate(&self, ptr: NonNull<u8>, layout: Layout) {
+ todo!()
+ }
+}
+
/// The following should trigger the lint
mod should_trigger {
- use super::SizedStruct;
+ use super::{DummyAllocator, SizedStruct};
const C: Vec<Box<i32>> = Vec::new();
static S: Vec<Box<i32>> = Vec::new();
@@ -16,11 +32,21 @@ mod should_trigger {
struct A(Vec<Box<SizedStruct>>);
struct B(Vec<Vec<Box<(u32)>>>);
+
+ fn allocator_global_defined_vec() -> Vec<Box<i32>, std::alloc::Global> {
+ Vec::new()
+ }
+ fn allocator_global_defined_box() -> Vec<Box<i32, std::alloc::Global>> {
+ Vec::new()
+ }
+ fn allocator_match() -> Vec<Box<i32, DummyAllocator>, DummyAllocator> {
+ Vec::new_in(DummyAllocator)
+ }
}
/// The following should not trigger the lint
mod should_not_trigger {
- use super::{BigStruct, UnsizedStruct};
+ use super::{BigStruct, DummyAllocator, UnsizedStruct};
struct C(Vec<Box<UnsizedStruct>>);
struct D(Vec<Box<BigStruct>>);
@@ -33,6 +59,13 @@ mod should_not_trigger {
// Regression test for #3720. This was causing an ICE.
inner: Vec<Box<T>>,
}
+
+ fn allocator_mismatch() -> Vec<Box<i32, DummyAllocator>> {
+ Vec::new()
+ }
+ fn allocator_mismatch_2() -> Vec<Box<i32>, DummyAllocator> {
+ Vec::new_in(DummyAllocator)
+ }
}
mod inner_mod {