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.
0.8.0:
Language Changes
No More Extern or Packed Enums
Require Block After Suspend
@extern
Nameless Tests
@TagType Removed
nosuspend
Add SysV Calling Convention
Wrapping Negation on Unsigned Ints at comptime
@import("builtin") no longer re-exports std.builtin
Language Changes in 0.6.0:
Improved names of error sets when using merge error sets operator (||).
pub syntax for container fields is removed.
Type coercion from *[0]T to E![]const T is now allowed. This is an unambiguous, safe cast.
asm now accepts comptime-known values, rather than requiring string literal syntax.
Removed compile error for peer result ?comptime_int and null.
Ability to pass comptime types and non comptime types to same parameter.
@typeOf is renamed to @TypeOf. zig fmt automatically performs the conversion, and the next release of Zig after this one will remove the automatic conversion.
Ability to switch on pointer types.
Multiline strings in test and library names are disallowed.
Zig language no longer requires the expression a else unreachable with comptime a to produce a comptime result.
Timon Kruiper implemented casting between [*c]T and ?[*:0]T on fn parameter.
Timon Kruiper improved @typeInfo to lazily resolve declarations. This way all the declarations in a namespace won't be resolved until the user actually uses the declarations slice in the builtin TypeInfo union.
@ptrCast supports casting a slice to a pointer.
LemonBoy implemented peer type resolution between ?[]T and *[N]T.
There is now peer type resolution between mixed-const []T and *[N]T.
This version of zig supports the current version of llvm in pkgsrc (9).
Some patches from TheLemonMan were backported by me to fix NetBSD support.
Release notes: https://ziglang.org/download/0.5.0/release-notes.html
Allows us to drop all the local patches that were merged upstream.
lld is not a dependency, zig by default bundles lld and doesn't use
an external one. comment it.
Andrew Kelley (62):
Merge pull request #1975 from BenoitJGirard/master
Merge pull request #1963 from matthew-mcallister/dedup-compile-log-warning
Merge pull request #1972 from coypoop/netbsd
README: add NetBSD to support table
pull request fixups
Merge branch 'emekoi-fix-1711'
export _mh_execute_header with weak linkage
docs: note top level declarations are order-independent
docs: shadowing
zig fmt: fix infix operator before multiline string literal
add test for 74bdc1d1f898705
Merge branch 'kristate-zig-backport-issue1944'
remove --no-rosegment workaround now that valgrind bug is fixed
valgrind client requests for undefined values
Merge branch 'slice-deref-failure' of https://github.com/matthew-mcallister/zig into matthew-mcallister-slice-deref-failure
pull request fixups
Merge branch 'matthew-mcallister-slice-deref-failure'
deduplicate compile errors for undeclared identifiers
packed structs support comptime bitcasting
extern structs support comptime bitcasting
`@sliceToBytes` works at comptime
better handling of arrays in packed structs
better field access of types which have one possible value
fix `@bitCast` when src/dest types have mismatched handle_is_ptr
docs for packed structs
add regression test for bitcast to array
implement vector negation
better libc detection (#1996)
introduce std.debug.captureStackTrace
fix `zig fmt` arg0 handled incorrectly
add `zig cc` command to act like a C compiler
zig cc: remove "polly" which was an undefined symbol on macos
zig cc: work around clang calling GetCommandLine on Windows
Merge pull request #2003 from ziglang/zig-cc
first class support for compiling C code
building DLLs on Windows works better
`@cImport` works with `--cache on`
Merge pull request #2005 from ziglang/c-source
zig build: 2 improvements
fix infinite recursion in type_has_one_possible_value
delete incorrect TODO comment
add docs for zero bit types and pointers to zero bit types
fix not finding libgcc_s when looking for native libc
add a compile error note when C import fails and not linking libc
better error message when forgetting to link against libc
add a regression test for #704
fix incorrectly trying to memset at comptime
fix the libc compile error tests to only run on linux
use -nobuiltininc when compiling c code
use -nostdinc++ when compiling C code
use -nostdinc and sometimes -nolibc when compiling C code
breaking changes to the way targets work in zig
fix regressions on Windows
introduce sys_include_dir for when sys/* files are not with stdlib.h
add builder.addFmt API and use it to test stage1 zig fmt
fix .gitignore file and add commit missing std lib file
add test coverage for binary OR on error sets
add test coverage for type used as switch case
fix handling when there are multiple externs and
fix stage1 zig fmt on macos
improve docs for unions and switching on tagged unions
windows returns EINVAL for fopen when there is an asterisk in the name
Benoit Jauvin-Girard (1):
Fix std.math.powi so powi(x, +-0) = 1 for any x.
BenoitJGirard (2):
Merge pull request #1 from ziglang/master
Merge pull request #2 from ziglang/master
Jimmi HC (1):
Fixed std.testing.expectEqual
John Schmidt (2):
Some function doc tweaks (#1961)
Add priority queue
LemonBoy (4):
Silence gcc8 class-memaccess warnings
Add align attribute for params pointers
Translate parameterless C functions (#1978)
Prevent crash in tagged enums rendering (#1986)
Matthew McAllister (3):
Fix lvalue dereference type checking
Deduplicate compile log statement warnings
Check for duped error messages in compile tests
Maya Rashish (3):
Add NetBSD support
Undo local, unneeded patch
Don't provide a bogus definition of EVFILT_USER
Quetzal Bradley (1):
fix openWriteNoClobber and add test
emekoi (1):
make @enumToInt work on union(enum)
kristopher tate (1):
src/analyze.cpp: default to using `param_node` upon callconv error;
Zig is an open-source programming language designed for robustness,
optimality, and clarity.
* Robust - behavior is correct even for edge cases such as out
of memory.
* Optimal - write programs the best way they can
behave and perform.
* Clear - precisely communicate your intent
to the compiler and other programmers. The language imposes a
low overhead to reading code.