Skip to content

f128 cmath functions broken in windows #133835

Closed as not planned
Closed as not planned
@zinkkkk

Description

@zinkkkk

Under windows using #![feature(f128)] almost all of the f128 math functions cannot be compiled, it appears to be a linking error/missing symbols.

Normal math operations like add, sub, mul ect all compile and run fine but calling anything like .sin() or .gamma() or anything called under cmath will not compile. However, any of the math functions called as part of intrinsics do compile fine. This appears to be windows specific as the identical code compiles fine under wsl, both using latest rust nightly.

I have also tried using normal msvc linker link.exe and rust-lld.exe both with identical results, and also tested with gnu toolchain again with identical results.

#![feature(f128)]

fn main() {
    let a: f128 = 5.7;
    println!("f128 sin = {:#?}", (a.sin()));
}
PS C:\Users\levia\Documents\Code\f128stuff> cargo run --release
   Compiling f128stuff v0.1.0 (C:\Users\levia\Documents\Code\f128stuff)
error: linking with `rust-lld` failed: exit code: 1
  |
  = note: "rust-lld" "-flavor" "link" "/NOLOGO" "C:\\Users\\levia\\AppData\\Local\\Temp\\rustcEK3Fy2\\symbols.o" "C:\\Users\\levia\\Documents\\Code\\f128stuff\\target\\release\\deps\\f128stuff.f128stuff.6f36ac2c2723ffe0-cgu.0.rcgu.o" "C:\\Users\\levia\\Documents\\Code\\f128stuff\\target\\release\\deps\\f128stuff.9j8x1nkqyt711ce2p3mysxkj3.rcgu.o" "C:\\Users\\levia\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libstd-c09b6dac30a2ec7e.rlib" "C:\\Users\\levia\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libpanic_unwind-f2b3338f491e0297.rlib" "C:\\Users\\levia\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libwindows_targets-650a9189f256d76e.rlib" "C:\\Users\\levia\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\librustc_demangle-7ce081cb32ea6b96.rlib" 
"C:\\Users\\levia\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libstd_detect-f80ba4624fd5706a.rlib" "C:\\Users\\levia\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libhashbrown-6fe121940227f580.rlib" "C:\\Users\\levia\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\librustc_std_workspace_alloc-316118e870ffb802.rlib" "C:\\Users\\levia\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libunwind-af3779e04d2c5b3e.rlib" "C:\\Users\\levia\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libcfg_if-d8b574f6478ea10a.rlib" "C:\\Users\\levia\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\liballoc-8a746df5f193254d.rlib" "C:\\Users\\levia\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\librustc_std_workspace_core-5a536bba43fbe272.rlib" "C:\\Users\\levia\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libcore-45b7a05b67ddb8c6.rlib" "C:\\Users\\levia\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libcompiler_builtins-c25bba97e86b102c.rlib" "kernel32.lib" "kernel32.lib" "advapi32.lib" "ntdll.lib" "userenv.lib" "ws2_32.lib" "dbghelp.lib" "/defaultlib:msvcrt" "/NXCOMPAT" "/OUT:C:\\Users\\levia\\Documents\\Code\\f128stuff\\target\\release\\deps\\f128stuff.exe" "/OPT:REF,ICF" "/DEBUG" "/PDBALTPATH:%_PDB%" "/NATVIS:C:\\Users\\levia\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\intrinsic.natvis" "/NATVIS:C:\\Users\\levia\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\liballoc.natvis" "/NATVIS:C:\\Users\\levia\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\libcore.natvis" "/NATVIS:C:\\Users\\levia\\.rustup\\toolchains\\nightly-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\libstd.natvis"
  = note: rust-lld: error: undefined symbol: sinl␍
          >>> referenced by C:\Users\levia\Documents\Code\f128stuff\target\release\deps\f128stuff.f128stuff.6f36ac2c2723ffe0-cgu.0.rcgu.o:(f128stuff::main::ha078482b952c8e41)␍


error: could not compile `f128stuff` (bin "f128stuff") due to 1 previous error

but exact same code under wsl:

zink@baph:/mnt/c/Users/levia/Documents/Code/f128stuff$ cargo run --release
   Compiling f128stuff v0.1.0 (/mnt/c/Users/levia/Documents/Code/f128stuff)
    Finished `release` profile [optimized] target(s) in 0.64s
     Running `target/release/f128stuff`
f128 sin = 0xbffe19f37497ac7a1a58c25c354ac88a
zink@baph:/mnt/c/Users/levia/Documents/Code/f128stuff$

related to
#128417
#116909

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.F-f16_and_f128`#![feature(f16)]`, `#![feature(f128)]`O-windowsOperating system: Windowsrequires-incomplete-featuresThis issue requires the use of incomplete features.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions