Skip to content

Commit

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

More status-quo tests for the `#[coverage(..)]` attribute

Follow-up to rust-lang#126621, after I found even more weird corner-cases in the handling of the coverage attribute.

These tests reveal some inconsistencies that are tracked by rust-lang#126658.
  • Loading branch information
rust-timer authored Jun 20, 2024
2 parents 1aaab8b + ebb3aa0 commit 8ddba56
Show file tree
Hide file tree
Showing 7 changed files with 443 additions and 4 deletions.
8 changes: 4 additions & 4 deletions tests/ui/coverage-attr/bad-syntax.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@
// Tests the error messages produced (or not produced) by various unusual
// uses of the `#[coverage(..)]` attribute.

// FIXME(#84605): Multiple coverage attributes with the same value are useless,
// FIXME(#126658): Multiple coverage attributes with the same value are useless,
// and should probably produce a diagnostic.
#[coverage(off)]
#[coverage(off)]
fn multiple_consistent() {}

// FIXME(#84605): When there are multiple inconsistent coverage attributes,
// FIXME(#126658): When there are multiple inconsistent coverage attributes,
// it's unclear which one will prevail.
#[coverage(off)]
#[coverage(on)]
Expand All @@ -18,7 +18,7 @@ fn multiple_inconsistent() {}
#[coverage] //~ ERROR expected `coverage(off)` or `coverage(on)`
fn bare_word() {}

// FIXME(#84605): This shows as multiple different errors, one of which suggests
// FIXME(#126658): This shows as multiple different errors, one of which suggests
// writing bare `#[coverage]`, which is not allowed.
#[coverage = true]
//~^ ERROR expected `coverage(off)` or `coverage(on)`
Expand Down Expand Up @@ -48,7 +48,7 @@ fn bogus_word_after() {}
#[coverage(off,)]
fn comma_after() {}

// FIXME(#84605): This shows as multiple different errors.
// FIXME(#126658): This shows as multiple different errors.
#[coverage(,off)]
//~^ ERROR expected identifier, found `,`
//~| HELP remove this comma
Expand Down
64 changes: 64 additions & 0 deletions tests/ui/coverage-attr/name-value.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#![feature(coverage_attribute)]
//@ edition: 2021

// Demonstrates the diagnostics produced when using the syntax
// `#[coverage = "off"]`, which should not be allowed.
//
// The syntax is tested both in places that can have a coverage attribute,
// and in places that cannot have a coverage attribute, to demonstrate the
// interaction between multiple errors.

// FIXME(#126658): The error messages for using this syntax are inconsistent
// with the error message in other cases. They also sometimes appear together
// with other errors, and they suggest using the incorrect `#[coverage]` syntax.

#[coverage = "off"] //~ ERROR malformed `coverage` attribute input
mod my_mod {}

mod my_mod_inner {
#![coverage = "off"] //~ ERROR malformed `coverage` attribute input
}

#[coverage = "off"]
//~^ ERROR `#[coverage]` must be applied to coverable code
//~| ERROR malformed `coverage` attribute input
struct MyStruct;

#[coverage = "off"] //~ ERROR malformed `coverage` attribute input
impl MyStruct {
#[coverage = "off"]
//~^ ERROR `#[coverage]` must be applied to coverable code
//~| ERROR malformed `coverage` attribute input
const X: u32 = 7;
}

#[coverage = "off"] //~ ERROR malformed `coverage` attribute input
trait MyTrait {
#[coverage = "off"]
//~^ ERROR `#[coverage]` must be applied to coverable code
//~| ERROR malformed `coverage` attribute input
const X: u32;

#[coverage = "off"]
//~^ ERROR `#[coverage]` must be applied to coverable code
//~| ERROR malformed `coverage` attribute input
type T;
}

#[coverage = "off"] //~ ERROR malformed `coverage` attribute input
impl MyTrait for MyStruct {
#[coverage = "off"]
//~^ ERROR `#[coverage]` must be applied to coverable code
//~| ERROR malformed `coverage` attribute input
const X: u32 = 8;

#[coverage = "off"]
//~^ ERROR `#[coverage]` must be applied to coverable code
//~| ERROR malformed `coverage` attribute input
type T = ();
}

#[coverage = "off"]
//~^ ERROR expected `coverage(off)` or `coverage(on)`
//~| ERROR malformed `coverage` attribute input
fn main() {}
219 changes: 219 additions & 0 deletions tests/ui/coverage-attr/name-value.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,219 @@
error: malformed `coverage` attribute input
--> $DIR/name-value.rs:15:1
|
LL | #[coverage = "off"]
| ^^^^^^^^^^^^^^^^^^^
|
help: the following are the possible correct uses
|
LL | #[coverage(on|off)]
| ~~~~~~~~~~~~~~~~~~~
LL | #[coverage]
| ~~~~~~~~~~~

error: malformed `coverage` attribute input
--> $DIR/name-value.rs:19:5
|
LL | #![coverage = "off"]
| ^^^^^^^^^^^^^^^^^^^^
|
help: the following are the possible correct uses
|
LL | #![coverage(on|off)]
| ~~~~~~~~~~~~~~~~~~~~
LL | #![coverage]
| ~~~~~~~~~~~~

error: malformed `coverage` attribute input
--> $DIR/name-value.rs:22:1
|
LL | #[coverage = "off"]
| ^^^^^^^^^^^^^^^^^^^
|
help: the following are the possible correct uses
|
LL | #[coverage(on|off)]
|
LL | #[coverage]
|

error: malformed `coverage` attribute input
--> $DIR/name-value.rs:29:5
|
LL | #[coverage = "off"]
| ^^^^^^^^^^^^^^^^^^^
|
help: the following are the possible correct uses
|
LL | #[coverage(on|off)]
|
LL | #[coverage]
|

error: malformed `coverage` attribute input
--> $DIR/name-value.rs:27:1
|
LL | #[coverage = "off"]
| ^^^^^^^^^^^^^^^^^^^
|
help: the following are the possible correct uses
|
LL | #[coverage(on|off)]
| ~~~~~~~~~~~~~~~~~~~
LL | #[coverage]
| ~~~~~~~~~~~

error: malformed `coverage` attribute input
--> $DIR/name-value.rs:37:5
|
LL | #[coverage = "off"]
| ^^^^^^^^^^^^^^^^^^^
|
help: the following are the possible correct uses
|
LL | #[coverage(on|off)]
|
LL | #[coverage]
|

error: malformed `coverage` attribute input
--> $DIR/name-value.rs:42:5
|
LL | #[coverage = "off"]
| ^^^^^^^^^^^^^^^^^^^
|
help: the following are the possible correct uses
|
LL | #[coverage(on|off)]
|
LL | #[coverage]
|

error: malformed `coverage` attribute input
--> $DIR/name-value.rs:35:1
|
LL | #[coverage = "off"]
| ^^^^^^^^^^^^^^^^^^^
|
help: the following are the possible correct uses
|
LL | #[coverage(on|off)]
| ~~~~~~~~~~~~~~~~~~~
LL | #[coverage]
| ~~~~~~~~~~~

error: malformed `coverage` attribute input
--> $DIR/name-value.rs:50:5
|
LL | #[coverage = "off"]
| ^^^^^^^^^^^^^^^^^^^
|
help: the following are the possible correct uses
|
LL | #[coverage(on|off)]
|
LL | #[coverage]
|

error: malformed `coverage` attribute input
--> $DIR/name-value.rs:55:5
|
LL | #[coverage = "off"]
| ^^^^^^^^^^^^^^^^^^^
|
help: the following are the possible correct uses
|
LL | #[coverage(on|off)]
|
LL | #[coverage]
|

error: malformed `coverage` attribute input
--> $DIR/name-value.rs:48:1
|
LL | #[coverage = "off"]
| ^^^^^^^^^^^^^^^^^^^
|
help: the following are the possible correct uses
|
LL | #[coverage(on|off)]
| ~~~~~~~~~~~~~~~~~~~
LL | #[coverage]
| ~~~~~~~~~~~

error: malformed `coverage` attribute input
--> $DIR/name-value.rs:61:1
|
LL | #[coverage = "off"]
| ^^^^^^^^^^^^^^^^^^^
|
help: the following are the possible correct uses
|
LL | #[coverage(on|off)]
|
LL | #[coverage]
|

error[E0788]: `#[coverage]` must be applied to coverable code
--> $DIR/name-value.rs:22:1
|
LL | #[coverage = "off"]
| ^^^^^^^^^^^^^^^^^^^
...
LL | struct MyStruct;
| ---------------- not coverable code

error[E0788]: `#[coverage]` must be applied to coverable code
--> $DIR/name-value.rs:37:5
|
LL | #[coverage = "off"]
| ^^^^^^^^^^^^^^^^^^^
...
LL | const X: u32;
| ------------- not coverable code

error[E0788]: `#[coverage]` must be applied to coverable code
--> $DIR/name-value.rs:42:5
|
LL | #[coverage = "off"]
| ^^^^^^^^^^^^^^^^^^^
...
LL | type T;
| ------- not coverable code

error[E0788]: `#[coverage]` must be applied to coverable code
--> $DIR/name-value.rs:29:5
|
LL | #[coverage = "off"]
| ^^^^^^^^^^^^^^^^^^^
...
LL | const X: u32 = 7;
| ----------------- not coverable code

error[E0788]: `#[coverage]` must be applied to coverable code
--> $DIR/name-value.rs:50:5
|
LL | #[coverage = "off"]
| ^^^^^^^^^^^^^^^^^^^
...
LL | const X: u32 = 8;
| ----------------- not coverable code

error[E0788]: `#[coverage]` must be applied to coverable code
--> $DIR/name-value.rs:55:5
|
LL | #[coverage = "off"]
| ^^^^^^^^^^^^^^^^^^^
...
LL | type T = ();
| ------------ not coverable code

error: expected `coverage(off)` or `coverage(on)`
--> $DIR/name-value.rs:61:1
|
LL | #[coverage = "off"]
| ^^^^^^^^^^^^^^^^^^^

error: aborting due to 19 previous errors

For more information about this error, try `rustc --explain E0788`.
19 changes: 19 additions & 0 deletions tests/ui/coverage-attr/subword.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#![feature(coverage_attribute)]
//@ edition: 2021

// Check that yes/no in `#[coverage(yes)]` and `#[coverage(no)]` must be bare
// words, not part of a more complicated substructure.

#[coverage(yes(milord))] //~ ERROR expected `coverage(off)` or `coverage(on)`
fn yes_list() {}

#[coverage(no(milord))] //~ ERROR expected `coverage(off)` or `coverage(on)`
fn no_list() {}

#[coverage(yes = "milord")] //~ ERROR expected `coverage(off)` or `coverage(on)`
fn yes_key() {}

#[coverage(no = "milord")] //~ ERROR expected `coverage(off)` or `coverage(on)`
fn no_key() {}

fn main() {}
26 changes: 26 additions & 0 deletions tests/ui/coverage-attr/subword.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
error: expected `coverage(off)` or `coverage(on)`
--> $DIR/subword.rs:7:1
|
LL | #[coverage(yes(milord))]
| ^^^^^^^^^^^^^^^^^^^^^^^^

error: expected `coverage(off)` or `coverage(on)`
--> $DIR/subword.rs:10:1
|
LL | #[coverage(no(milord))]
| ^^^^^^^^^^^^^^^^^^^^^^^

error: expected `coverage(off)` or `coverage(on)`
--> $DIR/subword.rs:13:1
|
LL | #[coverage(yes = "milord")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: expected `coverage(off)` or `coverage(on)`
--> $DIR/subword.rs:16:1
|
LL | #[coverage(no = "milord")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^

error: aborting due to 4 previous errors

Loading

0 comments on commit 8ddba56

Please sign in to comment.