mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 06:44:35 +00:00
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].
This commit is contained in:
parent
8dc5c445cc
commit
7ddd353ef6
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
}
|
||||
|
5
src/test/compile-fail/empty-linkname.rs
Normal file
5
src/test/compile-fail/empty-linkname.rs
Normal file
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user