C2Rust incorrectly transpiles __builtin_huge_vall().
In C, __builtin_huge_vall() produces a long double infinity value.
However, C2Rust translates it to ::core::f64::INFINITY even when the destination type is ::f128::f128, which causes a Rust type mismatch.
Reproducer
int main(void) {
long double hugel = __builtin_huge_vall();
return 0;
}
Transpiled Rust
#![allow(
dead_code,
non_camel_case_types,
non_snake_case,
non_upper_case_globals,
unused_assignments,
unused_mut
)]
unsafe fn main_0() -> ::core::ffi::c_int {
let mut hugel: ::f128::f128 = ::core::f64::INFINITY;
return 0 as ::core::ffi::c_int;
}
pub fn main() {
unsafe { ::std::process::exit(main_0() as i32) }
}
Observed Behavior
The generated Rust code fails to compile due to a type mismatch:
error[E0308]: mismatched types
expected struct `f128`, found `f64`
Environment
- c2rust version: v0.21.0
- platform: Ubuntu 24.04
- Rust: nightly-2022-08-08
- Clang version: 17.0.6