rust/tests/ui/undocumented_unsafe_blocks.rs

338 lines
5.7 KiB
Rust

// aux-build:proc_macro_unsafe.rs
#![warn(clippy::undocumented_unsafe_blocks)]
#![allow(clippy::let_unit_value)]
extern crate proc_macro_unsafe;
// Valid comments
fn nested_local() {
let _ = {
let _ = {
// SAFETY:
let _ = unsafe {};
};
};
}
fn deep_nest() {
let _ = {
let _ = {
// SAFETY:
let _ = unsafe {};
// Safety:
unsafe {};
let _ = {
let _ = {
let _ = {
let _ = {
let _ = {
// Safety:
let _ = unsafe {};
// SAFETY:
unsafe {};
};
};
};
// Safety:
unsafe {};
};
};
};
// Safety:
unsafe {};
};
// SAFETY:
unsafe {};
}
fn local_tuple_expression() {
// Safety:
let _ = (42, unsafe {});
}
fn line_comment() {
// Safety:
unsafe {}
}
fn line_comment_newlines() {
// SAFETY:
unsafe {}
}
fn line_comment_empty() {
// Safety:
//
//
//
unsafe {}
}
fn line_comment_with_extras() {
// This is a description
// Safety:
unsafe {}
}
fn block_comment() {
/* Safety: */
unsafe {}
}
fn block_comment_newlines() {
/* SAFETY: */
unsafe {}
}
fn block_comment_with_extras() {
/* This is a description
* SAFETY:
*/
unsafe {}
}
fn block_comment_terminator_same_line() {
/* This is a description
* Safety: */
unsafe {}
}
fn buried_safety() {
// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
// incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation
// ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
// reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
// occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est
// laborum. Safety:
// Tellus elementum sagittis vitae et leo duis ut diam quam. Sit amet nulla facilisi
// morbi tempus iaculis urna. Amet luctus venenatis lectus magna. At quis risus sed vulputate odio
// ut. Luctus venenatis lectus magna fringilla urna. Tortor id aliquet lectus proin nibh nisl
// condimentum id venenatis. Vulputate dignissim suspendisse in est ante in nibh mauris cursus.
unsafe {}
}
fn safety_with_prepended_text() {
// This is a test. safety:
unsafe {}
}
fn local_line_comment() {
// Safety:
let _ = unsafe {};
}
fn local_block_comment() {
/* SAFETY: */
let _ = unsafe {};
}
fn comment_array() {
// Safety:
let _ = [unsafe { 14 }, unsafe { 15 }, 42, unsafe { 16 }];
}
fn comment_tuple() {
// sAFETY:
let _ = (42, unsafe {}, "test", unsafe {});
}
fn comment_unary() {
// SAFETY:
let _ = *unsafe { &42 };
}
#[allow(clippy::match_single_binding)]
fn comment_match() {
// SAFETY:
let _ = match unsafe {} {
_ => {},
};
}
fn comment_addr_of() {
// Safety:
let _ = &unsafe {};
}
fn comment_repeat() {
// Safety:
let _ = [unsafe {}; 5];
}
fn comment_macro_call() {
macro_rules! t {
($b:expr) => {
$b
};
}
t!(
// SAFETY:
unsafe {}
);
}
fn comment_macro_def() {
macro_rules! t {
() => {
// Safety:
unsafe {}
};
}
t!();
}
fn non_ascii_comment() {
// ॐ᧻໒ SaFeTy: ௵∰
unsafe {};
}
fn local_commented_block() {
let _ =
// safety:
unsafe {};
}
fn local_nest() {
// safety:
let _ = [(42, unsafe {}, unsafe {}), (52, unsafe {}, unsafe {})];
}
fn in_fn_call(x: *const u32) {
fn f(x: u32) {}
// Safety: reason
f(unsafe { *x });
}
fn multi_in_fn_call(x: *const u32) {
fn f(x: u32, y: u32) {}
// Safety: reason
f(unsafe { *x }, unsafe { *x });
}
fn in_multiline_fn_call(x: *const u32) {
fn f(x: u32, y: u32) {}
f(
// Safety: reason
unsafe { *x },
0,
);
}
fn in_macro_call(x: *const u32) {
// Safety: reason
println!("{}", unsafe { *x });
}
fn in_multiline_macro_call(x: *const u32) {
println!(
"{}",
// Safety: reason
unsafe { *x },
);
}
fn from_proc_macro() {
proc_macro_unsafe::unsafe_block!(token);
}
// Invalid comments
#[rustfmt::skip]
fn inline_block_comment() {
/* Safety: */ unsafe {}
}
fn no_comment() {
unsafe {}
}
fn no_comment_array() {
let _ = [unsafe { 14 }, unsafe { 15 }, 42, unsafe { 16 }];
}
fn no_comment_tuple() {
let _ = (42, unsafe {}, "test", unsafe {});
}
fn no_comment_unary() {
let _ = *unsafe { &42 };
}
#[allow(clippy::match_single_binding)]
fn no_comment_match() {
let _ = match unsafe {} {
_ => {},
};
}
fn no_comment_addr_of() {
let _ = &unsafe {};
}
fn no_comment_repeat() {
let _ = [unsafe {}; 5];
}
fn local_no_comment() {
let _ = unsafe {};
}
fn no_comment_macro_call() {
macro_rules! t {
($b:expr) => {
$b
};
}
t!(unsafe {});
}
fn no_comment_macro_def() {
macro_rules! t {
() => {
unsafe {}
};
}
t!();
}
fn trailing_comment() {
unsafe {} // SAFETY:
}
fn internal_comment() {
unsafe {
// SAFETY:
}
}
fn interference() {
// SAFETY
let _ = 42;
unsafe {};
}
pub fn print_binary_tree() {
println!("{}", unsafe { String::from_utf8_unchecked(vec![]) });
}
fn main() {}