about summary refs log tree commit diff
path: root/src/test/run-pass
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2018-07-12 01:20:19 +0000
committerbors <bors@rust-lang.org>2018-07-12 01:20:19 +0000
commit3244d53c790809872c558ec5a869ea2e1e770ac8 (patch)
tree5b081873eded339502f1be13dad7ca6ef330d1a8 /src/test/run-pass
parent4ba5ff4d3020ed0de7da8f976204342a2102fdf1 (diff)
parentce94518ed36f9248bbbcc34f5d7ec9bb194ed228 (diff)
downloadrust-3244d53c790809872c558ec5a869ea2e1e770ac8.tar.gz
rust-3244d53c790809872c558ec5a869ea2e1e770ac8.zip
Auto merge of #52089 - eddyb:issue-51907, r=nagisa
rustc_codegen_llvm: replace the first argument early in FnType::new_vtable.

Fixes #51907 by removing the vtable pointer before the `ArgType` is even created.
This allows any ABI to support trait object method calls, regardless of how it passes `*dyn Trait`.

r? @nikomatsakis
Diffstat (limited to 'src/test/run-pass')
-rw-r--r--src/test/run-pass/issue-51907.rs26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/test/run-pass/issue-51907.rs b/src/test/run-pass/issue-51907.rs
new file mode 100644
index 00000000000..de2a59c5f01
--- /dev/null
+++ b/src/test/run-pass/issue-51907.rs
@@ -0,0 +1,26 @@
+// Copyright 2018 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.
+
+trait Foo {
+    extern fn borrow(&self);
+    extern fn take(self: Box<Self>);
+}
+
+struct Bar;
+impl Foo for Bar {
+    extern fn borrow(&self) {}
+    extern fn take(self: Box<Self>) {}
+}
+
+fn main() {
+    let foo: Box<dyn Foo> = Box::new(Bar);
+    foo.borrow();
+    foo.take()
+}