#1129949 llvm-toolchain-21: FTBFS on ppc64el on Trixie

Package:
src:llvm-toolchain-21
Source:
src:llvm-toolchain-21
Submitter:
Fabian Grünbichler
Date:
2026-03-13 17:47:02 UTC
Severity:
normal
Tags:
#1129949#5
Date:
2026-03-06 12:18:56 UTC
From:
To:
Hi!

I've been trying to backport llvm-toolchain-21 for Trixie for the past few
weeks, because it is a requirement for backporting newer rustc versions.

Unfortunately the build fails with floating point related errors. Those errors
go away if I set -DPPC_LINUX_DEFAULT_IEEELONGDOUBLE=ON , but that is the wrong
thing to do on Trixie which generally lacks IEEE long double..

I've tried various things, and ended up bisecting upstream LLVM which points at
8437b7f5584765ad4f7885500647657714930fbb. That commit allegedly got fixed[0],
but the fix seems incomplete (since it is included in 21.1.8 and that is still
broken). I've now filed an issue[1] and PR[2] upstream after verifying that
upstream main is also affected.

I'd appreciate input upstream from ppc experts, in particular whether my
proposed changes (which do fix the package build when backporting to Trixie!)
seem reasonable.

Thanks,
Fabian

0: https://github.com/llvm/llvm-project/issues/136596
1: https://github.com/llvm/llvm-project/issues/184994
2: https://github.com/llvm/llvm-project/issues/184995

#1129949#10
Date:
2026-03-09 08:23:28 UTC
From:
To:
Hi Fabian,

Thank you for the detailed analysis and for filing the upstream issue.
I'm looking into this from the ppc64el porter side and will test your
proposed fix in commit 133f997
(https://github.com/llvm/llvm-project/pull/184995/changes/133f997099485bdd326d4941addc4082509be553)
the missing uint128.h include and parser.h fix.

Will follow up once I've confirmed results on ppc64el.

The direction of 133f997 looks correct — it completes what PR
https://github.com/llvm/llvm-project/pull/136614
left incomplete without the ABI risk of
-DPPC_LINUX_DEFAULT_IEEELONGDOUBLE=ON.


Thanks,
Trupti

#1129949#15
Date:
2026-03-11 11:30:25 UTC
From:
To:
Hi Fabin,

As a quick update, I was able to reproduce the issue on ppc64el with
Trixie. With below errors:

/build/reproducible-path/llvm-toolchain-21-21.1.8/cmake/Modules/../../libc/src/stdio/printf_core/float_hex_converter.h:43:30:
error: no member named 'is_neg' in
'__llvm_libc_common_utils::fputil::FPBits<long double>'
    43 |     is_negative = float_bits.is_neg();
       |                   ~~~~~~~~~~ ^
/build/reproducible-path/llvm-toolchain-21-21.1.8/cmake/Modules/../../libc/src/stdio/printf_core/float_hex_converter.h:44:27:
error: no member named 'get_explicit_exponent' in
'__llvm_libc_common_utils::fputil::FPBits<long double>'
    44 |     exponent = float_bits.get_explicit_exponent();
       |                ~~~~~~~~~~ ^
/build/reproducible-path/llvm-toolchain-21-21.1.8/cmake/Modules/../../libc/src/stdio/printf_core/float_hex_converter.h:45:27:
error: no member named 'get_explicit_mantissa' in
'__llvm_libc_common_utils::fputil::FPBits<long double>'
    45 |     mantissa = float_bits.get_explicit_mantissa();
       |                ~~~~~~~~~~ ^
/build/reproducible-path/llvm-toolchain-21-21.1.8/cmake/Modules/../../libc/src/stdio/printf_core/float_hex_converter.h:46:32:
error: no member named 'is_inf_or_nan' in
'__llvm_libc_common_utils::fputil::FPBits<long double>'
    46 |     is_inf_or_nan = float_bits.is_inf_or_nan();
       |                     ~~~~~~~~~~ ^
/build/reproducible-path/llvm-toolchain-21-21.1.8/cmake/Modules/../../libc/src/stdio/printf_core/float_hex_converter.h:87:16:
error: no member named 'FRACTION_LEN' in
'__llvm_libc_common_utils::fputil::FPBits<long double>'
    87 |       (LDBits::FRACTION_LEN / BITS_IN_HEX_DIGIT) + 1;
       |                ^~~~~~~~~~~~
/build/reproducible-path/llvm-toolchain-21-21.1.8/cmake/Modules/../../libc/src/stdio/printf_core/float_hex_converter.h:88:20:
warning: variable length arrays in C++ are a Clang extension
[-Wvla-cxx-extension]
    88 |   char mant_buffer[MANT_BUFF_LEN];
       |                    ^~~~~~~~~~~~~
/build/reproducible-path/llvm-toolchain-21-21.1.8/cmake/Modules/../../libc/src/stdio/printf_core/float_hex_converter.h:88:20:
note: initializer of 'MANT_BUFF_LEN' is unknown
/build/reproducible-path/llvm-toolchain-21-21.1.8/cmake/Modules/../../libc/src/stdio/printf_core/float_hex_converter.h:86:20:
note: declared here
    86 |   constexpr size_t MANT_BUFF_LEN =
       |                    ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]




I'm currently testing the build with your suggested patches from
https://github.com/llvm/llvm-project/pull/184995

I'm also discussing this with PowerPC toolchain experts to better
understand
if there are any implications from the PPC side.

I will update here once I have more information.

Thanks,
Trupti

#1129949#20
Date:
2026-03-13 17:35:28 UTC
From:
To:
much rejected, but some alternatives were suggested in the review
discussion in the PR.

I am not sure yet how to proceed:
- upload llvm-toolchain-21 with ppc64el FTBFS, followed by rustc
  1.91, then fixing llvm-toolchain-21 and rebuilding rustc
- wait for the fix, potentially skip rustc 1.91 if that works, or
  arguing for an exception to allow uploading rustc 1.91 to bpo
  despite forky already having 1.92 by that time..

Fabian