mirror of
https://github.com/rust-lang/rust.git
synced 2025-10-03 18:57:19 +00:00

The bug was triggered by a particular usage of the `?` try operator in a proc-macro expansion. Thanks to lqd for the minimization. Co-authored-by: Rémy Rakic <remy.rakic+github@gmail.com>
44 lines
1.4 KiB
Rust
44 lines
1.4 KiB
Rust
//! Regression test for <https://github.com/rust-lang/rust/issues/141577>.
|
|
//!
|
|
//! The changes in <https://github.com/rust-lang/rust/pull/144298> 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<usize>;
|
|
}
|
|
|
|
// 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();
|
|
}
|