#![warn(clippy::zero_sized_map_values)] use std::collections::HashMap; const CONST_OK: Option> = None; const CONST_NOT_OK: Option> = None; //~^ zero_sized_map_values static STATIC_OK: Option> = None; static STATIC_NOT_OK: Option> = None; //~^ zero_sized_map_values type OkMap = HashMap; type NotOkMap = HashMap; //~^ zero_sized_map_values enum TestEnum { Ok(HashMap), NotOk(HashMap), //~^ zero_sized_map_values } struct Test { ok: HashMap, not_ok: HashMap, //~^ zero_sized_map_values also_not_ok: Vec>, //~^ zero_sized_map_values } trait TestTrait { type Output; fn produce_output() -> Self::Output; fn weird_map(&self, map: HashMap); //~^ zero_sized_map_values } impl Test { fn ok(&self) -> HashMap { todo!() } fn not_ok(&self) -> HashMap { //~^ zero_sized_map_values todo!() } } impl TestTrait for Test { type Output = HashMap; fn produce_output() -> Self::Output { todo!(); } fn weird_map(&self, map: HashMap) { todo!(); } } fn test(map: HashMap, key: &str) -> HashMap { //~^ zero_sized_map_values //~| zero_sized_map_values todo!(); } fn test2(map: HashMap, key: &str) -> HashMap { todo!(); } fn issue14822() { trait Trait { type T; } struct S(T::T); // The `delay_bug` happens when evaluating the pointer metadata of `S` which depends on // whether `T::T` is `Sized`. Since the type alias doesn't have a trait bound of `T: Trait` // evaluating `T::T: Sized` ultimately fails with `NoSolution`. type A = HashMap>; type B = HashMap>; enum E {} impl Trait for E { type T = (); } type C = HashMap>; type D = HashMap>; //~^ zero_sized_map_values } fn issue15429() { struct E<'a>(&'a [E<'a>]); // The assertion error happens when the type being evaluated has escaping bound vars // as it cannot be wrapped in a dummy binder during size computation. type F = dyn for<'a> FnOnce(HashMap>) -> u32; } fn main() { let _: HashMap = HashMap::new(); //~^ zero_sized_map_values //~| zero_sized_map_values let _: HashMap = HashMap::new(); let _: HashMap<_, _> = std::iter::empty::<(String, ())>().collect(); //~^ zero_sized_map_values }