//! Regression test for . //! //! The changes in exposed a //! latent bug that would sometimes cause the compiler to emit a covfun record //! for a function, but not emit a corresponding PGO symbol name entry, because //! the function did not have any physical coverage counters. The `llvm-cov` //! tool would then fail to resolve the covfun record's function name hash, //! and exit with the cryptic error: //! //! ```text //! malformed instrumentation profile data: function name is empty //! ``` //! //! The bug was then triggered in the wild by the macro-expansion of //! `#[derive(arbitrary::Arbitrary)]`. //! //! This test uses a minimized form of the `Arbitrary` derive macro that was //! found to still trigger the original bug. The bug could also be triggered //! by a bang proc-macro or an attribute proc-macro. //@ edition: 2024 //@ revisions: attr bang derive //@ proc-macro: try_in_macro_helper.rs trait Arbitrary { fn try_size_hint() -> Option; } // Expand via an attribute proc-macro. #[cfg_attr(attr, try_in_macro_helper::attr)] const _: () = (); // Expand via a regular bang-style proc-macro. #[cfg(bang)] try_in_macro_helper::bang!(); // Expand via a derive proc-macro. #[cfg_attr(derive, derive(try_in_macro_helper::Arbitrary))] enum MyEnum {} fn main() { MyEnum::try_size_hint(); }