Releases: ldc-developers/ldc
Releases · ldc-developers/ldc
LDC 1.20.0
(Changes since 1.20.0-beta1 are marked with (new).)
Big news
- Frontend, druntime and Phobos are at version 2.090.1+. (#3262, #3296, #3306, #3317, #3326) (new)
- Codegen preparations for:
- The config file for multilib builds has been restructured by adding a separate section for the multilib target. This avoids
--no-warn-search-mismatch
for the linker and enables support for LLD. (#3276) - Support for embedding
pragma({lib,linkerDirective}, ...)
in Mach-O object files. (#3259)
E.g.,pragma(linkerDirective, "-framework", "CoreFoundation");
makes Apple's linker pull in that framework when pulling in the compiled object file.
ELF object files newly embedpragma(lib, ...)
library names in a special.deplibs
section, but that only works with LLD 9+ for now. - The
ldc-build-runtime
tool has been slightly revised;--dFlags
now extends the base D flags instead of overriding them. (1200601) ModuleInfo.importedModules
are now emitted as weak references (except on Windows, for LLD compatibility), following DMD. (#3262)- Windows: Bundled MinGW-based libs now support wide
wmain
andwWinMain
C entry points. (#3311) (new)
Platform support
- Supports LLVM 3.9 - 10.0. (new)
Bug fixes
- Potential stack overflows on Linux in GC worker threads. (#3127, dlang/druntime#2904)
- Support 2 leading dashes (not just 1) in command-line pre-parsing, thus fixing config file section lookup when using
--mtriple
and not ignoring--conf
and--lowmem
any longer. (#3268, #3275) - Support for data directives in DMD-style inline asm. (#3299, #3301) (new)
- Cherry-picked fixes for soft-float targets. (#3292, dlang/phobos#7362, dlang/phobos#7366, dlang/phobos#7377) (new)
- ICE during debuginfo generation for function literals inside enum declarations. (#3272, #3274)
Internals
- Misc. tweaks for
dmd-testsuite
: (#3287, #3306) (new)- Significantly accelerated by skipping uninteresting permutations.
- Switch from Makefile to
run.d
, incl. moving LDC-specific exceptions from Makefile to individual test files and support for extendedDISABLED
directives.
- Addition of (recommendable!) Cirrus CI service (incl. FreeBSD) and removal of Semaphore CI. (#3298) (new)
- Some improvements for
gdmd
host compilers, incl. CI tests. (#3286) (new)
Known issues
- 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.20.0-beta1
Big news
- Frontend, druntime and Phobos are at version 2.090.0+. (#3262)
- The config file for multilib builds has been restructured by adding a separate section for the multilib target. This avoids
--no-warn-search-mismatch
for the linker and enables support for LLD. (#3276) - Support for embedding
pragma({lib,linkerDirective}, ...)
in Mach-O object files. (#3259)
E.g.,pragma(linkerDirective, "-framework", "CoreFoundation");
makes Apple's linker pull in that framework when pulling in the compiled object file.
ELF object files newly embedpragma(lib, ...)
library names in a special.deplibs
section, but that only works with LLD 9+ for now. - The
ldc-build-runtime
tool has been slightly revised;--dFlags
now extends the base D flags instead of overriding them. (1200601) ModuleInfo.importedModules
are now emitted as weak references (except on Windows, for LLD compatibility), following DMD. (#3262)
Platform support
- Supports LLVM 3.9 - 9.0.
Bug fixes
- Potential stack overflows on Linux in GC worker threads. (#3127, dlang/druntime#2904)
- Support 2 leading dashes (not just 1) in command-line pre-parsing, thus fixing config file section lookup when using
--mtriple
and not ignoring--conf
and--lowmem
any longer. (#3268, #3275) - ICE during debuginfo generation for function literals inside enum declarations. (#3272, #3274)
Known issues
- 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.19.0
(Changes since 1.19.0-beta2 are marked with (new).)
Big news
- Frontend, druntime and Phobos are at version 2.089.1+. (#3192, #3210, #3215, #3232, #3242, #3255, #3261) (new)
- LLVM for prebuilt packages upgraded to v9.0.1; our fork has moved to ldc-developers/llvm-project. The x86[_64] packages newly include the experimental AVR backend. (#3244) (new)
- Android: A prebuilt AArch64 package has been added. It also includes prebuilt druntime/Phobos libraries for x86_64; the armv7a package includes the i686 libraries. So all 4 Android targets are covered with prebuilt druntime/Phobos. (#3244) (new)
- Breaking
extern(D)
ABI change for Posix x86[_64]: non-POD arguments are now passed by ref under the hood, just like they already were forextern(C++)
. Some superfluous implicit blits have been optimized away as well, for all targets. (#3204) - Posix: Defaults to
cc
now for linking, notgcc
(orclang
for FreeBSD 10+) - if theCC
environment variable isn't set. Override with-gcc=<gcc|clang>
. (#3202) - Codegen elision of dead branches for
if
statements with constant condition (not depending on enabled LLVM optimizations). (#3134) - druntime: New
llvm_sideeffect
intrinsic, new@cold
function UDA and extended CAS functionality incore.atomic
(incl. support for weak CAS and separate failure ordering). (ldc-developers/druntime#166, ldc-developers/druntime#167, #3220) - Windows: Bundled MinGW-based libs have been upgraded to use the .def files from MinGW-w64 v7.0.0. They now also contain a default
DllMain
entry point as well as_[v]snprintf
. (libs, #3142)
Platform support
- Supports LLVM 3.9 - 9.0.
Bug fixes
- Misc. CMake issues with some LLVM 9 configurations. (#3079, #3198)
- Equality/identity comparisons of vectors with length ≥ 32. (#3208, #3209)
ldc.gccbuiltins_*
druntime modules now available to non-installed compiler too. (#3194, #3201)- Potential ICE when applying
@assumeUsed
on global union. (#3221, #3222) Context from outer function, but no outer function?
regression introduced in v1.11 (inability to access outer context fromextern(C++)
methods). (#3234, #3235)- Lvalue expressions with nested temporaries to be destructed yielding a wrong lvalue. (#3233)
- druntime: Cherry-picked fix wrt. GC potentially collecting objects still referenced in other threads' TLS area. (dlang/druntime#2558) (new)
Known issues
- 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.19.0-beta2
(Changes since 1.19.0-beta1 are marked with (new).)
Big news
- Frontend, druntime and Phobos are at version 2.089.0+. (#3192, #3210, #3215, #3232, #3242) (new)
- Breaking
extern(D)
ABI change for Posix x86[_64]: non-POD arguments are now passed by ref under the hood, just like they already were forextern(C++)
. Some superfluous implicit blits have been optimized away as well, for all targets. (#3204) - Posix: Defaults to
cc
now for linking, notgcc
(orclang
for FreeBSD 10+) - if theCC
environment variable isn't set. Override with-gcc=<gcc|clang>
. (#3202) - Codegen elision of dead branches for
if
statements with constant condition (not depending on enabled LLVM optimizations). (#3134) - druntime: New
llvm_sideeffect
intrinsic, new@cold
function UDA and extended CAS functionality incore.atomic
(incl. support for weak CAS and separate failure ordering). (ldc-developers/druntime#166, ldc-developers/druntime#167, #3220) (new) - Windows: Bundled MinGW-based libs have been upgraded to use the .def files from MinGW-w64 v7.0.0. They now also contain a default
DllMain
entry point as well as_[v]snprintf
. (libs, #3142) (new)
Platform support
- Supports LLVM 3.9 - 9.0.
Bug fixes
- Misc. CMake issues with some LLVM 9 configurations. (#3079, #3198)
- Equality/identity comparisons of vectors with length ≥ 32. (#3208, #3209)
ldc.gccbuiltins_*
druntime modules now available to non-installed compiler too. (#3194, #3201)- Potential ICE when applying
@assumeUsed
on global union. (#3221, #3222) (new) Context from outer function, but no outer function?
regression introduced in v1.11 (inability to access outer context fromextern(C++)
methods). (#3234, #3235) (new)- Lvalue expressions with nested temporaries to be destructed yielding a wrong lvalue. (#3233) (new)
Known issues
- 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.19.0-beta1
Big news
- Frontend, druntime and Phobos are at version 2.089.0. (#3192, #3210, #3215)
- Breaking
extern(D)
ABI change for Posix x86[_64]: non-POD arguments are now passed by ref under the hood, just like they already were forextern(C++)
. Some superfluous implicit blits have been optimized away as well, for all targets. (#3204) - Posix: Defaults to
cc
now for linking, notgcc
(orclang
for FreeBSD 10+) - if theCC
environment variable isn't set. Override with-gcc=<gcc|clang>
. (#3202) - Codegen elision of dead branches for
if
statements with constant condition (not depending on enabled LLVM optimizations). (#3134)
Platform support
- Supports LLVM 3.9 - 9.0.
Bug fixes
- Misc. CMake issues with some LLVM 9 configurations. (#3079, #3198)
- Equality/identity comparisons of vectors with length ≥ 32. (#3208, #3209)
ldc.gccbuiltins_*
druntime modules now available to non-installed compiler too. (#3194, #3201)
Known issues
- 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.18.0
(Changes since 1.18.0-beta2 are marked with (new).)
Big news
- Frontend, druntime and Phobos are at version 2.088.1. (#3143, #3161, #3176, #3190 (new))
- Support for LLVM 9.0. The prebuilt packages have been upgraded to LLVM 9.0.0. (#3166)
- Preliminary Android CI, incl. experimental prebuilt armv7a package generation (API level 21, i.e., Android 5+). (#3164)
- Bundled dub upgraded to v1.17.0+ with improved LDC support, incl. cross-compilation (e.g.,
--arch=x86_64-pc-windows-msvc
). (dlang/dub#1755, Wiki) - Init symbols of zero-initialized structs are no longer emitted. (#3131)
- druntime: DMD-compatible
{load,store}Unaligned
andprefetch
added tocore.simd
. (ldc-developers/druntime#163) - JIT improvements, incl. multi-threaded compilation. (#2758, #3154, #3174)
Platform support
- Supports LLVM 3.9 - 9.0.
Bug fixes
- Don't error out when initializing a
void
vector. (#3130, #3139) - druntime: Fix exception chaining for latest MSVC runtime v14.23, shipping with Visual Studio 2019 v16.3. (ldc-developers/druntime#164)
- Keep lvalue-ness when casting associative array to another AA. (#3162, #3179) (new)
- druntime: Fix regression for POSIX systems without
backtrace[_symbols]
, introduced in beta1. (#3165, dlang/druntime#2796) - Fix compilability regression with
make
, introduced in beta2. (#3188, #3191) (new)
Known issues
- 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.18.0-beta2
(Changes since 1.18.0-beta1 are marked with (new).)
Big news
- Frontend, druntime and Phobos are at version 2.088.0+. (#3143, #3161, #3176 (new))
- Support for LLVM 9.0. The prebuilt packages have been upgraded to LLVM 9.0.0. (#3166) (new)
- Preliminary Android CI, incl. experimental prebuilt armv7a package generation (API level 21, i.e., Android 5+). (#3164) (new)
- Bundled dub upgraded to v1.17.0+ with improved LDC support, incl. cross-compilation (e.g.,
--arch=x86_64-pc-windows-msvc
). (dlang/dub#1755, Wiki) - Init symbols of zero-initialized structs are no longer emitted. (#3131)
- druntime: DMD-compatible
{load,store}Unaligned
andprefetch
added tocore.simd
. (ldc-developers/druntime#163) - JIT improvements, incl. multi-threaded compilation. (#2758, #3154, #3174 (new))
Platform support
- Supports LLVM 3.9 - 9.0. (new)
Bug fixes
- Don't error out when initializing a
void
vector. (#3130, #3139) - druntime: Fix regression for POSIX systems without
backtrace[_symbols]
. (#3165, dlang/druntime#2796) (new) - druntime: Fix exception chaining for latest MSVC runtime v14.23, shipping with Visual Studio 2019 v16.3. (ldc-developers/druntime#164) (new)
Known issues
- 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.18.0-beta1
Big news
- Frontend, druntime and Phobos are at version 2.088.0+. (#3143, #3161)
- Bundled dub upgraded to v1.17.0+ with improved LDC support, incl. cross-compilation (e.g.,
--arch=x86_64-pc-windows-msvc
). (dlang/dub#1755, Wiki) - Init symbols of zero-initialized structs are no longer emitted. (#3131)
- druntime: DMD-compatible
{load,store}Unaligned
andprefetch
added tocore.simd
. (ldc-developers/druntime#163) - JIT improvements, incl. multi-threaded compilation. (#2758, #3154)
Platform support
- Supports LLVM 3.9 - 8.0.
Bug fixes
Known issues
- 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.17.0
(Changes since 1.17.0-beta1 are marked with (new).)
Big news
- Frontend, druntime and Phobos are at version 2.087.1+. (#3093, #3124)
- The upstream fix wrt. local templates can now receive local symbols hasn't been ported yet. (#3125)
- LLVM for prebuilt packages upgraded to v8.0.1. (#3113)
- Breaking change: Init symbols, TypeInfos and vtables of non-
export
ed aggregates are now hidden with-fvisibility=hidden
. (#3129) (new) - LLVM 8+: New intrinsics
llvm_*_sat
(saturation arithmetic) andllvm_{min,max}imum
. Thanks Stefanos! (ldc-developers/druntime#161, ldc-developers/druntime#162)
Platform support
- Supports LLVM 3.9 - 8.0.
Bug fixes
- Fix for v1.16.0 regression when returning
void
expressions. (#3094, #3095) -lowmem
(and on Windows,--DRT-*
options) in response files (e.g., used by dub) aren't ignored anymore. (#3086)- Windows: LDC and LDMD now internally use UTF-8 strings only, incl. command-line options and environment variables. The LDC install dir, source file names etc. can now contain non-ASCII chars. For proper console output, especially to stderr, you'll need Windows 10 v1809+ and may need to set a Unicode console font (e.g., Consolas). (#611, #3086)
- Android: Linker errors when building LDC/LDMD should be fixed. (#3128)
- Support for recent
gdmd
as D host compiler. Thanks Moritz! (#3087) - Do not require gold plugin when linking with LLD. (#3105)
- Enable linker stripping on FreeBSD (with non-
bfd
linkers). (#3106) (new) - Some JIT bind fixes. (#3099, #3100)
Known issues
- NEW: If you encounter segfaults in GC worker threads with shared druntime on Linux that are fixed by disabling new parallel GC marking (e.g., via
--DRT-gcopt=parallel:0
in executable cmdline), please let us know about it: #3127 - 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.17.0-beta1
Big news
- Frontend, druntime and Phobos are at version 2.087.1+. (#3093, #3124)
- The upstream fix wrt. local templates can now receive local symbols hasn't been ported yet. (#3125)
- LLVM for prebuilt packages upgraded to v8.0.1. (#3113)
- LLVM 8+: New intrinsics
llvm_*_sat
(saturation arithmetic) andllvm_{min,max}imum
. Thanks Stefanos! (ldc-developers/druntime#161, ldc-developers/druntime#162)
Platform support
- Supports LLVM 3.9 - 8.0.
Bug fixes
- Fix for v1.16.0 regression when returning
void
expressions. (#3094, #3095) -lowmem
(and on Windows,--DRT-*
options) in response files (e.g., used by dub) aren't ignored anymore. (#3086)- Windows: LDC and LDMD now internally use UTF-8 strings only, incl. command-line options and environment variables. The LDC install dir, source file names etc. can now contain non-ASCII chars. For proper console output, especially to stderr, you'll need Windows 10 v1809+ and may need to set a Unicode console font (e.g., Consolas). (#611, #3086)
- Android: Linker errors when building LDC/LDMD should be fixed. (#3128)
- Support for recent
gdmd
as D host compiler. Thanks Moritz! (#3087) - Do not require gold plugin when linking with LLD. (#3105)
- Some JIT bind fixes. (#3099, #3100)
Known issues
- NEW: If you encounter segfaults in GC worker threads with shared druntime on Linux that are fixed by disabling new parallel GC marking (e.g., via
--DRT-gcopt=parallel:0
in executable cmdline), please let us know about it: #3127 - 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.