diff options
| author | kennytm <kennytm@gmail.com> | 2018-01-03 16:57:55 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-01-03 16:57:55 +0800 |
| commit | f7932ef1d5059058fa8b01b7df26b628f613d5ee (patch) | |
| tree | d1fed2f105c1c866b9062669f644f6c575e4c332 /src | |
| parent | 0f4ebf9f0a3196420e25cf1558b49ea3f38643c4 (diff) | |
| parent | 31a4cba01077b3f27622e1b42878407c65964d71 (diff) | |
| download | rust-f7932ef1d5059058fa8b01b7df26b628f613d5ee.tar.gz rust-f7932ef1d5059058fa8b01b7df26b628f613d5ee.zip | |
Rollup merge of #47104 - matthewjasper:dont-panic-on-generic-drop, r=estebank
Delay panic from incoherent drop implementation Closes #41974
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_typeck/check/dropck.rs | 10 | ||||
| -rw-r--r-- | src/test/compile-fail/issue-41974.rs | 24 |
2 files changed, 30 insertions, 4 deletions
diff --git a/src/librustc_typeck/check/dropck.rs b/src/librustc_typeck/check/dropck.rs index 55700c452e5..4aed688027f 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 00000000000..5c9077783c7 --- /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 <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() {} |
