From 31a4cba01077b3f27622e1b42878407c65964d71 Mon Sep 17 00:00:00 2001 From: matthewjasper Date: Mon, 1 Jan 2018 17:51:37 +0000 Subject: [PATCH] Delay panic from incoherent drop implementation --- src/librustc_typeck/check/dropck.rs | 10 ++++++---- src/test/compile-fail/issue-41974.rs | 24 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 src/test/compile-fail/issue-41974.rs diff --git a/src/librustc_typeck/check/dropck.rs b/src/librustc_typeck/check/dropck.rs index 55700c452e57b..4aed688027f76 100644 --- a/src/librustc_typeck/check/dropck.rs +++ b/src/librustc_typeck/check/dropck.rs @@ -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 index 0000000000000..5c9077783c794 --- /dev/null +++ b/src/test/compile-fail/issue-41974.rs @@ -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 or the MIT license +// , 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 Drop for T where T: A { //~ ERROR E0119 + //~^ ERROR E0120 + //~| ERROR E0210 + fn drop(&mut self) { + } +} + +fn main() {}