Skip to content

Rollup of 5 pull requests #97795

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

Merged
merged 13 commits into from
Jun 6, 2022
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
Prev Previous commit
Next Next commit
Changes from code review
  • Loading branch information
clarfonthey committed Jun 6, 2022
commit 9473e2195518d64074e8e3f85d64c82fe285915c
9 changes: 7 additions & 2 deletions compiler/rustc_error_codes/src/error_codes/E0788.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
A `#[no_coverage]` attribute was incorrectly placed on something that couldn't
be covered.
A `#[no_coverage]` attribute was applied to something which does not show up
in code coverage, or is too granular to be excluded from the coverage report.

For now, this attribute can only be applied to function, method, and closure
definitions. In the future, it may be added to statements, blocks, and
expressions, and for the time being, using this attribute in those places
will just emit an `unused_attributes` lint instead of this error.

Example of erroneous code:

Expand Down
5 changes: 3 additions & 2 deletions compiler/rustc_passes/src/check_attr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -317,14 +317,15 @@ impl CheckAttrVisitor<'_> {

Target::Mod | Target::ForeignMod | Target::Impl | Target::Trait => {
self.tcx.struct_span_lint_hir(UNUSED_ATTRIBUTES, hir_id, attr.span, |lint| {
lint.build("`#[no_coverage]` cannot be done recursively and must be applied to functions directly").emit();
lint.build("`#[no_coverage]` does not propagate into items and must be applied to the contained functions directly").emit();
});
true
}

Target::Expression | Target::Statement | Target::Arm => {
self.tcx.struct_span_lint_hir(UNUSED_ATTRIBUTES, hir_id, attr.span, |lint| {
lint.build("`#[no_coverage]` can only be applied at the function level, not on code directly").emit();
lint.build("`#[no_coverage]` may only be applied to function definitions")
.emit();
});
true
}
Expand Down
15 changes: 12 additions & 3 deletions src/test/ui/lint/no-coverage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@
#![feature(no_coverage)]
#![feature(type_alias_impl_trait)]
#![warn(unused_attributes)]
#![no_coverage]
//~^ WARN: `#[no_coverage]` does not propagate into items and must be applied to the contained functions directly

#[no_coverage]
//~^ WARN: `#[no_coverage]` does not propagate into items and must be applied to the contained functions directly
trait Trait {
#[no_coverage] //~ ERROR `#[no_coverage]` must be applied to coverable code
const X: u32;
Expand All @@ -13,6 +17,8 @@ trait Trait {
type U;
}

#[no_coverage]
//~^ WARN: `#[no_coverage]` does not propagate into items and must be applied to the contained functions directly
impl Trait for () {
const X: u32 = 0;

Expand All @@ -33,14 +39,17 @@ extern "C" {

#[no_coverage]
fn main() {
#[no_coverage] //~ WARN `#[no_coverage]` can only be applied at the function level, not on code directly
#[no_coverage]
//~^ WARN `#[no_coverage]` may only be applied to function definitions
let _ = ();

match () {
#[no_coverage] //~ WARN `#[no_coverage]` can only be applied at the function level, not on code directly
#[no_coverage]
//~^ WARN `#[no_coverage]` may only be applied to function definitions
() => (),
}

#[no_coverage] //~ WARN `#[no_coverage]` can only be applied at the function level, not on code directly
#[no_coverage]
//~^ WARN `#[no_coverage]` may only be applied to function definitions
return ();
}
50 changes: 34 additions & 16 deletions src/test/ui/lint/no-coverage.stderr
Original file line number Diff line number Diff line change
@@ -1,83 +1,101 @@
warning: `#[no_coverage]` can only be applied at the function level, not on code directly
--> $DIR/no-coverage.rs:36:5
warning: `#[no_coverage]` does not propagate into items and must be applied to the contained functions directly
--> $DIR/no-coverage.rs:8:1
|
LL | #[no_coverage]
| ^^^^^^^^^^^^^^
LL | #[no_coverage]
| ^^^^^^^^^^^^^^
|
note: the lint level is defined here
--> $DIR/no-coverage.rs:4:9
|
LL | #![warn(unused_attributes)]
| ^^^^^^^^^^^^^^^^^

warning: `#[no_coverage]` can only be applied at the function level, not on code directly
--> $DIR/no-coverage.rs:40:9
warning: `#[no_coverage]` does not propagate into items and must be applied to the contained functions directly
--> $DIR/no-coverage.rs:20:1
|
LL | #[no_coverage]
| ^^^^^^^^^^^^^^

warning: `#[no_coverage]` may only be applied to function definitions
--> $DIR/no-coverage.rs:42:5
|
LL | #[no_coverage]
| ^^^^^^^^^^^^^^

warning: `#[no_coverage]` may only be applied to function definitions
--> $DIR/no-coverage.rs:47:9
|
LL | #[no_coverage]
| ^^^^^^^^^^^^^^

warning: `#[no_coverage]` can only be applied at the function level, not on code directly
--> $DIR/no-coverage.rs:44:5
warning: `#[no_coverage]` may only be applied to function definitions
--> $DIR/no-coverage.rs:52:5
|
LL | #[no_coverage]
| ^^^^^^^^^^^^^^

error[E0788]: `#[no_coverage]` must be applied to coverable code
--> $DIR/no-coverage.rs:7:5
--> $DIR/no-coverage.rs:11:5
|
LL | #[no_coverage]
| ^^^^^^^^^^^^^^
LL | const X: u32;
| ------------- not coverable code

error[E0788]: `#[no_coverage]` must be applied to coverable code
--> $DIR/no-coverage.rs:10:5
--> $DIR/no-coverage.rs:14:5
|
LL | #[no_coverage]
| ^^^^^^^^^^^^^^
LL | type T;
| ------- not coverable code

error[E0788]: `#[no_coverage]` must be applied to coverable code
--> $DIR/no-coverage.rs:19:5
--> $DIR/no-coverage.rs:25:5
|
LL | #[no_coverage]
| ^^^^^^^^^^^^^^
LL | type T = Self;
| -------------- not coverable code

error[E0788]: `#[no_coverage]` must be applied to coverable code
--> $DIR/no-coverage.rs:22:5
--> $DIR/no-coverage.rs:28:5
|
LL | #[no_coverage]
| ^^^^^^^^^^^^^^
LL | type U = impl Trait;
| -------------------- not coverable code

error[E0788]: `#[no_coverage]` must be applied to coverable code
--> $DIR/no-coverage.rs:27:5
--> $DIR/no-coverage.rs:33:5
|
LL | #[no_coverage]
| ^^^^^^^^^^^^^^
LL | static X: u32;
| -------------- not coverable code

error[E0788]: `#[no_coverage]` must be applied to coverable code
--> $DIR/no-coverage.rs:30:5
--> $DIR/no-coverage.rs:36:5
|
LL | #[no_coverage]
| ^^^^^^^^^^^^^^
LL | type T;
| ------- not coverable code

warning: `#[no_coverage]` does not propagate into items and must be applied to the contained functions directly
--> $DIR/no-coverage.rs:5:1
|
LL | #![no_coverage]
| ^^^^^^^^^^^^^^^

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

error: aborting due to 7 previous errors; 3 warnings emitted
error: aborting due to 7 previous errors; 6 warnings emitted

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