(Changes since 1.22.0-beta1 are marked with (new).)
Big news
- Frontend, druntime and Phobos are at version 2.092.0+. (#3413, #3416, #3429, #3434, #3452) (new)
- AArch64: All known ABI issues have been fixed. C(++) interop should now be on par with x86_64, and variadics usable with
core.{vararg,stdc.stdarg}
. (#3421) - Windows hosts: DMD's Visual C++ toolchain detection has been adopted. As that's orders of magnitude faster than the previous method involving the MS batch file, auto-detection has been enabled by default, so if you have a non-ancient Visual C++ installation, it will now be used automatically for linking. The environment setup has been reduced to the bare minimum (
LIB
andPATH
). (#3415) - Link-time overridable
@weak
functions are now emulated for Windows targets and work properly for ELF platforms. For ELF, LDC doesn't emit any COMDATs anymore. (#3424) - New
ldc.gccbuiltins_{amdgcn,nvvm}
for AMD GCN and NVIDIA PTX targets. (#3411) - druntime: Significant speed-up for
core.math.ldexp
. (#3440, #3446) (new)
Platform support
- Supports LLVM 3.9 - 10.0.
Bug fixes
- Cross-module inlining (incl.
pragma(inline, true)
): Enable emission into multiple object files. (#3126, #3442) (new) - Casting (static and dynamic) arrays to vectors now loads the data instead of splatting the first element. (#3418, #3419)
- Fix return statements potentially accessing memory from destructed temporaries. (#3426)
- Add proper support for
-checkaction=halt
. (#3430, #3431) - druntime: Include
core.stdcpp.*
modules. (#3103, #3158) (new) - GCC-style asm: Add support for indirect input operands (
"m"
). (#3438) (new) - FreeBSD: Fix backtraces for optimized code by switching to external
libexecinfo
. (#3108, #3453) (new) - FreeBSD: Fix C math related issues (incl. CTFE math issues) by bringing
core.stdc.{math,tgmath}
up to speed. (dlang/druntime#3119) (new) - Fix ICE for captured parameters not passed on the LLVM level. (#3441) (new)
Internals
- When printing compile-time reals to hex strings (mangling, .di headers), LDC now uses LLVM instead of the host C runtime, for proper and consistent results. (#3410)
- One limitation for exotic hosts wrt. C
long double
precision has been lifted. (#3414) - For AVR targets, the compiler now predefines
AVR
and emits all TLS globals as regular__gshared
ones. (#3420) - New
-fno-plt
option to avoid PLT external calls. (#3443) (new) - iOS/arm64 CI, running the debug druntime & Phobos unittests on an iPhone 6S. Thx Jacob for this tedious work! (#3379, #3450) (new)
- FreeBSD CI with CirrusCI is now fully green and non-optional. (#3453) (new)
Known issues
- When building LDC, old LDC 0.17.*/ltsmaster host compilers miscompile LDC ≥ 1.21, leading to potential segfaults of the built LDC. Ltsmaster can still be used to bootstrap a first compiler and then let that compiler compile itself. (#3354)
- Buggy older
ld.bfd
linker versions may wrongly strip out required symbols, e.g., ModuleInfos (so that e.g. no module ctors/dtors are run). LDC defaults told.gold
on Linux. - LDC does not zero the padding area of a
real
variable. This may lead to wrong results if the padding area is also considered. See #770. Does not apply toreal
members inside structs etc.