]> git.lizzy.rs Git - rust.git/commitdiff
Delay panic from incoherent drop implementation
authormatthewjasper <mjjasper1@gmail.com>
Mon, 1 Jan 2018 17:51:37 +0000 (17:51 +0000)
committermatthewjasper <mjjasper1@gmail.com>
Mon, 1 Jan 2018 17:51:37 +0000 (17:51 +0000)
src/librustc_typeck/check/dropck.rs
src/test/compile-fail/issue-41974.rs [new file with mode: 0644]

index 55700c452e57bced37f5f58402d696fdec52c3b5..4aed688027f767783bc65355b87936b28cade11a 100644 (file)
@@ -59,11 +59,13 @@ pub fn check_drop_impl<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
         }
         _ => {
             // Destructors only work on nominal types.  This was
-            // already checked by coherence, so we can panic here.
+            // already checked by coherence, but compilation may
+            // not have been terminated.
             let span = tcx.def_span(drop_impl_did);
-            span_bug!(span,
-                      "should have been rejected by coherence check: {}",
-                      dtor_self_type);
+            tcx.sess.delay_span_bug(span,
+                            &format!("should have been rejected by coherence check: {}",
+                            dtor_self_type));
+            Err(ErrorReported)
         }
     }
 }
diff --git a/src/test/compile-fail/issue-41974.rs b/src/test/compile-fail/issue-41974.rs
new file mode 100644 (file)
index 0000000..5c90777
--- /dev/null
@@ -0,0 +1,24 @@
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+#[derive(Copy, Clone)]
+struct Flags;
+
+trait A {
+}
+
+impl<T> Drop for T where T: A { //~ ERROR E0119
+                                //~^ ERROR E0120
+                                //~| ERROR E0210
+    fn drop(&mut self) {
+    }
+}
+
+fn main() {}