Skip to content

Commit

Permalink
Require a box expression's type to be Sized
Browse files Browse the repository at this point in the history
  • Loading branch information
jesyspa committed Aug 20, 2021
1 parent ba83b39 commit b8fff95
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 3 deletions.
2 changes: 2 additions & 0 deletions compiler/rustc_middle/src/traits/mod.rs
Expand Up @@ -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`.
Expand Down
4 changes: 1 addition & 3 deletions compiler/rustc_mir/src/borrow_check/type_check/mod.rs
Expand Up @@ -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();
}
}
Expand Down
Expand Up @@ -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");
}
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_typeck/src/check/expr.rs
Expand Up @@ -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)
}

Expand Down

0 comments on commit b8fff95

Please sign in to comment.