diff options
| author | Eduard Burtescu <edy.burt@gmail.com> | 2014-02-20 00:12:09 +0200 |
|---|---|---|
| committer | Eduard Burtescu <edy.burt@gmail.com> | 2014-02-20 00:12:09 +0200 |
| commit | efaa1ea979c60dcb6884be12dcb12ceb09dbc5bd (patch) | |
| tree | 68f7720d6deeab63d5ca7e6dd5b676d44c74052d /src/test | |
| parent | efef078cfa378378201ab097579992b40751cfb4 (diff) | |
| download | rust-efaa1ea979c60dcb6884be12dcb12ceb09dbc5bd.tar.gz rust-efaa1ea979c60dcb6884be12dcb12ceb09dbc5bd.zip | |
Resolve the vtables for method calls to generic Drop impls with trait bounds.
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/run-pass/issue-4252.rs | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/test/run-pass/issue-4252.rs b/src/test/run-pass/issue-4252.rs index 86b09f8dcfb..ba080e98183 100644 --- a/src/test/run-pass/issue-4252.rs +++ b/src/test/run-pass/issue-4252.rs @@ -8,30 +8,34 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// ignore-test - trait X { - fn call(&self); + fn call<T>(&self, x: &T); + fn default_method<T>(&self, x: &T) { + println!("X::default_method {:?} {:?}", self, x); + } } -struct Y; +struct Y(int); struct Z<T> { x: T } impl X for Y { - fn call(&self) { + fn call<T>(&self, x: &T) { + println!("X::call {:?} {:?}", self, x); } } +#[unsafe_destructor] impl<T: X> Drop for Z<T> { fn drop(&mut self) { - self.x.call(); // Adding this statement causes an ICE. + // These statements used to cause an ICE. + self.x.call(self); + self.x.default_method(self); } } pub fn main() { - let y = Y; - let _z = Z{x: y}; + let _z = Z {x: Y(42)}; } |
