mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-20 02:43:45 +00:00
Rollup merge of #122813 - nnethercote:nicer-quals, r=compiler-errors
Qualifier tweaking Adding and removing qualifiers in some cases that make things nicer. Details in individual commits. r? `@compiler-errors`
This commit is contained in:
commit
432bce6583
@ -9,7 +9,7 @@ use rustc_hir::{
|
||||
};
|
||||
use rustc_lint::{LateContext, LateLintPass};
|
||||
use rustc_middle::ty::adjustment::{Adjust, PointerCoercion};
|
||||
use rustc_middle::ty::{self, Adt, AdtDef, GenericArgsRef, Ty, TypeckResults};
|
||||
use rustc_middle::ty::{self, AdtDef, GenericArgsRef, Ty, TypeckResults};
|
||||
use rustc_session::impl_lint_pass;
|
||||
use rustc_span::sym;
|
||||
|
||||
@ -79,7 +79,7 @@ fn is_path_self(e: &Expr<'_>) -> bool {
|
||||
fn contains_trait_object(ty: Ty<'_>) -> bool {
|
||||
match ty.kind() {
|
||||
ty::Ref(_, ty, _) => contains_trait_object(*ty),
|
||||
Adt(def, args) => def.is_box() && args[0].as_type().map_or(false, contains_trait_object),
|
||||
ty::Adt(def, args) => def.is_box() && args[0].as_type().map_or(false, contains_trait_object),
|
||||
ty::Dynamic(..) => true,
|
||||
_ => false,
|
||||
}
|
||||
@ -198,7 +198,7 @@ impl<'tcx> LateLintPass<'tcx> for DerivableImpls {
|
||||
&& let Node::ImplItem(impl_item) = cx.tcx.hir_node(impl_item_hir)
|
||||
&& let ImplItemKind::Fn(_, b) = &impl_item.kind
|
||||
&& let Body { value: func_expr, .. } = cx.tcx.hir().body(*b)
|
||||
&& let &Adt(adt_def, args) = cx.tcx.type_of(item.owner_id).instantiate_identity().kind()
|
||||
&& let &ty::Adt(adt_def, args) = cx.tcx.type_of(item.owner_id).instantiate_identity().kind()
|
||||
&& let attrs = cx.tcx.hir().attrs(item.hir_id())
|
||||
&& !attrs.iter().any(|attr| attr.doc_str().is_some())
|
||||
&& cx.tcx.hir().attrs(impl_item_hir).is_empty()
|
||||
|
@ -4,7 +4,7 @@ use clippy_utils::ty::is_c_void;
|
||||
use rustc_hir::def_id::DefId;
|
||||
use rustc_hir::{Expr, ExprKind, QPath};
|
||||
use rustc_lint::{LateContext, LateLintPass};
|
||||
use rustc_middle::ty::RawPtr;
|
||||
use rustc_middle::ty;
|
||||
use rustc_session::declare_lint_pass;
|
||||
use rustc_span::sym;
|
||||
|
||||
@ -44,7 +44,7 @@ impl LateLintPass<'_> for FromRawWithVoidPtr {
|
||||
&& seg.ident.name == sym!(from_raw)
|
||||
&& let Some(type_str) = path_def_id(cx, ty).and_then(|id| def_id_matches_type(cx, id))
|
||||
&& let arg_kind = cx.typeck_results().expr_ty(arg).kind()
|
||||
&& let RawPtr(ty, _) = arg_kind
|
||||
&& let ty::RawPtr(ty, _) = arg_kind
|
||||
&& is_c_void(cx, *ty)
|
||||
{
|
||||
let msg = format!("creating a `{type_str}` from a void raw pointer");
|
||||
|
@ -1,4 +1,4 @@
|
||||
use rustc_hir::{self as hir, intravisit, HirIdSet};
|
||||
use rustc_hir::{self as hir, intravisit, HirId, HirIdSet};
|
||||
use rustc_lint::LateContext;
|
||||
use rustc_middle::ty;
|
||||
use rustc_span::def_id::LocalDefId;
|
||||
@ -74,7 +74,7 @@ fn check_raw_ptr<'tcx>(
|
||||
}
|
||||
}
|
||||
|
||||
fn raw_ptr_arg(cx: &LateContext<'_>, arg: &hir::Param<'_>) -> Option<hir::HirId> {
|
||||
fn raw_ptr_arg(cx: &LateContext<'_>, arg: &hir::Param<'_>) -> Option<HirId> {
|
||||
if let (&hir::PatKind::Binding(_, id, _, _), Some(&ty::RawPtr(_, _))) = (
|
||||
&arg.pat.kind,
|
||||
cx.maybe_typeck_results()
|
||||
|
@ -2,7 +2,7 @@ use rustc_errors::Diag;
|
||||
use rustc_hir as hir;
|
||||
use rustc_lint::{LateContext, LintContext};
|
||||
use rustc_middle::lint::in_external_macro;
|
||||
use rustc_middle::ty::{Adt, Ty};
|
||||
use rustc_middle::ty::{self, Ty};
|
||||
use rustc_span::{sym, Span};
|
||||
|
||||
use clippy_utils::diagnostics::{span_lint_and_help, span_lint_and_then};
|
||||
@ -25,7 +25,7 @@ fn result_err_ty<'tcx>(
|
||||
.tcx
|
||||
.instantiate_bound_regions_with_erased(cx.tcx.fn_sig(id).instantiate_identity().output())
|
||||
&& is_type_diagnostic_item(cx, ty, sym::Result)
|
||||
&& let Adt(_, args) = ty.kind()
|
||||
&& let ty::Adt(_, args) = ty.kind()
|
||||
{
|
||||
let err_ty = args.type_at(1);
|
||||
Some((hir_ty, err_ty))
|
||||
@ -86,7 +86,7 @@ fn check_result_unit_err(cx: &LateContext<'_>, err_ty: Ty<'_>, fn_header_span: S
|
||||
}
|
||||
|
||||
fn check_result_large_err<'tcx>(cx: &LateContext<'tcx>, err_ty: Ty<'tcx>, hir_ty_span: Span, large_err_threshold: u64) {
|
||||
if let Adt(adt, subst) = err_ty.kind()
|
||||
if let ty::Adt(adt, subst) = err_ty.kind()
|
||||
&& let Some(local_def_id) = err_ty
|
||||
.ty_adt_def()
|
||||
.expect("already checked this is adt")
|
||||
|
@ -7,7 +7,7 @@ use rustc_data_structures::packed::Pu128;
|
||||
use rustc_errors::Applicability;
|
||||
use rustc_hir::{BinOpKind, Block, Expr, ExprKind, Stmt, StmtKind};
|
||||
use rustc_lint::{LateContext, LateLintPass};
|
||||
use rustc_middle::ty::{Int, IntTy, Ty, Uint, UintTy};
|
||||
use rustc_middle::ty::{IntTy, Ty, UintTy};
|
||||
use rustc_session::declare_lint_pass;
|
||||
|
||||
declare_clippy_lint! {
|
||||
@ -97,6 +97,7 @@ impl<'tcx> LateLintPass<'tcx> for ImplicitSaturatingAdd {
|
||||
}
|
||||
|
||||
fn get_int_max(ty: Ty<'_>) -> Option<u128> {
|
||||
use rustc_middle::ty::{Int, Uint};
|
||||
match ty.peel_refs().kind() {
|
||||
Int(IntTy::I8) => i8::MAX.try_into().ok(),
|
||||
Int(IntTy::I16) => i16::MAX.try_into().ok(),
|
||||
|
@ -7,6 +7,7 @@ use clippy_utils::{is_expn_of, is_lint_allowed, path_to_local};
|
||||
use rustc_data_structures::fx::{FxHashSet, FxIndexMap};
|
||||
use rustc_errors::Applicability;
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::HirId;
|
||||
use rustc_hir::intravisit::{self, Visitor};
|
||||
use rustc_lint::{LateContext, LateLintPass};
|
||||
use rustc_middle::hir::nested_filter;
|
||||
@ -87,9 +88,9 @@ impl<'tcx> LateLintPass<'tcx> for IndexRefutableSlice {
|
||||
extract_msrv_attr!(LateContext);
|
||||
}
|
||||
|
||||
fn find_slice_values(cx: &LateContext<'_>, pat: &hir::Pat<'_>) -> FxIndexMap<hir::HirId, SliceLintInformation> {
|
||||
let mut removed_pat: FxHashSet<hir::HirId> = FxHashSet::default();
|
||||
let mut slices: FxIndexMap<hir::HirId, SliceLintInformation> = FxIndexMap::default();
|
||||
fn find_slice_values(cx: &LateContext<'_>, pat: &hir::Pat<'_>) -> FxIndexMap<HirId, SliceLintInformation> {
|
||||
let mut removed_pat: FxHashSet<HirId> = FxHashSet::default();
|
||||
let mut slices: FxIndexMap<HirId, SliceLintInformation> = FxIndexMap::default();
|
||||
pat.walk_always(|pat| {
|
||||
// We'll just ignore mut and ref mut for simplicity sake right now
|
||||
if let hir::PatKind::Binding(
|
||||
@ -206,10 +207,10 @@ impl SliceLintInformation {
|
||||
|
||||
fn filter_lintable_slices<'tcx>(
|
||||
cx: &LateContext<'tcx>,
|
||||
slice_lint_info: FxIndexMap<hir::HirId, SliceLintInformation>,
|
||||
slice_lint_info: FxIndexMap<HirId, SliceLintInformation>,
|
||||
max_suggested_slice: u64,
|
||||
scope: &'tcx hir::Expr<'tcx>,
|
||||
) -> FxIndexMap<hir::HirId, SliceLintInformation> {
|
||||
) -> FxIndexMap<HirId, SliceLintInformation> {
|
||||
let mut visitor = SliceIndexLintingVisitor {
|
||||
cx,
|
||||
slice_lint_info,
|
||||
@ -223,7 +224,7 @@ fn filter_lintable_slices<'tcx>(
|
||||
|
||||
struct SliceIndexLintingVisitor<'a, 'tcx> {
|
||||
cx: &'a LateContext<'tcx>,
|
||||
slice_lint_info: FxIndexMap<hir::HirId, SliceLintInformation>,
|
||||
slice_lint_info: FxIndexMap<HirId, SliceLintInformation>,
|
||||
max_suggested_slice: u64,
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,7 @@ use rustc_errors::Applicability;
|
||||
use rustc_hir::{Item, ItemKind};
|
||||
use rustc_lint::{LateContext, LateLintPass};
|
||||
use rustc_middle::lint::in_external_macro;
|
||||
use rustc_middle::ty::{Adt, Ty};
|
||||
use rustc_middle::ty::{self, Ty};
|
||||
use rustc_session::impl_lint_pass;
|
||||
use rustc_span::Span;
|
||||
|
||||
@ -82,7 +82,7 @@ impl<'tcx> LateLintPass<'tcx> for LargeEnumVariant {
|
||||
}
|
||||
if let ItemKind::Enum(ref def, _) = item.kind {
|
||||
let ty = cx.tcx.type_of(item.owner_id).instantiate_identity();
|
||||
let Adt(adt, subst) = ty.kind() else {
|
||||
let ty::Adt(adt, subst) = ty.kind() else {
|
||||
panic!("already checked whether this is an enum")
|
||||
};
|
||||
if adt.variants().len() <= 1 {
|
||||
@ -167,7 +167,7 @@ impl<'tcx> LateLintPass<'tcx> for LargeEnumVariant {
|
||||
}
|
||||
|
||||
fn maybe_copy<'tcx>(cx: &LateContext<'tcx>, ty: Ty<'tcx>) -> bool {
|
||||
if let Adt(_def, args) = ty.kind()
|
||||
if let ty::Adt(_def, args) = ty.kind()
|
||||
&& args.types().next().is_some()
|
||||
&& let Some(copy_trait) = cx.tcx.lang_items().copy_trait()
|
||||
{
|
||||
|
@ -4,7 +4,7 @@ use rustc_ast::ast::LitKind;
|
||||
use rustc_errors::Applicability;
|
||||
use rustc_hir::{Expr, ExprKind, LangItem};
|
||||
use rustc_lint::LateContext;
|
||||
use rustc_middle::ty::{Ref, Slice};
|
||||
use rustc_middle::ty;
|
||||
use rustc_span::Span;
|
||||
|
||||
use super::UNNECESSARY_JOIN;
|
||||
@ -18,9 +18,9 @@ pub(super) fn check<'tcx>(
|
||||
) {
|
||||
let applicability = Applicability::MachineApplicable;
|
||||
let collect_output_adjusted_type = cx.typeck_results().expr_ty_adjusted(join_self_arg);
|
||||
if let Ref(_, ref_type, _) = collect_output_adjusted_type.kind()
|
||||
if let ty::Ref(_, ref_type, _) = collect_output_adjusted_type.kind()
|
||||
// the turbofish for collect is ::<Vec<String>>
|
||||
&& let Slice(slice) = ref_type.kind()
|
||||
&& let ty::Slice(slice) = ref_type.kind()
|
||||
&& is_type_lang_item(cx, *slice, LangItem::String)
|
||||
// the argument for join is ""
|
||||
&& let ExprKind::Lit(spanned) = &join_arg.kind
|
||||
|
@ -4,7 +4,7 @@ use clippy_utils::{def_path_def_ids, trait_ref_of_method};
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_hir as hir;
|
||||
use rustc_lint::{LateContext, LateLintPass};
|
||||
use rustc_middle::ty::{Adt, Ty};
|
||||
use rustc_middle::ty::{self, Ty};
|
||||
use rustc_session::impl_lint_pass;
|
||||
use rustc_span::def_id::LocalDefId;
|
||||
use rustc_span::symbol::sym;
|
||||
@ -153,7 +153,7 @@ impl MutableKeyType {
|
||||
// generics (because the compiler cannot ensure immutability for unknown types).
|
||||
fn check_ty_<'tcx>(&self, cx: &LateContext<'tcx>, span: Span, ty: Ty<'tcx>) {
|
||||
let ty = ty.peel_refs();
|
||||
if let Adt(def, args) = ty.kind() {
|
||||
if let ty::Adt(def, args) = ty.kind() {
|
||||
let is_keyed_type = [sym::HashMap, sym::BTreeMap, sym::HashSet, sym::BTreeSet]
|
||||
.iter()
|
||||
.any(|diag_item| cx.tcx.is_diagnostic_item(*diag_item, def.did()));
|
||||
|
@ -18,7 +18,7 @@ use rustc_middle::mir::interpret::{ErrorHandled, EvalToValTreeResult, GlobalId};
|
||||
use rustc_middle::ty::adjustment::Adjust;
|
||||
use rustc_middle::ty::{self, Ty, TyCtxt};
|
||||
use rustc_session::impl_lint_pass;
|
||||
use rustc_span::{sym, InnerSpan, Span};
|
||||
use rustc_span::{sym, DUMMY_SP, InnerSpan, Span};
|
||||
use rustc_target::abi::VariantIdx;
|
||||
|
||||
// FIXME: this is a correctness problem but there's no suitable
|
||||
@ -290,9 +290,7 @@ impl NonCopyConst {
|
||||
promoted: None,
|
||||
};
|
||||
let param_env = cx.tcx.param_env(def_id).with_reveal_all_normalized(cx.tcx);
|
||||
let result = cx
|
||||
.tcx
|
||||
.const_eval_global_id_for_typeck(param_env, cid, rustc_span::DUMMY_SP);
|
||||
let result = cx.tcx.const_eval_global_id_for_typeck(param_env, cid, DUMMY_SP);
|
||||
self.is_value_unfrozen_raw(cx, result, ty)
|
||||
}
|
||||
|
||||
@ -303,7 +301,7 @@ impl NonCopyConst {
|
||||
cx.tcx,
|
||||
cx.param_env,
|
||||
ty::UnevaluatedConst::new(def_id, args),
|
||||
rustc_span::DUMMY_SP,
|
||||
DUMMY_SP,
|
||||
);
|
||||
self.is_value_unfrozen_raw(cx, result, ty)
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ use clippy_utils::{binop_traits, eq_expr_value, trait_ref_of_method};
|
||||
use core::ops::ControlFlow;
|
||||
use rustc_errors::Applicability;
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::{HirId, HirIdSet};
|
||||
use rustc_hir_typeck::expr_use_visitor::{Delegate, ExprUseVisitor, PlaceBase, PlaceWithHirId};
|
||||
use rustc_lint::LateContext;
|
||||
use rustc_middle::mir::FakeReadCause;
|
||||
@ -98,10 +99,10 @@ pub(super) fn check<'tcx>(
|
||||
}
|
||||
}
|
||||
|
||||
fn imm_borrows_in_expr(cx: &LateContext<'_>, e: &hir::Expr<'_>) -> hir::HirIdSet {
|
||||
struct S(hir::HirIdSet);
|
||||
fn imm_borrows_in_expr(cx: &LateContext<'_>, e: &hir::Expr<'_>) -> HirIdSet {
|
||||
struct S(HirIdSet);
|
||||
impl Delegate<'_> for S {
|
||||
fn borrow(&mut self, place: &PlaceWithHirId<'_>, _: hir::HirId, kind: BorrowKind) {
|
||||
fn borrow(&mut self, place: &PlaceWithHirId<'_>, _: HirId, kind: BorrowKind) {
|
||||
if matches!(kind, BorrowKind::ImmBorrow | BorrowKind::UniqueImmBorrow) {
|
||||
self.0.insert(match place.place.base {
|
||||
PlaceBase::Local(id) => id,
|
||||
@ -111,13 +112,13 @@ fn imm_borrows_in_expr(cx: &LateContext<'_>, e: &hir::Expr<'_>) -> hir::HirIdSet
|
||||
}
|
||||
}
|
||||
|
||||
fn consume(&mut self, _: &PlaceWithHirId<'_>, _: hir::HirId) {}
|
||||
fn mutate(&mut self, _: &PlaceWithHirId<'_>, _: hir::HirId) {}
|
||||
fn fake_read(&mut self, _: &PlaceWithHirId<'_>, _: FakeReadCause, _: hir::HirId) {}
|
||||
fn copy(&mut self, _: &PlaceWithHirId<'_>, _: hir::HirId) {}
|
||||
fn consume(&mut self, _: &PlaceWithHirId<'_>, _: HirId) {}
|
||||
fn mutate(&mut self, _: &PlaceWithHirId<'_>, _: HirId) {}
|
||||
fn fake_read(&mut self, _: &PlaceWithHirId<'_>, _: FakeReadCause, _: HirId) {}
|
||||
fn copy(&mut self, _: &PlaceWithHirId<'_>, _: HirId) {}
|
||||
}
|
||||
|
||||
let mut s = S(hir::HirIdSet::default());
|
||||
let mut s = S(HirIdSet::default());
|
||||
let infcx = cx.tcx.infer_ctxt().build();
|
||||
let mut v = ExprUseVisitor::new(
|
||||
&mut s,
|
||||
@ -130,10 +131,10 @@ fn imm_borrows_in_expr(cx: &LateContext<'_>, e: &hir::Expr<'_>) -> hir::HirIdSet
|
||||
s.0
|
||||
}
|
||||
|
||||
fn mut_borrows_in_expr(cx: &LateContext<'_>, e: &hir::Expr<'_>) -> hir::HirIdSet {
|
||||
struct S(hir::HirIdSet);
|
||||
fn mut_borrows_in_expr(cx: &LateContext<'_>, e: &hir::Expr<'_>) -> HirIdSet {
|
||||
struct S(HirIdSet);
|
||||
impl Delegate<'_> for S {
|
||||
fn borrow(&mut self, place: &PlaceWithHirId<'_>, _: hir::HirId, kind: BorrowKind) {
|
||||
fn borrow(&mut self, place: &PlaceWithHirId<'_>, _: HirId, kind: BorrowKind) {
|
||||
if matches!(kind, BorrowKind::MutBorrow) {
|
||||
self.0.insert(match place.place.base {
|
||||
PlaceBase::Local(id) => id,
|
||||
@ -143,13 +144,13 @@ fn mut_borrows_in_expr(cx: &LateContext<'_>, e: &hir::Expr<'_>) -> hir::HirIdSet
|
||||
}
|
||||
}
|
||||
|
||||
fn consume(&mut self, _: &PlaceWithHirId<'_>, _: hir::HirId) {}
|
||||
fn mutate(&mut self, _: &PlaceWithHirId<'_>, _: hir::HirId) {}
|
||||
fn fake_read(&mut self, _: &PlaceWithHirId<'_>, _: FakeReadCause, _: hir::HirId) {}
|
||||
fn copy(&mut self, _: &PlaceWithHirId<'_>, _: hir::HirId) {}
|
||||
fn consume(&mut self, _: &PlaceWithHirId<'_>, _: HirId) {}
|
||||
fn mutate(&mut self, _: &PlaceWithHirId<'_>, _: HirId) {}
|
||||
fn fake_read(&mut self, _: &PlaceWithHirId<'_>, _: FakeReadCause, _: HirId) {}
|
||||
fn copy(&mut self, _: &PlaceWithHirId<'_>, _: HirId) {}
|
||||
}
|
||||
|
||||
let mut s = S(hir::HirIdSet::default());
|
||||
let mut s = S(HirIdSet::default());
|
||||
let infcx = cx.tcx.infer_ctxt().build();
|
||||
let mut v = ExprUseVisitor::new(
|
||||
&mut s,
|
||||
|
@ -8,7 +8,7 @@ use clippy_utils::{get_expr_use_or_unification_node, is_lint_allowed, path_def_i
|
||||
use hir::LifetimeName;
|
||||
use rustc_errors::{Applicability, MultiSpan};
|
||||
use rustc_hir::def_id::DefId;
|
||||
use rustc_hir::hir_id::HirIdMap;
|
||||
use rustc_hir::hir_id::{HirId, HirIdMap};
|
||||
use rustc_hir::intravisit::{walk_expr, Visitor};
|
||||
use rustc_hir::{
|
||||
self as hir, AnonConst, BinOpKind, BindingAnnotation, Body, Expr, ExprKind, FnRetTy, FnSig, GenericArg,
|
||||
@ -324,7 +324,7 @@ struct PtrArgReplacement {
|
||||
|
||||
struct PtrArg<'tcx> {
|
||||
idx: usize,
|
||||
emission_id: hir::HirId,
|
||||
emission_id: HirId,
|
||||
span: Span,
|
||||
ty_did: DefId,
|
||||
ty_name: Symbol,
|
||||
|
@ -5,7 +5,7 @@ use rustc_data_structures::fx::{FxHashMap, FxHashSet, FxIndexMap};
|
||||
use rustc_errors::Applicability;
|
||||
use rustc_hir::def::{DefKind, Res};
|
||||
use rustc_hir::intravisit::{walk_expr, Visitor};
|
||||
use rustc_hir::{self as hir};
|
||||
use rustc_hir::{self as hir, HirId};
|
||||
use rustc_lint::{LateContext, LateLintPass, LintContext};
|
||||
use rustc_middle::ty::{GenericArgKind, Ty};
|
||||
use rustc_session::impl_lint_pass;
|
||||
@ -55,7 +55,7 @@ impl_lint_pass!(SignificantDropTightening<'_> => [SIGNIFICANT_DROP_TIGHTENING]);
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct SignificantDropTightening<'tcx> {
|
||||
apas: FxIndexMap<hir::HirId, AuxParamsAttr>,
|
||||
apas: FxIndexMap<HirId, AuxParamsAttr>,
|
||||
/// Auxiliary structure used to avoid having to verify the same type multiple times.
|
||||
seen_types: FxHashSet<Ty<'tcx>>,
|
||||
type_cache: FxHashMap<Ty<'tcx>, bool>,
|
||||
@ -359,9 +359,9 @@ impl<'ap, 'lc, 'others, 'stmt, 'tcx> Visitor<'tcx> for StmtsChecker<'ap, 'lc, 'o
|
||||
/// Auxiliary parameters used on each block check of an item
|
||||
struct AuxParams<'others, 'stmt, 'tcx> {
|
||||
//// See [AuxParamsAttr].
|
||||
apas: &'others mut FxIndexMap<hir::HirId, AuxParamsAttr>,
|
||||
apas: &'others mut FxIndexMap<HirId, AuxParamsAttr>,
|
||||
/// The current block identifier that is being visited.
|
||||
curr_block_hir_id: hir::HirId,
|
||||
curr_block_hir_id: HirId,
|
||||
/// The current block span that is being visited.
|
||||
curr_block_span: Span,
|
||||
/// The current statement that is being visited.
|
||||
@ -369,10 +369,10 @@ struct AuxParams<'others, 'stmt, 'tcx> {
|
||||
}
|
||||
|
||||
impl<'others, 'stmt, 'tcx> AuxParams<'others, 'stmt, 'tcx> {
|
||||
fn new(apas: &'others mut FxIndexMap<hir::HirId, AuxParamsAttr>, curr_stmt: &'stmt hir::Stmt<'tcx>) -> Self {
|
||||
fn new(apas: &'others mut FxIndexMap<HirId, AuxParamsAttr>, curr_stmt: &'stmt hir::Stmt<'tcx>) -> Self {
|
||||
Self {
|
||||
apas,
|
||||
curr_block_hir_id: hir::HirId::INVALID,
|
||||
curr_block_hir_id: HirId::INVALID,
|
||||
curr_block_span: DUMMY_SP,
|
||||
curr_stmt: Cow::Borrowed(curr_stmt),
|
||||
}
|
||||
@ -389,7 +389,7 @@ struct AuxParamsAttr {
|
||||
has_expensive_expr_after_last_attr: bool,
|
||||
|
||||
/// The identifier of the block that involves the first `#[has_significant_drop]`.
|
||||
first_block_hir_id: hir::HirId,
|
||||
first_block_hir_id: HirId,
|
||||
/// The span of the block that involves the first `#[has_significant_drop]`.
|
||||
first_block_span: Span,
|
||||
/// The binding or variable that references the initial construction of the type marked with
|
||||
@ -414,7 +414,7 @@ impl Default for AuxParamsAttr {
|
||||
Self {
|
||||
counter: 0,
|
||||
has_expensive_expr_after_last_attr: false,
|
||||
first_block_hir_id: hir::HirId::INVALID,
|
||||
first_block_hir_id: HirId::INVALID,
|
||||
first_bind_ident: Ident::empty(),
|
||||
first_block_span: DUMMY_SP,
|
||||
first_method_span: DUMMY_SP,
|
||||
@ -428,7 +428,7 @@ impl Default for AuxParamsAttr {
|
||||
|
||||
fn dummy_stmt_expr<'any>(expr: &'any hir::Expr<'any>) -> hir::Stmt<'any> {
|
||||
hir::Stmt {
|
||||
hir_id: hir::HirId::INVALID,
|
||||
hir_id: HirId::INVALID,
|
||||
kind: hir::StmtKind::Expr(expr),
|
||||
span: DUMMY_SP,
|
||||
}
|
||||
|
@ -4,7 +4,7 @@ use rustc_hir::{self as hir, HirId, ItemKind, Node};
|
||||
use rustc_hir_analysis::lower_ty;
|
||||
use rustc_lint::{LateContext, LateLintPass};
|
||||
use rustc_middle::ty::layout::LayoutOf as _;
|
||||
use rustc_middle::ty::{Adt, Ty, TypeVisitableExt};
|
||||
use rustc_middle::ty::{self, Ty, TypeVisitableExt};
|
||||
use rustc_session::declare_lint_pass;
|
||||
use rustc_span::sym;
|
||||
|
||||
@ -49,7 +49,7 @@ impl LateLintPass<'_> for ZeroSizedMapValues {
|
||||
&& !in_trait_impl(cx, hir_ty.hir_id)
|
||||
&& let ty = ty_from_hir_ty(cx, hir_ty)
|
||||
&& (is_type_diagnostic_item(cx, ty, sym::HashMap) || is_type_diagnostic_item(cx, ty, sym::BTreeMap))
|
||||
&& let Adt(_, args) = ty.kind()
|
||||
&& let ty::Adt(_, args) = ty.kind()
|
||||
&& let ty = args.type_at(1)
|
||||
// Fixes https://github.com/rust-lang/rust-clippy/issues/7447 because of
|
||||
// https://github.com/rust-lang/rust/blob/master/compiler/rustc_middle/src/ty/sty.rs#L968
|
||||
|
Loading…
Reference in New Issue
Block a user