Skip to content

Commit 1955e05

Browse files
committed
Unit tests for Issue 8142, collected into one file.
1 parent 5b2e869 commit 1955e05

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
// Issue 8142: Test that Drop impls cannot be specialized beyond the
12+
// predicates attached to the struct/enum definition itself.
13+
14+
#![feature(unsafe_destructor)]
15+
16+
trait Bound { fn foo(&self) { } }
17+
struct K<'l1,'l2> { x: &'l1 i8, y: &'l2 u8 }
18+
struct L<'l1,'l2> { x: &'l1 i8, y: &'l2 u8 }
19+
struct M<'m> { x: &'m i8 }
20+
struct N<'n> { x: &'n i8 }
21+
struct O<To> { x: *const To }
22+
struct P<Tp> { x: *const Tp }
23+
struct Q<Tq> { x: *const Tq }
24+
struct R<Tr> { x: *const Tr }
25+
struct S<Ts:Bound> { x: *const Ts }
26+
struct T<'t,Ts:'t> { x: &'t Ts }
27+
struct U;
28+
struct V<Tva, Tvb> { x: *const Tva, y: *const Tvb }
29+
struct W<'l1, 'l2> { x: &'l1 i8, y: &'l2 u8 }
30+
31+
#[unsafe_destructor]
32+
impl<'al,'adds_bnd:'al> Drop for K<'al,'adds_bnd> { // REJECT
33+
//~^ ERROR The requirement `'adds_bnd : 'al` is added only by the Drop impl.
34+
fn drop(&mut self) { } }
35+
36+
#[unsafe_destructor]
37+
impl<'al,'adds_bnd> Drop for L<'al,'adds_bnd> where 'adds_bnd:'al { // REJECT
38+
//~^ ERROR The requirement `'adds_bnd : 'al` is added only by the Drop impl.
39+
fn drop(&mut self) { } }
40+
41+
#[unsafe_destructor]
42+
impl<'ml> Drop for M<'ml> { fn drop(&mut self) { } } // ACCEPT
43+
44+
#[unsafe_destructor]
45+
impl Drop for N<'static> { fn drop(&mut self) { } } // REJECT
46+
//~^ ERROR Implementations of Drop cannot be specialized
47+
48+
#[unsafe_destructor]
49+
impl<Cok_nobound> Drop for O<Cok_nobound> { fn drop(&mut self) { } } // ACCEPT
50+
51+
#[unsafe_destructor]
52+
impl Drop for P<i8> { fn drop(&mut self) { } } // REJECT
53+
//~^ ERROR Implementations of Drop cannot be specialized
54+
55+
#[unsafe_destructor]
56+
impl<Adds_bnd:Bound> Drop for Q<Adds_bnd> { fn drop(&mut self) { } } // REJECT
57+
//~^ ERROR The requirement `Adds_bnd : Bound` is added only by the Drop impl.
58+
59+
#[unsafe_destructor]
60+
impl<'rbnd,Adds_rbnd:'rbnd> Drop for R<Adds_rbnd> { fn drop(&mut self) { } } // REJECT
61+
//~^ ERROR The requirement `Adds_rbnd : 'rbnd` is added only by the Drop impl.
62+
63+
#[unsafe_destructor]
64+
impl<Bs:Bound> Drop for S<Bs> { fn drop(&mut self) { } } // ACCEPT
65+
66+
#[unsafe_destructor]
67+
impl<'t,Bt:'t> Drop for T<'t,Bt> { fn drop(&mut self) { } } // ACCEPT
68+
69+
impl Drop for U { fn drop(&mut self) { } } // ACCEPT
70+
71+
#[unsafe_destructor]
72+
impl<One> Drop for V<One,One> { fn drop(&mut self) { } } // REJECT
73+
//~^ERROR Implementations of Drop cannot be specialized
74+
75+
#[unsafe_destructor]
76+
impl<'lw> Drop for W<'lw,'lw> { fn drop(&mut self) { } } // REJECT
77+
//~^ERROR Implementations of Drop cannot be specialized
78+
79+
pub fn main() { }

0 commit comments

Comments
 (0)