]> git.proxmox.com Git - rustc.git/blob - src/test/codegen/dllimports/main.rs
New upstream version 1.25.0+dfsg1
[rustc.git] / src / test / codegen / dllimports / main.rs
1 // Copyright 2016 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 // This test is for *-windows-msvc only.
12 // ignore-android
13 // ignore-bitrig
14 // ignore-cloudabi
15 // ignore-dragonfly
16 // ignore-emscripten
17 // ignore-freebsd
18 // ignore-gnu
19 // ignore-haiku
20 // ignore-ios
21 // ignore-linux
22 // ignore-macos
23 // ignore-netbsd
24 // ignore-openbsd
25 // ignore-solaris
26
27 // aux-build:dummy.rs
28 // aux-build:wrapper.rs
29
30 extern crate wrapper;
31
32 // Check that external symbols coming from foreign dylibs are adorned with 'dllimport',
33 // whereas symbols coming from foreign staticlibs are not. (RFC-1717)
34
35 // CHECK: @dylib_global1 = external dllimport local_unnamed_addr global i32
36 // CHECK: @dylib_global2 = external dllimport local_unnamed_addr global i32
37 // CHECK: @static_global1 = external local_unnamed_addr global i32
38 // CHECK: @static_global2 = external local_unnamed_addr global i32
39
40 // CHECK: declare dllimport i32 @dylib_func1(i32)
41 // CHECK: declare dllimport i32 @dylib_func2(i32)
42 // CHECK: declare i32 @static_func1(i32)
43 // CHECK: declare i32 @static_func2(i32)
44
45 #[link(name = "dummy", kind="dylib")]
46 extern "C" {
47 pub fn dylib_func1(x: i32) -> i32;
48 pub static dylib_global1: i32;
49 }
50
51 #[link(name = "dummy", kind="static")]
52 extern "C" {
53 pub fn static_func1(x: i32) -> i32;
54 pub static static_global1: i32;
55 }
56
57 fn main() {
58 unsafe {
59 dylib_func1(dylib_global1);
60 wrapper::dylib_func2(wrapper::dylib_global2);
61
62 static_func1(static_global1);
63 wrapper::static_func2(wrapper::static_global2);
64 }
65 }