mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-23 07:14:28 +00:00
Require a box expression's type to be Sized
This commit is contained in:
parent
ba83b39d4e
commit
b8fff95961
@ -225,6 +225,8 @@ pub enum ObligationCauseCode<'tcx> {
|
||||
SizedReturnType,
|
||||
/// Yield type must be `Sized`.
|
||||
SizedYieldType,
|
||||
/// Box expression result type must be `Sized`.
|
||||
SizedBoxType,
|
||||
/// Inline asm operand type must be `Sized`.
|
||||
InlineAsmSized,
|
||||
/// `[T, ..n]` implies that `T` must be `Copy`.
|
||||
|
@ -1893,9 +1893,7 @@ impl<'a, 'tcx> TypeChecker<'a, 'tcx> {
|
||||
|
||||
// While this is located in `nll::typeck` this error is not
|
||||
// an NLL error, it's a required check to prevent creation
|
||||
// of unsized rvalues in certain cases:
|
||||
// * operand of a box expression
|
||||
// * callee in a call expression
|
||||
// of unsized rvalues in a call expression.
|
||||
diag.emit();
|
||||
}
|
||||
}
|
||||
|
@ -2072,6 +2072,9 @@ impl<'a, 'tcx> InferCtxtExt<'tcx> for InferCtxt<'a, 'tcx> {
|
||||
ObligationCauseCode::SizedYieldType => {
|
||||
err.note("the yield type of a generator must have a statically known size");
|
||||
}
|
||||
ObligationCauseCode::SizedBoxType => {
|
||||
err.note("the type of a box expression must have a statically known size");
|
||||
}
|
||||
ObligationCauseCode::AssignmentLhsSized => {
|
||||
err.note("the left-hand-side of an assignment must have a statically known size");
|
||||
}
|
||||
|
@ -313,6 +313,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
_ => NoExpectation,
|
||||
});
|
||||
let referent_ty = self.check_expr_with_expectation(expr, expected_inner);
|
||||
self.require_type_is_sized(referent_ty, expr.span, traits::SizedBoxType);
|
||||
self.tcx.mk_box(referent_ty)
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user