about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorEduard Burtescu <edy.burt@gmail.com>2014-02-20 00:12:09 +0200
committerEduard Burtescu <edy.burt@gmail.com>2014-02-20 00:12:09 +0200
commitefaa1ea979c60dcb6884be12dcb12ceb09dbc5bd (patch)
tree68f7720d6deeab63d5ca7e6dd5b676d44c74052d /src/test
parentefef078cfa378378201ab097579992b40751cfb4 (diff)
downloadrust-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.rs20
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)};
 }