]> git.proxmox.com Git - rustc.git/blob - src/tools/clippy/clippy_lints/src/methods/uninit_assumed_init.rs
New upstream version 1.61.0+dfsg1
[rustc.git] / src / tools / clippy / clippy_lints / src / methods / uninit_assumed_init.rs
1 use clippy_utils::diagnostics::span_lint;
2 use clippy_utils::{is_expr_diagnostic_item, ty::is_uninit_value_valid_for_ty};
3 use if_chain::if_chain;
4 use rustc_hir as hir;
5 use rustc_lint::LateContext;
6 use rustc_span::sym;
7
8 use super::UNINIT_ASSUMED_INIT;
9
10 /// lint for `MaybeUninit::uninit().assume_init()` (we already have the latter)
11 pub(super) fn check(cx: &LateContext<'_>, expr: &hir::Expr<'_>, recv: &hir::Expr<'_>) {
12 if_chain! {
13 if let hir::ExprKind::Call(callee, args) = recv.kind;
14 if args.is_empty();
15 if is_expr_diagnostic_item(cx, callee, sym::maybe_uninit_uninit);
16 if !is_uninit_value_valid_for_ty(cx, cx.typeck_results().expr_ty_adjusted(expr));
17 then {
18 span_lint(
19 cx,
20 UNINIT_ASSUMED_INIT,
21 expr.span,
22 "this call for this type may be undefined behavior"
23 );
24 }
25 }
26 }