Skip to content

Commit

Permalink
Moved overflow check into end_point function.
Browse files Browse the repository at this point in the history
  • Loading branch information
davidtwco committed Jan 27, 2018
1 parent f6fee2a commit c6e6428
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 7 deletions.
7 changes: 1 addition & 6 deletions src/librustc_mir/build/scope.rs
Expand Up @@ -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,
Expand Down
4 changes: 3 additions & 1 deletion src/libsyntax_pos/lib.rs
Expand Up @@ -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))
}

Expand Down

0 comments on commit c6e6428

Please sign in to comment.