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