diff options
| author | bors <bors@rust-lang.org> | 2018-07-12 01:20:19 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2018-07-12 01:20:19 +0000 |
| commit | 3244d53c790809872c558ec5a869ea2e1e770ac8 (patch) | |
| tree | 5b081873eded339502f1be13dad7ca6ef330d1a8 /src/test/run-pass | |
| parent | 4ba5ff4d3020ed0de7da8f976204342a2102fdf1 (diff) | |
| parent | ce94518ed36f9248bbbcc34f5d7ec9bb194ed228 (diff) | |
| download | rust-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.rs | 26 |
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() +} |
