Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement RFC 1717 #37973

Merged
merged 9 commits into from
Dec 6, 2016
2 changes: 1 addition & 1 deletion src/test/run-pass/abi-sysv64-arg-passing.rs
Original file line number Diff line number Diff line change
@@ -98,7 +98,7 @@ mod tests {
#[derive(Copy, Clone)]
pub struct Floats { a: f64, b: u8, c: f64 }

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Were these changes (and those below) required? If so that may be quite worrisome as this is a breaking change...

Copy link
Contributor Author

@vadimcn vadimcn Nov 28, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

rust_test_helpers is a static lib, so it started failing on Windows after this change. Granted it was only a couple of tests that used the rust_dbg_static_mut export, but I did a bulk change for consistency sake.

So yeah, there is some potential for breakage, but importing data from a library is a relatively rare thing, and it was already broken on Windows half the time. Not sure how to assess the extent of this breakage though. There is no such thing as Windows crater, right?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah unfortunately no crater coverage just yet, but to be clear the failure mode here was:

  • The linkage was incorrectly tagged
  • The library only pulled in statics
  • We then spit out a linker error

If that's the case then yeah seems like ok breakage. There's a way to fix it to work on all rustc versions, and otherwise we're just fixing a bug.

extern "sysv64" {
pub fn rust_int8_to_int32(_: i8) -> i32;
pub fn rust_dbg_extern_identity_u8(v: u8) -> u8;
2 changes: 1 addition & 1 deletion src/test/run-pass/anon-extern-mod.rs
Original file line number Diff line number Diff line change
@@ -14,7 +14,7 @@

extern crate libc;

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
fn rust_get_test_int() -> libc::intptr_t;
}
Original file line number Diff line number Diff line change
@@ -13,7 +13,7 @@

extern crate libc;

#[link(name="rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
pub fn rust_get_test_int() -> libc::intptr_t;
}
2 changes: 1 addition & 1 deletion src/test/run-pass/auxiliary/extern-crosscrate-source.rs
Original file line number Diff line number Diff line change
@@ -17,7 +17,7 @@ extern crate libc;
pub mod rustrt {
extern crate libc;

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
pub fn rust_dbg_call(cb: extern "C" fn(libc::uintptr_t) -> libc::uintptr_t,
data: libc::uintptr_t)
2 changes: 1 addition & 1 deletion src/test/run-pass/auxiliary/foreign_lib.rs
Original file line number Diff line number Diff line change
@@ -15,7 +15,7 @@
pub mod rustrt {
extern crate libc;

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
pub fn rust_get_test_int() -> libc::intptr_t;
}
2 changes: 1 addition & 1 deletion src/test/run-pass/c-stack-as-value.rs
Original file line number Diff line number Diff line change
@@ -15,7 +15,7 @@
mod rustrt {
extern crate libc;

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
pub fn rust_get_test_int() -> libc::intptr_t;
}
2 changes: 1 addition & 1 deletion src/test/run-pass/cabi-int-widening.rs
Original file line number Diff line number Diff line change
@@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
fn rust_int8_to_int32(_: i8) -> i32;
}
2 changes: 1 addition & 1 deletion src/test/run-pass/extern-call-deep.rs
Original file line number Diff line number Diff line change
@@ -15,7 +15,7 @@ extern crate libc;
mod rustrt {
extern crate libc;

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
pub fn rust_dbg_call(cb: extern "C" fn(libc::uintptr_t) -> libc::uintptr_t,
data: libc::uintptr_t)
2 changes: 1 addition & 1 deletion src/test/run-pass/extern-call-deep2.rs
Original file line number Diff line number Diff line change
@@ -18,7 +18,7 @@ use std::thread;
mod rustrt {
extern crate libc;

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
pub fn rust_dbg_call(cb: extern "C" fn(libc::uintptr_t) -> libc::uintptr_t,
data: libc::uintptr_t)
2 changes: 1 addition & 1 deletion src/test/run-pass/extern-call-indirect.rs
Original file line number Diff line number Diff line change
@@ -15,7 +15,7 @@ extern crate libc;
mod rustrt {
extern crate libc;

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
pub fn rust_dbg_call(cb: extern "C" fn(libc::uintptr_t) -> libc::uintptr_t,
data: libc::uintptr_t)
2 changes: 1 addition & 1 deletion src/test/run-pass/extern-call-scrub.rs
Original file line number Diff line number Diff line change
@@ -22,7 +22,7 @@ use std::thread;
mod rustrt {
extern crate libc;

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
pub fn rust_dbg_call(cb: extern "C" fn(libc::uintptr_t) -> libc::uintptr_t,
data: libc::uintptr_t)
2 changes: 1 addition & 1 deletion src/test/run-pass/extern-pass-TwoU16s.rs
Original file line number Diff line number Diff line change
@@ -16,7 +16,7 @@ pub struct TwoU16s {
one: u16, two: u16
}

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
pub fn rust_dbg_extern_identity_TwoU16s(v: TwoU16s) -> TwoU16s;
}
2 changes: 1 addition & 1 deletion src/test/run-pass/extern-pass-TwoU32s.rs
Original file line number Diff line number Diff line change
@@ -16,7 +16,7 @@ pub struct TwoU32s {
one: u32, two: u32
}

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
pub fn rust_dbg_extern_identity_TwoU32s(v: TwoU32s) -> TwoU32s;
}
2 changes: 1 addition & 1 deletion src/test/run-pass/extern-pass-TwoU64s.rs
Original file line number Diff line number Diff line change
@@ -16,7 +16,7 @@ pub struct TwoU64s {
one: u64, two: u64
}

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
pub fn rust_dbg_extern_identity_TwoU64s(v: TwoU64s) -> TwoU64s;
}
2 changes: 1 addition & 1 deletion src/test/run-pass/extern-pass-TwoU8s.rs
Original file line number Diff line number Diff line change
@@ -16,7 +16,7 @@ pub struct TwoU8s {
one: u8, two: u8
}

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
pub fn rust_dbg_extern_identity_TwoU8s(v: TwoU8s) -> TwoU8s;
}
2 changes: 1 addition & 1 deletion src/test/run-pass/extern-pass-char.rs
Original file line number Diff line number Diff line change
@@ -11,7 +11,7 @@
// Test a function that takes/returns a u8.


#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
pub fn rust_dbg_extern_identity_u8(v: u8) -> u8;
}
2 changes: 1 addition & 1 deletion src/test/run-pass/extern-pass-double.rs
Original file line number Diff line number Diff line change
@@ -9,7 +9,7 @@
// except according to those terms.


#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
pub fn rust_dbg_extern_identity_double(v: f64) -> f64;
}
2 changes: 1 addition & 1 deletion src/test/run-pass/extern-pass-empty.rs
Original file line number Diff line number Diff line change
@@ -30,7 +30,7 @@ struct ManyInts {

struct Empty;

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
fn rust_dbg_extern_empty_struct(v1: ManyInts, e: Empty, v2: ManyInts);
}
2 changes: 1 addition & 1 deletion src/test/run-pass/extern-pass-u32.rs
Original file line number Diff line number Diff line change
@@ -11,7 +11,7 @@
// Test a function that takes/returns a u32.


#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
pub fn rust_dbg_extern_identity_u32(v: u32) -> u32;
}
2 changes: 1 addition & 1 deletion src/test/run-pass/extern-pass-u64.rs
Original file line number Diff line number Diff line change
@@ -11,7 +11,7 @@
// Test a call to a function that takes/returns a u64.


#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
pub fn rust_dbg_extern_identity_u64(v: u64) -> u64;
}
2 changes: 1 addition & 1 deletion src/test/run-pass/extern-return-TwoU16s.rs
Original file line number Diff line number Diff line change
@@ -13,7 +13,7 @@ pub struct TwoU16s {
one: u16, two: u16
}

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
pub fn rust_dbg_extern_return_TwoU16s() -> TwoU16s;
}
2 changes: 1 addition & 1 deletion src/test/run-pass/extern-return-TwoU32s.rs
Original file line number Diff line number Diff line change
@@ -13,7 +13,7 @@ pub struct TwoU32s {
one: u32, two: u32
}

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
pub fn rust_dbg_extern_return_TwoU32s() -> TwoU32s;
}
2 changes: 1 addition & 1 deletion src/test/run-pass/extern-return-TwoU64s.rs
Original file line number Diff line number Diff line change
@@ -13,7 +13,7 @@ pub struct TwoU64s {
one: u64, two: u64
}

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
pub fn rust_dbg_extern_return_TwoU64s() -> TwoU64s;
}
2 changes: 1 addition & 1 deletion src/test/run-pass/extern-return-TwoU8s.rs
Original file line number Diff line number Diff line change
@@ -13,7 +13,7 @@ pub struct TwoU8s {
one: u8, two: u8
}

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
pub fn rust_dbg_extern_return_TwoU8s() -> TwoU8s;
}
2 changes: 1 addition & 1 deletion src/test/run-pass/foreign-call-no-runtime.rs
Original file line number Diff line number Diff line change
@@ -18,7 +18,7 @@ extern crate libc;
use std::mem;
use std::thread;

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
fn rust_dbg_call(cb: extern "C" fn(libc::uintptr_t),
data: libc::uintptr_t) -> libc::uintptr_t;
2 changes: 1 addition & 1 deletion src/test/run-pass/foreign-fn-with-byval.rs
Original file line number Diff line number Diff line change
@@ -16,7 +16,7 @@ pub struct S {
z: u64,
}

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
pub fn get_x(x: S) -> u64;
pub fn get_y(x: S) -> u64;
2 changes: 1 addition & 1 deletion src/test/run-pass/foreign-no-abi.rs
Original file line number Diff line number Diff line change
@@ -17,7 +17,7 @@
mod rustrt {
extern crate libc;

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
pub fn rust_get_test_int() -> libc::intptr_t;
}
2 changes: 1 addition & 1 deletion src/test/run-pass/issue-28676.rs
Original file line number Diff line number Diff line change
@@ -15,7 +15,7 @@ pub struct Quad { a: u64, b: u64, c: u64, d: u64 }
mod rustrt {
use super::Quad;

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
pub fn get_c_many_params(_: *const (), _: *const (),
_: *const (), _: *const (), f: Quad) -> u64;
2 changes: 1 addition & 1 deletion src/test/run-pass/mir_trans_calls_variadic.rs
Original file line number Diff line number Diff line change
@@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
fn rust_interesting_average(_: i64, ...) -> f64;
}
2 changes: 1 addition & 1 deletion src/test/run-pass/segfault-no-out-of-stack.rs
Original file line number Diff line number Diff line change
@@ -17,7 +17,7 @@ extern crate libc;
use std::process::{Command, ExitStatus};
use std::env;

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
fn rust_get_null_ptr() -> *mut ::libc::c_char;
}
2 changes: 1 addition & 1 deletion src/test/run-pass/static-mut-foreign.rs
Original file line number Diff line number Diff line change
@@ -17,7 +17,7 @@

extern crate libc;

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
static mut rust_dbg_static_mut: libc::c_int;
pub fn rust_dbg_static_mut_check_four();
2 changes: 1 addition & 1 deletion src/test/run-pass/struct-return.rs
Original file line number Diff line number Diff line change
@@ -18,7 +18,7 @@ pub struct Floats { a: f64, b: u8, c: f64 }
mod rustrt {
use super::{Floats, Quad};

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
pub fn rust_dbg_abi_1(q: Quad) -> Quad;
pub fn rust_dbg_abi_2(f: Floats) -> Floats;
2 changes: 1 addition & 1 deletion src/test/run-pass/union/union-c-interop.rs
Original file line number Diff line number Diff line change
@@ -25,7 +25,7 @@ union LARGE_INTEGER {
QuadPart: u64,
}

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern "C" {
fn increment_all_parts(_: LARGE_INTEGER) -> LARGE_INTEGER;
}
2 changes: 1 addition & 1 deletion src/test/run-pass/variadic-ffi.rs
Original file line number Diff line number Diff line change
@@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#[link(name = "rust_test_helpers")]
#[link(name = "rust_test_helpers", kind = "static")]
extern {
fn rust_interesting_average(_: u64, ...) -> f64;
}