.RHEL 10 Beta introduces LLVM Toolset 18.1.8
RHEL 10 Beta is distributed with the LLVM Toolset version 18.1.8.
Notable LLVM updates:
* The constant expression variants of the following instructions have been removed: `and`, `or`, `lshr`, `ashr`, `zext`, `sext`, `fptrunc`, `fpext`, `fptoui`, `fptosi`, `uitofp`, `sitofp`.
* The `llvm.exp10` intrinsic has been added.
* The `code_model` attribute for global variables has been added.
* The backend for the AArch64, AMDGPU, PowerPC, RISC-V, SystemZ and x86 architectures has been improved.
* LLVM tools have been improved.
Notable Clang enhancements:
* C++20 feature support:
** Clang no longer performs One Definition Rule (ODR) checks for declarations in the global module fragment. To enable more strict behavior, use the `-Xclang -fno-skip-odr-check-in-gmf` option.
* C++23 feature support:
** A new diagnostic flag `pass:[-Wc++23-lambda-attributes]` has been added to warn about the use of attributes on lambdas.
* C++2c feature support:
** Clang now allows using the `_` character as a placeholder variable name multiple times in the same scope.
** Attributes now expect unevaluated strings in attribute parameters that are string literals.
** The deprecated arithmetic conversion on enumerations from C++26 has been removed.
** The specification of template parameter initialization has been improved.
* For a complete list of changes, see the link:
https://releases.llvm.org/18.1.8/tools/clang/docs/ReleaseNotes.html#what-s-new-in-clang-release[upstream release notes for Clang].
ABI changes in Clang:
* Following the SystemV ABI for x86_64, the `__int128` arguments are no longer split between a register and a stack slot.
* For more information, see the link:
https://releases.llvm.org/18.1.8/tools/clang/docs/ReleaseNotes.html#abi-changes-in-this-version[list of ABI changes in Clang].
Notable backwards incompatible changes:
* A bug fix in the reversed argument order for templated operators breaks code in pass:[C++20] that was previously accepted in pass:[C++17].
* The `GCC_INSTALL_PREFIX` CMake variable (which sets the default `--gcc-toolchain=`) is deprecated and will be removed. Specify the `--gcc-install-dir=` or `--gcc-triple=` option in a configuration file instead.
* The default extension name for precompiled headers (PCH) generation (`-c -xc-header` and `pass:[-c -xc++-header]`) is now `.pch` instead of `.gch`.
* When `-include a.h` probes the `a.h.gch` file, the include now ignores `a.h.gch` if it is not a Clang PCH file or a directory containing any Clang PCH file.
* A bug that caused `pass:[__has_cpp_attribute]` and `pass:[__has_c_attribute]` to return incorrect values for certain C++-11-style attributes has been fixed.
* A bug in finding a matching `operator!=` while adding a reversed `operator==` has been fixed.
* The name mangling rules for function templates have been changed to accept that functions can be overloaded on their template parameter lists or requires-clauses.
* The `-Wenum-constexpr-conversion` warning is now enabled by default on system headers and macros. It will be turned into a hard (non-downgradable) error in the next Clang release.
* A path to the imported modules for C++20 named modules can no longer be hardcoded. You must specify all the dependent modules from the command line.
* It is no longer possible to import modules by using `import <module>`; Clang uses explicitly-built modules.
* For more details, see the
link:
https://releases.llvm.org/18.1.8/tools/clang/docs/ReleaseNotes.html#potentially-breaking-changes[list of potentially breaking changes].
For more information, see the link:
https://releases.llvm.org/18.1.8/docs/ReleaseNotes.html[LLVM release notes] and link:
https://releases.llvm.org/18.1.8/tools/clang/docs/ReleaseNotes.html[Clang release notes].
LVM Toolset is a rolling Application Stream, and only the latest version is supported.