After six months of development, LLVM presented the release of the project llvm 18.1.0-GCC-compatible tools (compilers, optimizers, and code generators), compiling the program into the RISC-like virtual instructions (low-level virtual optimization system). The generated pseudo-code can be transformed using a JIT compiler into machine instructions directly at the time of the program.
Starting from the 18.X branch, the project switched to a new scheme for the formation of versions. By analogy with the GCC and GDB projects, the zero output (“N.0”) is now used in the development process, and the first stable version is equipped with the number “N.1”. The change allows you to separate assemblies based on a branch (MainLine) from final releases. For example, in the preparation of the current issue, the development was carried out using an unstable branch of LLVM 18.0, and the first stable release was released at number 18.1.0. In the future, every two weeks can form corrective issues under numbers 18.1.1, 18.1.2, etc. In the case of making changes in the current branch that violate ABI, the update will be formed with a change in the second number of the version (i.e. 18.2.0).
The main improvements in clang 18:
- Changes associated with the language of SI:
- Structures, associations, and arrays with a sign of “const” by analogy with GCC can now be used as constant expressions.
- Transfer (enum) are now reflected in the TBAA metadata (Type Based Alias Analysis) in its original integer type, instead of processing as a type “Char”.
- Added support for the attribute “Counted_by”, through which you can indicate the field in the structure with flexible array, which determines the number of elements in a flexible one array. The attribute can be used in Clang to increase the efficiency of checks for exiting the buffer border.