Moved overflow check into end_point function.

This commit is contained in:
David Wood 2018-01-14 00:23:35 +00:00
parent f6fee2a479
commit c6e6428d1a
No known key found for this signature in database
GPG Key ID: 01760B4F9F53F154
2 changed files with 4 additions and 7 deletions

View File

@ -699,12 +699,7 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> {
let region_scope_span = region_scope.span(self.hir.tcx(),
&self.hir.region_scope_tree);
// Attribute scope exit drops to scope's closing brace.
// Without this check when finding the endpoint, we'll run into an ICE.
let scope_end = if region_scope_span.hi().0 == 0 {
region_scope_span
} else {
region_scope_span.end_point()
};
let scope_end = region_scope_span.end_point();
scope.drops.push(DropData {
span: scope_end,

View File

@ -219,7 +219,9 @@ impl Span {
/// Returns a new span representing just the end-point of this span
pub fn end_point(self) -> Span {
let span = self.data();
let lo = cmp::max(span.hi.0 - 1, span.lo.0);
// We can avoid an ICE by checking if subtraction would cause an overflow.
let hi = if span.hi.0 == u32::min_value() { span.hi.0 } else { span.hi.0 - 1 };
let lo = cmp::max(hi, span.lo.0);
span.with_lo(BytePos(lo))
}