Releases: ldc-developers/ldc
LDC 1.4.0-beta1
Big news
- Frontend, druntime and Phobos are at version 2.074.1. (#2076)
- ldc-build-runtime: Small D tool making it easy to (cross-)compile the LDC runtime libraries yourself, e.g., to enable LTO-ability/sanitizers, prepare for (cross-)linking executables and shared libraries, or aid in adding support for a new target platform. (Wiki page)
- @joakim-noah's Android fixes have finally been fully incorporated, enabling every host to (cross-)compile to Android. (ldc-developers/llvm@8655f32) You can also try out the native Android/arm package below, ie a D compiler that you can run on your Android smartphone or tablet, by following these installation instructions and usage examples from the wiki (to use the native compiler beta below, download it in Termux and install with
dpkg -i ldc-beta_1.4.0-1_android-arm.deb
). - Improved support for AddressSanitizer. LDC will automatically link with the AddressSanitizer runtime library when
-fsanitize=address
is passed (when LDC can find the AddressSanitizer library). - libFuzzer sanitizer support using
-fsanitize=fuzzer
(same as Clang). This flag implies-fsanitize-coverage=trace-pc-guard,indirect-calls,trace-cmp
and automatically links-in the runtime libFuzzer library if LDC can locate the runtime library. (With LLVM 4.0, there is a dependency on sanitizer runtime, so manually link the ASan library or use-fsanitize=fuzzer,address
.) - New
-fsanitize-blacklist=<file>
command-line option to exclude functions from sanitizer instrumentation (identical to Clang). The file must adhere to the textual Sanitizer Special Case List format. - New
-fsanitize-coverage=...
command-line option with the same functionality as Clang.
Breaking changes
- The
-sanitize
command-line option has been renamed to-fsanitize*
, for clang conformance. - The semantics of an empty
-conf=
command-line option have been changed from 'use default config file' to 'use no config file'. - The binary representations of the init values for
float/double/real
have been unified to a special quiet NaN, with both most significant mantissa bits set, on all hosts and for all targets. (#2207)
Platform support
- Supports LLVM 3.7 - 5.0. Support for 3.5 and 3.6 has been dropped.
- Windows: Supports Visual Studio/C++ Build Tools 2015 and 2017. The latest Visual Studio 2017 Update (15.3) appears to break TLS and is not supported (
-link-internally
may be able to work around it).
Changes to the prebuilt packages
- Consistent usage of a minimally tailored LLVM 4.0.1.
- Linux x86_64:
- Shipping with the LLVM LTO plugin for the
gold
linker. On Ubuntu 16.04,-flto=full|thin
works out of the box; 14.04 may need an additional-Xcc -fuse-ld=gold
in the LDC command line. - Build environment upgraded from Ubuntu 12.04 and gcc 4.9 to Ubuntu 14.04 and gcc 6.3.
- Shipping with the LLVM LTO plugin for the
- Windows/MSVC: Build environment upgraded from Visual Studio 2015 Update 3 to Visual Studio 2017 15.0 (WinSDK 10.0.14393).
Bug fixes
- LLVM error
Global variable initializer type does not match global variable type!
forT.init
with explicit initializers for dominated members in nested unions. (#2108) - Inconsistent handling of lvalue slicees wrt. visible side-effects of slice lower/upper bound expressions. (#1433)
- Misc. dcompute issues. (#2195, #2215)
- Potential LDC crashes due to dangling pointers after replacing IR globals (required in some cases if the type contains unions) almost fully mitigated. (#1829)
- Multiple arrayop function emissions. (#2216)
- Potentially incorrect memory layout for unnaturally aligned aggregates. (#2235)
- Wrong
-m32/64
in command-line for external ARM assembler used via-no-integrated-as
.
Internals
- Misc. CI improvements:
- Addition of high-performant SemaphoreCI (incl. enabled LLVM/LDC assertions).
- CircleCI upgraded to 2.0, testing with latest gcc and LLVM nightly.
- Compile all D files for (non-unittest) druntime/Phobos at once. May be disabled via CMake option
COMPILE_ALL_D_FILES_AT_ONCE=OFF
. (#2231)
Known issues
- 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. - Phobos does not compile on MinGW platform.
LDC 1.3.0
(Changes from 1.3.0-beta2 release are marked with (new).)
Big news
- Frontend, druntime and Phobos are at version 2.073.2.
- A first experimental version of DCompute for OpenCL/CUDA targets has landed. See announcement.
- LLVM 3.9+: Experimental integration of LLD, the LLVM cross-linker, for MSVC targets. Check out these hassle-free instructions to make LDC emit Windows executables and DLLs on any host! (#2142)
- libconfig was replaced by an ad-hoc parser (in D), getting rid of the build and runtime dependency and shrinking the license file by roughly 50%. Thanks again, Remi! (#2016)
- LDC now ships with static and shared runtime libs on supported platforms. (#1960)
- LLVM 3.9+: Static libraries are now generated by LDC (LLVM) by default, not by system
ar
orlib.exe
. This means that LDC can cross-compile and -archive static libs for all supported targets. Command-line option-ar
allows specifying an external archiver to be used. (#2030) - New command-line options
-dip1000
,-mv
and-mscrtlib
(#2041). - Ships with dlang tools rdmd, ddemangle and dustmite.
New features
- LLVM 4.0+: Output LLVM optimization records via
-fsave-optimization-record
. (#2089) - New
-Xcc
command-line option for C compiler flags when linking via gcc/clang. Thanks Adrian! (#2104) - New function UDA
@ldc.attributes.llvmFastMathFlag("contract")
that specifically enables floating point operation fusing (fused multiply-add), previously only achievable with@fastmath
. (#2060)
Platform support
- Supports LLVM 3.5 - 4.0.
- Additional LLVM targets have been enabled for the prebuilt x86_64 packages: ARM, AArch64 and PowerPC. (new)
- Windows: Supports Visual Studio/Build Tools 2015 and 2017. (#2065)
- NetBSD: The 2.074 druntime patches have been cherry-picked.
Bug fixes
- LTO flags leaking into standard libraries when building LDC with LTO. (#2077)
- Debug info fixes for class types - thanks Elie! (#2130)
- OSX: Incomplete backtrace. (#2097)
- Phobos on ARM: alignment and 64-bit
real
issues. (#2024) - Windows: EH-related crashes when linking against shared MS runtimes. (#2080)
- ICE when initializing vector with
TVector.init
. (#2101) - Weird object file type autodetection. (#2105)
- Typesafe variadics emitted as LLVM variadics. (#2121)
- Superfluous masking of
bool
values. (#2131) - Output for
-mcpu=help
or-mattr=help
printed multiple times. (#2073) - LDMD refuses some duplicate command-line options. (#2110)
- Change format of predefined versions output for DMD compatibility. (#1962)
- Fix potential segfault when formatting error msg (#2160) (new)
- Fix ICE when using
-main -cov
(#2164) (new) - Make inlining threshold customizable via (existing)
-inline-threshold
, fix performance decrease with-boundscheck=off
(#2161, #2180) (new) - Switch Android onto the sectionELF style of module registry (#2172) (new)
- Check fiber migration on Android/ARM too (ldc-developers/druntime#97) (new)
- Android moduleinfo section druntime fix (ldc-developers/druntime#98) (new)
Building LDC
- Building LDC requires a preinstalled D compiler.
Internals
- LDC now features D unittests itself. Just add some to LDC's D modules and they'll be compiled and executed by CI. (#2016)
Known issues
- 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. - Phobos does not compile on MinGW platform.
LDC 1.3.0-beta2
(Changes from 1.3.0-beta1 release are marked with (new).)
Big news
- Frontend, druntime and Phobos are at version 2.073.2.
- A first experimental version of DCompute for OpenCL/CUDA targets has landed. See announcement. (new)
- LLVM 3.9+: Experimental integration of LLD, the LLVM cross-linker, for MSVC targets. Check out these hassle-free instructions to make LDC emit Windows executables and DLLs on any host! (#2142) (new)
- libconfig was replaced by an ad-hoc parser (in D), getting rid of the build and runtime dependency and shrinking the license file by roughly 50%. Thanks again, Remi! (#2016)
- LDC now ships with static and shared runtime libs on supported platforms. (#1960)
- LLVM 3.9+: Static libraries are now generated by LDC (LLVM) by default, not by system
ar
orlib.exe
. This means that LDC can cross-compile and -archive static libs for all supported targets. Command-line option-ar
allows specifying an external archiver to be used. (#2030) - New command-line options
-dip1000
,-mv
and-mscrtlib
(#2041). - Ships with dlang tools rdmd, ddemangle and dustmite. (new)
New features
- Output LLVM optimization records via
-fsave-optimization-record
. (#2089) (new) - New
-Xcc
command-line option for C compiler flags when linking via gcc/clang. Thanks Adrian! (#2104) (new) - New function UDA
@ldc.attributes.llvmFastMathFlag("contract")
that specifically enables floating point operation fusing (fused multiply-add), previously only achievable with@fastmath
. (#2060)
Platform support
- Supports LLVM 3.5 - 4.0.
- Additional LLVM targets have been enabled for the prebuilt x86_64 packages: ARM, AArch64 and PowerPC. (new)
- Windows: Supports Visual Studio/Build Tools 2015 and 2017. (#2065)
- NetBSD: The 2.074 druntime patches have been cherry-picked. [new: some more cherry-picks and fixes]
Bug fixes
- LTO flags leaking into standard libraries when building LDC with LTO. (#2077) (new)
- Debug info fixes for class types - thanks Elie! (#2130) (new)
- OSX: Incomplete backtrace. (#2097) (new)
- Phobos on ARM: alignment and 64-bit
real
issues. (#2024) (new) - Windows: EH-related crashes when linking against shared MS runtimes. (#2080) (new)
- ICE when initializing vector with
TVector.init
. (#2101) (new) - Weird object file type autodetection. (#2105) (new)
- Typesafe variadics emitted as LLVM variadics. (#2121) (new)
- Superfluous masking of
bool
values. (#2131) (new) - Output for
-mcpu=help
or-mattr=help
printed multiple times. (#2073) (new) - LDMD refuses some duplicate command-line options. (#2110) (new)
- Change format of predefined versions output for DMD compatibility. (#1962)
Building LDC
- Building LDC requires a preinstalled D compiler.
Internals
- LDC now features D unittests itself. Just add some to LDC's D modules and they'll be compiled and executed by CI. (#2016)
Known issues
- 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. - Phobos does not compile on MinGW platform.
LDC 1.3.0-beta1
Big news
- Frontend, druntime and Phobos are at version 2.073.2.
- libconfig was replaced by an ad-hoc parser (in D), getting rid of the build and runtime dependency and shrinking the license file by roughly 50%. Thanks again, Remi! (#2016)
- LDC now ships with static and shared runtime libs on supported platforms. (#1960)
- LLVM 3.9+: Static libraries are now generated by LDC (LLVM) by default, not by system
ar
orlib.exe
. This means that LDC can cross-compile and -archive static libs for all supported targets. Command-line option-ar
allows specifying an external archiver to be used. (#2030) - New command-line options
-dip1000
,-mv
and-mscrtlib
(#2041).
New features
- New function UDA
@ldc.attributes.llvmFastMathFlag("contract")
that specifically enables floating point operation fusing (fused multiply-add), previously only achievable with@fastmath
. (#2060)
Platform support
- Supports LLVM 3.5 - 4.0.
- Windows: Supports Visual Studio/Build Tools 2015 and 2017. (#2065)
- NetBSD: The 2.074 druntime patches have been cherry-picked.
Bug fixes
- Change format of predefined versions output for DMD compatibility. (#1962)
Building LDC
- Building LDC requires a preinstalled D compiler.
Internals
- LDC now features D unittests itself. Just add some to LDC's D modules and they'll be compiled and executed by CI. (#2016)
Known issues
- 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. - Phobos does not compile on MinGW platform.
LDC 1.2.0
(Changes from 1.2.0-beta2 release are marked with (new).)
Big news
- Frontend, druntime and Phobos are at version 2.072.2.
New features
- New function attribute
@ldc.attributes.allocSize
(#1610), see https://wiki.dlang.org/LDC-specific_language_changes#.40.28ldc.attributes.allocSize.29
Platform support
- Supports LLVM 3.5 - 4.0.
- Exception backtrace robustness has been significantly improved.
- Emission of
reals
with differing precision to the host platform'sreal
has been fixed.
(The compiler still uses the host platform's D real type to represent compile-time floating-point values, so parsing of literals and CTFE is restricted to the host real precision. For instance, LDC on AArch64 with its quad-precision reals would now make for a universal cross-compiler. On the other hand, cross-compiling from ARM to x86 with 80 bit reals still does not work – for example,real.max
would silently overflow at compile-time and be emitted as 80-bit infinity.)
Bug fixes
- Compilation error with DMD 2.074 host compiler. (new)
- LLVM error when accessing
typeid(null)
(#2062). (new) - Some LLVM intrinsics not available for LLVM ≥ 4.0 (#2037).
- Spurious crashes on OS X user program shutdown when linking against static druntime lib.
- Lexing floating-point literals may fail on PowerPC (#2046).
- LDC crashes when trying to repaint static arrays (#2033).
- No stack trace on Linux (#2004) and Windows (#1976, ldc-developers/druntime#85).
- Generated documentation file is immediately deleted when compiling at the same time.
- LDMD doesn't append default file extension if
-of
option doesn't contain any (#2001, #2002).
Building LDC
- Building LDC requires a preinstalled D compiler.
Internals
Known issues
- 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. - Phobos does not compile on MinGW platform.
LDC 1.2.0-beta2
(Changes from 1.2.0-beta1 release are marked with (new).)
Big news
- Frontend, druntime and Phobos are at version 2.072.2.
Platform support
- Supports LLVM 3.5 - 4.0.
- Exception backtrace robustness has been significantly improved.
- Emission of
reals
with differing precision to the host platform'sreal
has been fixed.
(The compiler still uses the host platform's D real type to represent compile-time floating-point values, so parsing of literals and CTFE is restricted to the host real precision. For instance, LDC on AArch64 with its quad-precision reals would now make for a universal cross-compiler. On the other hand, cross-compiling from ARM to x86 with 80 bit reals still does not work – for example,real.max
would silently overflow at compile-time and be emitted as 80-bit infinity.)
Bug fixes
- Some LLVM intrinsics not available for LLVM ≥ 4.0 (#2037). (new)
- Spurious crashes on OS X user program shutdown when linking against static druntime lib. (new)
- Lexing floating-point literals may fail on PowerPC (#2046). (new)
- LDC crashes when trying to repaint static arrays (#2033). (new)
- No stack trace on Linux (#2004) and Windows (#1976, ldc-developers/druntime#85).
- Generated documentation file is immediately deleted when compiling at the same time.
- LDMD doesn't append default file extension if
-of
option doesn't contain any (#2001, #2002).
Building LDC
- Building LDC requires a preinstalled D compiler.
Internals
Known issues
- 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. - Phobos does not compile on MinGW platform.
LDC 0.17.4
This is not the latest LDC version! :)
LDC 0.17.x versions are maintained to support "bootstrapping" builds of newer compiler versions when the system has no D compiler installed: 0.17.x is the last version that does not need a D compiler to be built.
This release only adds LLVM 4.0 support. Please refer to the 0.17.0, 0.17.1, 0.17.2, and 0.17.3 changelogs for the complete set of changes in this version.
News
- Added LLVM 4.0 support.
Platform support
- Supports LLVM 3.5 - 4.0.
LDC 1.2.0-beta1
Big news
- Frontend, druntime and Phobos are at version 2.072.2.
Platform support
- Supports LLVM 3.5 - 4.0.
- Exception backtrace robustness has been significantly improved.
- Emission of
reals
with differing precision to the host platform'sreal
has been fixed.
(The compiler still uses the host platform's D real type to represent compile-time floating-point values, so parsing of literals and CTFE is restricted to the host real precision. For instance, LDC on AArch64 with its quad-precision reals would now make for a universal cross-compiler. On the other hand, cross-compiling from ARM to x86 with 80 bit reals still does not work – for example,real.max
would silently overflow at compile-time and be emitted as 80-bit infinity.)
Bug fixes
- No stack trace on Linux (#2004) and Windows (#1976, ldc-developers/druntime#85).
- Generated documentation file is immediately deleted when compiling at the same time.
- LDMD doesn't append default file extension if
-of
option doesn't contain any (#2001, #2002).
Building LDC
- Building LDC requires a preinstalled D compiler.
Internals
Known issues
- 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. - Phobos does not compile on MinGW platform.
LDC 1.1.1
This is a bug fix release only. Please refer to the 1.1.0 changelog for the complete set of changes in this version.
Bug fixes
- Linux: Always build C parts of standard library as PIC (#2009). This makes the binary packages usable on Ubuntu 16.10 (where executables are linked as position-independent code by default, in contrast to the older system used for preparing the packages).
LDC 0.17.3
This is not the latest version! :)
LDC 0.17.x versions are maintained to support "bootstrapping" builds of newer compiler versions when the system has no D compiler installed: 0.17.x is the last version that does not need a D compiler to be built.
This is a bug fix release only. Please refer to the 0.17.0 changelog, 0.17.1 changelog, and 0.17.2 changelog for the complete set of changes in this version.
Big news
- Full stdlib and dmd testsuite passes on Android/ARM.
Platform support
- Supports LLVM 3.5 - 3.9.
Bug fixes
- Fixes for PPC64-LE, MIPS64 and ARM/AArch64 ABIs (#1905)