Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Merged
merged 2 commits into from
Jun 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
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
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
Loading