Bug#1095866: llvm-toolchain-19: unsoundness/miscompilations on i386

Simon McVittie smcv at debian.org
Fri Apr 25 10:56:20 BST 2025


Control: retitle -1 llvm-toolchain-19: unsoundness/miscompilations on i386
Control: block 1095863 by -1

On Thu, 13 Feb 2025 at 07:51:29 +0100, Fabian Grünbichler wrote:
>- Debian's i386 baseline is currently 32-bit x86 without MMX or SSE (i686)
>- Debian's LLVM and rustc packages accordingly patch their i686 targets to
>  remove SSE support, which would be part of that target's baseline upstream
>  otherwise [0,1]
>- Upstream LLVM and rustc consider this combination unsound and unfixable (for
>  IMHO valid reasons) because it can cause subtle miscompilations leading to
>  runtime crashes, in addition to the (usual, expected) different semantics of
>  x87 and SSE2 floating point implementations [2,3]

This was discussed further with the release team in 
https://bugs.debian.org/1095863 where I outlined some additional 
options, not all of which had been mentioned as possibilities in #1095862.

The release team have chosen to keep the baseline as "officially" 32-bit 
x86 without MMX or SSE, but allow rustc (and LLVM if necessary) to 
intentionally violate that baseline in order to produce working code.

Paul Gevers wrote in https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1095863#70:
>On 13-02-2025 17:32, Simon McVittie wrote:
>> - Officially keep current baseline, intentionally violate the baseline in
>>    rustc (and maybe LLVM?) so that rustc produces working code, and
>>    have the release team announce that the resulting baseline violations
>>    are not to be considered RC bugs
>
>I think we're effectively going with this option, given the upload in
>[1] that we are aware of and didn't object to.
>
>[1] https://tracker.debian.org/news/1627384/accepted-llvm-toolchain-18-11818-17-source-into-unstable/

However I'm a bit confused about the status of implementing this. There 
have been uploads of llvm-toolchain-18 and rustc selecting pentium4 
rather than i686 as their baseline, but rustc seems to use libLLVM 
version 19 (the same as llvm-defaults), and there has been no upload of 
llvm-toolchain-19 with an equivalent change.

Was the rustc upload sufficient to address this problem for Rust code, 
or is an upload of llvm-toolchain-19 also needed?

Will llvm-toolchain-20 prereleases (in experimental) also need an 
upload?  The llvm-toolchain-20 package doesn't seem to have a bug open 
yet - should we clone this one?

     smcv
     (not a release team member)



More information about the Pkg-llvm-team mailing list