Permalink
Browse files

implement #[nolink]; deprecate #[link_name = ""]; note in stdlib to r…

…emove empty link_name.

Can't remove them from stdlib until the snapshotted compiler supports #[nolink].
  • Loading branch information...
1 parent 8dc5c44 commit 7ddd353ef693bd19b5058f89d01529407d6aa926 @gmfawcett gmfawcett committed with brson Dec 15, 2011
View
@@ -189,7 +189,7 @@ microsecond-resolution timer.
use std;
type timeval = {mutable tv_sec: u32,
mutable tv_usec: u32};
- #[link_name = ""]
+ #[nolink]
native mod libc {
fn gettimeofday(tv: *timeval, tz: *()) -> i32;
}
@@ -199,7 +199,7 @@ microsecond-resolution timer.
ret (x.tv_sec as u64) * 1000_000_u64 + (x.tv_usec as u64);
}
-The `#[link_name = ""]` sets the name of the native module to the
+The `#[nolink]` sets the name of the native module to the
empty string to prevent the rust compiler from trying to link it.
The standard C library is already linked with Rust programs.
@@ -57,12 +57,20 @@ fn visit_item(e: env, i: @ast::item) {
}
either::left(msg) { e.sess.span_fatal(i.span, msg); }
}
+
let cstore = e.sess.get_cstore();
let native_name = i.ident;
+ if vec::len(attr::find_attrs_by_name(i.attrs, "nolink")) > 0u {
+ ret;
+ }
alt attr::get_meta_item_value_str_by_name(i.attrs, "link_name") {
some(nn) { native_name = nn; }
none. { }
}
+ if native_name == "" {
+ e.sess.span_fatal(i.span,
+ "empty #[link_name] not allowed; use #[nolink].");
+ }
if !cstore::add_used_library(cstore, native_name) { ret; }
for a: ast::attribute in
attr::find_attrs_by_name(i.attrs, "link_args") {
@@ -93,7 +93,6 @@ fn add_used_library(cstore: cstore, lib: str) -> bool {
if lib == "" { ret false; }
if vec::member(lib, p(cstore).used_libraries) { ret false; }
-
p(cstore).used_libraries += [lib];
ret true;
}
View
@@ -24,7 +24,8 @@ export fsync_fd;
// FIXME Somehow merge stuff duplicated here and macosx_os.rs. Made difficult
// by https://github.com/graydon/rust/issues#issue/268
-#[link_name = ""]
+#[link_name = ""] // FIXME remove after #[nolink] is snapshotted
+#[nolink]
#[abi = "cdecl"]
native mod libc {
fn read(fd: fd_t, buf: *u8, count: size_t) -> ssize_t;
View
@@ -18,7 +18,7 @@ export fsync_fd;
// FIXME Refactor into unix_os module or some such. Doesn't
// seem to work right now.
-#[link_name = ""]
+#[nolink]
#[abi = "cdecl"]
native mod libc {
fn read(fd: fd_t, buf: *u8, count: size_t) -> ssize_t;
@@ -118,7 +118,8 @@ native mod rustrt {
fn getcwd() -> str { ret rustrt::rust_getcwd(); }
-#[link_name = ""]
+#[link_name = ""] // FIXME remove after #[nolink] is snapshotted
+#[nolink]
#[abi = "cdecl"]
native mod mac_libc {
fn _NSGetExecutablePath(buf: str::sbuf,
View
@@ -2,7 +2,8 @@ import core::option;
import ctypes::*;
#[abi = "cdecl"]
-#[link_name = ""]
+#[link_name = ""] // FIXME remove after #[nolink] is snapshotted
+#[nolink]
native mod libc {
fn read(fd: fd_t, buf: *u8, count: size_t) -> ssize_t;
fn write(fd: fd_t, buf: *u8, count: size_t) -> ssize_t;
@@ -2,7 +2,7 @@
// http://shootout.alioth.debian.org/u32/benchmark.php?test=nbody&lang=java
#[abi = "cdecl"]
-#[link_name = ""]
+#[nolink]
native mod llvm {
fn sqrt(n: float) -> float;
}
@@ -0,0 +1,5 @@
+// error-pattern:empty #[link_name] not allowed; use #[nolink].
+
+#[link_name = ""]
+native mod foo {
+}
@@ -5,7 +5,7 @@ use std;
import str;
import ctypes::*;
-#[link_name = ""]
+#[nolink]
native mod libc {
fn write(fd: c_int, buf: *u8, nbyte: size_t);
}
@@ -118,7 +118,7 @@ fn test_fn() {
}
#[abi = "cdecl"]
-#[link_name = ""]
+#[nolink]
native mod test {
fn do_gc();
fn unsupervise();
@@ -2,7 +2,7 @@ use std;
import str;
#[abi = "cdecl"]
-#[link_name = ""]
+#[nolink]
native mod libc {
fn atol(x: str::sbuf) -> int;
fn atoll(x: str::sbuf) -> i64;
@@ -21,7 +21,7 @@ mod a1 {
mod a2 {
// | | |
#[abi = "cdecl"]
- #[link_name = ""]
+ #[nolink]
native mod b1 {
// | | |
import a1::b2::*;
@@ -3,7 +3,7 @@ use std;
import vec;
import str;
-#[link_name = ""]
+#[nolink]
#[abi = "cdecl"]
native mod libc {
#[link_name = "strlen"]
@@ -1,7 +1,7 @@
#[abi = "cdecl"]
-#[link_name = ""]
+#[nolink]
native mod libc {
type file_handle;
}
@@ -6,21 +6,21 @@ native mod rustrt {
}
#[abi = "cdecl"]
-#[link_name = ""]
+#[nolink]
native mod bar { }
#[abi = "cdecl"]
-#[link_name = ""]
+#[nolink]
native mod zed { }
#[abi = "cdecl"]
-#[link_name = ""]
+#[nolink]
native mod libc {
fn write(fd: int, buf: *u8, count: uint) -> int;
}
#[abi = "cdecl"]
-#[link_name = ""]
+#[nolink]
native mod baz { }
fn main(args: [str]) { }
@@ -5,7 +5,7 @@ use std;
import std::c_vec::*;
import ctypes::*;
-#[link_name = ""]
+#[nolink]
#[abi = "cdecl"]
native mod libc {
fn malloc(n: size_t) -> *mutable u8;

0 comments on commit 7ddd353

Please sign in to comment.