summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Wood <david@davidtw.co>2018-01-13 23:28:42 +0000
committerDavid Wood <david@davidtw.co>2018-01-27 11:46:26 +0000
commitf6fee2a479070526495b65b6b3e7959088a1dd62 (patch)
tree43667b1568cf4abbe5527305f29c8da96bcdc339
parent6d00c9686becb0a84f7f4885fcaf9a764c201890 (diff)
downloadrust-f6fee2a479070526495b65b6b3e7959088a1dd62.tar.gz
Fixed off-by-one spans in MIR borrowck errors.
-rw-r--r--src/librustc_mir/build/scope.rs11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/librustc_mir/build/scope.rs b/src/librustc_mir/build/scope.rs
index ddb4bf0e36b..389e06e9334 100644
--- a/src/librustc_mir/build/scope.rs
+++ b/src/librustc_mir/build/scope.rs
@@ -695,10 +695,17 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> {
if let DropKind::Value { .. } = drop_kind {
scope.needs_cleanup = true;
}
+
let region_scope_span = region_scope.span(self.hir.tcx(),
&self.hir.region_scope_tree);
- // Attribute scope exit drops to scope's closing brace
- let scope_end = region_scope_span.with_lo(region_scope_span.hi());
+ // 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()
+ };
+
scope.drops.push(DropData {
span: scope_end,
location: place.clone(),