Skip to content

Releases: ldc-developers/ldc

LDC 1.4.0-beta1

26 Aug 22:12
Compare
Choose a tag to compare
LDC 1.4.0-beta1 Pre-release
Pre-release

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.
  • 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! for T.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 to real members inside structs etc.
  • Phobos does not compile on MinGW platform.

LDC 1.3.0

07 Jul 18:34
Compare
Choose a tag to compare

(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 or lib.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 to real members inside structs etc.
  • Phobos does not compile on MinGW platform.

LDC 1.3.0-beta2

12 Jun 17:46
Compare
Choose a tag to compare
LDC 1.3.0-beta2 Pre-release
Pre-release

(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 or lib.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 to real members inside structs etc.
  • Phobos does not compile on MinGW platform.

LDC 1.3.0-beta1

05 May 10:12
Compare
Choose a tag to compare
LDC 1.3.0-beta1 Pre-release
Pre-release

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 or lib.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 to real members inside structs etc.
  • Phobos does not compile on MinGW platform.

LDC 1.2.0

23 Apr 11:10
Compare
Choose a tag to compare

(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

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's real 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 to real members inside structs etc.
  • Phobos does not compile on MinGW platform.

LDC 1.2.0-beta2

03 Apr 13:17
Compare
Choose a tag to compare
LDC 1.2.0-beta2 Pre-release
Pre-release

(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's real 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 to real members inside structs etc.
  • Phobos does not compile on MinGW platform.

LDC 0.17.4

02 Apr 17:54
Compare
Choose a tag to compare

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

18 Mar 07:27
Compare
Choose a tag to compare
LDC 1.2.0-beta1 Pre-release
Pre-release

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's real 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 to real members inside structs etc.
  • Phobos does not compile on MinGW platform.

LDC 1.1.1

03 Mar 02:02
Compare
Choose a tag to compare

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

02 Feb 21:57
Compare
Choose a tag to compare

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)