Chapter 5. Changes in LLVM Toolset LLVM Toolset has been updated from version 17.0.6 to 18.1.8 on RHEL 8 and RHEL 9. 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 -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 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 list of ABI changes in Clang . Notable backwards incompatible changes: A bug fix in the reversed argument order for templated operators breaks code in C++20 that was previously accepted in 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 -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 __has_cpp_attribute and __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 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 list of potentially breaking changes . For detailed information regarding the updates, see the upstream LLVM release notes and Clang release notes .

Commands: