Check for initialization of layout-restricted types
This commit is contained in:
parent
d7787bbaef
commit
592fecbafb
8 changed files with 46 additions and 3 deletions
|
@ -10,6 +10,8 @@ use rustc_span::def_id::{DefId, LocalDefId};
|
|||
use rustc_span::symbol::Symbol;
|
||||
use rustc_span::Span;
|
||||
|
||||
use std::ops::Bound;
|
||||
|
||||
struct UnsafetyVisitor<'a, 'tcx> {
|
||||
tcx: TyCtxt<'tcx>,
|
||||
thir: &'a Thir<'tcx>,
|
||||
|
@ -174,6 +176,17 @@ impl<'a, 'tcx> Visitor<'a, 'tcx> for UnsafetyVisitor<'a, 'tcx> {
|
|||
self.requires_unsafe(expr.span, DerefOfRawPointer);
|
||||
}
|
||||
}
|
||||
ExprKind::Adt {
|
||||
adt_def,
|
||||
variant_index: _,
|
||||
substs: _,
|
||||
user_ty: _,
|
||||
fields: _,
|
||||
base: _,
|
||||
} => match self.tcx.layout_scalar_valid_range(adt_def.did) {
|
||||
(Bound::Unbounded, Bound::Unbounded) => {}
|
||||
_ => self.requires_unsafe(expr.span, InitializingTypeWith),
|
||||
},
|
||||
_ => {}
|
||||
}
|
||||
|
||||
|
@ -216,7 +229,6 @@ impl BodyUnsafety {
|
|||
enum UnsafeOpKind {
|
||||
CallToUnsafeFunction,
|
||||
UseOfInlineAssembly,
|
||||
#[allow(dead_code)] // FIXME
|
||||
InitializingTypeWith,
|
||||
#[allow(dead_code)] // FIXME
|
||||
CastOfPointerToInt,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue