Skip to content

Commit e71ac41

Browse files
committed
Fix transmute_undefined_repr for single element tuples
1 parent b83c632 commit e71ac41

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

clippy_lints/src/transmute/transmute_undefined_repr.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -282,10 +282,11 @@ fn reduce_ty<'tcx>(cx: &LateContext<'tcx>, mut ty: Ty<'tcx>) -> ReducedTy<'tcx>
282282
},
283283
ty::Tuple(args) if args.is_empty() => ReducedTy::TypeErasure,
284284
ty::Tuple(args) => {
285-
let Some(sized_ty) = args.iter().find(|&ty| !is_zero_sized_ty(cx, ty)) else {
285+
let mut iter = args.iter();
286+
let Some(sized_ty) = iter.find(|&ty| !is_zero_sized_ty(cx, ty)) else {
286287
return ReducedTy::OrderedFields(ty);
287288
};
288-
if args.iter().all(|ty| is_zero_sized_ty(cx, ty)) {
289+
if iter.all(|ty| is_zero_sized_ty(cx, ty)) {
289290
ty = sized_ty;
290291
continue;
291292
}

tests/ui/transmute_undefined_repr.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,5 +87,14 @@ fn main() {
8787

8888
let _: *const [u8] = transmute(value::<Box<[u8]>>()); // Ok
8989
let _: Box<[u8]> = transmute(value::<*mut [u8]>()); // Ok
90+
91+
let _: Ty2<u32, u32> = transmute(value::<(Ty2<u32, u32>,)>()); // Ok
92+
let _: (Ty2<u32, u32>,) = transmute(value::<Ty2<u32, u32>>()); // Ok
93+
94+
let _: Ty2<u32, u32> = transmute(value::<(Ty2<u32, u32>, ())>()); // Ok
95+
let _: (Ty2<u32, u32>, ()) = transmute(value::<Ty2<u32, u32>>()); // Ok
96+
97+
let _: Ty2<u32, u32> = transmute(value::<((), Ty2<u32, u32>)>()); // Ok
98+
let _: ((), Ty2<u32, u32>) = transmute(value::<Ty2<u32, u32>>()); // Ok
9099
}
91100
}

0 commit comments

Comments
 (0)