diff options
| author | Simonas Kazlauskas <git@kazlauskas.me> | 2015-02-19 22:26:13 +0200 |
|---|---|---|
| committer | Simonas Kazlauskas <git@kazlauskas.me> | 2015-02-22 16:04:18 +0200 |
| commit | 9be8ec82cebd62a84af157b51f8d33b062b14656 (patch) | |
| tree | e4a173d37db8f666dc0d5ece247d1d6657c9c62c /src/test | |
| parent | 0c25e6f509dfd14b4516dd1cf209e1a0deedec65 (diff) | |
| download | rust-9be8ec82cebd62a84af157b51f8d33b062b14656.tar.gz rust-9be8ec82cebd62a84af157b51f8d33b062b14656.zip | |
Properly translate methods with foreign CC
This fixes a general issue of trying to define extern functions inside impl blocks resulting in ICE. Fixes #21238 Fixes #20734 Fixes #19047
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/run-pass/extern-methods.rs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/test/run-pass/extern-methods.rs b/src/test/run-pass/extern-methods.rs new file mode 100644 index 00000000000..0cd53184e6c --- /dev/null +++ b/src/test/run-pass/extern-methods.rs @@ -0,0 +1,35 @@ +// Copyright 2015 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 A { + extern "fastcall" fn test1(i: i32); + extern fn test2(i: i32); +} + +struct S; +impl S { + extern "stdcall" fn test3(i: i32) { + assert_eq!(i, 3); + } +} + +impl A for S { + extern "fastcall" fn test1(i: i32) { + assert_eq!(i, 1); + } + extern fn test2(i: i32) { + assert_eq!(i, 2); + } +} + +fn main() { + <S as A>::test1(1); + <S as A>::test2(2); + S::test3(3); +} |
