github ldc-developers/ldc v0.17.0-beta2
LDC 0.17.0 beta 2

latest releases: v1.38.0-beta1, dmd-rewrite-v2.108.0, dmd-rewrite-v2.108.0-rc.1...
pre-release8 years ago

(Changes from 0.17.0-beta1 release are marked with (new) and gone.)

Big news:

  • Frontend, druntime and Phobos are at version 2.068.2.
  • The exception handling runtime now no longer allocates GC memory (although it still uses C malloc if there are more than 8 concurrent exceptions or nested finally blocks per thread). Note: Creating the Throwables in user code (e.g. new Exception("…")) and the Runtime.traceHandler may GC-allocate still. (Thanks for this goes to our newest contributor, @philpax).
  • The @ldc.attributes.section("…") attribute can now be used to explicitly specify the object file section a variable or function is emitted to.
  • The -static option can be used to create fully static binaries on Linux (akin to the GCC option of the same name).
  • core.atomic.atomicOp() now exploits LLVM read-modify-write intrinsics instead of using a compare-and-swap loop. As side-effect, the atomic intrinsics in module ldc.intrinsics have been renamed:
    • llvm_atomic_cmp_swap => llvm_atomic_cmp_xchg
    • llvm_atomic_swap => llvm_atomic_rmw_xchg
    • llvm_atomic_load_* => llvm_atomic_rmw_*

Platform support:

  • The compiler now supports NetBSD. (#1247) (Thanks for this goes to @nrTQgc.) (new)
  • The float ABI can now be derived from the second field of the triple. E.g. the hardfloat ABI is used if triple armv7a-hardfloat-linux-gnueabi is given. (#1253) (new)
  • Support for LLVM 3.8 and preliminary support for LLVM 3.9 (new)

Bug fixes:

  • 0.16.0-beta1: Trivial program fails on FreeBSD. (#1119) (new)
  • x86 ABI: Fix Solaris regression and work around MSVC byval alignment issue. (#1230)
  • Atomic RMW operations emit subpar x86 assembly. (#1195)
  • align() not respected for local variable declarations. (#1154)
  • Codegen optimizations are no longer disabled when -g is given. (75b3270)
  • Debug information is now generated for ref and out parameters. (#1177)
  • core.internal.convert tests do not depend on real padding bytes any longer. (#788)

Building LDC:

  • LDC now requires LLVM 3.5–3.8 and thus also a C++11-capable compiler to build.

Internals:

  • The LDC-specific parts of the source code have received a big overhaul to make use of some C++11 features and to unify the style (the LLVM style as per clang-format is now used).
  • The groundwork for a code generation test suite working on the LLVM IR level has been laid, together with some first test cases for alignment issues.
  • LDC now emits more optional LLVM IR attributes for more optimization opportunities. (#1232)

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.

Downloads

Don't miss a new ldc release

NewReleases is sending notifications on new releases.