github ldc-developers/ldc v0.14.0
LDC 0.14.0

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

(Changes from alpha-1 release are marked with (new) and gone.)

Big news:

  • Frontend, druntime and Phobos are at version 2.065.0.
  • Building druntime/Phobos as shared libraries on Linux is now supported, but not enabled by default. Use -DBUILD_SHARED_LIBS=ON on the CMake command line to enable shared libraries.
  • On Linux, link-time stripping of dead code (--gc-sections) is now usable and enabled by default. Try -disable-linker-strip-dead in case of mysterious linker issues/runtime crashes, as such problems might be caused by related issues (for example in third-party C libraries).
  • The deprecated -noruntime switch is now removed. The -nogc switch now also shows a line number in the error message.
  • LLVM intrinsics llvm.bswap.i#, llvm.ctpop.i#, llvm.ctlz.i# and llvm.cttz.i# are now builtins and can be used with CTFE. (#648) (new)
  • Deprecated version identifiers have been removed.
  • Deprecated pragma names have been removed.
  • An experimental switch -template-depth to control the maximum number of nested template instantiations has been added.

Platform support:

  • The architectures ppc64le, amd64, amd64_be and armbe are available if built with LLVM 3.5.
  • Some code for ARM and MIPS64 has been added.
  • Support for LLVM 3.5 has been added.

Bug fixes:

  • The shared libraries implementation fixes a couple of known issues. (#433, #291, #239, #194, #228)
  • Fixed a problem in constructing a char representation of a type which resulted in an ICE. (#642)
  • ldmd2: -defaultlib= works now. (#601)
  • The -defaultlib/-debuglib was reworked including split between druntime and Phobos. (#416)
  • Returning value transitively through assignment now works. (#629)
  • A purity issue was fixed. (#575)
  • GC spends too much time in marking phase. (#233)
  • Avoid invalid *&ex -> ex optimizations. (Backport of a DMD regression) (#649)
  • A missed optimization is fixed now. (#338)
  • pragma(LDC_no_moduleinfo) now disables generation of module metadata. (#571)
  • Fixed the signature of intrinsic llvm.prefetch and added new intrinsic llvm.clear_cache (from LLVM 3.5). (new)

Building LDC:

  • The build does not break if variable LLVM_LDFLAGS contains a newline. (#691)
  • A missing va_end was added. (#695) (new)
  • The Win64 build was improved. It requires at least VS2012 and must be build against LLVM 3.5 with this patch from Twobit applied.

Internals:

  • Some rarely used LLVM-internal switches are now hidden from command line -help. Use -help-hidden to display all of them.

Known regressions:

  • LDC emits too much code. This leads to spurious failures in the std.stdiobase unit test. Workaround is adding -lcurl to the commandline. (This seems to be related to #662.)
  • Using nested structs with AAs can trigger an erroneous "cannot create associative array" error in some very specific circumstances (#407).
  • Garbage collection does not work on Linux/PPC64 and other big-endian systems.

Downloads

Don't miss a new ldc release

NewReleases is sending notifications on new releases.