Skip to content

Commit

Permalink
Unrolled build for rust-lang#134517
Browse files Browse the repository at this point in the history
Rollup merge of rust-lang#134517 - ehuss:coverage-trait-test, r=Zalathar

Add tests for coverage attribute on trait functions

This adds tests for the coverage attribute on trait functions. cc rust-lang#84605 (comment)
  • Loading branch information
rust-timer authored Dec 23, 2024
2 parents 904d8f6 + 5d9f17f commit 8341221
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 8341221

Please sign in to comment.