Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
coverage: Test how #[automatically_derived] affects instrumentation
  • Loading branch information
Zalathar committed Jul 29, 2025
commit 27610341768951b2d46071683bcb87ea7c690e98
47 changes: 47 additions & 0 deletions tests/coverage/auto-derived.auto.cov-map
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
Function name: <auto_derived::MyStruct as auto_derived::MyTrait>::my_assoc_fn::inner_fn
Raw bytes (24): 0x[01, 01, 00, 04, 01, 1a, 09, 00, 16, 01, 01, 0d, 00, 10, 01, 00, 11, 00, 1e, 01, 01, 09, 00, 0a]
Number of files: 1
- file 0 => $DIR/auto-derived.rs
Number of expressions: 0
Number of file 0 mappings: 4
- Code(Counter(0)) at (prev + 26, 9) to (start + 0, 22)
- Code(Counter(0)) at (prev + 1, 13) to (start + 0, 16)
- Code(Counter(0)) at (prev + 0, 17) to (start + 0, 30)
- Code(Counter(0)) at (prev + 1, 9) to (start + 0, 10)
Highest counter ID seen: c0

Function name: <auto_derived::MyStruct as auto_derived::MyTrait>::my_assoc_fn::inner_fn_on
Raw bytes (24): 0x[01, 01, 00, 04, 01, 1f, 09, 00, 19, 01, 01, 0d, 00, 10, 01, 00, 11, 00, 23, 01, 01, 09, 00, 0a]
Number of files: 1
- file 0 => $DIR/auto-derived.rs
Number of expressions: 0
Number of file 0 mappings: 4
- Code(Counter(0)) at (prev + 31, 9) to (start + 0, 25)
- Code(Counter(0)) at (prev + 1, 13) to (start + 0, 16)
- Code(Counter(0)) at (prev + 0, 17) to (start + 0, 35)
- Code(Counter(0)) at (prev + 1, 9) to (start + 0, 10)
Highest counter ID seen: c0

Function name: <auto_derived::MyStruct as auto_derived::MyTrait>::my_assoc_fn::{closure#0}
Raw bytes (24): 0x[01, 01, 00, 04, 01, 23, 1a, 00, 1b, 01, 01, 0d, 00, 10, 01, 00, 11, 00, 1d, 01, 01, 09, 00, 0a]
Number of files: 1
- file 0 => $DIR/auto-derived.rs
Number of expressions: 0
Number of file 0 mappings: 4
- Code(Counter(0)) at (prev + 35, 26) to (start + 0, 27)
- Code(Counter(0)) at (prev + 1, 13) to (start + 0, 16)
- Code(Counter(0)) at (prev + 0, 17) to (start + 0, 29)
- Code(Counter(0)) at (prev + 1, 9) to (start + 0, 10)
Highest counter ID seen: c0

Function name: auto_derived::main
Raw bytes (19): 0x[01, 01, 00, 03, 01, 33, 01, 00, 0a, 01, 01, 05, 00, 1a, 01, 01, 01, 00, 02]
Number of files: 1
- file 0 => $DIR/auto-derived.rs
Number of expressions: 0
Number of file 0 mappings: 3
- Code(Counter(0)) at (prev + 51, 1) to (start + 0, 10)
- Code(Counter(0)) at (prev + 1, 5) to (start + 0, 26)
- Code(Counter(0)) at (prev + 1, 1) to (start + 0, 2)
Highest counter ID seen: c0

54 changes: 54 additions & 0 deletions tests/coverage/auto-derived.auto.coverage
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
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| | 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| | closure();
LL| | inner_fn();
LL| | inner_fn_on();
LL| | }
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|}

61 changes: 61 additions & 0 deletions tests/coverage/auto-derived.base.cov-map
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
Function name: <auto_derived::MyStruct as auto_derived::MyTrait>::my_assoc_fn
Raw bytes (34): 0x[01, 01, 00, 06, 01, 19, 05, 00, 15, 01, 0a, 0d, 00, 14, 01, 04, 09, 00, 12, 01, 01, 09, 00, 11, 01, 01, 09, 00, 14, 01, 01, 05, 00, 06]
Number of files: 1
- file 0 => $DIR/auto-derived.rs
Number of expressions: 0
Number of file 0 mappings: 6
- Code(Counter(0)) at (prev + 25, 5) to (start + 0, 21)
- Code(Counter(0)) at (prev + 10, 13) to (start + 0, 20)
- Code(Counter(0)) at (prev + 4, 9) to (start + 0, 18)
- Code(Counter(0)) at (prev + 1, 9) to (start + 0, 17)
- Code(Counter(0)) at (prev + 1, 9) to (start + 0, 20)
- Code(Counter(0)) at (prev + 1, 5) to (start + 0, 6)
Highest counter ID seen: c0

Function name: <auto_derived::MyStruct as auto_derived::MyTrait>::my_assoc_fn::inner_fn
Raw bytes (24): 0x[01, 01, 00, 04, 01, 1a, 09, 00, 16, 01, 01, 0d, 00, 10, 01, 00, 11, 00, 1e, 01, 01, 09, 00, 0a]
Number of files: 1
- file 0 => $DIR/auto-derived.rs
Number of expressions: 0
Number of file 0 mappings: 4
- Code(Counter(0)) at (prev + 26, 9) to (start + 0, 22)
- Code(Counter(0)) at (prev + 1, 13) to (start + 0, 16)
- Code(Counter(0)) at (prev + 0, 17) to (start + 0, 30)
- Code(Counter(0)) at (prev + 1, 9) to (start + 0, 10)
Highest counter ID seen: c0

Function name: <auto_derived::MyStruct as auto_derived::MyTrait>::my_assoc_fn::inner_fn_on
Raw bytes (24): 0x[01, 01, 00, 04, 01, 1f, 09, 00, 19, 01, 01, 0d, 00, 10, 01, 00, 11, 00, 23, 01, 01, 09, 00, 0a]
Number of files: 1
- file 0 => $DIR/auto-derived.rs
Number of expressions: 0
Number of file 0 mappings: 4
- Code(Counter(0)) at (prev + 31, 9) to (start + 0, 25)
- Code(Counter(0)) at (prev + 1, 13) to (start + 0, 16)
- Code(Counter(0)) at (prev + 0, 17) to (start + 0, 35)
- Code(Counter(0)) at (prev + 1, 9) to (start + 0, 10)
Highest counter ID seen: c0

Function name: <auto_derived::MyStruct as auto_derived::MyTrait>::my_assoc_fn::{closure#0}
Raw bytes (24): 0x[01, 01, 00, 04, 01, 23, 1a, 00, 1b, 01, 01, 0d, 00, 10, 01, 00, 11, 00, 1d, 01, 01, 09, 00, 0a]
Number of files: 1
- file 0 => $DIR/auto-derived.rs
Number of expressions: 0
Number of file 0 mappings: 4
- Code(Counter(0)) at (prev + 35, 26) to (start + 0, 27)
- Code(Counter(0)) at (prev + 1, 13) to (start + 0, 16)
- Code(Counter(0)) at (prev + 0, 17) to (start + 0, 29)
- Code(Counter(0)) at (prev + 1, 9) to (start + 0, 10)
Highest counter ID seen: c0

Function name: auto_derived::main
Raw bytes (19): 0x[01, 01, 00, 03, 01, 33, 01, 00, 0a, 01, 01, 05, 00, 1a, 01, 01, 01, 00, 02]
Number of files: 1
- file 0 => $DIR/auto-derived.rs
Number of expressions: 0
Number of file 0 mappings: 3
- Code(Counter(0)) at (prev + 51, 1) to (start + 0, 10)
- Code(Counter(0)) at (prev + 1, 5) to (start + 0, 26)
- Code(Counter(0)) at (prev + 1, 1) to (start + 0, 2)
Highest counter ID seen: c0

54 changes: 54 additions & 0 deletions tests/coverage/auto-derived.base.coverage
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
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|}

47 changes: 47 additions & 0 deletions tests/coverage/auto-derived.on.cov-map
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
Function name: <auto_derived::MyStruct as auto_derived::MyTrait>::my_assoc_fn::inner_fn
Raw bytes (24): 0x[01, 01, 00, 04, 01, 1a, 09, 00, 16, 01, 01, 0d, 00, 10, 01, 00, 11, 00, 1e, 01, 01, 09, 00, 0a]
Number of files: 1
- file 0 => $DIR/auto-derived.rs
Number of expressions: 0
Number of file 0 mappings: 4
- Code(Counter(0)) at (prev + 26, 9) to (start + 0, 22)
- Code(Counter(0)) at (prev + 1, 13) to (start + 0, 16)
- Code(Counter(0)) at (prev + 0, 17) to (start + 0, 30)
- Code(Counter(0)) at (prev + 1, 9) to (start + 0, 10)
Highest counter ID seen: c0

Function name: <auto_derived::MyStruct as auto_derived::MyTrait>::my_assoc_fn::inner_fn_on
Raw bytes (24): 0x[01, 01, 00, 04, 01, 1f, 09, 00, 19, 01, 01, 0d, 00, 10, 01, 00, 11, 00, 23, 01, 01, 09, 00, 0a]
Number of files: 1
- file 0 => $DIR/auto-derived.rs
Number of expressions: 0
Number of file 0 mappings: 4
- Code(Counter(0)) at (prev + 31, 9) to (start + 0, 25)
- Code(Counter(0)) at (prev + 1, 13) to (start + 0, 16)
- Code(Counter(0)) at (prev + 0, 17) to (start + 0, 35)
- Code(Counter(0)) at (prev + 1, 9) to (start + 0, 10)
Highest counter ID seen: c0

Function name: <auto_derived::MyStruct as auto_derived::MyTrait>::my_assoc_fn::{closure#0}
Raw bytes (24): 0x[01, 01, 00, 04, 01, 23, 1a, 00, 1b, 01, 01, 0d, 00, 10, 01, 00, 11, 00, 1d, 01, 01, 09, 00, 0a]
Number of files: 1
- file 0 => $DIR/auto-derived.rs
Number of expressions: 0
Number of file 0 mappings: 4
- Code(Counter(0)) at (prev + 35, 26) to (start + 0, 27)
- Code(Counter(0)) at (prev + 1, 13) to (start + 0, 16)
- Code(Counter(0)) at (prev + 0, 17) to (start + 0, 29)
- Code(Counter(0)) at (prev + 1, 9) to (start + 0, 10)
Highest counter ID seen: c0

Function name: auto_derived::main
Raw bytes (19): 0x[01, 01, 00, 03, 01, 33, 01, 00, 0a, 01, 01, 05, 00, 1a, 01, 01, 01, 00, 02]
Number of files: 1
- file 0 => $DIR/auto-derived.rs
Number of expressions: 0
Number of file 0 mappings: 3
- Code(Counter(0)) at (prev + 51, 1) to (start + 0, 10)
- Code(Counter(0)) at (prev + 1, 5) to (start + 0, 26)
- Code(Counter(0)) at (prev + 1, 1) to (start + 0, 2)
Highest counter ID seen: c0

54 changes: 54 additions & 0 deletions tests/coverage/auto-derived.on.coverage
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
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| | 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| | closure();
LL| | inner_fn();
LL| | inner_fn_on();
LL| | }
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|}

53 changes: 53 additions & 0 deletions tests/coverage/auto-derived.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#![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();
}