Skip to content
LDC 1.20.0
Choose a tag to compare
@kinke kinke released this

(Changes since 1.20.0-beta1 are marked with (new).)

Big news

  • Frontend, druntime and Phobos are at version 2.090.1+. (#3262, #3296, #3306, #3317, #3326) (new)
  • Codegen preparations for:
    • iOS/tvOS/watchOS on AArch64. Thanks Jacob! (#3288) (new)
    • WASI (WebAssembly System Interface) (#3295) (new)
  • The config file for multilib builds has been restructured by adding a separate section for the multilib target. This avoids --no-warn-search-mismatch for the linker and enables support for LLD. (#3276)
  • Support for embedding pragma({lib,linkerDirective}, ...) in Mach-O object files. (#3259)
    E.g., pragma(linkerDirective, "-framework", "CoreFoundation"); makes Apple's linker pull in that framework when pulling in the compiled object file.
    ELF object files newly embed pragma(lib, ...) library names in a special .deplibs section, but that only works with LLD 9+ for now.
  • The ldc-build-runtime tool has been slightly revised; --dFlags now extends the base D flags instead of overriding them. (1200601)
  • ModuleInfo.importedModules are now emitted as weak references (except on Windows, for LLD compatibility), following DMD. (#3262)
  • Windows: Bundled MinGW-based libs now support wide wmain and wWinMain C entry points. (#3311) (new)

Platform support

  • Supports LLVM 3.9 - 10.0. (new)

Bug fixes

  • Potential stack overflows on Linux in GC worker threads. (#3127, dlang/druntime#2904)
  • Support 2 leading dashes (not just 1) in command-line pre-parsing, thus fixing config file section lookup when using --mtriple and not ignoring --conf and --lowmem any longer. (#3268, #3275)
  • Support for data directives in DMD-style inline asm. (#3299, #3301) (new)
  • Cherry-picked fixes for soft-float targets. (#3292, dlang/phobos#7362, dlang/phobos#7366, dlang/phobos#7377) (new)
  • ICE during debuginfo generation for function literals inside enum declarations. (#3272, #3274)


  • Misc. tweaks for dmd-testsuite: (#3287, #3306) (new)
    • Significantly accelerated by skipping uninteresting permutations.
    • Switch from Makefile to run.d, incl. moving LDC-specific exceptions from Makefile to individual test files and support for extended DISABLED directives.
  • Addition of (recommendable!) Cirrus CI service (incl. FreeBSD) and removal of Semaphore CI. (#3298) (new)
  • Some improvements for gdmd host compilers, incl. CI tests. (#3286) (new)

Known issues

  • Buggy older ld.bfd linker versions may wrongly strip out required symbols, e.g., ModuleInfos (so that e.g. no module ctors/dtors are run). LDC defaults to on Linux.
  • 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.