From da86c81e39ff27925e7052e1cc612414c7eeb244 Mon Sep 17 00:00:00 2001 From: Samrat Man Singh Date: Mon, 27 Apr 2020 09:35:19 +0530 Subject: [PATCH 1/3] Add test to verify arg size mismatch throws UB Also: bump up `rust-version` --- rust-version | 2 +- tests/compile-fail/shim_arg_size.rs | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 tests/compile-fail/shim_arg_size.rs diff --git a/rust-version b/rust-version index 8ed0e6ba35..53979b82cf 100644 --- a/rust-version +++ b/rust-version @@ -1 +1 @@ -14b15521c52549ebbb113173b4abecd124b5a823 +e83f7563495dbe2629b0cbc738afb0808c4482e1 diff --git a/tests/compile-fail/shim_arg_size.rs b/tests/compile-fail/shim_arg_size.rs new file mode 100644 index 0000000000..38b5475b9f --- /dev/null +++ b/tests/compile-fail/shim_arg_size.rs @@ -0,0 +1,15 @@ +#![feature(rustc_private)] + +extern crate libc; + +// error-pattern: scalar size mismatch +fn main() { + extern "C" { + fn malloc(size: u32) -> *mut std::ffi::c_void; + } + + unsafe { + let p1 = malloc(42); + libc::free(p1); + }; +} From ae9796b9d82609e7a7325930f38fe469d676bc8b Mon Sep 17 00:00:00 2001 From: Samrat Man Singh Date: Mon, 27 Apr 2020 10:00:35 +0530 Subject: [PATCH 2/3] Fix shim_arg_size test for 32-bit machines --- tests/compile-fail/shim_arg_size.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/compile-fail/shim_arg_size.rs b/tests/compile-fail/shim_arg_size.rs index 38b5475b9f..a31461fdbf 100644 --- a/tests/compile-fail/shim_arg_size.rs +++ b/tests/compile-fail/shim_arg_size.rs @@ -5,7 +5,13 @@ extern crate libc; // error-pattern: scalar size mismatch fn main() { extern "C" { + // Use the wrong type(ie. not the pointer width) for the `size` + // argument. + #[cfg(target_pointer_width="64")] fn malloc(size: u32) -> *mut std::ffi::c_void; + + #[cfg(target_pointer_width="32")] + fn malloc(size: u16) -> *mut std::ffi::c_void; } unsafe { From 73f258c451a36294587e48166f72fdae01217891 Mon Sep 17 00:00:00 2001 From: Samrat Man Singh Date: Mon, 27 Apr 2020 15:34:42 +0530 Subject: [PATCH 3/3] Replace error-pattern with annotation; remove unreachable line --- tests/compile-fail/shim_arg_size.rs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/tests/compile-fail/shim_arg_size.rs b/tests/compile-fail/shim_arg_size.rs index a31461fdbf..dd8d6dac51 100644 --- a/tests/compile-fail/shim_arg_size.rs +++ b/tests/compile-fail/shim_arg_size.rs @@ -1,8 +1,5 @@ #![feature(rustc_private)] -extern crate libc; - -// error-pattern: scalar size mismatch fn main() { extern "C" { // Use the wrong type(ie. not the pointer width) for the `size` @@ -15,7 +12,6 @@ fn main() { } unsafe { - let p1 = malloc(42); - libc::free(p1); + let _p1 = malloc(42); //~ ERROR Undefined Behavior: scalar size mismatch }; }