Skip to content

Commit 7ddd353

Browse files
gmfawcettbrson
authored andcommitted
implement #[nolink]; deprecate #[link_name = ""]; note in stdlib to remove empty link_name.
Can't remove them from stdlib until the snapshotted compiler supports #[nolink].
1 parent 8dc5c44 commit 7ddd353

File tree

16 files changed

+34
-19
lines changed

16 files changed

+34
-19
lines changed

doc/tutorial/ffi.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ microsecond-resolution timer.
189189
use std;
190190
type timeval = {mutable tv_sec: u32,
191191
mutable tv_usec: u32};
192-
#[link_name = ""]
192+
#[nolink]
193193
native mod libc {
194194
fn gettimeofday(tv: *timeval, tz: *()) -> i32;
195195
}
@@ -199,7 +199,7 @@ microsecond-resolution timer.
199199
ret (x.tv_sec as u64) * 1000_000_u64 + (x.tv_usec as u64);
200200
}
201201

202-
The `#[link_name = ""]` sets the name of the native module to the
202+
The `#[nolink]` sets the name of the native module to the
203203
empty string to prevent the rust compiler from trying to link it.
204204
The standard C library is already linked with Rust programs.
205205

src/comp/metadata/creader.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,20 @@ fn visit_item(e: env, i: @ast::item) {
5757
}
5858
either::left(msg) { e.sess.span_fatal(i.span, msg); }
5959
}
60+
6061
let cstore = e.sess.get_cstore();
6162
let native_name = i.ident;
63+
if vec::len(attr::find_attrs_by_name(i.attrs, "nolink")) > 0u {
64+
ret;
65+
}
6266
alt attr::get_meta_item_value_str_by_name(i.attrs, "link_name") {
6367
some(nn) { native_name = nn; }
6468
none. { }
6569
}
70+
if native_name == "" {
71+
e.sess.span_fatal(i.span,
72+
"empty #[link_name] not allowed; use #[nolink].");
73+
}
6674
if !cstore::add_used_library(cstore, native_name) { ret; }
6775
for a: ast::attribute in
6876
attr::find_attrs_by_name(i.attrs, "link_args") {

src/comp/metadata/cstore.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,6 @@ fn add_used_library(cstore: cstore, lib: str) -> bool {
9393
if lib == "" { ret false; }
9494

9595
if vec::member(lib, p(cstore).used_libraries) { ret false; }
96-
9796
p(cstore).used_libraries += [lib];
9897
ret true;
9998
}

src/libstd/linux_os.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ export fsync_fd;
2424
// FIXME Somehow merge stuff duplicated here and macosx_os.rs. Made difficult
2525
// by https://github.com/graydon/rust/issues#issue/268
2626

27-
#[link_name = ""]
27+
#[link_name = ""] // FIXME remove after #[nolink] is snapshotted
28+
#[nolink]
2829
#[abi = "cdecl"]
2930
native mod libc {
3031
fn read(fd: fd_t, buf: *u8, count: size_t) -> ssize_t;

src/libstd/macos_os.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export fsync_fd;
1818
// FIXME Refactor into unix_os module or some such. Doesn't
1919
// seem to work right now.
2020

21-
#[link_name = ""]
21+
#[nolink]
2222
#[abi = "cdecl"]
2323
native mod libc {
2424
fn read(fd: fd_t, buf: *u8, count: size_t) -> ssize_t;
@@ -118,7 +118,8 @@ native mod rustrt {
118118

119119
fn getcwd() -> str { ret rustrt::rust_getcwd(); }
120120

121-
#[link_name = ""]
121+
#[link_name = ""] // FIXME remove after #[nolink] is snapshotted
122+
#[nolink]
122123
#[abi = "cdecl"]
123124
native mod mac_libc {
124125
fn _NSGetExecutablePath(buf: str::sbuf,

src/libstd/win32_os.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import core::option;
22
import ctypes::*;
33

44
#[abi = "cdecl"]
5-
#[link_name = ""]
5+
#[link_name = ""] // FIXME remove after #[nolink] is snapshotted
6+
#[nolink]
67
native mod libc {
78
fn read(fd: fd_t, buf: *u8, count: size_t) -> ssize_t;
89
fn write(fd: fd_t, buf: *u8, count: size_t) -> ssize_t;

src/test/bench/shootout-nbody.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// http://shootout.alioth.debian.org/u32/benchmark.php?test=nbody&lang=java
33

44
#[abi = "cdecl"]
5-
#[link_name = ""]
5+
#[nolink]
66
native mod llvm {
77
fn sqrt(n: float) -> float;
88
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// error-pattern:empty #[link_name] not allowed; use #[nolink].
2+
3+
#[link_name = ""]
4+
native mod foo {
5+
}

src/test/run-pass/bind-native-fn.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use std;
55
import str;
66
import ctypes::*;
77

8-
#[link_name = ""]
8+
#[nolink]
99
native mod libc {
1010
fn write(fd: c_int, buf: *u8, nbyte: size_t);
1111
}

src/test/run-pass/binops.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ fn test_fn() {
118118
}
119119

120120
#[abi = "cdecl"]
121-
#[link_name = ""]
121+
#[nolink]
122122
native mod test {
123123
fn do_gc();
124124
fn unsupervise();

src/test/run-pass/c-stack-returning-int64.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std;
22
import str;
33

44
#[abi = "cdecl"]
5-
#[link_name = ""]
5+
#[nolink]
66
native mod libc {
77
fn atol(x: str::sbuf) -> int;
88
fn atoll(x: str::sbuf) -> i64;

src/test/run-pass/import-glob-1.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ mod a1 {
2121
mod a2 {
2222
// | | |
2323
#[abi = "cdecl"]
24-
#[link_name = ""]
24+
#[nolink]
2525
native mod b1 {
2626
// | | |
2727
import a1::b2::*;

src/test/run-pass/native-fn-linkname.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std;
33
import vec;
44
import str;
55

6-
#[link_name = ""]
6+
#[nolink]
77
#[abi = "cdecl"]
88
native mod libc {
99
#[link_name = "strlen"]

src/test/run-pass/native-opaque-type.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22

33
#[abi = "cdecl"]
4-
#[link_name = ""]
4+
#[nolink]
55
native mod libc {
66
type file_handle;
77
}

src/test/run-pass/native2.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,21 @@ native mod rustrt {
66
}
77

88
#[abi = "cdecl"]
9-
#[link_name = ""]
9+
#[nolink]
1010
native mod bar { }
1111

1212
#[abi = "cdecl"]
13-
#[link_name = ""]
13+
#[nolink]
1414
native mod zed { }
1515

1616
#[abi = "cdecl"]
17-
#[link_name = ""]
17+
#[nolink]
1818
native mod libc {
1919
fn write(fd: int, buf: *u8, count: uint) -> int;
2020
}
2121

2222
#[abi = "cdecl"]
23-
#[link_name = ""]
23+
#[nolink]
2424
native mod baz { }
2525

2626
fn main(args: [str]) { }

src/test/stdtest/c_vec.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use std;
55
import std::c_vec::*;
66
import ctypes::*;
77

8-
#[link_name = ""]
8+
#[nolink]
99
#[abi = "cdecl"]
1010
native mod libc {
1111
fn malloc(n: size_t) -> *mutable u8;

0 commit comments

Comments
 (0)