mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-10 15:14:29 +00:00
Auto merge of #10986 - Centri3:undocumented_unsafe_blocks, r=Manishearth
Allow safety comment above attributes Closes #8679 changelog: Enhancement: [`undocumented_safety_block`]: Added `accept-comment-above-attributes` configuration.
This commit is contained in:
commit
8fd021f504
9 changed files with 162 additions and 48 deletions
|
@ -5385,4 +5385,5 @@ Released 2018-09-13
|
||||||
[`allowed-idents-below-min-chars`]: https://doc.rust-lang.org/clippy/lint_configuration.html#allowed-idents-below-min-chars
|
[`allowed-idents-below-min-chars`]: https://doc.rust-lang.org/clippy/lint_configuration.html#allowed-idents-below-min-chars
|
||||||
[`min-ident-chars-threshold`]: https://doc.rust-lang.org/clippy/lint_configuration.html#min-ident-chars-threshold
|
[`min-ident-chars-threshold`]: https://doc.rust-lang.org/clippy/lint_configuration.html#min-ident-chars-threshold
|
||||||
[`accept-comment-above-statement`]: https://doc.rust-lang.org/clippy/lint_configuration.html#accept-comment-above-statement
|
[`accept-comment-above-statement`]: https://doc.rust-lang.org/clippy/lint_configuration.html#accept-comment-above-statement
|
||||||
|
[`accept-comment-above-attributes`]: https://doc.rust-lang.org/clippy/lint_configuration.html#accept-comment-above-attributes
|
||||||
<!-- end autogenerated links to configuration documentation -->
|
<!-- end autogenerated links to configuration documentation -->
|
||||||
|
|
|
@ -706,3 +706,13 @@ Whether to accept a safety comment to be placed above the statement containing t
|
||||||
* [`undocumented_unsafe_blocks`](https://rust-lang.github.io/rust-clippy/master/index.html#undocumented_unsafe_blocks)
|
* [`undocumented_unsafe_blocks`](https://rust-lang.github.io/rust-clippy/master/index.html#undocumented_unsafe_blocks)
|
||||||
|
|
||||||
|
|
||||||
|
## `accept-comment-above-attributes`
|
||||||
|
Whether to accept a safety comment to be placed above the attributes for the `unsafe` block
|
||||||
|
|
||||||
|
**Default Value:** `false` (`bool`)
|
||||||
|
|
||||||
|
---
|
||||||
|
**Affected lints:**
|
||||||
|
* [`undocumented_unsafe_blocks`](https://rust-lang.github.io/rust-clippy/master/index.html#undocumented_unsafe_blocks)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -930,9 +930,11 @@ pub fn register_plugins(store: &mut rustc_lint::LintStore, sess: &Session, conf:
|
||||||
))
|
))
|
||||||
});
|
});
|
||||||
let accept_comment_above_statement = conf.accept_comment_above_statement;
|
let accept_comment_above_statement = conf.accept_comment_above_statement;
|
||||||
|
let accept_comment_above_attributes = conf.accept_comment_above_attributes;
|
||||||
store.register_late_pass(move |_| {
|
store.register_late_pass(move |_| {
|
||||||
Box::new(undocumented_unsafe_blocks::UndocumentedUnsafeBlocks::new(
|
Box::new(undocumented_unsafe_blocks::UndocumentedUnsafeBlocks::new(
|
||||||
accept_comment_above_statement,
|
accept_comment_above_statement,
|
||||||
|
accept_comment_above_attributes,
|
||||||
))
|
))
|
||||||
});
|
});
|
||||||
let allow_mixed_uninlined = conf.allow_mixed_uninlined_format_args;
|
let allow_mixed_uninlined = conf.allow_mixed_uninlined_format_args;
|
||||||
|
|
|
@ -95,12 +95,14 @@ declare_clippy_lint! {
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
pub struct UndocumentedUnsafeBlocks {
|
pub struct UndocumentedUnsafeBlocks {
|
||||||
accept_comment_above_statement: bool,
|
accept_comment_above_statement: bool,
|
||||||
|
accept_comment_above_attributes: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl UndocumentedUnsafeBlocks {
|
impl UndocumentedUnsafeBlocks {
|
||||||
pub fn new(accept_comment_above_statement: bool) -> Self {
|
pub fn new(accept_comment_above_statement: bool, accept_comment_above_attributes: bool) -> Self {
|
||||||
Self {
|
Self {
|
||||||
accept_comment_above_statement,
|
accept_comment_above_statement,
|
||||||
|
accept_comment_above_attributes,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -114,7 +116,12 @@ impl<'tcx> LateLintPass<'tcx> for UndocumentedUnsafeBlocks {
|
||||||
&& !is_lint_allowed(cx, UNDOCUMENTED_UNSAFE_BLOCKS, block.hir_id)
|
&& !is_lint_allowed(cx, UNDOCUMENTED_UNSAFE_BLOCKS, block.hir_id)
|
||||||
&& !is_unsafe_from_proc_macro(cx, block.span)
|
&& !is_unsafe_from_proc_macro(cx, block.span)
|
||||||
&& !block_has_safety_comment(cx, block.span)
|
&& !block_has_safety_comment(cx, block.span)
|
||||||
&& !block_parents_have_safety_comment(self.accept_comment_above_statement, cx, block.hir_id)
|
&& !block_parents_have_safety_comment(
|
||||||
|
self.accept_comment_above_statement,
|
||||||
|
self.accept_comment_above_attributes,
|
||||||
|
cx,
|
||||||
|
block.hir_id,
|
||||||
|
)
|
||||||
{
|
{
|
||||||
let source_map = cx.tcx.sess.source_map();
|
let source_map = cx.tcx.sess.source_map();
|
||||||
let span = if source_map.is_multiline(block.span) {
|
let span = if source_map.is_multiline(block.span) {
|
||||||
|
@ -328,6 +335,7 @@ fn is_unsafe_from_proc_macro(cx: &LateContext<'_>, span: Span) -> bool {
|
||||||
// has a safety comment
|
// has a safety comment
|
||||||
fn block_parents_have_safety_comment(
|
fn block_parents_have_safety_comment(
|
||||||
accept_comment_above_statement: bool,
|
accept_comment_above_statement: bool,
|
||||||
|
accept_comment_above_attributes: bool,
|
||||||
cx: &LateContext<'_>,
|
cx: &LateContext<'_>,
|
||||||
id: hir::HirId,
|
id: hir::HirId,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
|
@ -343,33 +351,77 @@ fn block_parents_have_safety_comment(
|
||||||
}),
|
}),
|
||||||
) = get_parent_node(cx.tcx, expr.hir_id)
|
) = get_parent_node(cx.tcx, expr.hir_id)
|
||||||
{
|
{
|
||||||
|
let hir_id = match get_parent_node(cx.tcx, expr.hir_id) {
|
||||||
|
Some(Node::Local(hir::Local { hir_id, .. })) => *hir_id,
|
||||||
|
Some(Node::Item(hir::Item { owner_id, .. })) => {
|
||||||
|
cx.tcx.hir().local_def_id_to_hir_id(owner_id.def_id)
|
||||||
|
},
|
||||||
|
_ => unreachable!(),
|
||||||
|
};
|
||||||
|
|
||||||
// if unsafe block is part of a let/const/static statement,
|
// if unsafe block is part of a let/const/static statement,
|
||||||
// and accept_comment_above_statement is set to true
|
// and accept_comment_above_statement is set to true
|
||||||
// we accept the safety comment in the line the precedes this statement.
|
// we accept the safety comment in the line the precedes this statement.
|
||||||
accept_comment_above_statement && span_in_body_has_safety_comment(cx, *span)
|
accept_comment_above_statement
|
||||||
|
&& span_with_attrs_in_body_has_safety_comment(
|
||||||
|
cx,
|
||||||
|
*span,
|
||||||
|
hir_id,
|
||||||
|
accept_comment_above_attributes,
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
!is_branchy(expr) && span_in_body_has_safety_comment(cx, expr.span)
|
!is_branchy(expr)
|
||||||
|
&& span_with_attrs_in_body_has_safety_comment(
|
||||||
|
cx,
|
||||||
|
expr.span,
|
||||||
|
expr.hir_id,
|
||||||
|
accept_comment_above_attributes,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Node::Stmt(hir::Stmt {
|
Node::Stmt(hir::Stmt {
|
||||||
kind:
|
kind:
|
||||||
hir::StmtKind::Local(hir::Local { span, .. })
|
hir::StmtKind::Local(hir::Local { span, hir_id, .. })
|
||||||
| hir::StmtKind::Expr(hir::Expr { span, .. })
|
| hir::StmtKind::Expr(hir::Expr { span, hir_id, .. })
|
||||||
| hir::StmtKind::Semi(hir::Expr { span, .. }),
|
| hir::StmtKind::Semi(hir::Expr { span, hir_id, .. }),
|
||||||
..
|
..
|
||||||
})
|
})
|
||||||
| Node::Local(hir::Local { span, .. })
|
| Node::Local(hir::Local { span, hir_id, .. }) => {
|
||||||
| Node::Item(hir::Item {
|
span_with_attrs_in_body_has_safety_comment(cx, *span, *hir_id, accept_comment_above_attributes)
|
||||||
|
},
|
||||||
|
Node::Item(hir::Item {
|
||||||
kind: hir::ItemKind::Const(..) | ItemKind::Static(..),
|
kind: hir::ItemKind::Const(..) | ItemKind::Static(..),
|
||||||
span,
|
span,
|
||||||
|
owner_id,
|
||||||
..
|
..
|
||||||
}) => span_in_body_has_safety_comment(cx, *span),
|
}) => span_with_attrs_in_body_has_safety_comment(
|
||||||
|
cx,
|
||||||
|
*span,
|
||||||
|
cx.tcx.hir().local_def_id_to_hir_id(owner_id.def_id),
|
||||||
|
accept_comment_above_attributes,
|
||||||
|
),
|
||||||
_ => false,
|
_ => false,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Extends `span` to also include its attributes, then checks if that span has a safety comment.
|
||||||
|
fn span_with_attrs_in_body_has_safety_comment(
|
||||||
|
cx: &LateContext<'_>,
|
||||||
|
span: Span,
|
||||||
|
hir_id: HirId,
|
||||||
|
accept_comment_above_attributes: bool,
|
||||||
|
) -> bool {
|
||||||
|
let span = if accept_comment_above_attributes {
|
||||||
|
include_attrs_in_span(cx, hir_id, span)
|
||||||
|
} else {
|
||||||
|
span
|
||||||
|
};
|
||||||
|
|
||||||
|
span_in_body_has_safety_comment(cx, span)
|
||||||
|
}
|
||||||
|
|
||||||
/// Checks if an expression is "branchy", e.g. loop, match/if/etc.
|
/// Checks if an expression is "branchy", e.g. loop, match/if/etc.
|
||||||
fn is_branchy(expr: &hir::Expr<'_>) -> bool {
|
fn is_branchy(expr: &hir::Expr<'_>) -> bool {
|
||||||
matches!(
|
matches!(
|
||||||
|
@ -394,6 +446,15 @@ fn block_has_safety_comment(cx: &LateContext<'_>, span: Span) -> bool {
|
||||||
) || span_in_body_has_safety_comment(cx, span)
|
) || span_in_body_has_safety_comment(cx, span)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn include_attrs_in_span(cx: &LateContext<'_>, hir_id: HirId, span: Span) -> Span {
|
||||||
|
span.to(cx
|
||||||
|
.tcx
|
||||||
|
.hir()
|
||||||
|
.attrs(hir_id)
|
||||||
|
.iter()
|
||||||
|
.fold(span, |acc, attr| acc.to(attr.span)))
|
||||||
|
}
|
||||||
|
|
||||||
enum HasSafetyComment {
|
enum HasSafetyComment {
|
||||||
Yes(BytePos),
|
Yes(BytePos),
|
||||||
No,
|
No,
|
||||||
|
|
|
@ -542,6 +542,10 @@ define_Conf! {
|
||||||
///
|
///
|
||||||
/// Whether to accept a safety comment to be placed above the statement containing the `unsafe` block
|
/// Whether to accept a safety comment to be placed above the statement containing the `unsafe` block
|
||||||
(accept_comment_above_statement: bool = false),
|
(accept_comment_above_statement: bool = false),
|
||||||
|
/// Lint: UNDOCUMENTED_UNSAFE_BLOCKS.
|
||||||
|
///
|
||||||
|
/// Whether to accept a safety comment to be placed above the attributes for the `unsafe` block
|
||||||
|
(accept_comment_above_attributes: bool = false),
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Search for the configuration file.
|
/// Search for the configuration file.
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
error: error reading Clippy's configuration file: unknown field `foobar`, expected one of
|
error: error reading Clippy's configuration file: unknown field `foobar`, expected one of
|
||||||
|
accept-comment-above-attributes
|
||||||
accept-comment-above-statement
|
accept-comment-above-statement
|
||||||
allow-dbg-in-tests
|
allow-dbg-in-tests
|
||||||
allow-expect-in-tests
|
allow-expect-in-tests
|
||||||
|
@ -66,6 +67,7 @@ LL | foobar = 42
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
||||||
error: error reading Clippy's configuration file: unknown field `barfoo`, expected one of
|
error: error reading Clippy's configuration file: unknown field `barfoo`, expected one of
|
||||||
|
accept-comment-above-attributes
|
||||||
accept-comment-above-statement
|
accept-comment-above-statement
|
||||||
allow-dbg-in-tests
|
allow-dbg-in-tests
|
||||||
allow-expect-in-tests
|
allow-expect-in-tests
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
accept-comment-above-statement = true
|
accept-comment-above-statement = true
|
||||||
|
accept-comment-above-attributes = true
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//@aux-build:proc_macro_unsafe.rs
|
//@aux-build:proc_macro_unsafe.rs
|
||||||
|
|
||||||
#![warn(clippy::undocumented_unsafe_blocks, clippy::unnecessary_safety_comment)]
|
#![warn(clippy::undocumented_unsafe_blocks, clippy::unnecessary_safety_comment)]
|
||||||
#![allow(clippy::let_unit_value, clippy::missing_safety_doc)]
|
#![allow(deref_nullptr, clippy::let_unit_value, clippy::missing_safety_doc)]
|
||||||
|
#![feature(lint_reasons)]
|
||||||
|
|
||||||
extern crate proc_macro_unsafe;
|
extern crate proc_macro_unsafe;
|
||||||
|
|
||||||
|
@ -531,4 +532,36 @@ fn issue_10832() {
|
||||||
unsafe { a_const_function_with_a_very_long_name_to_break_the_line() };
|
unsafe { a_const_function_with_a_very_long_name_to_break_the_line() };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn issue_8679<T: Copy>() {
|
||||||
|
// SAFETY:
|
||||||
|
#[allow(unsafe_code)]
|
||||||
|
unsafe {}
|
||||||
|
|
||||||
|
// SAFETY:
|
||||||
|
#[expect(unsafe_code, reason = "totally safe")]
|
||||||
|
unsafe {
|
||||||
|
*std::ptr::null::<T>()
|
||||||
|
};
|
||||||
|
|
||||||
|
// Safety: A safety comment
|
||||||
|
#[allow(unsafe_code)]
|
||||||
|
let _some_variable_with_a_very_long_name_to_break_the_line =
|
||||||
|
unsafe { a_function_with_a_very_long_name_to_break_the_line() };
|
||||||
|
|
||||||
|
// Safety: Another safety comment
|
||||||
|
#[allow(unsafe_code)]
|
||||||
|
const _SOME_CONST_WITH_A_VERY_LONG_NAME_TO_BREAK_THE_LINE: u32 =
|
||||||
|
unsafe { a_const_function_with_a_very_long_name_to_break_the_line() };
|
||||||
|
|
||||||
|
// Safety: Yet another safety comment
|
||||||
|
#[allow(unsafe_code)]
|
||||||
|
static _SOME_STATIC_WITH_A_VERY_LONG_NAME_TO_BREAK_THE_LINE: u32 =
|
||||||
|
unsafe { a_const_function_with_a_very_long_name_to_break_the_line() };
|
||||||
|
|
||||||
|
// SAFETY:
|
||||||
|
#[allow(unsafe_code)]
|
||||||
|
// This also works I guess
|
||||||
|
unsafe {}
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
error: unsafe block missing a safety comment
|
error: unsafe block missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:262:19
|
--> $DIR/undocumented_unsafe_blocks.rs:263:19
|
||||||
|
|
|
|
||||||
LL | /* Safety: */ unsafe {}
|
LL | /* Safety: */ unsafe {}
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
|
@ -8,7 +8,7 @@ LL | /* Safety: */ unsafe {}
|
||||||
= note: `-D clippy::undocumented-unsafe-blocks` implied by `-D warnings`
|
= note: `-D clippy::undocumented-unsafe-blocks` implied by `-D warnings`
|
||||||
|
|
||||||
error: unsafe block missing a safety comment
|
error: unsafe block missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:266:5
|
--> $DIR/undocumented_unsafe_blocks.rs:267:5
|
||||||
|
|
|
|
||||||
LL | unsafe {}
|
LL | unsafe {}
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
|
@ -16,7 +16,7 @@ LL | unsafe {}
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: unsafe block missing a safety comment
|
error: unsafe block missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:270:14
|
--> $DIR/undocumented_unsafe_blocks.rs:271:14
|
||||||
|
|
|
|
||||||
LL | let _ = [unsafe { 14 }, unsafe { 15 }, 42, unsafe { 16 }];
|
LL | let _ = [unsafe { 14 }, unsafe { 15 }, 42, unsafe { 16 }];
|
||||||
| ^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^
|
||||||
|
@ -24,7 +24,7 @@ LL | let _ = [unsafe { 14 }, unsafe { 15 }, 42, unsafe { 16 }];
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: unsafe block missing a safety comment
|
error: unsafe block missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:270:29
|
--> $DIR/undocumented_unsafe_blocks.rs:271:29
|
||||||
|
|
|
|
||||||
LL | let _ = [unsafe { 14 }, unsafe { 15 }, 42, unsafe { 16 }];
|
LL | let _ = [unsafe { 14 }, unsafe { 15 }, 42, unsafe { 16 }];
|
||||||
| ^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^
|
||||||
|
@ -32,7 +32,7 @@ LL | let _ = [unsafe { 14 }, unsafe { 15 }, 42, unsafe { 16 }];
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: unsafe block missing a safety comment
|
error: unsafe block missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:270:48
|
--> $DIR/undocumented_unsafe_blocks.rs:271:48
|
||||||
|
|
|
|
||||||
LL | let _ = [unsafe { 14 }, unsafe { 15 }, 42, unsafe { 16 }];
|
LL | let _ = [unsafe { 14 }, unsafe { 15 }, 42, unsafe { 16 }];
|
||||||
| ^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^
|
||||||
|
@ -40,7 +40,7 @@ LL | let _ = [unsafe { 14 }, unsafe { 15 }, 42, unsafe { 16 }];
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: unsafe block missing a safety comment
|
error: unsafe block missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:274:18
|
--> $DIR/undocumented_unsafe_blocks.rs:275:18
|
||||||
|
|
|
|
||||||
LL | let _ = (42, unsafe {}, "test", unsafe {});
|
LL | let _ = (42, unsafe {}, "test", unsafe {});
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
|
@ -48,7 +48,7 @@ LL | let _ = (42, unsafe {}, "test", unsafe {});
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: unsafe block missing a safety comment
|
error: unsafe block missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:274:37
|
--> $DIR/undocumented_unsafe_blocks.rs:275:37
|
||||||
|
|
|
|
||||||
LL | let _ = (42, unsafe {}, "test", unsafe {});
|
LL | let _ = (42, unsafe {}, "test", unsafe {});
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
|
@ -56,7 +56,7 @@ LL | let _ = (42, unsafe {}, "test", unsafe {});
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: unsafe block missing a safety comment
|
error: unsafe block missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:278:14
|
--> $DIR/undocumented_unsafe_blocks.rs:279:14
|
||||||
|
|
|
|
||||||
LL | let _ = *unsafe { &42 };
|
LL | let _ = *unsafe { &42 };
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
@ -64,7 +64,7 @@ LL | let _ = *unsafe { &42 };
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: unsafe block missing a safety comment
|
error: unsafe block missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:283:19
|
--> $DIR/undocumented_unsafe_blocks.rs:284:19
|
||||||
|
|
|
|
||||||
LL | let _ = match unsafe {} {
|
LL | let _ = match unsafe {} {
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
|
@ -72,7 +72,7 @@ LL | let _ = match unsafe {} {
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: unsafe block missing a safety comment
|
error: unsafe block missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:289:14
|
--> $DIR/undocumented_unsafe_blocks.rs:290:14
|
||||||
|
|
|
|
||||||
LL | let _ = &unsafe {};
|
LL | let _ = &unsafe {};
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
|
@ -80,7 +80,7 @@ LL | let _ = &unsafe {};
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: unsafe block missing a safety comment
|
error: unsafe block missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:293:14
|
--> $DIR/undocumented_unsafe_blocks.rs:294:14
|
||||||
|
|
|
|
||||||
LL | let _ = [unsafe {}; 5];
|
LL | let _ = [unsafe {}; 5];
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
|
@ -88,7 +88,7 @@ LL | let _ = [unsafe {}; 5];
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: unsafe block missing a safety comment
|
error: unsafe block missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:297:13
|
--> $DIR/undocumented_unsafe_blocks.rs:298:13
|
||||||
|
|
|
|
||||||
LL | let _ = unsafe {};
|
LL | let _ = unsafe {};
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
|
@ -96,7 +96,7 @@ LL | let _ = unsafe {};
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: unsafe block missing a safety comment
|
error: unsafe block missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:307:8
|
--> $DIR/undocumented_unsafe_blocks.rs:308:8
|
||||||
|
|
|
|
||||||
LL | t!(unsafe {});
|
LL | t!(unsafe {});
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
|
@ -104,7 +104,7 @@ LL | t!(unsafe {});
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: unsafe block missing a safety comment
|
error: unsafe block missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:313:13
|
--> $DIR/undocumented_unsafe_blocks.rs:314:13
|
||||||
|
|
|
|
||||||
LL | unsafe {}
|
LL | unsafe {}
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
|
@ -116,7 +116,7 @@ LL | t!();
|
||||||
= note: this error originates in the macro `t` (in Nightly builds, run with -Z macro-backtrace for more info)
|
= note: this error originates in the macro `t` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||||
|
|
||||||
error: unsafe block missing a safety comment
|
error: unsafe block missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:321:5
|
--> $DIR/undocumented_unsafe_blocks.rs:322:5
|
||||||
|
|
|
|
||||||
LL | unsafe {} // SAFETY:
|
LL | unsafe {} // SAFETY:
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
|
@ -124,7 +124,7 @@ LL | unsafe {} // SAFETY:
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: unsafe block missing a safety comment
|
error: unsafe block missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:325:5
|
--> $DIR/undocumented_unsafe_blocks.rs:326:5
|
||||||
|
|
|
|
||||||
LL | unsafe {
|
LL | unsafe {
|
||||||
| ^^^^^^^^
|
| ^^^^^^^^
|
||||||
|
@ -132,7 +132,7 @@ LL | unsafe {
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: unsafe block missing a safety comment
|
error: unsafe block missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:335:5
|
--> $DIR/undocumented_unsafe_blocks.rs:336:5
|
||||||
|
|
|
|
||||||
LL | unsafe {};
|
LL | unsafe {};
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
|
@ -140,7 +140,7 @@ LL | unsafe {};
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: unsafe block missing a safety comment
|
error: unsafe block missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:339:20
|
--> $DIR/undocumented_unsafe_blocks.rs:340:20
|
||||||
|
|
|
|
||||||
LL | println!("{}", unsafe { String::from_utf8_unchecked(vec![]) });
|
LL | println!("{}", unsafe { String::from_utf8_unchecked(vec![]) });
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -148,7 +148,7 @@ LL | println!("{}", unsafe { String::from_utf8_unchecked(vec![]) });
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: unsafe impl missing a safety comment
|
error: unsafe impl missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:346:5
|
--> $DIR/undocumented_unsafe_blocks.rs:347:5
|
||||||
|
|
|
|
||||||
LL | unsafe impl A for () {}
|
LL | unsafe impl A for () {}
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -156,7 +156,7 @@ LL | unsafe impl A for () {}
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: unsafe impl missing a safety comment
|
error: unsafe impl missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:353:9
|
--> $DIR/undocumented_unsafe_blocks.rs:354:9
|
||||||
|
|
|
|
||||||
LL | unsafe impl B for (u32) {}
|
LL | unsafe impl B for (u32) {}
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -164,7 +164,7 @@ LL | unsafe impl B for (u32) {}
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: unsafe impl missing a safety comment
|
error: unsafe impl missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:374:13
|
--> $DIR/undocumented_unsafe_blocks.rs:375:13
|
||||||
|
|
|
|
||||||
LL | unsafe impl T for $t {}
|
LL | unsafe impl T for $t {}
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -176,7 +176,7 @@ LL | no_safety_comment!(());
|
||||||
= note: this error originates in the macro `no_safety_comment` (in Nightly builds, run with -Z macro-backtrace for more info)
|
= note: this error originates in the macro `no_safety_comment` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||||
|
|
||||||
error: unsafe impl missing a safety comment
|
error: unsafe impl missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:399:13
|
--> $DIR/undocumented_unsafe_blocks.rs:400:13
|
||||||
|
|
|
|
||||||
LL | unsafe impl T for $t {}
|
LL | unsafe impl T for $t {}
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -188,7 +188,7 @@ LL | no_safety_comment!(());
|
||||||
= note: this error originates in the macro `no_safety_comment` (in Nightly builds, run with -Z macro-backtrace for more info)
|
= note: this error originates in the macro `no_safety_comment` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||||
|
|
||||||
error: unsafe impl missing a safety comment
|
error: unsafe impl missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:407:5
|
--> $DIR/undocumented_unsafe_blocks.rs:408:5
|
||||||
|
|
|
|
||||||
LL | unsafe impl T for (i32) {}
|
LL | unsafe impl T for (i32) {}
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -196,7 +196,7 @@ LL | unsafe impl T for (i32) {}
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: unsafe impl missing a safety comment
|
error: unsafe impl missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:399:13
|
--> $DIR/undocumented_unsafe_blocks.rs:400:13
|
||||||
|
|
|
|
||||||
LL | unsafe impl T for $t {}
|
LL | unsafe impl T for $t {}
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -208,7 +208,7 @@ LL | no_safety_comment!(u32);
|
||||||
= note: this error originates in the macro `no_safety_comment` (in Nightly builds, run with -Z macro-backtrace for more info)
|
= note: this error originates in the macro `no_safety_comment` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||||
|
|
||||||
error: unsafe impl missing a safety comment
|
error: unsafe impl missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:413:5
|
--> $DIR/undocumented_unsafe_blocks.rs:414:5
|
||||||
|
|
|
|
||||||
LL | unsafe impl T for (bool) {}
|
LL | unsafe impl T for (bool) {}
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -216,7 +216,7 @@ LL | unsafe impl T for (bool) {}
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: unsafe impl missing a safety comment
|
error: unsafe impl missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:459:5
|
--> $DIR/undocumented_unsafe_blocks.rs:460:5
|
||||||
|
|
|
|
||||||
LL | unsafe impl NoComment for () {}
|
LL | unsafe impl NoComment for () {}
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -224,7 +224,7 @@ LL | unsafe impl NoComment for () {}
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: unsafe impl missing a safety comment
|
error: unsafe impl missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:463:19
|
--> $DIR/undocumented_unsafe_blocks.rs:464:19
|
||||||
|
|
|
|
||||||
LL | /* SAFETY: */ unsafe impl InlineComment for () {}
|
LL | /* SAFETY: */ unsafe impl InlineComment for () {}
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -232,7 +232,7 @@ LL | /* SAFETY: */ unsafe impl InlineComment for () {}
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: unsafe impl missing a safety comment
|
error: unsafe impl missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:467:5
|
--> $DIR/undocumented_unsafe_blocks.rs:468:5
|
||||||
|
|
|
|
||||||
LL | unsafe impl TrailingComment for () {} // SAFETY:
|
LL | unsafe impl TrailingComment for () {} // SAFETY:
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -240,20 +240,20 @@ LL | unsafe impl TrailingComment for () {} // SAFETY:
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: constant item has unnecessary safety comment
|
error: constant item has unnecessary safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:471:5
|
--> $DIR/undocumented_unsafe_blocks.rs:472:5
|
||||||
|
|
|
|
||||||
LL | const BIG_NUMBER: i32 = 1000000;
|
LL | const BIG_NUMBER: i32 = 1000000;
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
help: consider removing the safety comment
|
help: consider removing the safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:470:5
|
--> $DIR/undocumented_unsafe_blocks.rs:471:5
|
||||||
|
|
|
|
||||||
LL | // SAFETY:
|
LL | // SAFETY:
|
||||||
| ^^^^^^^^^^
|
| ^^^^^^^^^^
|
||||||
= note: `-D clippy::unnecessary-safety-comment` implied by `-D warnings`
|
= note: `-D clippy::unnecessary-safety-comment` implied by `-D warnings`
|
||||||
|
|
||||||
error: unsafe impl missing a safety comment
|
error: unsafe impl missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:472:5
|
--> $DIR/undocumented_unsafe_blocks.rs:473:5
|
||||||
|
|
|
|
||||||
LL | unsafe impl Interference for () {}
|
LL | unsafe impl Interference for () {}
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -261,7 +261,7 @@ LL | unsafe impl Interference for () {}
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: unsafe impl missing a safety comment
|
error: unsafe impl missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:479:5
|
--> $DIR/undocumented_unsafe_blocks.rs:480:5
|
||||||
|
|
|
|
||||||
LL | unsafe impl ImplInFn for () {}
|
LL | unsafe impl ImplInFn for () {}
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -269,7 +269,7 @@ LL | unsafe impl ImplInFn for () {}
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: unsafe impl missing a safety comment
|
error: unsafe impl missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:488:1
|
--> $DIR/undocumented_unsafe_blocks.rs:489:1
|
||||||
|
|
|
|
||||||
LL | unsafe impl CrateRoot for () {}
|
LL | unsafe impl CrateRoot for () {}
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -277,7 +277,7 @@ LL | unsafe impl CrateRoot for () {}
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: statement has unnecessary safety comment
|
error: statement has unnecessary safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:501:5
|
--> $DIR/undocumented_unsafe_blocks.rs:502:5
|
||||||
|
|
|
|
||||||
LL | / let _ = {
|
LL | / let _ = {
|
||||||
LL | | if unsafe { true } {
|
LL | | if unsafe { true } {
|
||||||
|
@ -289,13 +289,13 @@ LL | | };
|
||||||
| |______^
|
| |______^
|
||||||
|
|
|
|
||||||
help: consider removing the safety comment
|
help: consider removing the safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:500:5
|
--> $DIR/undocumented_unsafe_blocks.rs:501:5
|
||||||
|
|
|
|
||||||
LL | // SAFETY: this is more than one level away, so it should warn
|
LL | // SAFETY: this is more than one level away, so it should warn
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: unsafe block missing a safety comment
|
error: unsafe block missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:502:12
|
--> $DIR/undocumented_unsafe_blocks.rs:503:12
|
||||||
|
|
|
|
||||||
LL | if unsafe { true } {
|
LL | if unsafe { true } {
|
||||||
| ^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^
|
||||||
|
@ -303,7 +303,7 @@ LL | if unsafe { true } {
|
||||||
= help: consider adding a safety comment on the preceding line
|
= help: consider adding a safety comment on the preceding line
|
||||||
|
|
||||||
error: unsafe block missing a safety comment
|
error: unsafe block missing a safety comment
|
||||||
--> $DIR/undocumented_unsafe_blocks.rs:505:23
|
--> $DIR/undocumented_unsafe_blocks.rs:506:23
|
||||||
|
|
|
|
||||||
LL | let bar = unsafe {};
|
LL | let bar = unsafe {};
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
|
|
Loading…
Reference in a new issue