LL| |#![feature(coverage_attribute)] LL| |//@ edition: 2024 LL| |//@ revisions: base auto on LL| | LL| |// Tests for how `#[automatically_derived]` affects coverage instrumentation. LL| |// LL| |// The actual behaviour is an implementation detail, so this test mostly exists LL| |// to show when that behaviour has been accidentally or deliberately changed. LL| |// LL| |// Revision guide: LL| |// - base: Test baseline instrumentation behaviour without `#[automatically_derived]` LL| |// - auto: Test how `#[automatically_derived]` affects instrumentation LL| |// - on: Test interaction between auto-derived and `#[coverage(on)]` LL| | LL| |struct MyStruct; LL| | LL| |trait MyTrait { LL| | fn my_assoc_fn(); LL| |} LL| | LL| |#[cfg_attr(auto, automatically_derived)] LL| |#[cfg_attr(on, automatically_derived)] LL| |#[cfg_attr(on, coverage(on))] LL| |impl MyTrait for MyStruct { LL| 1| fn my_assoc_fn() { LL| 1| fn inner_fn() { LL| 1| say("in inner fn"); LL| 1| } LL| | LL| | #[coverage(on)] LL| 1| fn inner_fn_on() { LL| 1| say("in inner fn (on)"); LL| 1| } LL| | LL| 1| let closure = || { LL| 1| say("in closure"); LL| 1| }; LL| | LL| 1| closure(); LL| 1| inner_fn(); LL| 1| inner_fn_on(); LL| 1| } LL| |} LL| | LL| |#[coverage(off)] LL| |#[inline(never)] LL| |fn say(s: &str) { LL| | println!("{s}"); LL| |} LL| | LL| 1|fn main() { LL| 1| MyStruct::my_assoc_fn(); LL| 1|}