Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.

Change Log: 2.110.0

previous version: 2.109.0

Download D nightlies
To be released

This changelog has been automatically generated from all commits in master since the last release.

  • The full-text messages are assembled from the changelog/ directories of the respective repositories: dmd, druntime, phobos, tools,, installer, and dub.
  • See the DLang-Bot documentation for details on referencing Bugzilla. The DAutoTest PR preview doesn't include the Bugzilla changelog.
  • The pending changelog can be generated locally by setting up and running the pending_changelog target:
    make -f posix.mak pending_changelog

2.110.0 comes with 3 major changes and 25 fixed Bugzilla issues. A huge thanks goes to the 22 contributors who made 2.110.0 possible.

List of all upcoming bug fixes and enhancements in D 2.110.0.

Compiler changes

  1. Copying from const(void)[] to void[] is disallowed with -preview=fixImmutableConv

    If const(void)[] data contains tail const pointers, copying to void[] can subsequently violate const data:

    void f(int*[] a, const int*[] b)
        void[] va = a;
        const void[] vb = b;
        va[] = vb[]; // fills `a` with pointers to const
        *a[0] = 0; // const data mutated

    Copying vb data to va is no longer allowed with the -preview=fixImmutableConv switch.

  2. bool values other than 0 or 1 are not @safe

    The spec has been updated so that only 0 and 1 are safe values for bool. This means that reading a bool value whose underlying byte representation has other bits set is implementation-defined and should be avoided. Consequently:

    • void initialization of booleans is now deprecated in @safe code.
    • Reading a bool field from a union is now deprecated in @safe code.

    Runtime array casting to bool[] is yet to be deprecated.

Dub changes

  1. dub.selections.json files are now looked up in parent directories too

    In case the root package directory doesn't contain a dub.selections.json file, dub now looks in parent directories too and potentially uses the first (deepest) one it finds - if and only if that JSON file contains an optional new "inheritable": true flag.

    This allows using a 'central' dub.selections.json file for a repository containing multiple dub projects, making it automatically apply to all builds in that source tree if located in the repository root directory (unless a local dub.selections.json overrides it).

    Such an inherited selections file is never mutated when running dub for a nested project, i.e., changes are always saved to a local dub.selections.json file. E.g., when running dub upgrade for a nested project.

List of all bug fixes and enhancements in D 2.110.0:

DMD Compiler bug fixes

  1. Bugzilla 12885: const union wrongly converts implicitly to mutable
  2. Bugzilla 17148: Copying from const(void)[] to void[] breaks immutable
  3. Bugzilla 23957: Casting to derived extern(C++) class is unsafe
  4. Bugzilla 24534: Having a label on a declaration makes it possible to skip it with goto
  5. Bugzilla 24558: C asserts segfault on Glibc
  6. Bugzilla 24566: condition that starts with runtime value and uses compile time array does not short circuit
  7. Bugzilla 24577: Struct with constructor returned from C++ wrong
  8. Bugzilla 24582: Detect unsafe cast(bool[])
  9. Bugzilla 24583: di generator emits return scope and scope return in wrong order
  10. Bugzilla 24592: ImportC: Bitfield layout wrong for int64 on 32-bit Linux
  11. Bugzilla 24596: Rebindable2 corrupts objects
  12. Bugzilla 24603: Can copy from non-void array into void[] in safe code

DMD Compiler enhancements

  1. Bugzilla 20243: inout not substituted for in associative array key type
  2. Bugzilla 24135: Eponymous template member overloads not shown as call candidates
  3. Bugzilla 24580: ImportC: Asm label after attributes results in syntax error
  4. Bugzilla 24595: OpenBSD: Use .init_array/.fini_array
  5. Bugzilla 24597: FreeBSD/OpenBSD: Enable ELF_COMDAT
  6. Bugzilla 24598: OpenBSD: adapt compiler tests

Phobos bug fixes

  1. Bugzilla 24564: std.file.DirEntry throws Exception instead of FileException

Druntime bug fixes

  1. Bugzilla 24579: stat_t has wrong size for Android armv7a

Druntime enhancements

  1. Bugzilla 24590: Illegal instruction with module constructors cycle and shared libphobos2 in _d_criticalenter2 bug fixes

  1. Bugzilla 24543: The @__future attribute is (almost) undocumented
  2. Bugzilla 24548: [spec] Boolean condition conversion is not documented
  3. Bugzilla 24565: out contract variable is implicitly const

Installer bug fixes

  1. Bugzilla 24600: DMD nightly builds are outdated

Contributors to this release (22)

A huge thanks goes to all the awesome people who made this release possible.

previous version: 2.109.0