github ldc-developers/ldc v0.12.0
LDC 0.12.0

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

Big news:

  • Frontend, druntime and Phobos are at version 2.063.2. Building druntime/Phobos as shared libraries is not supported yet, but will likely be in the next 2.064-based release.
  • -march/-mcpu now behave as intended: -march selects the target architecture (x86, arm, …), -mcpu the CPU model to optimize for. This is different from the GCC convention, but matches the other LLVM tools. Use -mcpu=native to optimize for the host CPU (pre-0.11.0 LDC versions did this by default).
  • -release no longer disables bounds checking in @safe code. Use -disable-boundscheck to disable it for all functions (-noboundscheck in (L)DMD).
  • Exception chaining is now properly supported (#409).
  • Rudimentary support for extern(C++) has been implemented (#412).

Platform support:

  • Linux/OS X on x86/x86_64 are stable as usual, Win32/MinGW has received a several critical bug fixes and is ready for widespread testing. OS X requires LLVM 3.2 due to a regression in LLVM 3.3
  • LDC builds druntime, Phobos and a Hello World program on Linux/ARM. If you are interested in helping to finish ARM support, please get in touch with us.
  • Work on Linux/PPC32 has started.
  • LDC now runs on FreeBSD (#451). Some issues are still unresolved (#495, #496).

Bug fixes:

  • Assigning array literals to static arrays and certain immutable slices no longer triggers a GC allocation (#493).
  • Debug info for static arrays, vectors and enums has been improved.
  • Pure DDoc files (.dd) are now accepted.
  • Several issues regarding vector and static arary initialization have been fixed (#419, #420).
  • Destructors for (rvalue) struct used in opApply are now called properly (#427).
  • Packed structs are now emitted correctly (#430).
  • String enums now work as AA keys (#440).
  • T.init for static arrays no longer emits an instruction per element (#119).
  • String constants are now emitted as unnamed_addr, allowing them to be combined during optimization.
  • Fixed several nested function handling issues (#447, #454, #497).
  • Worked around a crash where the frontend generates an invalid AST for nested structs (#470).
  • Fixed several real wrong-code bugs on Win32/MinGW (#441).
  • assert(0) now generates trap instructions in release mode (like DMD does).
  • -mattr=help and -mcpu=help now displays the CPU targeting help even without source files given (#505).
  • -disable-fp-elim, which is no longer exposed by LLVM by default, is supported again, also fixing -gs for LDMD (#502).
  • ldmd2 -c a.d b.d … no longer creates a single object file.
  • LDMD now accepts (ignores) the -quiet flag as advertised.
  • LDMD now creates output directories if they do not already exist (#480).

Building LDC:

  • LLVM 3.0 is no longer supported. LDC can be used with LLVM 3.1–3.4svn (at the time of release). On OS X, use LLVM 3.2 due to a regression in the 3.3 release (#492).
  • The LLVM version detection mechanism has been updated to prefer newer LLVM versions on Debian derivatives (#376).
  • The bash completion files are now installed to /usr/share/bash-completion on Gentoo.

Internals:

  • Some violations of the C++11 standard have been fixed (#370).
  • Fixed a LDMD linking problem. (#452)
  • Fixed an instance of reading uninitialized data in LDMD (#500).
  • D bools are now stored as i8 on the LLVM IR level (#386). This should have no user-visible consequences, but avoids a few latent misoptimization bugs.
  • Work has been started to align the frontend source code to the upstream DMD source. This will allow for faster frontend updates in the future.
  • The names of the ModuleInfo data structures now end in __ModuleInfoZ, like they do for DMD. This should have no user-visible consequences apart from support in demanglers, etc.

Known regressions:

  • 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

Don't miss a new ldc release

NewReleases is sending notifications on new releases.