Skip to content

C2Rust translates __builtin_huge_vall() to f64::INFINITY instead of f128 infinity #1684

@chisa22

Description

@chisa22

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions