diff options
Diffstat (limited to 'src/tools/clippy/tests/ui/vec_box_sized.rs')
-rw-r--r-- | src/tools/clippy/tests/ui/vec_box_sized.rs | 37 |
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 { |