mirror of
https://github.com/rust-lang/rust.git
synced 2026-06-01 22:18:23 +03:00
handle type of function definitions (98)
This commit is contained in:
committed by
Oliver Schneider
parent
3f8a497bf0
commit
4aae2e766e
@@ -80,11 +80,10 @@ pub(super) fn validate(&mut self, lvalue: Lvalue<'tcx>, mut ty: Ty<'tcx>, mut vc
|
||||
let is_owning = match ty.sty {
|
||||
TyInt(_) | TyUint(_) | TyRawPtr(_) |
|
||||
TyBool | TyFloat(_) | TyChar | TyStr |
|
||||
TyRef(..) | TyFnPtr(..) | TyNever => true,
|
||||
TyRef(..) | TyFnPtr(..) | TyFnDef(..) | TyNever => true,
|
||||
TyAdt(adt, _) if adt.is_box() => true,
|
||||
TySlice(_) | TyAdt(_, _) | TyTuple(..) | TyClosure(..) | TyArray(..) | TyDynamic(..) => false,
|
||||
TyParam(_) | TyInfer(_) => bug!("I got an incomplete type for validation"),
|
||||
_ => return Err(EvalError::Unimplemented(format!("Unimplemented type encountered when checking validity."))),
|
||||
TyParam(_) | TyInfer(_) | TyProjection(_) | TyAnon(..) | TyError => bug!("I got an incomplete/unnormalized type for validation"),
|
||||
};
|
||||
if is_owning {
|
||||
match lvalue {
|
||||
@@ -163,12 +162,16 @@ pub(super) fn validate(&mut self, lvalue: Lvalue<'tcx>, mut ty: Ty<'tcx>, mut vc
|
||||
self.validate_ptr(val, ty.boxed_ty(), vctx)
|
||||
}
|
||||
TyFnPtr(_sig) => {
|
||||
// TODO: The function names here could need some improvement.
|
||||
let ptr = self.read_lvalue(lvalue)?.into_ptr(&mut self.memory)?.to_ptr()?;
|
||||
self.memory.get_fn(ptr)?;
|
||||
// TODO: Check if the signature matches (should be the same check as what terminator/mod.rs already does on call?).
|
||||
Ok(())
|
||||
}
|
||||
TyFnDef(..) => {
|
||||
// This is a zero-sized type with all relevant data sitting in the type.
|
||||
// There is nothing to validate.
|
||||
Ok(())
|
||||
}
|
||||
|
||||
// Compound types
|
||||
TySlice(elem_ty) => {
|
||||
|
||||
Reference in New Issue
Block a user