#![warn(clippy::pointer_format)] use core::fmt::Debug; use core::marker::PhantomData; #[derive(Debug)] struct ContainsPointerDeep { w: WithPointer, } struct ManualDebug { ptr: *const u8, } #[derive(Debug)] struct WithPointer { len: usize, ptr: *const u8, } impl std::fmt::Debug for ManualDebug { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { f.write_str("ManualDebug") } } trait Foo { type Assoc: Foo + Debug; } #[derive(Debug)] struct S(&'static S, PhantomData); #[allow(unused)] fn unbounded(s: &S) { format!("{s:?}"); } fn main() { let m = &(main as fn()); let g = &0; let o = &format!("{m:p}"); //~^ pointer_format let _ = format!("{m:?}"); //~^ pointer_format println!("{g:p}"); //~^ pointer_format panic!("{o:p}"); //~^ pointer_format let answer = 42; let x = &raw const answer; let arr = [0u8; 8]; let with_ptr = WithPointer { len: 8, ptr: &arr as _ }; let _ = format!("{x:?}"); //~^ pointer_format print!("{with_ptr:?}"); //~^ pointer_format let container = ContainsPointerDeep { w: with_ptr }; print!("{container:?}"); //~^ pointer_format let no_pointer = "foo"; println!("{no_pointer:?}"); let manual_debug = ManualDebug { ptr: &arr as _ }; println!("{manual_debug:?}"); }