88 lines
2.0 KiB
Rust
88 lines
2.0 KiB
Rust
//@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::{DummyAllocator, SizedStruct};
|
|
const C: Vec<Box<i32>> = Vec::new();
|
|
static S: Vec<Box<i32>> = Vec::new();
|
|
|
|
struct StructWithVecBox {
|
|
sized_type: Vec<Box<SizedStruct>>,
|
|
}
|
|
|
|
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, DummyAllocator, UnsizedStruct};
|
|
|
|
struct C(Vec<Box<UnsizedStruct>>);
|
|
struct D(Vec<Box<BigStruct>>);
|
|
|
|
struct StructWithVecBoxButItsUnsized {
|
|
unsized_type: Vec<Box<UnsizedStruct>>,
|
|
}
|
|
|
|
struct TraitVec<T: ?Sized> {
|
|
// Regression test for #3720. This was causing an ICE.
|
|
inner: Vec<Box<T>>,
|
|
}
|
|
|
|
fn allocator_mismatch() -> Vec<Box<i32, DummyAllocator>> {
|
|
Vec::new()
|
|
}
|
|
}
|
|
|
|
mod inner_mod {
|
|
mod inner {
|
|
pub struct S;
|
|
}
|
|
|
|
mod inner2 {
|
|
use super::inner::S;
|
|
|
|
pub fn f() -> Vec<Box<S>> {
|
|
vec![]
|
|
}
|
|
}
|
|
}
|
|
|
|
// https://github.com/rust-lang/rust-clippy/issues/11417
|
|
fn in_closure() {
|
|
let _ = |_: Vec<Box<dyn ToString>>| {};
|
|
}
|
|
|
|
fn main() {}
|