add cast kind of from_exposed_addr (int-to-ptr casts)
This commit is contained in:
@@ -519,32 +519,30 @@ impl<'tcx> Visitor<'tcx> for Checker<'_, 'tcx> {
|
||||
}
|
||||
}
|
||||
|
||||
Rvalue::Cast(
|
||||
CastKind::Pointer(PointerCast::MutToConstPointer | PointerCast::ArrayToPointer),
|
||||
_,
|
||||
_,
|
||||
) => {}
|
||||
|
||||
Rvalue::Cast(
|
||||
CastKind::Pointer(
|
||||
PointerCast::UnsafeFnPointer
|
||||
PointerCast::MutToConstPointer
|
||||
| PointerCast::ArrayToPointer
|
||||
| PointerCast::UnsafeFnPointer
|
||||
| PointerCast::ClosureFnPointer(_)
|
||||
| PointerCast::ReifyFnPointer,
|
||||
),
|
||||
_,
|
||||
_,
|
||||
) => {
|
||||
// Nothing to do here. Function pointer casts are allowed now.
|
||||
// These are all okay; they only change the type, not the data.
|
||||
}
|
||||
|
||||
Rvalue::Cast(CastKind::Pointer(PointerCast::Unsize), _, _) => {
|
||||
// Nothing to check here (`check_local_or_return_ty` ensures no trait objects occur
|
||||
// in the type of any local, which also excludes casts).
|
||||
// Unsizing is implemented for CTFE.
|
||||
}
|
||||
|
||||
Rvalue::Cast(CastKind::PointerExposeAddress, _, _) => {
|
||||
self.check_op(ops::RawPtrToIntCast);
|
||||
}
|
||||
Rvalue::Cast(CastKind::PointerFromExposedAddress, _, _) => {
|
||||
// Since no pointer can ever get exposed (rejected above), this is easy to support.
|
||||
}
|
||||
|
||||
Rvalue::Cast(CastKind::Misc, _, _) => {}
|
||||
|
||||
|
||||
@@ -504,7 +504,8 @@ impl<'tcx> Validator<'_, 'tcx> {
|
||||
// ptr-to-int casts are not possible in consts and thus not promotable
|
||||
Rvalue::Cast(CastKind::PointerExposeAddress, _, _) => return Err(Unpromotable),
|
||||
|
||||
// int-to-ptr casts are fine, they just use the integer value at pointer type.
|
||||
// all ohter casts including int-to-ptr casts are fine, they just use the integer value
|
||||
// at pointer type.
|
||||
Rvalue::Cast(_, operand, _) => {
|
||||
self.validate_operand(operand)?;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user