Skip to content

Commit

Permalink
Rollup merge of #134517 - ehuss:coverage-trait-test, r=Zalathar
Browse files Browse the repository at this point in the history
Add tests for coverage attribute on trait functions

This adds tests for the coverage attribute on trait functions. cc #84605 (comment)
  • Loading branch information
matthiaskrgr authored Dec 23, 2024
2 parents 95c33e3 + 5d9f17f commit 369be18
Show file tree
Hide file tree
Showing 5 changed files with 95 additions and 10 deletions.
9 changes: 9 additions & 0 deletions tests/coverage/attr/trait-impl-inherit.cov-map
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
Function name: <trait_impl_inherit::S as trait_impl_inherit::T>::f
Raw bytes (9): 0x[01, 01, 00, 01, 01, 11, 05, 02, 06]
Number of files: 1
- file 0 => global file 1
Number of expressions: 0
Number of file 0 mappings: 1
- Code(Counter(0)) at (prev + 17, 5) to (start + 2, 6)
Highest counter ID seen: c0

26 changes: 26 additions & 0 deletions tests/coverage/attr/trait-impl-inherit.coverage
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
LL| |#![feature(coverage_attribute)]
LL| |// Checks that `#[coverage(..)]` in a trait method is not inherited in an
LL| |// implementation.
LL| |//@ edition: 2021
LL| |//@ reference: attributes.coverage.trait-impl-inherit
LL| |
LL| |trait T {
LL| | #[coverage(off)]
LL| | fn f(&self) {
LL| | println!("default");
LL| | }
LL| |}
LL| |
LL| |struct S;
LL| |
LL| |impl T for S {
LL| 1| fn f(&self) {
LL| 1| println!("impl S");
LL| 1| }
LL| |}
LL| |
LL| |#[coverage(off)]
LL| |fn main() {
LL| | S.f();
LL| |}

25 changes: 25 additions & 0 deletions tests/coverage/attr/trait-impl-inherit.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#![feature(coverage_attribute)]
// Checks that `#[coverage(..)]` in a trait method is not inherited in an
// implementation.
//@ edition: 2021
//@ reference: attributes.coverage.trait-impl-inherit

trait T {
#[coverage(off)]
fn f(&self) {
println!("default");
}
}

struct S;

impl T for S {
fn f(&self) {
println!("impl S");
}
}

#[coverage(off)]
fn main() {
S.f();
}
9 changes: 9 additions & 0 deletions tests/ui/coverage-attr/no-coverage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,12 @@ trait Trait {
type T;

type U;

#[coverage(off)] //~ ERROR attribute should be applied to a function definition or closure
fn f(&self);

#[coverage(off)] //~ ERROR attribute should be applied to a function definition or closure
fn g();
}

#[coverage(off)]
Expand All @@ -26,6 +32,9 @@ impl Trait for () {

#[coverage(off)] //~ ERROR attribute should be applied to a function definition or closure
type U = impl Trait; //~ ERROR unconstrained opaque type

fn f(&self) {}
fn g() {}
}

extern "C" {
Expand Down
36 changes: 26 additions & 10 deletions tests/ui/coverage-attr/no-coverage.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -7,28 +7,28 @@ LL | / trait Trait {
LL | | #[coverage(off)]
LL | | const X: u32;
... |
LL | | type U;
LL | | fn g();
LL | | }
| |_- not a function or closure

error[E0788]: attribute should be applied to a function definition or closure
--> $DIR/no-coverage.rs:41:5
--> $DIR/no-coverage.rs:50:5
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | let _ = ();
| ----------- not a function or closure

error[E0788]: attribute should be applied to a function definition or closure
--> $DIR/no-coverage.rs:45:9
--> $DIR/no-coverage.rs:54:9
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | () => (),
| -------- not a function or closure

error[E0788]: attribute should be applied to a function definition or closure
--> $DIR/no-coverage.rs:49:5
--> $DIR/no-coverage.rs:58:5
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
Expand All @@ -52,45 +52,61 @@ LL | type T;
| ------- not a function or closure

error[E0788]: attribute should be applied to a function definition or closure
--> $DIR/no-coverage.rs:24:5
--> $DIR/no-coverage.rs:19:5
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | fn f(&self);
| ------------ not a function or closure

error[E0788]: attribute should be applied to a function definition or closure
--> $DIR/no-coverage.rs:22:5
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | fn g();
| ------- not a function or closure

error[E0788]: attribute should be applied to a function definition or closure
--> $DIR/no-coverage.rs:30:5
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | type T = Self;
| -------------- not a function or closure

error[E0788]: attribute should be applied to a function definition or closure
--> $DIR/no-coverage.rs:27:5
--> $DIR/no-coverage.rs:33:5
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | type U = impl Trait;
| -------------------- not a function or closure

error[E0788]: attribute should be applied to a function definition or closure
--> $DIR/no-coverage.rs:32:5
--> $DIR/no-coverage.rs:41:5
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | static X: u32;
| -------------- not a function or closure

error[E0788]: attribute should be applied to a function definition or closure
--> $DIR/no-coverage.rs:35:5
--> $DIR/no-coverage.rs:44:5
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | type T;
| ------- not a function or closure

error: unconstrained opaque type
--> $DIR/no-coverage.rs:28:14
--> $DIR/no-coverage.rs:34:14
|
LL | type U = impl Trait;
| ^^^^^^^^^^
|
= note: `U` must be used in combination with a concrete type within the same impl

error: aborting due to 11 previous errors
error: aborting due to 13 previous errors

For more information about this error, try `rustc --explain E0788`.

0 comments on commit 369be18

Please sign in to comment.