coverage: Always error on `#[coverage(..)]` in unexpected places · rust-lang/rust@b7c057c
@@ -122,7 +122,7 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
122122self.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 {
374374match target {
375-// #[coverage] on function is fine
375+// #[coverage(..)] on function is fine
376376Target::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 {
413381attr_span: attr.span,
414382defn_span: span,
415383});