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

    From Simon McVittie@21:1/5 to Paul Gevers on Fri Apr 25 12:00:01 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)

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)