Clang 17.0.0git (In-Progress) Release Notes¶
- Introduction
- Potentially Breaking Changes
- What’s New in Clang 17.0.0git?
- Major New Features
- Bug Fixes
- Non-comprehensive list of changes in this release
- New Compiler Flags
- Deprecated Compiler Flags
- Modified Compiler Flags
- Removed Compiler Flags
- New Pragmas in Clang
- Attribute Changes in Clang
- Windows Support
- AIX Support
- C Language Changes in Clang
- C2x Feature Support
- C++ Language Changes in Clang
- CUDA/HIP Language Changes in Clang
- Objective-C Language Changes in Clang
- OpenCL C Language Changes in Clang
- ABI Changes in Clang
- OpenMP Support in Clang
- CUDA Support in Clang
- LoongArch Support in Clang
- RISC-V Support in Clang
- X86 Support in Clang
- WebAssembly Support in Clang
- DWARF Support in Clang
- Arm and AArch64 Support in Clang
- Floating Point Support in Clang
- Internal API Changes
- Build System Changes
- AST Matchers
- clang-format
- clang-extdef-mapping
- libclang
- Static Analyzer
- Sanitizers
- Core Analysis Improvements
- New Issues Found
- Significant Known Problems
- Additional Information
Written by the LLVM Team
Warning
These are in-progress notes for the upcoming Clang 17 release. Release notes for previous releases can be found on the Download Page.
Introduction¶
This document contains the release notes for the Clang C/C++/Objective-C frontend, part of the LLVM Compiler Infrastructure, release 17.0.0git. Here we describe the status of Clang in some detail, including major improvements from the previous release and new feature work. For the general LLVM release notes, see the LLVM documentation. All LLVM releases may be downloaded from the LLVM releases web site.
For more information about Clang or LLVM, including information about the latest release, please see the Clang Web Site or the LLVM Web Site.
Note that if you are reading this file from a Git checkout or the main Clang web page, this document applies to the next release, not the current one. To see the release notes for a specific release, please see the releases page.
Potentially Breaking Changes¶
These changes are ones which we think may surprise users when upgrading to Clang 17.0.0git because of the opportunity they pose for disruption to existing code bases.
What’s New in Clang 17.0.0git?¶
Some of the major new features and improvements to Clang are listed here. Generic improvements to Clang as a whole or to its underlying infrastructure are described first, followed by language-specific sections with improvements to Clang’s support for those languages.
Bug Fixes¶
- Fix crash on invalid code when looking up a destructor in a templated class inside a namespace. This fixes Issue 59446.
- Fix crash when diagnosing incorrect usage of
_Nullable
involving alias templates. This fixes Issue 60344. - Fix confusing warning message when
/clang:-x
is passed inclang-cl
driver mode and emit an error which suggests using/TC
or/TP
clang-cl
options instead. This fixes Issue 59307.
Improvements to Clang’s diagnostics¶
- We now generate a diagnostic for signed integer overflow due to unary minus in a non-constant expression context. This fixes Issue 31643
- Clang now warns by default for C++20 and later about deprecated capture of
this
with a capture default of=
. This warning can be disabled with-Wno-deprecated-this-capture
.
Non-comprehensive list of changes in this release¶
- Clang now saves the address of ABI-indirect function parameters on the stack, improving the debug information available in programs compiled without optimizations.
- Clang now supports
__builtin_nondeterministic_value
that returns a nondeterministic value of the same type as the provided argument.
Attribute Changes in Clang¶
Introduced a new function attribute __attribute__((unsafe_buffer_usage))
to be worn by functions containing buffer operations that could cause out of
bounds memory accesses. It emits warnings at call sites to such functions when
the flag -Wunsafe-buffer-usage
is enabled.
C++ Language Changes in Clang¶
- Improved
-O0
code generation for calls tostd::forward_like
. Similarly tostd::move, std::forward
et al. it is now treated as a compiler builtin and implemented directly rather than instantiating the definition from the standard library.
C++20 Feature Support¶
C++2b Feature Support¶
RISC-V Support in Clang¶
- Added
-mrvv-vector-bits=
option to give an upper and lower bound on vector length. Valid values are powers of 2 between 64 and 65536. A value of 32 should eventually be supported. We also accept “zvl” to use the Zvl*b extension from-march
or-mcpu
to the be the upper and lower bound.
Arm and AArch64 Support in Clang¶
- The hard-float ABI is now available in Armv8.1-M configurations that
have integer MVE instructions (and therefore have FP registers) but
no scalar or vector floating point computation. Previously, trying
to select the hard-float ABI on such a target (via
-mfloat-abi=hard
or a triple ending inhf
) would silently use the soft-float ABI instead.
Floating Point Support in Clang¶
- Add
__builtin_elementwise_log
builtin for floating point types only.
Additional Information¶
A wide variety of additional information is available on the Clang web
page. The web page contains versions of the
API documentation which are up-to-date with the Git version of
the source code. You can access versions of these documents specific to
this release by going into the “clang/docs/
” directory in the Clang
tree.
If you have any questions or comments about Clang, please feel free to contact us on the Discourse forums (Clang Frontend category) <https://discourse.llvm.org/c/clang/6>`_.