about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFelix S. Klock II <pnkfelix@pnkfx.org>2015-02-24 15:22:37 +0100
committerFelix S. Klock II <pnkfelix@pnkfx.org>2015-02-24 15:22:37 +0100
commit92bc3ea46770573bc734c2d0c3e7acfea020e8a7 (patch)
treed121846591f0a0d6e6172d00f6f0414a52f707fc
parentdccdde4007c191aa8b8d9cfffb0c7d3509fa675e (diff)
downloadrust-92bc3ea46770573bc734c2d0c3e7acfea020e8a7.tar.gz
rust-92bc3ea46770573bc734c2d0c3e7acfea020e8a7.zip
Avoid cat_expr note when already in error state.
Also, to ensure we do not let the dropck get skipped, ICE if cat_expr
errors when *not* in error state.

This is not known to be a breaking change (i.e. I do not know of a
current case that causes the new ICE to be exercised).
-rw-r--r--src/librustc_typeck/check/regionck.rs16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/librustc_typeck/check/regionck.rs b/src/librustc_typeck/check/regionck.rs
index f6ac1ddee49..1518a09e7dc 100644
--- a/src/librustc_typeck/check/regionck.rs
+++ b/src/librustc_typeck/check/regionck.rs
@@ -554,8 +554,12 @@ fn visit_expr(rcx: &mut Rcx, expr: &ast::Expr) {
                                                                expr.span);
             }
             Err(..) => {
-                rcx.fcx.tcx().sess.span_note(expr.span,
-                                             "cat_expr_unadjusted Errd during dtor check");
+                let tcx = rcx.fcx.tcx();
+                if tcx.sess.has_errors() {
+                    // cannot run dropck; okay b/c in error state anyway.
+                } else {
+                    tcx.sess.span_bug(expr.span, "cat_expr_unadjusted Errd");
+                }
             }
         }
     }
@@ -571,8 +575,12 @@ fn visit_expr(rcx: &mut Rcx, expr: &ast::Expr) {
             check_safety_of_rvalue_destructor_if_necessary(rcx, head_cmt, expr.span);
         }
         Err(..) => {
-            rcx.fcx.tcx().sess.span_note(expr.span,
-                                         "cat_expr Errd during dtor check");
+            let tcx = rcx.fcx.tcx();
+            if tcx.sess.has_errors() {
+                // cannot run dropck; okay b/c in error state anyway.
+            } else {
+                tcx.sess.span_bug(expr.span, "cat_expr Errd");
+            }
         }
     }