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 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
More status-quo tests for the #[coverage(..)] attribute
These tests reveal some inconsistencies that are tracked by
<#126658>.
  • Loading branch information
Zalathar committed Jun 20, 2024
commit 388aea471f0c311634622ec788f14cfca3459221
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`.
54 changes: 54 additions & 0 deletions tests/ui/coverage-attr/word-only.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
#![feature(coverage_attribute)]
//@ edition: 2021

// Demonstrates the diagnostics produced when using the syntax `#[coverage]`,
// 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 give the impression
// that it is legal, even though it should never be legal.

// FIXME(#126658): This is silently allowed, but should not be.
#[coverage]
mod my_mod {}

// FIXME(#126658): This is silently allowed, but should not be.
mod my_mod_inner {
#![coverage]
}

#[coverage] //~ ERROR `#[coverage]` must be applied to coverable code
struct MyStruct;

// FIXME(#126658): This is silently allowed, but should not be.
#[coverage]
impl MyStruct {
#[coverage] //~ ERROR `#[coverage]` must be applied to coverable code
const X: u32 = 7;
}

// FIXME(#126658): This is silently allowed, but should not be.
#[coverage]
trait MyTrait {
#[coverage] //~ ERROR `#[coverage]` must be applied to coverable code
const X: u32;

#[coverage] //~ ERROR `#[coverage]` must be applied to coverable code
type T;
}

// FIXME(#126658): This is silently allowed, but should not be.
#[coverage]
impl MyTrait for MyStruct {
#[coverage] //~ ERROR `#[coverage]` must be applied to coverable code
const X: u32 = 8;

#[coverage] //~ ERROR `#[coverage]` must be applied to coverable code
type T = ();
}

#[coverage] //~ ERROR expected `coverage(off)` or `coverage(on)`
fn main() {}
Loading