forked from llvm/llvm-project
-
Notifications
You must be signed in to change notification settings - Fork 27
Open
Labels
Description
Checklist
- Checked the issue tracker for similar issues to ensure this is not a duplicate
- Read the documentation to confirm the issue is not addressed there and your configuration is set correctly
- Tested with the latest version to ensure the issue hasn't been fixed
How often does this bug occurs?
always
Expected behavior
I'm doing some work with FFI using esp-idf-svc and related crates. I am calling dns_gethostbyname_addrtype (from the TCP-IP thread), the return value is an i8 for all intents and purposes. I am then matching this return code with constants such as esp-idf-sys::err_enum_t_ERR_INPROGRESS (-5) that are i32.
extern "C" {
fn dns_gethostbyname_addrtype(
hostname: *const c_char,
addr: *mut sys::esp_ip_addr_t,
found: Option<
unsafe extern "C" fn(
name: *const c_char,
ipaddr: Option<NonNull<sys::esp_ip_addr_t>>,
callback_arg: *mut c_void,
),
>,
callback_arg: *mut c_void,
dns_addrtype: u8,
) -> sys::err_t;
}Actual behavior (suspected bug)
let ret: i8 = unsafe { dns_gethostbyname_addrtype(...) };
let ret_i32 = ret as i32;Using the latest esp-rs 1.81 toolchain, ret_i32 ends up with a value of 251, as if I did (ret as u8 as i32) instead of -5.
Converting an i8 to an i32 in a constant context gives the expected result. I have not yet managed to minify this problem into a smaller case.
Error logs or terminal output
No response
Steps to reproduce the behavior
(tentative, unknown if this affects all similar cases)
- Call a C function returning an i8 that cannot be optimized away or inlined.
- Convert the i8 to i32.
Project release version
esp-rs 1.81 toolchain
System architecture
Intel/AMD 64-bit (modern PC, older Mac)
Operating system
Linux
Operating system version
Debian Trixie
Shell
Bash
Additional context
No response