mirror of https://github.com/rust-lang/rust.git
repr_transparent_external_private_fields: treat `rustc_pub_transparent` types as local
This commit is contained in:
parent
b9033bdd92
commit
06f2d73b2b
|
@ -1259,7 +1259,8 @@ pub(super) fn check_transparent<'tcx>(tcx: TyCtxt<'tcx>, adt: ty::AdtDef<'tcx>)
|
||||||
ty::Tuple(list) => list.iter().try_for_each(|t| check_non_exhaustive(tcx, t)),
|
ty::Tuple(list) => list.iter().try_for_each(|t| check_non_exhaustive(tcx, t)),
|
||||||
ty::Array(ty, _) => check_non_exhaustive(tcx, *ty),
|
ty::Array(ty, _) => check_non_exhaustive(tcx, *ty),
|
||||||
ty::Adt(def, args) => {
|
ty::Adt(def, args) => {
|
||||||
if !def.did().is_local() {
|
if !def.did().is_local() && !tcx.has_attr(def.did(), sym::rustc_pub_transparent)
|
||||||
|
{
|
||||||
let non_exhaustive = def.is_variant_list_non_exhaustive()
|
let non_exhaustive = def.is_variant_list_non_exhaustive()
|
||||||
|| def
|
|| def
|
||||||
.variants()
|
.variants()
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
//@ check-pass
|
||||||
|
|
||||||
|
#![feature(sync_unsafe_cell)]
|
||||||
|
#![allow(unused)]
|
||||||
|
#![deny(repr_transparent_external_private_fields)]
|
||||||
|
|
||||||
|
// https://github.com/rust-lang/rust/issues/129470
|
||||||
|
|
||||||
|
struct ZST;
|
||||||
|
|
||||||
|
#[repr(transparent)]
|
||||||
|
struct TransparentWithManuallyDropZST {
|
||||||
|
value: i32,
|
||||||
|
md: std::mem::ManuallyDrop<ZST>,
|
||||||
|
mu: std::mem::MaybeUninit<ZST>,
|
||||||
|
p: std::pin::Pin<ZST>,
|
||||||
|
pd: std::marker::PhantomData<ZST>,
|
||||||
|
pp: std::marker::PhantomPinned,
|
||||||
|
c: std::cell::Cell<ZST>,
|
||||||
|
uc: std::cell::UnsafeCell<ZST>,
|
||||||
|
suc: std::cell::SyncUnsafeCell<ZST>,
|
||||||
|
zst: ZST,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
Loading…
Reference in New Issue