Releases: ldc-developers/ldc
Releases · ldc-developers/ldc
LDC 1.31.0
Big news
- Frontend, druntime and Phobos are at version 2.101.2. (#4141, #4279)
- Bit fields support. (#4015)
- macOS on Apple M1: linking with
-g
is working again without unaligned pointer warnings/errors. This fixes file:line debug information in exception backtraces (requiringatos
, a macOS development tool installed with Xcode), without the need to set MACOSX_DEPLOYMENT_TARGET=11 and using a modified LLVM. (#4291) - Preliminary support for LLVM 15, incl. adding support for the 'new' pass manager (
-passmanager
) and opaque IR pointers (-opaque-pointers
). (way too many PRs to list!) - New command-line option
-fno-delete-null-pointer-checks
, mimicking the same option of GCC and Clang. (#4297) - New UDA
ldc.attributes.callingConvention("...")
, which overrides the default calling convention. For expert use only! (#4299) - New command-line option
-fno-discard-value-names
to keep value names in LLVM IR. (#4012) - dcompute: Support for OpenCL image I/O. (#3835)
Platform support
- Initial ABI support for 64-bit RISC-V. (#4007)
Bug fixes
- dcompute: Fix v1.29 regression when trying to use intrinsics. (#4266, #4267)
- Fix 64-bit symbol offsets. (#4264, #4283)
- Add missing 32-bit LTO versions of druntime & Phobos to Linux multilib package. (#4234, #4235)
- Fix compiler crash. (#4130, #4135)
Internals
- The former druntime and dmd-testsuite git submodules are now part of the LDC repo directly, leaving Phobos as single remaining submodule. We are now using a subset of the DMD repo (which includes druntime since v2.101), rewritten via
git filter-repo
and exposed asdmd-rewrite-*
branches/tags in the LDC repo, to merge newer frontend+druntime+tests from upstream DMD. Thetests/d2/dmd-testsuite
dir was moved totests/dmd
. (#4274, #4276)
LDC 1.31.0-beta1
Big news
- Frontend, druntime and Phobos are at version 2.101.2. (#4141, #4279)
- Bit fields support. (#4015)
- macOS on Apple M1: linking with
-g
is working again without unaligned pointer warnings/errors. This fixes file:line debug information in exception backtraces (requiringatos
, a macOS development tool installed with Xcode), without the need to set MACOSX_DEPLOYMENT_TARGET=11 and using a modified LLVM. (#4291) - Preliminary support for LLVM 15, incl. adding support for the 'new' pass manager (
-passmanager
) and opaque IR pointers (-opaque-pointers
). (way too many PRs to list!) - New command-line option
-fno-delete-null-pointer-checks
, mimicking the same option of GCC and Clang. (#4297) - New UDA
ldc.attributes.callingConvention("...")
, which overrides the default calling convention. For expert use only! (#4299) - New command-line option
-fno-discard-value-names
to keep value names in LLVM IR. (#4012) - dcompute: Support for OpenCL image I/O. (#3835)
Platform support
- Initial ABI support for 64-bit RISC-V. (#4007)
Bug fixes
- dcompute: Fix v1.29 regression when trying to use intrinsics. (#4266, #4267)
- Fix 64-bit symbol offsets. (#4264, #4283)
- Add missing 32-bit LTO versions of druntime & Phobos to Linux multilib package. (#4234, #4235)
- Fix compiler crash. (#4130, #4135)
Internals
- The former druntime and dmd-testsuite git submodules are now part of the LDC repo directly, leaving Phobos as single remaining submodule. We are now using a subset of the DMD repo (which includes druntime since v2.101), rewritten via
git filter-repo
and exposed asdmd-rewrite-*
branches/tags in the LDC repo, to merge newer frontend+druntime+tests from upstream DMD. Thetests/d2/dmd-testsuite
dir was moved totests/dmd
. (#4274, #4276)
LDC 1.30.0
(Changes since 1.30.0-beta1 are marked with (new).)
Big news
- Frontend, druntime and Phobos are at version 2.100.1. (#3970, #4008, #4009) (new)
- LLVM for prebuilt packages bumped to v14.0.3. (#3952, #3979)
- All LLVM targets are enabled now (=> more targets for cross-compilation).
- For the Mac package, the minimum supported macOS version has been raised to v10.12.
- The minimum D version for bootstrapping has been raised to v2.079 (for GDC: v9.4), in line with DMD. (#3956)
- The minimum LLVM version has been raised to v9.0. (#3960)
- New LeakSanitizer support via
-fsanitize=leak
(not (yet?) supported on Windows). (#4005) (new) - New prebuilt universal macOS package, runnable on both x86_64 and arm64, and enabling x86_64/arm64 macOS/iOS cross-compilation targets out of the box (
-mtriple={x86_64,arm64}-apple-{macos,ios}
). The x86_64 package doesn't bundle any arm64 libs anymore; the arm64 package newly bundles iOS libs (arm64). (#3958)- Avoid an external x86_64-only dub, use the bundled universal dub executable instead.
Platform support
- Supports LLVM 9.0 - 14.0.
Bug fixes
- Enable output of variable names in ASan and MSan error reporting. (#4004) (new)
- Report unexpected type repaints as fatal ICEs instead of crashing. (#3990, #3991) (new)
Internals
- Main CI was moved from Azure Pipelines to GitHub Actions. Any fork on GitHub can trivially reuse the fully automated prebuilt packages generation & upload to a GitHub release. (#3978)
Known issues
- On macOS 12+, linking arm64 code compiled with
-g
likely results inunaligned pointer
linker errors. Setting environment variableMACOSX_DEPLOYMENT_TARGET=11
weakens those to warnings; compiling with-preserve-dwarf-line-section=false
is another option. (#3864)
LDC 1.30.0-beta1
Big news
- Frontend, druntime and Phobos are at version 2.100.0. (#3970)
- LLVM for prebuilt packages bumped to v14.0.3. (#3952, #3979)
- All LLVM targets are enabled now (=> more targets for cross-compilation).
- For the Mac package, the minimum supported macOS version has been raised to v10.12.
- The minimum D version for bootstrapping has been raised to v2.079 (for GDC: v9.4), in line with DMD. (#3956)
- The minimum LLVM version has been raised to v9.0. (#3960)
- New prebuilt universal macOS package, runnable on both x86_64 and arm64, and enabling x86_64/arm64 macOS/iOS cross-compilation targets out of the box (
-mtriple={x86_64,arm64}-apple-{macos,ios}
). The x86_64 package doesn't bundle any arm64 libs anymore; the arm64 package newly bundles iOS libs (arm64). (#3958)
Platform support
- Supports LLVM 9.0 - 14.0.
Internals
- Main CI was moved from Azure Pipelines to GitHub Actions. Any fork on GitHub can trivially reuse the fully automated prebuilt packages generation & upload to a GitHub release. (#3978)
LDC 1.29.0
(Changes since 1.29.0-beta1 are marked with (new).)
Big news
- Frontend, druntime and Phobos are at version 2.099.1. (#3917, #3893, #3937, #3953) (new)
- Support for LLVM 13 and 14. The prebuilt packages use v13.0.1. (#3842, #3951) (new)
- On Linux, LDC doesn't default to the
ld.gold
linker anymore. The combination of LLVM 13+ and older gold linkers can apparently cause problems. We recommend using LLD, e.g., via-linker=lld
or by setting your default/usr/bin/ld
symlink; it's significantly faster too. -linkonce-templates
is less aggressive by default now and IMHO production-ready. (#3924)- When linking manually (not via LDC) against shared druntime, it is now required to link the bundled
lib/ldc_rt.dso.o[bj]
object file into each binary. It replaces the previously Windows-specificdso_windows.obj
. (#3850) - Breaking
extern(D)
ABI change for all targets: formal parameters of non-variadic functions aren't reversed anymore, in line with the spec. For 32-bit x86, the first parameter is accordingly now potentially passed in EAX, not the last one. So non-variadicextern(D)
functions with multiple explicit parameters will break if expecting parameters in specific registers or stack slots, e.g., naked DMD-style inline assembly. (#3873, ldc-developers/phobos@3d725fc)
Platform support
- Supports LLVM 6.0 - 14.0. (new)
- Basic compiler support for Newlib targets, i.e., triples like
arm-none-newlibeabi
. (#3946) (new)
Bug fixes
- Linux: Make LTO work with LLD. (#3786, #3850)
- Windows: Fix most undefined symbols with
-dllimport=all
without-linkonce-templates
. (#3916, #3923, #3926, #3927, #3928, #3931, #3932) - Capture NRVO variable by ref for stack closures. (#3883, #3902)
-ftime-trace
: JSON-escape filenames. (#3947, #3948) (new)- RISC-V: Use 128-bit quadruple
real
. (#3892)
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)
LDC 1.29.0-beta1
Big news
- Frontend, druntime and Phobos are at version 2.099.0+. (#3917, #3893, #3937)
- Support for LLVM 13. The prebuilt packages use v13.0.1. (#3842)
- On Linux, LDC doesn't default to the
ld.gold
linker anymore. The combination of LLVM 13 and older gold linkers can apparently cause problems. We recommend using LLD, e.g., via-linker=lld
or by setting your default/usr/bin/ld
symlink; it's significantly faster too. -linkonce-templates
is less aggressive by default now and IMHO production-ready. (#3924)- When linking manually (not via LDC) against shared druntime, it is now required to link the bundled
lib/ldc_rt.dso.o[bj]
object file into each binary. It replaces the previously Windows-specificdso_windows.obj
. (#3850) - Breaking
extern(D)
ABI change for all targets: formal parameters of non-variadic functions aren't reversed anymore, in line with the spec. For 32-bit x86, the first parameter is accordingly now potentially passed in EAX, not the last one. So non-variadicextern(D)
functions with multiple explicit parameters will break if expecting parameters in specific registers or stack slots, e.g., naked DMD-style inline assembly. (#3873, ldc-developers/phobos@3d725fc)
Bug fixes
- Linux: Make LTO work with LLD. (#3786, #3850)
- Windows: Fix most undefined symbols with
-dllimport=all
without-linkonce-templates
. (#3916, #3923, #3926, #3927, #3928, #3931, #3932) - Capture NRVO variable by ref for stack closures. (#3883, #3902)
- RISC-V: Use 128-bit quadruple
real
. (#3892)
Supported LLVM versions
- 6.0 up to 13.0.
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)
LDC 1.28.1
Big news
- Frontend, druntime and Phobos are at version 2.098.1+. (#3886, #3896)
- New
@hidden
UDA (as counterpart ofexport
). (#3855) - Support 'raw mangles' via leading
\1
inpragma(mangle)
strings, e.g., to access magic linker symbols on Mac. (#3854) - New
@noSanitize
UDA to selectively disable sanitizer instrumentation of functions. (#3889) - WebAssembly: Larger default stack size (1 MB) and protection against stack overflow overwriting global memory. (#3882)
Bug fixes
- Linux x86/x64: Fix TLS range with static druntime and bfd/lld linkers. (#3849, ldc-developers/druntime@ec3c0aa)
- Support
rdtscp
in DMD-style inline assembly. (#3895)
LDC 1.28.0
(Changes since 1.28.0-beta1 are marked with (new).)
Big news
- Frontend, druntime and Phobos are at version 2.098.0+. (#3821, #3839, #3844, #3852) (new)
- Windows:
-dllimport=defaultLibsOnly
(e.g., implied by-link-defaultlib-shared -fvisibility=hidden
) doesn't require-linkonce-templates
anymore. (#3816) - dcompute: Add support for OpenCL image I/O. (#3835) (new)
Platform support
- Supports LLVM 6.0 - 12.0.
Bug fixes
- Fix dynamic casts across binary boundaries (DLLs etc.). (dlang/druntime#3543)
- Windows: Fix potentially wrongly caught exceptions due to non-unique
TypeInfo_Class
names. (#3520) - Don't silently ignore invalid external tool specifications. (#3841) (new)
- LLVM v11.1: Add missing PGO
ldc-profdata
tool. (#3845) (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.
LDC 1.28.0-beta1
Big news
- Frontend, druntime and Phobos are at version 2.098.0-beta.2+. (#3821, #3839)
- Windows:
-dllimport=defaultLibsOnly
(e.g., implied by-link-defaultlib-shared -fvisibility=hidden
) doesn't require-linkonce-templates
anymore. (#3816)
Platform support
- Supports LLVM 6.0 - 12.0.
Bug fixes
- Fix dynamic casts across binary boundaries (DLLs etc.). (dlang/druntime#3543)
- Windows: Fix potentially wrongly caught exceptions due to non-unique
TypeInfo_Class
names. (#3520)
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.
LDC 1.27.1
Big news
- Frontend, druntime and Phobos are at version 2.097.2. (#3811)
- Revamped and improved
-ftime-trace
implementation for compiler profiling/tracing, now excluding LLVM-internal traces, adding frontend memory tracing, source file location infos etc. (#3797) - An official prebuilt package for Linux AArch64 is available again after migrating from Shippable to Travis. (#3733)