When both lang/llvm and lang/clang are built with the z3 option enabled,
the Z3 constraint solver is activated for the Clang static analyzer.
This option is not enabled by default.
Tested on NetBSD-current and 9.1/amd64.
Also update packages tightly coupled to llvm, if new versions are
available.
Mark creduce, include-what-you-use, and zig broken (waiting for a
new release).
Changes:
Non-comprehensive list of changes in this release
Windows Control-flow Enforcement Technology: the -ehcontguard
option now emits valid unwind entrypoints which are validated
when the context is being set during exception handling.
Flang is now included in the binary packages released by LLVM.
The debuginfo-test project has been renamed cross-project-tests
and is now intended for testing components from multiple
projects, not just debug information. The new “cross-project-tests”
name replaces “debuginfo-test” in LLVM_ENABLE_PROJECTS, and a
new check-cross-project-tests target has been added for running
all tests in the project. The pre-existing check-debuginfo-
test target remains for running just the debug information
tests. (D95339 and D96513)
Changes to the LLVM IR
The inalloca attribute now has a mandatory type field, similar
to byval and sret.
The opaque pointer type ptr has been introduced. It is still
in the process of being worked on and should not be used yet.
Using the legacy pass manager for the optimization pipeline is
deprecated and will be removed after LLVM 14. In the meantime,
only minimal effort will be made to maintain the legacy pass
manager for the optimization pipeline.
Changes to building LLVM
The build system now supports building multiple distributions,
so that you can e.g. have one distribution containing just
tools and another for libraries (to enable development). See
Multi-distribution configurations for details.
Changes to the AArch64 Backend
Introduced assembly support for Armv9-A’s Realm Management
Extension (RME) and Scalable Matrix Extension (SME).
Produce proper cross-section relative relocations on COFF
Fixed the calling convention on Windows for variadic functions
involving floats in the fixed arguments
Changes to the ARM Backend
Produce proper cross-section relative relocations on COFF
Changes to the Hexagon Target
The Hexagon target now supports V68/HVX ISA.
Changes to the C API
The C API functions LLVMGetAlignment and LLVMSetAlignment now
allow changing alignment on atomicrmw and cmpxchg instructions
A new entry LLVMDIArgListMetadataKind was added to the
LLVMMetadataKind enum, representing DIArgLists (D88175)
Type attributes have been added to LLVM-C, introducing
LLVMCreateTypeAttribute, LLVMGetTypeAttributeValue and
LLVMIsTypeAttribute. (D977763’)
The LTO_API_VERSION was bumped to 28, introducing a new function
lto_set_debug_options for parsing LTO debug options (D92611)
LLVMJITTargetSymbolFlags was renamed to LLVMJITSymbolTargetFlags
(rG8d718a0bff73af066675a6258c01307937c33cf9)
The C API received support for creating custom ORCv2
MaterializationUnits and APIs to retrieve an LLJIT instance’s
linking layers. An ABI breaking change for LLVMOrcAbsoluteSymbols
was introduced to make it consistent with
LLVMOrcCreateCustomMaterializationUnit.
(rGc8fc5e3ba942057d6c4cdcd1faeae69a28e7b671)
The C API received support for adding ORCv2 object buffers
directly to an object layer.
(rG7b73cd684a8d5fb44d34064200f10e2723085c33)
A breaking change to LLVMGetInlineAsm was introduced, adding
a ninth argument LLVMBool CanThrow (D95745)
The C API received support for calling into the new pass manager.
(D102136)
The C API function LLVMIntrinsicCopyOverloadedName has been
deprecated. Please migrate to LLVMIntrinsicCopyOverloadedName2
which takes an extra module argument and which also handles
unnamed types. (D99173)
The C API received support for dumping objects from ORCv2
(rGcec8e69f01c3374cb38c6683058381b96fab8f89)
A breaking change to LLVMOrcObjectTransformLayerTransformFunction
was introduced, changing the order of the function pointer’s
arguments. (rG8962c68ad007a525f9daa987c99eda57e0d0069a)
The C API received support for accessing utilities from the
LLJIT IRTransformLayer and ThreadSafeModule classes. (D103855)
The C API received support for creating lazy-export
MaterializationUnits (D104672)
The C API function LLVMPassBuilderOptionsSetCoroutines was
removed because couroutine passes have been enabled by default.
(D105877)
comdat noduplicates was renamed to comdat nodeduplicate and as
a result, LLVMNoDuplicatesComdatSelectionKind was renamed to
LLVMNoDeduplicateComdatSelectionKind. (D106319)
Changes to the FastISel infrastructure
FastISel no longer tracks killed registers, and instead leaves
this to the register allocator. This means that hasTrivialKill()
is removed, as well as the OpNIsKill parameters to the fastEmit_*()
family of functions.
Changes to the LLVM tools
The options --build-id-link-{dir,input,output} have been deleted.
(D96310)
Support for in-order processors has been added to llvm-mca.
(D94928)
llvm-objdump supports -M {att,intel} now. --x86-asm-syntax is
a deprecated internal option which will be removed in LLVM
14.0.0. (D101695)
The llvm-readobj short aliases -s (previously --sections) and
-t (previously --syms) have been changed to --syms and
--section-details respectively, to match llvm-readelf. (D105055)
The llvm-nm short aliases -M (--print-armap), -U (--defined-only),
and -W (--no-weak) are now deprecated. Use the long form versions
instead. The alias --just-symbol-name is now deprecated in
favor of --format=just-symbols and -j. (D105330)
In lli the default JIT engine switched from MCJIT (-jit-kind=mcjit)
to ORC (-jit-kind=orc). (D98931)
llvm-rc got support for invoking Clang to preprocess its input.
(D100755)
llvm-rc got a GNU windres compatible frontend, llvm-windres.
(D100756)
llvm-ml has improved compatibility with MS ml.exe, managing to
assemble more asm files.
Changes to LLDB
LLDB executable is now included in pre-built LLVM binaries.
LLDB now includes full featured support for AArch64 SVE register
access.
LLDB now supports AArch64 Pointer Authentication, allowing
stack unwind with signed return address.
LLDB now supports debugging programs on AArch64 Linux that use
memory tagging (MTE).
Added memory tag read and memory tag write commands.
The memory region command will note when a region has memory
tagging enabled.
Synchronous and asynchronous tag faults are recognised.
Synchronous tag faults have memory tag annotations in addition
to the usual fault address.
12.0.1:
Non-comprehensive list of changes in this release
The builtin intrinsics __builtin_bitreverse8, __builtin_bitreverse16, __builtin_bitreverse32 and __builtin_bitreverse64 may now be used within constant expressions.
The builtin intrinsics __builtin_rotateleft8, __builtin_rotateleft16, __builtin_rotateleft32 and __builtin_rotateleft64 may now be used within constant expressions.
The builtin intrinsics __builtin_rotateright8, __builtin_rotateright16, __builtin_rotateright32 and __builtin_rotateright64 may now be used within constant expressions.
New Compiler Flags
…
AArch64 options -moutline-atomics, -mno-outline-atomics to enable and disable calls to helper functions implementing atomic operations. These out-of-line helpers like ‘__aarch64_cas8_relax’ will detect at runtime AArch64 Large System Extensions (LSE) availability and either use their atomic instructions, or falls back to LL/SC loop. These options do not apply if the compilation target supports LSE. Atomic instructions are used directly in that case. The option’s behaviour mirrors GCC, the helpers are implemented both in compiler-rt and libgcc.
New option -fbinutils-version= specifies the targeted binutils version. For example, -fbinutils-version=2.35 means compatibility with GNU as/ld before 2.35 is not needed: new features can be used and there is no need to work around old GNU as/ld bugs.
Deprecated Compiler Flags
The following options are deprecated and ignored. They will be removed in future versions of Clang.
The clang-cl /fallback flag, which made clang-cl invoke Microsoft Visual C++ on files it couldn’t compile itself, has been deprecated. It will be removed in Clang 13.
…
Modified Compiler Flags
On ELF, -gz now defaults to -gz=zlib with the integrated assembler. It produces SHF_COMPRESSED style compression of debug information. GNU binutils 2.26 or newer, or lld is required to link produced object files. Use -gz=zlib-gnu to get the old behavior.
Now that this pointers are tagged with nonnull and dereferenceable(N), -fno-delete-null-pointer-checks has gained the power to remove the nonnull attribute on this for configurations that need it to be nullable.
-gsplit-dwarf no longer implies -g2.
-fasynchronous-unwind-tables is now the default on Linux AArch64/PowerPC. This behavior matches newer GCC. (D91760) (D92054)
Support has been added for the following processors (command-line identifiers in parentheses):
Arm Cortex-A78C (cortex-a78c).
Arm Cortex-R82 (cortex-r82).
Arm Neoverse V1 (neoverse-v1).
Arm Neoverse N2 (neoverse-n2).
Fujitsu A64FX (a64fx).
For example, to select architecture support and tuning for Neoverse-V1 based systems, use -mcpu=neoverse-v1.
Removed Compiler Flags
The following options no longer exist.
clang-cl’s /Zd flag no longer exist. But -gline-tables-only still exists and does the same thing.
New Pragmas in Clang
…
Modified Pragmas in Clang
The “#pragma clang loop vectorize_width” has been extended to support an optional ‘fixed|scalable’ argument, which can be used to indicate that the compiler should use fixed-width or scalable vectorization. Fixed-width is assumed by default.
Scalable or vector length agnostic vectorization is an experimental feature for targets that support scalable vectors. For more information please refer to the Clang Language Extensions documentation.
Attribute Changes in Clang
Added support for the C++20 likelihood attributes [[likely]] and [[unlikely]]. As an extension they can be used in C++11 and newer. This extension is enabled by default.
Make perl a run-time dependency to fix
ERROR: [check-interpreter.mk] The interpreter "/usr/pkg/bin/perl" of "/usr/pkg/bin/scan-build" does not exist.
ERROR: [check-interpreter.mk] The interpreter "/usr/pkg/bin/perl" of "/usr/pkg/libexec/c++-analyzer" does not exist.
ERROR: [check-interpreter.mk] The interpreter "/usr/pkg/bin/perl" of "/usr/pkg/libexec/ccc-analyzer" does not exist.
What’s New in Clang 10.0.0?
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.
Major New Features
clang used to run the actual compilation in a subprocess (“clang -cc1”). Now compilations are done in-process by default. -fno-integrated-cc1 restores the former behavior. The -v and -### flags will print “(in-process)” when compilations are done in-process.
Concepts support. Clang now supports C++2a Concepts under the -std=c++2a flag.
Improvements to Clang’s diagnostics
-Wtautological-overlap-compare will warn on negative numbers and non-int types.
-Wtautological-compare for self comparisons and -Wtautological-overlap-compare will now look through member and array access to determine if two operand expressions are the same.
-Wtautological-bitwise-compare is a new warning group. This group has the current warning which diagnoses the tautological comparison of a bitwise operation and a constant. The group also has the new warning which diagnoses when a bitwise-or with a non-negative value is converted to a bool, since that bool will always be true.
-Wbitwise-conditional-parentheses will warn on operator precedence issues when mixing bitwise-and (&) and bitwise-or (|) operator with the conditional operator (?:).
-Wrange-loop-analysis got several improvements. It no longer warns about a copy being made when the result is bound to an rvalue reference. It no longer warns when an object of a small, trivially copyable type is copied. The warning now offers fix-its. Excluding -Wrange-loop-bind-reference it is now part of -Wall. To reduce the number of false positives the diagnostic is disabled in macros and template instantiations.
-Wmisleading-indentation has been added. This warning is similar to the GCC warning of the same name. It warns about statements that are indented as if they were part of a if/else/for/while statement but are not semantically part of that if/else/for/while.
-Wbitwise-op-parentheses and -Wlogical-op-parentheses are disabled by default.
The new warnings -Wc99-designator and -Wreorder-init-list warn about uses of C99 initializers in C++ mode for cases that are valid in C99 but not in C++20.
The new warning -Wsizeof-array-div catches cases like int arr[10]; ...sizeof(arr) / sizeof(short)... (should be sizeof(arr) / sizeof(int)), and the existing warning -Wsizeof-pointer-div catches more cases.
The new warning -Wxor-used-as-pow warns on cases where it looks like the xor operator ^ is used to be mean exponentiation, e.g. 2 ^ 16.
The new warning -Wfinal-dtor-non-final-class warns on classes that have a final destructor but aren’t themselves marked final.
-Wextra now enables -Wdeprecated-copy. The warning deprecates move and copy constructors in classes where an explicit destructor is declared. This is for compatibility with GCC 9, and forward looking for a change that’s being considered for C++23. You can disable it with -Wno-deprecated-copy.
Non-comprehensive list of changes in this release
In both C and C++ (C17 6.5.6p8, C++ [expr.add]), pointer arithmetic is only permitted within arrays. In particular, the behavior of a program is not defined if it adds a non-zero offset (or in C, any offset) to a null pointer, or if it forms a null pointer by subtracting an integer from a non-null pointer, and the LLVM optimizer now uses those guarantees for transformations. This may lead to unintended behavior in code that performs these operations. The Undefined Behavior Sanitizer -fsanitize=pointer-overflow check has been extended to detect these cases, so that code relying on them can be detected and fixed.
The Implicit Conversion Sanitizer (-fsanitize=implicit-conversion) has learned to sanitize pre/post increment/decrement of types with bit width smaller than int.
For X86 target, -march=skylake-avx512, -march=icelake-client, -march=icelake-server, -march=cascadelake, -march=cooperlake will default to not using 512-bit zmm registers in vectorized code unless 512-bit intrinsics are used in the source code. 512-bit operations are known to cause the CPUs to run at a lower frequency which can impact performance. This behavior can be changed by passing -mprefer-vector-width=512 on the command line.
Clang now defaults to .init_array on Linux. It used to use .ctors if the found GCC installation is older than 4.7.0. Add -fno-use-init-array to get the old behavior (.ctors).
The behavior of the flag -flax-vector-conversions has been modified to more closely match GCC, as described below. In Clang 10 onwards, command lines specifying this flag do not permit implicit vector bitcasts between integer vectors and floating-point vectors. Such conversions are still permitted by default, however, and the default can be explicitly requested with the Clang-specific flag -flax-vector-conversions=all. In a future release of Clang, we intend to change the default to -fno-lax-vector-conversions.
Improved support for octeon MIPS-family CPU. Added octeon+ to the list of of CPUs accepted by the driver.
For the WebAssembly target, the wasm-opt tool will now be run if it is found in the PATH, which can reduce code size.
For the RISC-V target, floating point registers can now be used in inline assembly constraints.
New Compiler Flags
The -fgnuc-version= flag now controls the value of __GNUC__ and related macros. This flag does not enable or disable any GCC extensions implemented in Clang. Setting the version to zero causes Clang to leave __GNUC__ and other GNU-namespaced macros, such as __GXX_WEAK__, undefined.
vzeroupper insertion on X86 targets can now be disabled with -mno-vzeroupper. You can also force vzeroupper insertion to be used on CPUs that normally wouldn’t with -mvzeroupper.
The -fno-concept-satisfaction-caching can be used to disable caching for satisfactions of Concepts. The C++2a draft standard does not currently permit this caching, but disabling it may incur significant compile-time costs. This flag is intended for experimentation purposes and may be removed at any time; please let us know if you encounter a situation where you need to specify this flag for correct program behavior.
The -ffixed-xX flags now work on RISC-V. These reserve the corresponding general-purpose registers.
RISC-V has added -mcmodel=medany and -mcmodel=medlow as aliases for -mcmodel=small and -mcmodel=medium respectively. Preprocessor definitions for __riscv_cmodel_medlow and __riscv_cmodel_medany have been corrected.
-fmacro-prefix-map=OLD=NEW substitutes directory prefix OLD for NEW in predefined preprocessor macros such as __FILE__. This helps with reproducible builds that are location independent. The new -ffile-prefix-map option is equivalent to specifying both -fdebug-prefix-map and -fmacro-prefix-map.
-fpatchable-function-entry=N[,M] is added to generate M NOPs before the function entry and N-M NOPs after the function entry. This is used by AArch64 ftrace in the Linux kernel.
-mbranches-within-32B-boundaries is added as an x86 assembler mitigation for Intel’s Jump Condition Code Erratum.
Deprecated Compiler Flags
The following options are deprecated and ignored. They will be removed in future versions of Clang.
-mmpx used to enable the __MPX__ preprocessor define for the Intel MPX instructions. There were no MPX intrinsics.
-mno-mpx used to disable -mmpx and is the default behavior.
-fconcepts-ts previously used to enable experimental concepts support. Use -std=c++2a instead to enable Concepts support.
Modified Compiler Flags
RISC-V now sets the architecture (riscv32/riscv64) based on the value provided to the -march flag, overriding the target provided by -triple.
-flax-vector-conversions has been split into three different levels of laxness, and has been updated to match the GCC semantics:
-flax-vector-conversions=all: This is Clang’s current default, and permits implicit vector conversions (performed as bitcasts) between any two vector types of the same overall bit-width. Former synonym: -flax-vector-conversions (Clang <= 9).
-flax-vector-conversions=integer: This permits implicit vector conversions (performed as bitcasts) between any two integer vector types of the same overall bit-width. Synonym: -flax-vector-conversions (Clang >= 10).
-flax-vector-conversions=none: Do not perform any implicit bitcasts between vector types. Synonym: -fno-lax-vector-conversions.
-debug-info-kind now has an option -debug-info-kind=constructor, which is one level below -debug-info-kind=limited. This option causes debug info for classes to be emitted only when a constructor is emitted.
RISC-V now chooses a slightly different sysroot path and defaults to using compiler-rt if no GCC installation is detected.
RISC-V now supports multilibs in baremetal environments. This support does not extend to supporting multilib aliases.
Attribute Changes in Clang
Support was added for function __attribute__((target("branch-protection=...")))
pkglint -r --network --only "migrate"
As a side-effect of migrating the homepages, pkglint also fixed a few
indentations in unrelated lines. These and the new homepages have been
checked manually.
9.0.0:
Major New Features
* Experimental support for C++ for OpenCL has been added.
Non-comprehensive list of changes in this release
* The __VERSION__ macro has been updated. Previously this macro contained the string ‘4.2.1 Compatible’ to achieve compatibility with GCC 4.2.1, but that should no longer be necessary. However, to retrieve Clang’s version, please favor the one of the macro defined in clang namespaced version macros.
New Compiler Flags
* -ftime-trace and ftime-trace-granularity=N Emits flame chart style compilation time report in chrome://tracing and speedscope.app compatible format. A trace .json file is written next to the compiled object file, containing hierarchical time information about frontend activities (file parsing, template instantiation) and backend activities (modules and functions being optimized, optimization passes).
Modified Compiler Flags
* clang -dumpversion now returns the version of Clang itself.
Windows Support
* clang-cl now treats non-existent files as possible typos for flags, clang-cl /diagnostic:caret /c test.cc for example now produces clang: error: no such file or directory: '/diagnostic:caret'; did you mean '/diagnostics:caret'?
* clang now parses the __declspec(allocator) specifier and generates debug information, so that memory usage can be tracked in Visual Studio.
* The -print-search-dirs option now separates elements with semicolons, as is the norm for path lists on Windows
* Improved handling of dllexport in conjunction with explicit template instantiations for MinGW, to allow building a shared libc++ for MinGW without --export-all-symbols to override the dllexport attributes
LLVM 8.0.1 is now available! Download it now, or read the release notes.
This release contains bug-fixes for the LLVM 8.0.0 release. This
release is API and ABI compatible with 8.0.0.
Clang 8.0.0:
Major New Features
* Clang supports use of a profile remapping file, which permits profile data captured for one version of a program to be applied when building another version where symbols have changed (for example, due to renaming a class or namespace). See the UsersManual for details.
* Clang has new options to initialize automatic variables with a pattern. The default is still that automatic variables are uninitialized. This isn’t meant to change the semantics of C and C++. Rather, it’s meant to be a last resort when programmers inadvertently have some undefined behavior in their code. These options aim to make undefined behavior hurt less, which security-minded people will be very happy about.
* Improvements to Clang’s diagnostics
Non-comprehensive list of changes in this release
* The experimental feature Pretokenized Headers (PTH) was removed in its entirely from Clang. The feature did not properly work with about 1/3 of the possible tokens available and was unmaintained.
* The internals of libc++ include directory detection on MacOS have changed. Instead of running a search based on the -resource-dir flag, the search is now based on the path of the compiler in the filesystem. The default behaviour should not change. However, if you override -resource-dir manually and rely on the old behaviour you will need to add appropriate compiler flags for finding the corresponding libc++ include directory.
* The integrated assembler is used now by default for all MIPS targets.
* Improved support for MIPS N32 ABI and MIPS R6 target triples.
* Clang now includes builtin functions for bitwise rotation of common value sizes, such as: __builtin_rotateleft32
* Improved optimization for the corresponding MSVC compatibility builtins such as _rotl().
LLVM 7.0.0 Release
The release contains the work on trunk up to SVN revision 338536 plus
work on the release branch. It is the result of the community's work
over the past six months, including: function multiversioning in Clang
with the 'target' attribute for ELF-based x86/x86_64 targets, improved
PCH support in clang-cl, preliminary DWARF v5 support, basic support
for OpenMP 4.5 offloading to NVPTX, OpenCL C++ support, MSan, X-Ray
and libFuzzer support for FreeBSD, early UBSan, X-Ray and libFuzzer
support for OpenBSD, UBSan checks for implicit conversions, many
long-tail compatibility issues fixed in lld which is now production
ready for ELF, COFF and MinGW, new tools llvm-exegesis, llvm-mca and
diagtool. And as usual, many optimizations, improved diagnostics, and
bug fixes.
For more details, see the release notes:
https://llvm.org/releases/7.0.0/docs/ReleaseNotes.htmlhttps://llvm.org/releases/7.0.0/tools/clang/docs/ReleaseNotes.htmlhttps://llvm.org/releases/7.0.0/tools/clang/tools/extra/docs/ReleaseNotes.htmlhttps://llvm.org/releases/7.0.0/tools/lld/docs/ReleaseNotes.html
While it is debatable whether we want to have this definition upstream,
this is very necessary in the package for the purpose of building
www/firefox once it is updated to 63.0.
This is because netbsd's base libstdc++ has some __float128 in headers
and otherwise we get fatal errors in clang builds, or in firefox's case,
when generating bindings for Rust via clang.
PR toolchain/53679
Bump PKGREVISION.
This enables compiler-rt, libcxx, and libunwind, as well as fixing various
assumptions in the code about what should be set on SunOS. In bulk builds
a while back this was able to compete favourably with GCC.