Skip to content

LDC 0.13.0

Compare
Choose a tag to compare
@redstar redstar released this 24 Jun 04:43
· 43169 commits to master since this release

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

Big news:

  • Frontend, druntime and Phobos are at version 2.064.2. Building druntime/Phobos as shared libraries is not supported yet, but will likely be in the next 2.065-based release. The new DSO infrastructure to support shared libraries is already implemented.
  • Because of the new DSO infrastructure, the -noruntime switch is no longer supported. Now every module calls the runtime during initialization. Instead a new -nogc switch is introduced which warns about implicit GC calls. The -noruntime switch is still parsed but has no functionality and will be removed in next major version 0.14.0.

Platform support:

  • A version identifier for Android has been added. Druntime/Phobos support is missing.
  • A version identifier for NVPTX/NVPTX64 has been added.
  • The architecture AArch64_be is available if built with LLVM 3.5.
  • The version identifier for the used float ABI is now derived from the command line and default target value. It also defines the version identifier for the architecture (e.g. PPC_HardFloat).
  • Version identifiers for the various MIPS ABIs have been added.

Bug fixes:

  • The format failure on MingW32 is fixed. (#383)
  • Fixed yet another compiler crash with vector types. (#424)
  • LDC generates segfaulting code with nested functions. (#513)
  • Added check to ensure that types from object.di exist before using them. (#551)
  • Do not emit bounds check code if the index is statically known to be within bounds. (#553)
  • It is again possible to compile druntime/Phobos with MSVC-built LDC. (#570)
  • LDC can now be build with MSVC in release mode. (#458)
  • __MODULE__ does not crash LDC. (#446)
  • LDC does not crash if using triple arm7-apple-darwin. (Reported in forum.)
  • The vectorization passes are now enabled if LLVM 3.4/3.5 is used. (Reported in forum.)
  • The option -disable-simplify-libcalls is available for LLVM 3.4+, too.
  • Option -lib of ldmd creates a library with an object per module. (#579)
  • LDC builds on FreeBSD 10. (#584)
  • The config file is now also searched in the current directory. (#589)
  • Fixed ICE with extern(C) struct with ctor and field. (#624) new
  • Some code emission fixes. new

Building LDC:

  • LLVM 3.4.x is now supported.
  • First changes for LLVM 3.5 are incorporated.
  • The assembler file core/threadasm.S is excluded from the build if the CMake version is less than 2.8.5. This prevents a bunch of error messages. The assembler file is only required for non-x86 platforms. If you get linking errors on non-x86 platforms please consider upgrading your CMake installation. (#464)
  • LDC builds with -std=c++11. (#330)
  • LDC builds on OS X Mavericks. (#544)
  • LDC builds on FreeBSD 10. (#584)
  • LDC builds on Solaris/x86 (compiler only, druntime/Phobos support missing)
  • The unresolved symbols during linking of release build of unit test std.uni are gone. (#594)

Internals:

  • LDC can now generate code instrumented for the address sanitizer, memory sanitizer and thread sanitizer. This requires clang to be used as linker. This is still experimental. You must link against gcstub.o in order to use the address sanitizer. It is recommened to built an instrumented version of druntime/Phobos before using this feature.
  • With LLVM 3.4 or later LDC generates llvm.ident metadata to identify object files as created by LDC.
  • Verbose output (-v) now prints the path to LDC binary and version information. Also all defined version identifiers are printed.

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.
  • 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.

Downloads