未验证 提交 c6e6428d 编写于 作者: D David Wood

Moved overflow check into end_point function.

上级 f6fee2a4
......@@ -699,12 +699,7 @@ pub fn schedule_drop(&mut self,
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,
......
......@@ -219,7 +219,9 @@ pub fn with_ctxt(self, ctxt: SyntaxContext) -> 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))
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册