Auto merge of #134756 - jieyouxu:rollup-suec48x, r=jieyouxu

Rollup of 3 pull requests

Successful merges:

 - #134743 (Default to short backtraces for dev builds of rustc itself)
 - #134750 (Update `#[coverage(..)]` attribute error messages to match the current implementation)
 - #134751 (Enable LSX feature for LoongArch OpenHarmony target)

r? `@ghost`
`@rustbot` modify labels: rollup
This commit is contained in:
bors 2024-12-25 11:25:55 +00:00
commit f432d5dcb5
14 changed files with 437 additions and 248 deletions

View file

@ -1388,7 +1388,11 @@ pub fn install_ice_hook(
// opt in to less-verbose backtraces by manually setting "RUST_BACKTRACE"
// (e.g. `RUST_BACKTRACE=1`)
if env::var_os("RUST_BACKTRACE").is_none() {
panic::set_backtrace_style(panic::BacktraceStyle::Full);
if env!("CFG_RELEASE_CHANNEL") == "dev" {
panic::set_backtrace_style(panic::BacktraceStyle::Short);
} else {
panic::set_backtrace_style(panic::BacktraceStyle::Full);
}
}
let using_internal_features = Arc::new(std::sync::atomic::AtomicBool::default());

View file

@ -1,26 +1,24 @@
A `#[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.
A `#[coverage(off|on)]` attribute was found in a position where it is not
allowed.
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.
Coverage attributes can be applied to:
- Function and method declarations that have a body, including trait methods
that have a default implementation.
- Closure expressions, in situations where attributes can be applied to
expressions.
- `impl` blocks (inherent or trait), and modules.
Example of erroneous code:
```compile_fail,E0788
#[coverage(off)]
struct Foo;
#[coverage(on)]
const FOO: Foo = Foo;
unsafe extern "C" {
#[coverage(off)]
fn foreign_fn();
}
```
`#[coverage(off)]` tells the compiler to not generate coverage instrumentation
for a piece of code when the `-C instrument-coverage` flag is passed. Things
like structs and consts are not coverable code, and thus cannot do anything
with this attribute.
If you wish to apply this attribute to all methods in an impl or module,
manually annotate each method; it is not possible to annotate the entire impl
with a `#[coverage]` attribute.
When using the `-C instrument-coverage` flag, coverage attributes act as a
hint to the compiler that it should instrument or not instrument the
corresponding function or enclosed functions. The precise effect of applying
a coverage attribute is not guaranteed and may change in future compiler
versions.

View file

@ -112,9 +112,11 @@ passes_coroutine_on_non_closure =
attribute should be applied to closures
.label = not a closure
passes_coverage_not_fn_or_closure =
attribute should be applied to a function definition or closure
.label = not a function or closure
passes_coverage_attribute_not_allowed =
coverage attribute not allowed here
.not_fn_impl_mod = not a function, impl block, or module
.no_body = function has no body
.help = coverage attribute can be applied to a function (with body), impl block, or module
passes_dead_codes =
{ $multiple ->

View file

@ -432,21 +432,34 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
/// Checks that `#[coverage(..)]` is applied to a function/closure/method,
/// or to an impl block or module.
fn check_coverage(&self, attr: &Attribute, span: Span, target: Target) {
fn check_coverage(&self, attr: &Attribute, target_span: Span, target: Target) {
let mut not_fn_impl_mod = None;
let mut no_body = None;
match target {
Target::Fn
| Target::Closure
| Target::Method(MethodKind::Trait { body: true } | MethodKind::Inherent)
| Target::Impl
| Target::Mod => {}
| Target::Mod => return,
// These are "functions", but they aren't allowed because they don't
// have a body, so the usual explanation would be confusing.
Target::Method(MethodKind::Trait { body: false }) | Target::ForeignFn => {
no_body = Some(target_span);
}
_ => {
self.dcx().emit_err(errors::CoverageNotFnOrClosure {
attr_span: attr.span,
defn_span: span,
});
not_fn_impl_mod = Some(target_span);
}
}
self.dcx().emit_err(errors::CoverageAttributeNotAllowed {
attr_span: attr.span,
not_fn_impl_mod,
no_body,
help: (),
});
}
/// Checks that `#[optimize(..)]` is applied to a function/closure/method,

View file

@ -71,13 +71,21 @@ pub(crate) struct InlineNotFnOrClosure {
pub defn_span: Span,
}
/// "coverage attribute not allowed here"
#[derive(Diagnostic)]
#[diag(passes_coverage_not_fn_or_closure, code = E0788)]
pub(crate) struct CoverageNotFnOrClosure {
#[diag(passes_coverage_attribute_not_allowed, code = E0788)]
pub(crate) struct CoverageAttributeNotAllowed {
#[primary_span]
pub attr_span: Span,
#[label]
pub defn_span: Span,
/// "not a function, impl block, or module"
#[label(passes_not_fn_impl_mod)]
pub not_fn_impl_mod: Option<Span>,
/// "function has no body"
#[label(passes_no_body)]
pub no_body: Option<Span>,
/// "coverage attribute can be applied to a function (with body), impl block, or module"
#[help]
pub help: (),
}
#[derive(Diagnostic)]

View file

@ -15,7 +15,7 @@ pub(crate) fn target() -> Target {
options: TargetOptions {
code_model: Some(CodeModel::Medium),
cpu: "generic".into(),
features: "+f,+d".into(),
features: "+f,+d,+lsx".into(),
llvm_abiname: "lp64d".into(),
max_atomic_width: Some(64),
supported_sanitizers: SanitizerSet::ADDRESS

View file

@ -0,0 +1,116 @@
//! Tests where the `#[coverage(..)]` attribute can and cannot be used.
//@ reference: attributes.coverage.allowed-positions
#![feature(coverage_attribute)]
#![feature(extern_types)]
#![feature(impl_trait_in_assoc_type)]
#![warn(unused_attributes)]
#![coverage(off)]
#[coverage(off)]
mod submod {}
#[coverage(off)] //~ ERROR coverage attribute not allowed here [E0788]
type MyTypeAlias = ();
#[coverage(off)] //~ ERROR [E0788]
trait MyTrait {
#[coverage(off)] //~ ERROR [E0788]
const TRAIT_ASSOC_CONST: u32;
#[coverage(off)] //~ ERROR [E0788]
type TraitAssocType;
#[coverage(off)] //~ ERROR [E0788]
fn trait_method(&self);
#[coverage(off)]
fn trait_method_with_default(&self) {}
#[coverage(off)] //~ ERROR [E0788]
fn trait_assoc_fn();
}
#[coverage(off)]
impl MyTrait for () {
const TRAIT_ASSOC_CONST: u32 = 0;
#[coverage(off)] //~ ERROR [E0788]
type TraitAssocType = Self;
#[coverage(off)]
fn trait_method(&self) {}
#[coverage(off)]
fn trait_method_with_default(&self) {}
#[coverage(off)]
fn trait_assoc_fn() {}
}
trait HasAssocType {
type T;
fn constrain_assoc_type() -> Self::T;
}
impl HasAssocType for () {
#[coverage(off)] //~ ERROR [E0788]
type T = impl Copy;
fn constrain_assoc_type() -> Self::T {}
}
#[coverage(off)] //~ ERROR [E0788]
struct MyStruct {
#[coverage(off)] //~ ERROR [E0788]
field: u32,
}
#[coverage(off)]
impl MyStruct {
#[coverage(off)]
fn method(&self) {}
#[coverage(off)]
fn assoc_fn() {}
}
extern "C" {
#[coverage(off)] //~ ERROR [E0788]
static X: u32;
#[coverage(off)] //~ ERROR [E0788]
type T;
#[coverage(off)] //~ ERROR [E0788]
fn foreign_fn();
}
#[coverage(off)]
fn main() {
#[coverage(off)] //~ ERROR [E0788]
let _ = ();
// Currently not allowed on let statements, even if they bind to a closure.
// It might be nice to support this as a special case someday, but trying
// to define the precise boundaries of that special case might be tricky.
#[coverage(off)] //~ ERROR [E0788]
let _let_closure = || ();
// In situations where attributes can already be applied to expressions,
// the coverage attribute is allowed on closure expressions.
let _closure_tail_expr = {
#[coverage(off)]
|| ()
};
// Applying attributes to arbitrary expressions requires an unstable
// feature, but if that feature were enabled then this would be allowed.
let _closure_expr = #[coverage(off)] || ();
//~^ ERROR attributes on expressions are experimental [E0658]
match () {
#[coverage(off)] //~ ERROR [E0788]
() => (),
}
#[coverage(off)] //~ ERROR [E0788]
return ();
}

View file

@ -0,0 +1,192 @@
error[E0658]: attributes on expressions are experimental
--> $DIR/allowed-positions.rs:106:25
|
LL | let _closure_expr = #[coverage(off)] || ();
| ^^^^^^^^^^^^^^^^
|
= note: see issue #15701 <https://github.com/rust-lang/rust/issues/15701> for more information
= help: add `#![feature(stmt_expr_attributes)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
error[E0788]: coverage attribute not allowed here
--> $DIR/allowed-positions.rs:14:1
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | type MyTypeAlias = ();
| ---------------------- not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: coverage attribute not allowed here
--> $DIR/allowed-positions.rs:17:1
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | / trait MyTrait {
LL | | #[coverage(off)]
LL | | const TRAIT_ASSOC_CONST: u32;
... |
LL | | fn trait_assoc_fn();
LL | | }
| |_- not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: coverage attribute not allowed here
--> $DIR/allowed-positions.rs:61:1
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | / struct MyStruct {
LL | | #[coverage(off)]
LL | | field: u32,
LL | | }
| |_- not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: coverage attribute not allowed here
--> $DIR/allowed-positions.rs:63:5
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | field: u32,
| ---------- not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: coverage attribute not allowed here
--> $DIR/allowed-positions.rs:88:5
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | let _ = ();
| ----------- not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: coverage attribute not allowed here
--> $DIR/allowed-positions.rs:94:5
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | let _let_closure = || ();
| ------------------------- not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: coverage attribute not allowed here
--> $DIR/allowed-positions.rs:110:9
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | () => (),
| -------- not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: coverage attribute not allowed here
--> $DIR/allowed-positions.rs:114:5
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | return ();
| --------- not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: coverage attribute not allowed here
--> $DIR/allowed-positions.rs:19:5
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | const TRAIT_ASSOC_CONST: u32;
| ----------------------------- not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: coverage attribute not allowed here
--> $DIR/allowed-positions.rs:22:5
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | type TraitAssocType;
| -------------------- not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: coverage attribute not allowed here
--> $DIR/allowed-positions.rs:25:5
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | fn trait_method(&self);
| ----------------------- function has no body
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: coverage attribute not allowed here
--> $DIR/allowed-positions.rs:31:5
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | fn trait_assoc_fn();
| -------------------- function has no body
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: coverage attribute not allowed here
--> $DIR/allowed-positions.rs:39:5
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | type TraitAssocType = Self;
| --------------------------- not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: coverage attribute not allowed here
--> $DIR/allowed-positions.rs:56:5
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | type T = impl Copy;
| ------------------- not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: coverage attribute not allowed here
--> $DIR/allowed-positions.rs:76:5
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | static X: u32;
| -------------- not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: coverage attribute not allowed here
--> $DIR/allowed-positions.rs:79:5
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | type T;
| ------- not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: coverage attribute not allowed here
--> $DIR/allowed-positions.rs:82:5
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | fn foreign_fn();
| ---------------- function has no body
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error: aborting due to 18 previous errors
Some errors have detailed explanations: E0658, E0788.
For more information about an error, try `rustc --explain E0658`.

View file

@ -20,7 +20,7 @@ mod my_mod_inner {
#[coverage = "off"]
//~^ ERROR malformed `coverage` attribute input
//~| ERROR attribute should be applied to a function definition or closure
//~| ERROR [E0788]
struct MyStruct;
#[coverage = "off"]
@ -28,22 +28,22 @@ struct MyStruct;
impl MyStruct {
#[coverage = "off"]
//~^ ERROR malformed `coverage` attribute input
//~| ERROR attribute should be applied to a function definition or closure
//~| ERROR [E0788]
const X: u32 = 7;
}
#[coverage = "off"]
//~^ ERROR malformed `coverage` attribute input
//~| ERROR attribute should be applied to a function definition or closure
//~| ERROR [E0788]
trait MyTrait {
#[coverage = "off"]
//~^ ERROR malformed `coverage` attribute input
//~| ERROR attribute should be applied to a function definition or closure
//~| ERROR [E0788]
const X: u32;
#[coverage = "off"]
//~^ ERROR malformed `coverage` attribute input
//~| ERROR attribute should be applied to a function definition or closure
//~| ERROR [E0788]
type T;
}
@ -52,12 +52,12 @@ trait MyTrait {
impl MyTrait for MyStruct {
#[coverage = "off"]
//~^ ERROR malformed `coverage` attribute input
//~| ERROR attribute should be applied to a function definition or closure
//~| ERROR [E0788]
const X: u32 = 8;
#[coverage = "off"]
//~^ ERROR malformed `coverage` attribute input
//~| ERROR attribute should be applied to a function definition or closure
//~| ERROR [E0788]
type T = ();
}

View file

@ -154,16 +154,18 @@ LL | #[coverage(off)]
LL | #[coverage(on)]
|
error[E0788]: attribute should be applied to a function definition or closure
error[E0788]: coverage attribute not allowed here
--> $DIR/name-value.rs:21:1
|
LL | #[coverage = "off"]
| ^^^^^^^^^^^^^^^^^^^
...
LL | struct MyStruct;
| ---------------- not a function or closure
| ---------------- not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: attribute should be applied to a function definition or closure
error[E0788]: coverage attribute not allowed here
--> $DIR/name-value.rs:35:1
|
LL | #[coverage = "off"]
@ -174,52 +176,64 @@ LL | | #[coverage = "off"]
... |
LL | | type T;
LL | | }
| |_- not a function or closure
| |_- not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: attribute should be applied to a function definition or closure
error[E0788]: coverage attribute not allowed here
--> $DIR/name-value.rs:39:5
|
LL | #[coverage = "off"]
| ^^^^^^^^^^^^^^^^^^^
...
LL | const X: u32;
| ------------- not a function or closure
| ------------- not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: attribute should be applied to a function definition or closure
error[E0788]: coverage attribute not allowed here
--> $DIR/name-value.rs:44:5
|
LL | #[coverage = "off"]
| ^^^^^^^^^^^^^^^^^^^
...
LL | type T;
| ------- not a function or closure
| ------- not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: attribute should be applied to a function definition or closure
error[E0788]: coverage attribute not allowed here
--> $DIR/name-value.rs:29:5
|
LL | #[coverage = "off"]
| ^^^^^^^^^^^^^^^^^^^
...
LL | const X: u32 = 7;
| ----------------- not a function or closure
| ----------------- not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: attribute should be applied to a function definition or closure
error[E0788]: coverage attribute not allowed here
--> $DIR/name-value.rs:53:5
|
LL | #[coverage = "off"]
| ^^^^^^^^^^^^^^^^^^^
...
LL | const X: u32 = 8;
| ----------------- not a function or closure
| ----------------- not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: attribute should be applied to a function definition or closure
error[E0788]: coverage attribute not allowed here
--> $DIR/name-value.rs:58:5
|
LL | #[coverage = "off"]
| ^^^^^^^^^^^^^^^^^^^
...
LL | type T = ();
| ------------ not a function or closure
| ------------ not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error: aborting due to 19 previous errors

View file

@ -1,60 +0,0 @@
//@ reference: attributes.coverage.allowed-positions
#![feature(extern_types)]
#![feature(coverage_attribute)]
#![feature(impl_trait_in_assoc_type)]
#![warn(unused_attributes)]
#![coverage(off)]
#[coverage(off)] //~ ERROR attribute should be applied to a function definition or closure
trait Trait {
#[coverage(off)] //~ ERROR attribute should be applied to a function definition or closure
const X: u32;
#[coverage(off)] //~ ERROR attribute should be applied to a function definition or closure
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)]
impl Trait for () {
const X: u32 = 0;
#[coverage(off)] //~ ERROR attribute should be applied to a function definition or closure
type T = Self;
#[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" {
#[coverage(off)] //~ ERROR attribute should be applied to a function definition or closure
static X: u32;
#[coverage(off)] //~ ERROR attribute should be applied to a function definition or closure
type T;
}
#[coverage(off)]
fn main() {
#[coverage(off)] //~ ERROR attribute should be applied to a function definition or closure
let _ = ();
match () {
#[coverage(off)] //~ ERROR attribute should be applied to a function definition or closure
() => (),
}
#[coverage(off)] //~ ERROR attribute should be applied to a function definition or closure
return ();
}

View file

@ -1,112 +0,0 @@
error[E0788]: attribute should be applied to a function definition or closure
--> $DIR/no-coverage.rs:9:1
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | / trait Trait {
LL | | #[coverage(off)]
LL | | const X: u32;
... |
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: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: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:58:5
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | return ();
| --------- not a function or closure
error[E0788]: attribute should be applied to a function definition or closure
--> $DIR/no-coverage.rs:11:5
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | const X: u32;
| ------------- not a function or closure
error[E0788]: attribute should be applied to a function definition or closure
--> $DIR/no-coverage.rs:14:5
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | type T;
| ------- not a function or closure
error[E0788]: attribute should be applied to a function definition or closure
--> $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: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: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:44:5
|
LL | #[coverage(off)]
| ^^^^^^^^^^^^^^^^
LL | type T;
| ------- not a function or closure
error: unconstrained opaque type
--> $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 13 previous errors
For more information about this error, try `rustc --explain E0788`.

View file

@ -20,7 +20,7 @@ mod my_mod_inner {
#[coverage]
//~^ ERROR malformed `coverage` attribute input
//~| ERROR attribute should be applied to a function definition or closure
//~| ERROR [E0788]
struct MyStruct;
#[coverage]
@ -28,22 +28,22 @@ struct MyStruct;
impl MyStruct {
#[coverage]
//~^ ERROR malformed `coverage` attribute input
//~| ERROR attribute should be applied to a function definition or closure
//~| ERROR [E0788]
const X: u32 = 7;
}
#[coverage]
//~^ ERROR malformed `coverage` attribute input
//~| ERROR attribute should be applied to a function definition or closure
//~| ERROR [E0788]
trait MyTrait {
#[coverage]
//~^ ERROR malformed `coverage` attribute input
//~| ERROR attribute should be applied to a function definition or closure
//~| ERROR [E0788]
const X: u32;
#[coverage]
//~^ ERROR malformed `coverage` attribute input
//~| ERROR attribute should be applied to a function definition or closure
//~| ERROR [E0788]
type T;
}
@ -52,12 +52,12 @@ trait MyTrait {
impl MyTrait for MyStruct {
#[coverage]
//~^ ERROR malformed `coverage` attribute input
//~| ERROR attribute should be applied to a function definition or closure
//~| ERROR [E0788]
const X: u32 = 8;
#[coverage]
//~^ ERROR malformed `coverage` attribute input
//~| ERROR attribute should be applied to a function definition or closure
//~| ERROR [E0788]
type T = ();
}

View file

@ -154,16 +154,18 @@ LL | #[coverage(off)]
LL | #[coverage(on)]
|
error[E0788]: attribute should be applied to a function definition or closure
error[E0788]: coverage attribute not allowed here
--> $DIR/word-only.rs:21:1
|
LL | #[coverage]
| ^^^^^^^^^^^
...
LL | struct MyStruct;
| ---------------- not a function or closure
| ---------------- not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: attribute should be applied to a function definition or closure
error[E0788]: coverage attribute not allowed here
--> $DIR/word-only.rs:35:1
|
LL | #[coverage]
@ -174,52 +176,64 @@ LL | | #[coverage]
... |
LL | | type T;
LL | | }
| |_- not a function or closure
| |_- not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: attribute should be applied to a function definition or closure
error[E0788]: coverage attribute not allowed here
--> $DIR/word-only.rs:39:5
|
LL | #[coverage]
| ^^^^^^^^^^^
...
LL | const X: u32;
| ------------- not a function or closure
| ------------- not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: attribute should be applied to a function definition or closure
error[E0788]: coverage attribute not allowed here
--> $DIR/word-only.rs:44:5
|
LL | #[coverage]
| ^^^^^^^^^^^
...
LL | type T;
| ------- not a function or closure
| ------- not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: attribute should be applied to a function definition or closure
error[E0788]: coverage attribute not allowed here
--> $DIR/word-only.rs:29:5
|
LL | #[coverage]
| ^^^^^^^^^^^
...
LL | const X: u32 = 7;
| ----------------- not a function or closure
| ----------------- not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: attribute should be applied to a function definition or closure
error[E0788]: coverage attribute not allowed here
--> $DIR/word-only.rs:53:5
|
LL | #[coverage]
| ^^^^^^^^^^^
...
LL | const X: u32 = 8;
| ----------------- not a function or closure
| ----------------- not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error[E0788]: attribute should be applied to a function definition or closure
error[E0788]: coverage attribute not allowed here
--> $DIR/word-only.rs:58:5
|
LL | #[coverage]
| ^^^^^^^^^^^
...
LL | type T = ();
| ------------ not a function or closure
| ------------ not a function, impl block, or module
|
= help: coverage attribute can be applied to a function (with body), impl block, or module
error: aborting due to 19 previous errors