coverage: Always error on `#[coverage(..)]` in unexpected places · rust-lang/rust@b7c057c

@@ -122,7 +122,7 @@ impl<'tcx> CheckAttrVisitor<'tcx> {

122122

self.check_diagnostic_on_unimplemented(attr.span, hir_id, target)

123123

}

124124

[sym::inline] => self.check_inline(hir_id, attr, span, target),

125-

[sym::coverage] => self.check_coverage(hir_id, attr, span, target),

125+

[sym::coverage] => self.check_coverage(attr, span, target),

126126

[sym::non_exhaustive] => self.check_non_exhaustive(hir_id, attr, span, target),

127127

[sym::marker] => self.check_marker(hir_id, attr, span, target),

128128

[sym::target_feature] => {

@@ -369,47 +369,15 @@ impl<'tcx> CheckAttrVisitor<'tcx> {

369369

}

370370

}

371371372-

/// Checks if a `#[coverage]` is applied directly to a function

373-

fn check_coverage(&self, hir_id: HirId, attr: &Attribute, span: Span, target: Target) -> bool {

372+

/// Checks that `#[coverage(..)]` is applied to a function or closure.

373+

fn check_coverage(&self, attr: &Attribute, span: Span, target: Target) -> bool {

374374

match target {

375-

// #[coverage] on function is fine

375+

// #[coverage(..)] on function is fine

376376

Target::Fn

377377

| Target::Closure

378378

| Target::Method(MethodKind::Trait { body: true } | MethodKind::Inherent) => true,

379-380-

// function prototypes can't be covered

381-

Target::Method(MethodKind::Trait { body: false }) | Target::ForeignFn => {

382-

self.tcx.emit_node_span_lint(

383-

UNUSED_ATTRIBUTES,

384-

hir_id,

385-

attr.span,

386-

errors::IgnoredCoverageFnProto,

387-

);

388-

true

389-

}

390-391-

Target::Mod | Target::ForeignMod | Target::Impl | Target::Trait => {

392-

self.tcx.emit_node_span_lint(

393-

UNUSED_ATTRIBUTES,

394-

hir_id,

395-

attr.span,

396-

errors::IgnoredCoveragePropagate,

397-

);

398-

true

399-

}

400-401-

Target::Expression | Target::Statement | Target::Arm => {

402-

self.tcx.emit_node_span_lint(

403-

UNUSED_ATTRIBUTES,

404-

hir_id,

405-

attr.span,

406-

errors::IgnoredCoverageFnDefn,

407-

);

408-

true

409-

}

410-411379

_ => {

412-

self.dcx().emit_err(errors::IgnoredCoverageNotCoverable {

380+

self.dcx().emit_err(errors::CoverageNotFnOrClosure {

413381

attr_span: attr.span,

414382

defn_span: span,

415383

});