Use more slice patterns inside the compiler
This commit is contained in:
parent
60d146580c
commit
c4c518d2d4
40 changed files with 191 additions and 221 deletions
|
@ -898,8 +898,8 @@ impl<'a, 'tcx> Visitor<'tcx> for TypeChecker<'a, 'tcx> {
|
|||
self.param_env,
|
||||
adt_def.non_enum_variant().fields[field].ty(self.tcx, args),
|
||||
);
|
||||
if fields.len() == 1 {
|
||||
let src_ty = fields.raw[0].ty(self.body, self.tcx);
|
||||
if let [field] = fields.raw.as_slice() {
|
||||
let src_ty = field.ty(self.body, self.tcx);
|
||||
if !self.mir_assign_valid_types(src_ty, dest_ty) {
|
||||
self.fail(location, "union field has the wrong type");
|
||||
}
|
||||
|
@ -967,11 +967,9 @@ impl<'a, 'tcx> Visitor<'tcx> for TypeChecker<'a, 'tcx> {
|
|||
self.fail(location, "RawPtr should be in runtime MIR only");
|
||||
}
|
||||
|
||||
if fields.len() != 2 {
|
||||
self.fail(location, "raw pointer aggregate must have 2 fields");
|
||||
} else {
|
||||
let data_ptr_ty = fields.raw[0].ty(self.body, self.tcx);
|
||||
let metadata_ty = fields.raw[1].ty(self.body, self.tcx);
|
||||
if let [data_ptr, metadata] = fields.raw.as_slice() {
|
||||
let data_ptr_ty = data_ptr.ty(self.body, self.tcx);
|
||||
let metadata_ty = metadata.ty(self.body, self.tcx);
|
||||
if let ty::RawPtr(in_pointee, in_mut) = data_ptr_ty.kind() {
|
||||
if *in_mut != mutability {
|
||||
self.fail(location, "input and output mutability must match");
|
||||
|
@ -998,6 +996,8 @@ impl<'a, 'tcx> Visitor<'tcx> for TypeChecker<'a, 'tcx> {
|
|||
self.fail(location, "metadata for pointer-to-thin must be unit");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
self.fail(location, "raw pointer aggregate must have 2 fields");
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue