Rollup merge of #124096 - saethlin:rust-dbg-call, r=Nilstrieb

Clean up users of rust_dbg_call

`rust_dbg_call` is a C test helper that until this PR was declared in C with `void*` arguments and used in Rust _mostly_ with `libc::uintptr_t` arguments. Nearly every user just wants to pass integers around, so I've changed all users to `uint64_t` or `u64`.

The single test that actually used the pointer-ness of the argument is a test for ensuring that Rust can make extern calls outside of tasks. Rust hasn't had tasks for quite a few years now, so I'm deleting that test under the same logic as the test deleted in https://github.com/rust-lang/rust/pull/124073
This commit is contained in:
Matthias Krüger 2024-05-11 23:43:23 +02:00 committed by GitHub
commit 6e172c5fde
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 56 additions and 157 deletions

View file

@ -27,10 +27,10 @@ rust_dbg_extern_identity_u8(char u) {
return u;
}
typedef void *(*dbg_callback)(void*);
typedef uint64_t (*dbg_callback)(uint64_t);
void *
rust_dbg_call(dbg_callback cb, void *data) {
uint64_t
rust_dbg_call(dbg_callback cb, uint64_t data) {
return cb(data);
}

View file

@ -1,28 +1,21 @@
#![crate_name = "externcallback"]
#![crate_type = "lib"]
#![feature(rustc_private)]
extern crate libc;
pub mod rustrt {
extern crate libc;
#[link(name = "rust_test_helpers", kind = "static")]
extern "C" {
#[link(name = "rust_test_helpers", kind = "static")]
extern "C" {
pub fn rust_dbg_call(
cb: extern "C" fn(libc::uintptr_t) -> libc::uintptr_t,
data: libc::uintptr_t,
) -> libc::uintptr_t;
}
cb: extern "C" fn(u64) -> u64,
data: u64,
) -> u64;
}
pub fn fact(n: libc::uintptr_t) -> libc::uintptr_t {
pub fn fact(n: u64) -> u64 {
unsafe {
println!("n = {}", n);
rustrt::rust_dbg_call(cb, n)
rust_dbg_call(cb, n)
}
}
pub extern "C" fn cb(data: libc::uintptr_t) -> libc::uintptr_t {
pub extern "C" fn cb(data: u64) -> u64 {
if data == 1 { data } else { fact(data - 1) * data }
}

View file

@ -1,35 +1,27 @@
//@ run-pass
//@ ignore-emscripten blows the JS stack
#![feature(rustc_private)]
extern crate libc;
mod rustrt {
extern crate libc;
#[link(name = "rust_test_helpers", kind = "static")]
extern "C" {
#[link(name = "rust_test_helpers", kind = "static")]
extern "C" {
pub fn rust_dbg_call(
cb: extern "C" fn(libc::uintptr_t) -> libc::uintptr_t,
data: libc::uintptr_t,
) -> libc::uintptr_t;
}
cb: extern "C" fn(u64) -> u64,
data: u64,
) -> u64;
}
extern "C" fn cb(data: libc::uintptr_t) -> libc::uintptr_t {
extern "C" fn cb(data: u64) -> u64 {
if data == 1 { data } else { count(data - 1) + 1 }
}
fn count(n: libc::uintptr_t) -> libc::uintptr_t {
fn count(n: u64) -> u64 {
unsafe {
println!("n = {}", n);
rustrt::rust_dbg_call(cb, n)
rust_dbg_call(cb, n)
}
}
pub fn main() {
let result = count(1000);
println!("result = {}", result);
println!("result = {:?}", result);
assert_eq!(result, 1000);
}

View file

@ -1,31 +1,24 @@
//@ run-pass
#![allow(unused_must_use)]
//@ needs-threads
#![feature(rustc_private)]
extern crate libc;
use std::thread;
mod rustrt {
extern crate libc;
#[link(name = "rust_test_helpers", kind = "static")]
extern "C" {
#[link(name = "rust_test_helpers", kind = "static")]
extern "C" {
pub fn rust_dbg_call(
cb: extern "C" fn(libc::uintptr_t) -> libc::uintptr_t,
data: libc::uintptr_t,
) -> libc::uintptr_t;
}
cb: extern "C" fn(u64) -> u64,
data: u64,
) -> u64;
}
extern "C" fn cb(data: libc::uintptr_t) -> libc::uintptr_t {
if data == 1 { data } else { count(data - 1) + 1 }
extern "C" fn cb(data: u64) -> u64 {
if data == 1 { data } else { count(data - 1 ) + 1 }
}
fn count(n: libc::uintptr_t) -> libc::uintptr_t {
fn count(n: u64) -> u64 {
unsafe {
println!("n = {}", n);
rustrt::rust_dbg_call(cb, n)
rust_dbg_call(cb, n)
}
}
@ -37,5 +30,5 @@ pub fn main() {
println!("result = {}", result);
assert_eq!(result, 1000);
})
.join();
.join().unwrap();
}

View file

@ -1,29 +1,21 @@
//@ run-pass
#![feature(rustc_private)]
extern crate libc;
mod rustrt {
extern crate libc;
#[link(name = "rust_test_helpers", kind = "static")]
extern "C" {
#[link(name = "rust_test_helpers", kind = "static")]
extern "C" {
pub fn rust_dbg_call(
cb: extern "C" fn(libc::uintptr_t) -> libc::uintptr_t,
data: libc::uintptr_t,
) -> libc::uintptr_t;
}
cb: extern "C" fn(u64) -> u64,
data: u64,
) -> u64;
}
extern "C" fn cb(data: libc::uintptr_t) -> libc::uintptr_t {
extern "C" fn cb(data: u64) -> u64 {
if data == 1 { data } else { fact(data - 1) * data }
}
fn fact(n: libc::uintptr_t) -> libc::uintptr_t {
fn fact(n: u64) -> u64 {
unsafe {
println!("n = {}", n);
rustrt::rust_dbg_call(cb, n)
rust_dbg_call(cb, n)
}
}

View file

@ -1,35 +1,27 @@
//@ run-pass
#![allow(unused_must_use)]
//@ needs-threads
// This time we're testing repeatedly going up and down both stacks to
// make sure the stack pointers are maintained properly in both
// directions
//@ needs-threads
#![feature(rustc_private)]
extern crate libc;
use std::thread;
mod rustrt {
extern crate libc;
#[link(name = "rust_test_helpers", kind = "static")]
extern "C" {
#[link(name = "rust_test_helpers", kind = "static")]
extern "C" {
pub fn rust_dbg_call(
cb: extern "C" fn(libc::uintptr_t) -> libc::uintptr_t,
data: libc::uintptr_t,
) -> libc::uintptr_t;
}
cb: extern "C" fn(u64) -> u64,
data: u64,
) -> u64;
}
extern "C" fn cb(data: libc::uintptr_t) -> libc::uintptr_t {
extern "C" fn cb(data: u64) -> u64 {
if data == 1 { data } else { count(data - 1) + count(data - 1) }
}
fn count(n: libc::uintptr_t) -> libc::uintptr_t {
fn count(n: u64) -> u64 {
unsafe {
println!("n = {}", n);
rustrt::rust_dbg_call(cb, n)
rust_dbg_call(cb, n)
}
}
@ -41,5 +33,5 @@ pub fn main() {
println!("result = {}", result);
assert_eq!(result, 2048);
})
.join();
.join().unwrap();
}

View file

@ -1,15 +1,12 @@
//@ run-pass
//@ aux-build:extern-crosscrate-source.rs
#![feature(rustc_private)]
extern crate externcallback;
extern crate libc;
fn fact(n: libc::uintptr_t) -> libc::uintptr_t {
fn fact(n: u64) -> u64 {
unsafe {
println!("n = {}", n);
externcallback::rustrt::rust_dbg_call(externcallback::cb, n)
println!("n = {:?}", n);
externcallback::rust_dbg_call(externcallback::cb, n)
}
}

View file

@ -1,60 +0,0 @@
//@ run-pass
//@ needs-threads
#![feature(rustc_private)]
extern crate libc;
use std::mem;
use std::thread;
#[link(name = "rust_test_helpers", kind = "static")]
extern "C" {
fn rust_dbg_call(cb: extern "C" fn(libc::uintptr_t), data: libc::uintptr_t) -> libc::uintptr_t;
}
pub fn main() {
unsafe {
thread::spawn(move || {
let i: isize = 100;
rust_dbg_call(callback_isize, mem::transmute(&i));
})
.join()
.unwrap();
thread::spawn(move || {
let i: i32 = 100;
rust_dbg_call(callback_i32, mem::transmute(&i));
})
.join()
.unwrap();
thread::spawn(move || {
let i: i64 = 100;
rust_dbg_call(callback_i64, mem::transmute(&i));
})
.join()
.unwrap();
}
}
extern "C" fn callback_isize(data: libc::uintptr_t) {
unsafe {
let data = data as *const isize;
assert_eq!(*data, 100);
}
}
extern "C" fn callback_i64(data: libc::uintptr_t) {
unsafe {
let data = data as *const i64;
assert_eq!(*data, 100);
}
}
extern "C" fn callback_i32(data: libc::uintptr_t) {
unsafe {
let data = data as *const i32;
assert_eq!(*data, 100);
}
}