================ @@ -2489,6 +2489,30 @@ are listed below. $ clang -fuse-ld=lld -Oz -Wl,--icf=safe -fcodegen-data-use code.cc +Strict Aliasing +--------------- + +Clang by default applies C/C++'s strict aliasing rules during optimizations. In +cases C and C++ rules diverge, the more conservative rules are used. Clang does +not make use of strict aliasing rules in all cases yet, including unions and +variable-sized arrays. That may change in the future. + +Internally Clang encodes the strict aliasing rules in LLVM IR using type-based +alias analysis (TBAA) metadata. + +Note that clang-cl disables strict aliasing by default, see +:ref:`Strict aliasing in clang-cl. <clang_cl_strict_aliasing>` + +As of Clang 20, strict aliasing rules are also applied to nested pointers. The +new behavior can be disabled using ``-fno-pointer-tbaa``. Note that Clang does +not apply strict aliasing rules to `void*` pointers to avoid breaking existing +code, even though this is not required by the standard. + +Strict aliasing violations in the source may change program behavior and +``-fno-strict-aliasing`` disables use of the strict aliasing rules. There also +is an experimental :ref:`TypeSanitizer <TypeSanitizer>` to detect strict +aliasing violations. ---------------- fhahn wrote:
That's much better, updated thanks! https://github.com/llvm/llvm-project/pull/122116 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits