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

previous version: 2.100.1

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, dlang.org, 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 dlang.org and running the pending_changelog target:
    make -f posix.mak pending_changelog


2.101.0 comes with 26 major changes and 665 fixed Bugzilla issues. A huge thanks goes to the 293 contributors who made 2.101.0 possible.

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

Compiler changes

  1. Add bit fields to D

    They work just like the bit fields in ImportC do.

    https://github.com/dlang/dlang.org/pull/3190

    struct B
    {
        int x:3, y:2;
    }
    
    static assert(B.sizeof == 4);
    
    int vaporator(B b)
    {
        b.x = 4;
        b.y = 2;
        return b.x + b.y; // returns 6
    }
    
  2. Added __traits(classInstanceAlignment)

    To complement __traits(classInstanceSize), providing the required alignment for manual buffers etc.:

    align(__traits(classInstanceAlignment, C))
    void[__traits(classInstanceSize, C)] buffer;
    
  3. Relaxed pragma(crt_constructor) / pragma(crt_destructor) linkage check

    extern(C) isn't a requirement for CRT con/destructors anymore when using the default void () signature.

  4. scope(failure) blocks that contain return statements are now deprecated

    Starting with this release, having a return statement in the body of a scope(failure) statement is deprecated. Having the ability to return from such blocks is error prone since currently, Errors are also handled by scope(failure). This leads to the following situation:

    ulong get () @safe nothrow
    {
        scope (failure) return 10;
        throw new Error("");
    }
    
    void main () @safe
    {
        assert(get() == 10);  // passes
    }
    

    where an error is circumvented by a return. If a return is indeed desired in such situations, then the solution is to simply use a try-catch block for the function body.

    Note: scope(exit) and scope(success) already present this restriction.

  5. Using integers for version or debug conditions has been deprecated

    The problem is that it only provides a single number namespace without any meaning. It's better to use version identifiers describing the feature they enable. See also this thread on the forum.

    // now deprecated:
    version = 3;
    version (2) { }
    
    debug = 4;
    debug (5) { }
    
    // use identifiers instead:
    version = HasX;
    
    version (HasX)
        void x() { /* ... */ }
    else
        void x() {}
    
  6. Print deprecations for scope pointer errors

    The scope attribute has existed for a long time, but the compiler would only verify its semantics when the -preview=dip1000 switch was passed, to avoid breaking code. Pointers or references stored in a scope variable are not allowed to escape the scope in which the variable is defined.

    Usually, it is not necessary to mark variables scope, since the Garbage Collector (GC) takes care of freeing memory. However, D allows creating pointers / slices that point to local variables, which use Stack-based memory allocation and are destructed at the end of their scope. It is important that in @safe code, creating such pointers is either disallowed, or has scope semantics enforced, but the compiler would formerly fail to do that:

    @safe:
    int[] getSlice()
    {
        int[4] stackBuffer;
        int[] slice = stackBuffer[]; // slice points to local variable allocated on stack
        return slice; // dangling pointer!
    }
    
    struct S
    {
        int x;
    
        int* get()
        {
            int* y = &this.x; // this struct instance could be a local variable
            return y; // dangerous!
        }
    }
    

    Starting with this release, scope semantics are enforced in @safe code on pointers to stack memory, but only as deprecation warnings. Eventually, they will be turned into errors. To turn them into errors immediately, use -preview=dip1000. To disable the deprecations, use -revert=dip1000.

    Note that the original DIP1000 text is outdated, so please refer to the specification pages for documentation:

  7. Improvements for the C++ header generation

    The following features/bugfixes/improvements were implemented for the experimental C++ header generator:

    • Overriding virtual functions are now marked with the override keyword when generating C++11 compatible headers.
    • Final virtual functions are now marked with the final keyword when generating C++11 compatible headers.

    Note: The header generator is still considered experimental, so please submit any bugs encountered to the bug tracker.

  8. -preview=fixImmmutableConv has been added

    The compiler allows implicitly converting a return value with indirections to immutable if it determines the result must be unique. Formerly, this check would inspect the types of the indirections, and forget to take into account conversions, such as int[] to void[]:

    int[] f(ref void[] m) pure
    {
        auto result = new int[5];
        m = result;
        return result;
    }
    
    void main()
    {
        void[] v;
        immutable x = f(v);
        // `v` is now a mutable alias to immutable variable `x`
    }
    

    This was filed as issue 15660, which has been fixed some time ago by making the check more strict: the called function must be strongly pure. However, to avoid breaking code, the fix was only active with the -preview=dip1000 switch. Since it is unrelated to dip1000 (which is about scope pointers), the fix has been moved to a new -preview=fixImmmutableConv switch.

  9. Returning a discarded void value from a function is now deprecated

    An expression statement of type void that has no side effects should be discarded since it has no effect. The compiler, generally, does not allow such statements, however, in the case of return statements this error is circumvented. For example:

    struct StackBuffer
    {
        auto opIndex(size_t i)
        {
            return arr[i];
        }
    
    private:
        void[] arr;
    }
    

    Although this code compiles, any call to opIndex is going to result in an error because the return type must either be stored somewhere (and variables cannot be of type void) or the call will have no effect.

    Starting with this release, returning a discarded void value from a function is deprecated. Such code can be deleted as it most certainly is dead code.

  10. ImportC now recognizes the typeof(...) operator

    ISO C does not specify a typeof operator, but it is a widely-implemented vendor extension. ImportC now implements this extension as well.

    Only the form typeof(...) is recognized, other compilers also support (or only support one of) __typeof__(...) and __typeof(...). Imported C using these forms will need to be normalized with #defines.

  11. Removed the -transition=markdown and -revert=markdown switches

    This release removes the -transition=markdown, which prints markdown substitutions made when processing markdown in ddoc documentation blocks, and -revert=markdown switches which disables markdown substitutions in ddoc documentation blocks.

    Markdown substitutions have been the default for some time now, and as of this release is always performed.

  12. new can now allocate an associative array

    This allows two associative array references to point to the same associative array instance before any keys have been inserted.

    int[string] a = new int[string];
    auto b = a;
    ...
    a["seven"] = 7;
    assert(b["seven"] == 7);
    

    Note: Calling new is not needed before inserting keys on a null associative array reference - the instance will be allocated if it doesn't exist.

  13. -preview=in can now be used with extern(C++), disabled for other non-D linkage

    The intent of -preview=in is to make in the go-to storage class for input parameters in D. However, it is D centric, as it is an enhanced version of scope const ref. As non-extern(D) functions usually are expected to match a specific ABI, using in is hardly a good idea.

    As C++ also has a "go to" storage class for input parameters (const T&), in can also be applied on extern(C++) function in order to bind to const T& parameters. This also allows to expose a closer API for a function than via const ref, as in will allow to bind rvalues to const T&, as in C++.

Library changes

  1. Move logger out of experimental.

    The std.experimental.logger package is now std.logger. The old package and modules are still available and publicly import the new ones. To avoid breakage in modules that compile with deprecations as errors, for now the old modules aren't deprecated, but they will be.

  2. remove std.experimental.logger's capability to set the minimal LogLevel at compile time

    Before this change std.experimental.logger had the capability to disable logging at compile time. It was also possible to set the minimal LogLevel at compile time. The trade-off between gained capability, added complexity, and error-proneness was too heavily tilted towards the second two items. This change removes these compile time features.

  3. Change std.experimental.logger.core.sharedLog to return shared(Logger)

    To make unsafe code more explicit std.experimental.logger.sharedLog now returns a shared(Logger) instead of a Logger.

  4. std.socket.Socket methods now accept only scope arrays.

    To comply with dip1000, std.socket.Socket methods now all have scope attributes applied to any slice parameters. This includes receive and send flavors, and also setOption. While not technically a breaking change for users of Socket, if you derive from it, you must apply those attributes to your derivatives or it will fail to compile. However, applying the attributes is backwards compatible with previous versions of Phobos, so there is no need for a migration path.

  5. Add custom fill value to std.outbuffer.OutBuffer class

    Extend the fill, alignSize, align{2,4} methods of std.outbuffer.OutBuffer to specify value to write when filling (up to an alignment).

    For flash device images it is desirable to use 0xff as the fill value, because 0xff is the value of the unprogrammed flash memory cell. Padding with 0 requires to programm the flash cell from 0xff to 0x00, which increases wear and tear on the flash memory device. Usually there is some larger block at the end if the flash memory image, which must be padded up to the size of the flash device (usually a power of two). Instead of padding with 0x00 the PR allows to fill with 0xff instead.

    There might be also some other use-cases, where it might be reasonable to fill the alignment gaps with some other value than 0x00, e.g. when debugging and viewing output data in a hex editor. It is easier to spot gaps, when the padded spaces contain a custom value like 0x55 or 0xaa.

    A new fill method was added, which allows filling with a user-defined value instead of the 0 as in the previous implementation.

    OutBuffer buf = new OutBuffer();
    buff.fill( 1234, 42 ); // Fills 1234 bytes with 42 starting at buf.offset
    buff.fill( 10 );       // Same as fill0( 10 );
    

    The alignSize, align{2,4} methods were modified to use some user-defined value for padding to the requested alignment boundary.

    OutBuffer buf = new OutBuffer();
    buf.write(cast(ubyte) 1);
    buf.align2(0x55);
    assert(buf.toBytes() == "\x01\x55");
    buf.write(cast(ubyte) 2);
    buf.align4(0x55);
    assert(buf.toBytes() == "\x01\x55\x02\x55");
    buf.write(cast(ubyte) 3);
    buf.alignSize(8, 0x55);
    assert(buf.toBytes() == "\x01\x55\x02\x55\x03\x55\x55\x55");
    

Dub changes

  1. Building the special test runner configuration

    dub build --config=unittest --build=unittest[-cov] can now be used to mimic building the test runner executable of dub test [--coverage]. Note that this doesn't require an existing unittest configuration.

    dub describe --config=unittest allows to derive the path to the executable.

  2. dub will now warn on unrecognized settings or selections file

    Previously, dub was silently accepting anything it didn't recognize in [dub.]settings.json and dub.selections.json. While the original intent was to make forward-compatibility easy, it proved detrimental as typos would just mean the user setting was ignored.

    From this release, dub will now warn about any entry in its configuration files or in dub.selections.json. After 10 releases, those warnings will turn into errors.

  3. The two new build types cov-ctfe and unittest-cov-ctfe have been added.

    These extend the existing build types cov and unittest-cov respectively by appending -cov=ctfe to the set of flags passed to the compiler.

  4. DUB command exit codes have been made more consistent

    Some dub commands have been adjusted to return exit code 2 instead of exit code 1. Exit code 1 is now always used for usage errors, while exit code 2 is the more generic any error occurred or package failed to load.

    The following commands are affected:

    • dub clean
    • dub add
    • dub search
    • dub convert

  5. 'install' and 'uninstall' commands have been removed

    Those commands were long-deprecated aliases to fetch and remove, respectively, and usage of them triggered a warning. They are no longer listed as command in help and dub will no longer recognize them.

  6. When copyFiles is used to copy read-only files, it now makes the copy writable.

    Previously, if the target file would already exist due to a prior run of Dub, copyFiles would produce an access denied error because the read-only target could not be overwritten. Note that if you were affected by this behaviour, you will need to remove those files by hand once to eliminate these errors.

    It is common for version control systems to mark binary files read-only in the working copy, to prevent concurrent edits of files in unmergeable formats.

  7. The shortcut syntax for "dub run" is now also available for sub packages.

    Invoking dub as "dub :subpackage" is now equivalent to "dub run :subpackage", analogous to just "dub" being equivalent to "dub run".

  8. Upgrading all sub packages at once

    A new "-s" switch allows to "dub upgrade" all sub packages together with the base package. This aims to provide a better workflow for fully reproducible builds and tests.


List of all bug fixes and enhancements in D 2.101.0:

DMD Compiler regression fixes

  1. Bugzilla 4854: Regression(2.047, Mac 10.5 only) writefln Segmentation fault if no globals
  2. Bugzilla 7375: Regression(2.057): Invalid downcast permitted with derived/aliased template classes
  3. Bugzilla 7995: regression(2.059): D runtime initialization from C fails on OSX in 2.059, worked in 2.058
  4. Bugzilla 9052: [2.061 alpha] AA.length in a const context tries to call opAssign + no error line number
  5. Bugzilla 10106: [ICE] Ice in glue.c:1215 + 2 error messages without lines
  6. Bugzilla 10440: shared library on osx: worked in 2.062, fails in 2.063 / 2.063.2
  7. Bugzilla 11203: extern (C++) classes broken
  8. Bugzilla 11344: [2.064 beta] Error: object.destroy called with argument types matches both
  9. Bugzilla 12580: [REG2.066a] dup() won't accept void[]
  10. Bugzilla 13025: Tools repository does not build on Ubuntu
  11. Bugzilla 13034: [Reg] core.stdc.stdio - deprecation warning with dmd -inline
  12. Bugzilla 14104: aa with pointer key type doesn't find existing value
  13. Bugzilla 14573: [REG2.067] Extreme memory usage when synchronized( object ) is used
  14. Bugzilla 14926: Programs compiled using dmd 2.068 are generating dummy profilegc.log files
  15. Bugzilla 15430: [REG2.069] amdMmx hangs up
  16. Bugzilla 15947: [REG 2.069.0?] simple multithreaded program + "-profile=gc" = crash
  17. Bugzilla 17876: [REG 2.074] Internal error when comparing inout(Foo[][]) with Foo[][]
  18. Bugzilla 18068: No file names and line numbers in stack trace
  19. Bugzilla 20809: return statement might access memory from destructed temporary
  20. Bugzilla 21197: Wrong lifetime inference with DIP1000 in dmd 2.093.0
  21. Bugzilla 22300: [REG 2.098-rc.2] -checkaction=context of a shared type with an opCast fails to compile
  22. Bugzilla 22844: [REG 2.089] SIGBUS, Bus error in _d_newitemU
  23. Bugzilla 23019: Missing filename when -of points to an existing directory
  24. Bugzilla 23046: [REG][CODEGEN] __simd(XMM.LODLPS) bad codegen
  25. Bugzilla 23076: SIMD assert fail with -inline -O converting float to short
  26. Bugzilla 23247: Deprecation: argument 0.0L for format specification "%La" must be double, not real
  27. Bugzilla 23271: goto skips declaration of variable bugred.A.test.__appendtmp4
  28. Bugzilla 23291: Members of arrays of shared classes cannot be compared

DMD Compiler bug fixes

  1. Bugzilla 1: asm enter and leave bug
  2. Bugzilla 2: Hook up new dmd command line arguments
  3. Bugzilla 1761: TypeInfo.toString for function types always indicates no-parameter function
  4. Bugzilla 2384: abi spec is unclear on parameter passing
  5. Bugzilla 2396: -O causes very long execution time on foreach loop of large array of structs
  6. Bugzilla 2834: Struct Destructors are not called by the GC, but called on explicit delete.
  7. Bugzilla 2952: Segfault on exit when using array ops with arrays of doubles larger than 8 elements
  8. Bugzilla 3831: writeln of a delegate typeid
  9. Bugzilla 4583: PIC code not working: EBX register set incorrectly
  10. Bugzilla 5689: [64-Bit] uniform() fails with -profile
  11. Bugzilla 5835: TypeInfo_Array.getHash creates raw data hash instead using array element hash function
  12. Bugzilla 5842: hash table corruption
  13. Bugzilla 5995: string append negative integer causes segfault
  14. Bugzilla 8366: Overriding const member function in conjunction with mutable overload causes a strange error
  15. Bugzilla 8828: Long compilation time of a destroy() on a large fixed-sized matrix
  16. Bugzilla 9092: GC.extend allocates less then it reports
  17. Bugzilla 9161: Linker error on linux if struct has @disabled ~this();
  18. Bugzilla 10277: Incorrect error file and line on redeclaration of TypeInfo
  19. Bugzilla 10747: Win64: warning about non-existing vc100.pdb
  20. Bugzilla 11653: No error when forgetting break with range cases.
  21. Bugzilla 12962: osver.mak should use isainfo on Solaris to determine model
  22. Bugzilla 13661: static array init does not call destructors
  23. Bugzilla 14024: [CTFE] unstable postblit/destructor call order on static array assignment
  24. Bugzilla 14617: PTHREAD_MUTEX_INITIALIZER does not work on OSX
  25. Bugzilla 15290: length of associative array literal with duplicate keys is wrong
  26. Bugzilla 15353: std.experimental.allocator cannot free memory in its destructor if the GC is an ancestor
  27. Bugzilla 15525: SEGV running semantic analysis on non-root decl that has errors.
  28. Bugzilla 16575: [ICE] extern(C++) function with D specific types
  29. Bugzilla 16743: Intrinsic recognition sometimes fails if a software implementation is available
  30. Bugzilla 17764: [scope][DIP1000] Escape checker defeated by composition transformations
  31. Bugzilla 18828: [-betterC] helpless error in object.d
  32. Bugzilla 18973: @disable on const toHash causes unresolved symbol error
  33. Bugzilla 19178: Static initialization of 2d static arrays in structs produces garbage or doesn't compile sometimes
  34. Bugzilla 19285: false positive GC inferred
  35. Bugzilla 19635: -checkaction=context not working with attributes
  36. Bugzilla 19662: x86_64: Different code output when compiling with inline/boundscheck on/off
  37. Bugzilla 19783: Fail to emplace struct with betterC
  38. Bugzilla 19831: throw/catch in scope(exit) crashes with illegal instruction
  39. Bugzilla 20019: Symbol not found: _dyld_enumerate_tlv_storage on macOS 10.15
  40. Bugzilla 20048: [Windows] Program segfaults when running tests
  41. Bugzilla 20559: Reference type + alias this + AA + AA.clear causes SEGV
  42. Bugzilla 20613: String switch in -betterC fails for 7+ labels
  43. Bugzilla 20823: [DIP 1000] un-@safe code fails with dip1000
  44. Bugzilla 21314: ICE on extern(c++) static class variables
  45. Bugzilla 21416: betterC mode program with C++ interface fails to link
  46. Bugzilla 21432: [CTFE] Cannot declare enum array in function scope
  47. Bugzilla 21472: -checkaction=context doesn't work with tupleof
  48. Bugzilla 21477: TypeInfo errors in betterC are cryptic
  49. Bugzilla 21676: [ICE][SIMD] DMD crashing with SIMD + optimizations + inlining
  50. Bugzilla 21956: ice on foreach over an AA of noreturn
  51. Bugzilla 22108: DIP1000 parameter mistakenly interpreted as return scope instead of scope
  52. Bugzilla 22124: Corrupted closure when compiling with -preview=dip1000
  53. Bugzilla 22126: -checkaction=context should not print overlapped struct members
  54. Bugzilla 22134: Deprecate returning a discarded void value from a function
  55. Bugzilla 22179: core.stdcpp.utility is missing in dmd binary dist
  56. Bugzilla 22283: -preview=in -inline leads to strange error inside object.d
  57. Bugzilla 22351: extern(C++) function contravariant in D, but not C++
  58. Bugzilla 22390: Compiler crash when iterating empty array of bottom types
  59. Bugzilla 22535: ImportC: gcc/clang math intrinsics are rejected.
  60. Bugzilla 22553: ImportC: undefined identifier __uint128_t
  61. Bugzilla 22598: importC: Add support for __extension__ keyword
  62. Bugzilla 22626: Can't use synchronized member functions with -nosharedaccess
  63. Bugzilla 22664: Disassembler mistakes rdtscp for invlpg ECX
  64. Bugzilla 22706: Bad error on explicit instantiation of function template with auto ref parameter
  65. Bugzilla 22717: object.TypeInfo_Struct.equals swaps lhs and rhs parameters
  66. Bugzilla 22724: ImportC: VC extension __pragma(pack) is not implemented
  67. Bugzilla 22756: ImportC: no __builtin_offsetof
  68. Bugzilla 22830: Solaris: error: module 'core.stdc.math' import 'signbit' not found
  69. Bugzilla 22846: [REG 2.066] SIGBUS, Bus error in _d_newarrayiT
  70. Bugzilla 22865: __traits(compiles) affects inferrence of attributes
  71. Bugzilla 23009: [CODEGEN][SIMD] SIMD + optimizations + inlining + double
  72. Bugzilla 23010: mixed in aliaseqs used as type dont initualize
  73. Bugzilla 23012: importC: asm label to set symbol name not applied from forward declaration
  74. Bugzilla 23018: importC: syntax error for sizeof with postfix operator on parenthesized expression
  75. Bugzilla 23022: [dip1000] typesafe variadic parameter should not infer return
  76. Bugzilla 23037: importC: type with only type-qualifier doesn't work
  77. Bugzilla 23038: importC: sizeof inside struct has struct members in scope
  78. Bugzilla 23039: importC: declaration with array length has itself in scope
  79. Bugzilla 23042: -betterC still includes RTInfo
  80. Bugzilla 23044: importC: comma expression with function call parsed as declaration
  81. Bugzilla 23045: importC: casted function type is missing extern(C)
  82. Bugzilla 23047: [ICE][SIMD] Do not SROA vector types
  83. Bugzilla 23050: Incorrect disassembly of code with -vasm and 0xBE and 0xBF opcodes
  84. Bugzilla 23054: importC: struct compound-literal assigned by pointer has wrong storage duration
  85. Bugzilla 23056: importC: dmd asserts for missing return statement in CTFE function
  86. Bugzilla 23057: importC: dmd segfault on invalid syntax
  87. Bugzilla 23063: It is possible to return a noreturn value
  88. Bugzilla 23068: [betterC] BetterC does not respect -checkaction=halt
  89. Bugzilla 23088: spurious case of "expression has no effect"
  90. Bugzilla 23105: __trait(getMember) and mixin() of the same code as a string behave differently
  91. Bugzilla 23112: code passes @nogc, allocates anyway
  92. Bugzilla 23123: -vasm wrong result for cmpxchg16b
  93. Bugzilla 23135: Covariance rules for C++ member functions mismatch D
  94. Bugzilla 23138: Overrides of member functions of an inherited class ignores attribute "downcast"
  95. Bugzilla 23159: [betterC] scope(failure) use in betterC gives confusing error
  96. Bugzilla 23167: inaccurate diagnostic for internal tuple bound violation
  97. Bugzilla 23168: [DIP1000] return scope wrongly rewritten for structs with no indirections
  98. Bugzilla 23169: [DIP1000] Mangling does not distinguish return and return scope
  99. Bugzilla 23173: "Error: signed integer overflow" for compiler generated string of long.min
  100. Bugzilla 23174: Can't alias tuple when it's part of dot expression following a struct literal
  101. Bugzilla 23176: -vasm misses immediates for some SSE2 instructions
  102. Bugzilla 23178: Unknown error using alias to __traits evaluated as expression
  103. Bugzilla 23192: Can't iterate aggregate fields with static foreach inside a member function
  104. Bugzilla 23205: Can't declare mixin template inside a function
  105. Bugzilla 23206: ImportC: __declspec(noreturn) does not compile
  106. Bugzilla 23207: dmd hangs compiling druntime/src/core/stdc/errno.c
  107. Bugzilla 23213: ImportC - variable length array does not compile
  108. Bugzilla 23214: ImportC: typedef with unsigned types does not compile
  109. Bugzilla 23217: ImportC: extra initializer(s) error for array of structs
  110. Bugzilla 23222: vcg-ast segfaults on aliases to parent module
  111. Bugzilla 23223: Aliases to modules print the modules contents into ast dump
  112. Bugzilla 23224: ImportC: memory model switch is not passed to C preprocessor
  113. Bugzilla 23225: OpenBSD: cpp invocation cannot find files
  114. Bugzilla 23235: [DIP1000] typesafe variadic parameters should automatically be scope
  115. Bugzilla 23236: can't initialize a @mustuse member in constructor
  116. Bugzilla 23241: __traits getMember breaks compilation when hit an alias
  117. Bugzilla 23249: Deprecation: argument &p for format specification "%m" must be char*, not char**
  118. Bugzilla 23251: Deprecation: format specifier "%[a-z]" is invalid
  119. Bugzilla 23252: Deprecation: format specifier "%[]]" is invalid
  120. Bugzilla 23254: Deprecation: format specifier "%S" and "%C" are invalid
  121. Bugzilla 23256: must supply -mscrtlib manually when compiling for Windows
  122. Bugzilla 23262: typesafe variadic function parameter cannot infer return

DMD Compiler enhancements

  1. Bugzilla 3952: pragma(msg,...) has bugs + alternative idea
  2. Bugzilla 7243: Compiler should call separate function when allocating a struct on the heap
  3. Bugzilla 9726: Add minimum % coverage required for -cov testing
  4. Bugzilla 12330: array.reserve at compile time too
  5. Bugzilla 13138: add peek/poke as compiler intrinsics
  6. Bugzilla 14755: Could -profile=gc also give the number of allocations that led to X bytes being allocated?
  7. Bugzilla 16394: TypeInfo.init() for static arrays returns single element instead of whole array
  8. Bugzilla 16558: [Mir] Generic unaligned load/store like (like LDC loadUnaligned and storeUnaligned)
  9. Bugzilla 16701: Remove Restriction of "package.d" Source File Module Forced to All Lowercase
  10. Bugzilla 21673: [SIMD][Win64] Wrong codegen for _mm_move_ss
  11. Bugzilla 22880: importC: support __restrict__ __signed__ __asm__
  12. Bugzilla 22911: dtoh: make include directives sorted for generated headers
  13. Bugzilla 23079: [dip1000] be more lenient when taking address of ref return
  14. Bugzilla 23141: Improve -release switch description
  15. Bugzilla 23142: Scope should not apply to unittests
  16. Bugzilla 23143: ImportC: forward enum declarations need to be supported
  17. Bugzilla 23165: lambda functions are not inlined
  18. Bugzilla 23191: [dip1000] scope parameter can be returned in @system code
  19. Bugzilla 23216: Better Error Message For foreach_reverse Without Bidirectional Range

Phobos regression fixes

  1. Bugzilla 11309: std.concurrency: OwnerTerminated message doesn't work
  2. Bugzilla 20354: interface is not supported by CanCAS in core.internal.atomic
  3. Bugzilla 23245: [REG 2.099] std.format ignores non-const toString method of static array element
  4. Bugzilla 23246: [REG 2.099] std.format ignores non-const toString method of associative array value

Phobos bug fixes

  1. Bugzilla 64: Unhandled errors should go to stderr
  2. Bugzilla 3798: core.cpuid locks systems with Xeon E5530 CPU
  3. Bugzilla 9025: core.thread.Fiber seems to crash on Win64
  4. Bugzilla 10469: WinAPI declarations in std.process should be moved to core.sys.windows.windows
  5. Bugzilla 11192: std.demangle doesn't demangle alias template arguments
  6. Bugzilla 16232: std.experimental.logger.core.sharedLog isn't thread-safe
  7. Bugzilla 17966: chunkBy cannot accept an input range (from multiwayMerge)
  8. Bugzilla 18631: std.random.choice does not work with const arrays
  9. Bugzilla 22637: std.conv to!double and parse!double dont throw on under/overflow
  10. Bugzilla 22683: core.math.rndtonl can't be linked
  11. Bugzilla 23182: Can't assign struct with opAssign to SumType in CTFE
  12. Bugzilla 23196: File constructor fails to preallocate oom error, uses exception instead
  13. Bugzilla 23215: calling std.file.remove with null string segfaults in strlen
  14. Bugzilla 23250: Unicode regional indicators are not paired correctly
  15. Bugzilla 23270: std.random.dice is poorly documented
  16. Bugzilla 23288: zlib: Fix potential buffer overflow

Phobos enhancements

  1. Bugzilla 13893: "rawRead must take a non-empty buffer"
  2. Bugzilla 15128: "IP_ADD_MEMBERSHIP" error in winsock2.d
  3. Bugzilla 18735: all versions of find and canfind should identify usage of predicate
  4. Bugzilla 20869: std.algorithm.mutation : move is overly trusting of opPostMove
  5. Bugzilla 23101: [std.sumtype] canMatch does not account ref

Druntime regression fixes

  1. Bugzilla 1180: the GC failes to handle large allocation requests propperly
  2. Bugzilla 7365: [Regression after 2.057] AAs broken for Object keys and values with opEquals
  3. Bugzilla 8477: [2.060 beta] Strange error calling member func from overridden Exception::toString()
  4. Bugzilla 8633: core.atomic not documented
  5. Bugzilla 9099: core.atomic.atomicLoad() cannot handle non-POD structs
  6. Bugzilla 10976: thread_joinAll after main exit performed too late
  7. Bugzilla 11149: Runtime.args no longer available in static constructors.
  8. Bugzilla 11301: [2.064 beta] core.sys.linux.sys.mman triggers enum resolution error
  9. Bugzilla 11378: implicit runtime initialization/finalization is broken
  10. Bugzilla 11478: shared library on osx: worked in 2.062, fails in 2.063.2, still fails in 2.064
  11. Bugzilla 12136: [AA] Associative array keys and values become non-properties.
  12. Bugzilla 12220: [REG2.066a] hash.get() does not accept proper parameters
  13. Bugzilla 12427: Regression (2.066 git-head): Building druntime fails with -debug=PRINTF
  14. Bugzilla 12710: Bad @nogc requirement for Windows callbacks
  15. Bugzilla 12738: core.sys.posix.signal sigaction_t handler type mismatch
  16. Bugzilla 12848: [REG2.061] crash in _d_run_main() on some unicode command line argument (Win32)
  17. Bugzilla 13078: [dmd 2.066-b2] AA rehash failed with shared
  18. Bugzilla 13084: ModuleInfo.opApply delegate expects immutable parameter
  19. Bugzilla 13111: GC.realloc returns invalid memory for large reallocation
  20. Bugzilla 13148: ModuleInfo fields are unnecessary changed to const
  21. Bugzilla 13399: va_arg is nothrow yet may throw
  22. Bugzilla 13748: benchmark druntime/benchmark/aabench/string.d fails
  23. Bugzilla 13809: dup no longer works with types with postblit and destructors
  24. Bugzilla 14467: arr.capacity sometimes erroneously returns 0
  25. Bugzilla 14626: [REG2.066] byValue doesn't work with inout AA
  26. Bugzilla 14746: [REG2.068a] Behavior change with struct destructor and alias this
  27. Bugzilla 14750: druntime/test/coverage was added to druntime, but not to the MANIFEST - zip file broken again
  28. Bugzilla 14863: CLOCK_BOOTTIME should be optional to support <2.6.39 kernels
  29. Bugzilla 14882: [REG] MANIFEST is missing test/common.mak
  30. Bugzilla 14990: No rule to make target `src/core/sys/windows/stdio_msvc12.d', needed by 'druntime.zip'.
  31. Bugzilla 14993: Allocating in a destructor segfaults instead of throwing InvalidMemoryOperationError
  32. Bugzilla 15224: making 'clean' results in garbage commands
  33. Bugzilla 15334: [REG 2.069] OS X core.time ticksPerSecond calculation is incorrect
  34. Bugzilla 15434: [REG2.068] object.d imports from rt (breaking inline builds)
  35. Bugzilla 15482: new uuid.d forbids to link statically with other libraries
  36. Bugzilla 15822: InvalidMemoryOperationError when calling GC.removeRange/Root from a finalizer
  37. Bugzilla 15911: undefined __Unwind_GetIPInfo for x86_64
  38. Bugzilla 16211: [REG 2.058] Cyclic dependencies broken again
  39. Bugzilla 16974: [REG2.068] Equal associative arrays with associative array keys are considered unequal
  40. Bugzilla 17188: stdc qsort predicate requires scope parameters
  41. Bugzilla 17914: [Reg 2.075] Fibers guard page uses a lot more memory mappings
  42. Bugzilla 18071: [REG2.078] byKey, byValue and byKeyValue are now a hole for unsafe code
  43. Bugzilla 18193: module config is in file 'rt/config.d' which cannot be read
  44. Bugzilla 18252: [Reg 2.078] comparison of arrays of associative arrays no longer compiles
  45. Bugzilla 18652: hashOf example doesn't compile
  46. Bugzilla 18996: Inserting a type containing indirections into an std.container Array causes SIGILL(4). Illegal Instruction.
  47. Bugzilla 19005: [REG2.081-b1] object.hashOf no longer works for std.datetime.date.Date
  48. Bugzilla 19322: A lot of memory is consumed and not freed to the system when Exception is formatted with stacktrace in debug
  49. Bugzilla 19498: undefined identifier rt_loadLibraryW
  50. Bugzilla 19701: undefined reference to `_D6object__T6hashOf
  51. Bugzilla 19796: druntime PR#1982 broke array ops on double[] due to wrong assumption of integral element type
  52. Bugzilla 19902: hasElaborateCopyConstructor doesn't know about copy constructors
  53. Bugzilla 20219: Idle D programs keep consuming CPU in Gcx.scanBackground
  54. Bugzilla 20227: "Aborting from src/core/sync/event.d(141) Error: pthread_mutex_destroy failed." after fork()
  55. Bugzilla 20256: problem with signal handling and parallel GC on linux
  56. Bugzilla 20270: [REG2.087] Deadlock in garbage collection when running processes in parallel
  57. Bugzilla 20438: [Reg 2.086] GC: memory not reusable when calling GC.collect after GC.free
  58. Bugzilla 20447: [REG 2.089] importing core.thread exposes unistd, hiding object.dup
  59. Bugzilla 20748: Deprecation for assert using shared type and checkaction=context
  60. Bugzilla 20778: exception messages with nulls within are treated inconsistently
  61. Bugzilla 21097: [REG2.083] Stack exhaustion upon large struct .destroy
  62. Bugzilla 21110: OOB memory access, safety violation
  63. Bugzilla 21309: Missing core.thread.threadbase documentation
  64. Bugzilla 21363: [REG2.094] Implementation of core.bitop.ror(x,0) is using UB
  65. Bugzilla 21642: [REG 2.084] hashOf will fail to compile for some structs/unions that recursively contain shared enums
  66. Bugzilla 21656: [REG2.091] Wrong file read during exception stringification leads to SIGBUS
  67. Bugzilla 21712: [REG 2.096.0] sometimes coverage *.lst files are corrupted
  68. Bugzilla 22178: [REG 2.097] Compilers do not compile on Musl Libc
  69. Bugzilla 22210: std.meta.allSatisfy in mutual recursion classes cannot be compiled
  70. Bugzilla 22235: core.demangle does not support noreturn
  71. Bugzilla 22829: [REG master] Undefined symbol stderr first referenced in file test19933.o
  72. Bugzilla 22834: runnable_cxx/stdint.d: Undefined reference to _Z15testCppI8Mangleahahah

Druntime bug fixes

  1. Bugzilla 391: .sort and .reverse break utf8 encoding
  2. Bugzilla 3454: Inconsistent flag setting in GC.realloc()
  3. Bugzilla 4809: Stack trace when throwing exception misses location of the throw statement
  4. Bugzilla 5272: Postblit not called on copying due to array append
  5. Bugzilla 5375: Detection of cyclic module imports provides error findings on console, instead of exception msg
  6. Bugzilla 5407: X86_64: Segfault on AA Foreach
  7. Bugzilla 5593: Add dladdr to druntime for linux/FreeBSD
  8. Bugzilla 5930: cas doesn't work when used in code compiled with -D
  9. Bugzilla 5999: Runtime treats floating NaNs to be equal
  10. Bugzilla 6045: Unable to demangle symbols
  11. Bugzilla 6333: The 'capacity' function is not pure/nothrow/@safe.
  12. Bugzilla 6376: core.thread.thread_scanAll doesn't scan the stack due to ASLR on Mac OS X 10.7
  13. Bugzilla 6646: [SafeD] array.reserve is not @safe/trusted
  14. Bugzilla 7112: Add function in core.sys.posix.signal
  15. Bugzilla 7606: core.time.TickDuration opCmp accepts only lvalues
  16. Bugzilla 7954: x86_64 Windows fibers do not save nonvolatile XMM registers
  17. Bugzilla 7971: Cannot compile druntime with -debug=PRINTF
  18. Bugzilla 8046: simd.d needs some documentation
  19. Bugzilla 8132: LPTSTR always aliases to LPSTR
  20. Bugzilla 8274: thread_attachThis only works for main thread
  21. Bugzilla 8301: Access violation when a big array is allocated
  22. Bugzilla 8527: object.destroy doesn't destroy interfaces
  23. Bugzilla 8650: SLice opOpAssign SLice with overlap does not throw
  24. Bugzilla 8872: Missing extended window styles (WS_EX_... enumeration) in windows header
  25. Bugzilla 8960: DMD tester: Unable to set thread priority
  26. Bugzilla 9030: immutable _d_args can be written to with main(char[][])
  27. Bugzilla 9275: [GC] removeRoot hits assert(0) instead of being a no-op (as documented)
  28. Bugzilla 9373: Add deprecation message to all empty deprecation statements
  29. Bugzilla 9783: profiling recursive function calls yields bad tree timing
  30. Bugzilla 9799: Missing aliases and enums in druntime imports
  31. Bugzilla 9852: Empty associative array crashes program
  32. Bugzilla 10057: [2.063 beta] Module info overwritten in shared phobos.
  33. Bugzilla 10420: Incorrect function attributes in core.exception
  34. Bugzilla 10436: The runtime should print stack traces to stderr (like on *nix), not stdout
  35. Bugzilla 10457: _d_toObject might fail with shared libraries
  36. Bugzilla 10593: array's reserve/capacity go haywire if length has been changed prior
  37. Bugzilla 10701: [GC] segfault in GC
  38. Bugzilla 10711: shared phobos library should not depend on _Dmain
  39. Bugzilla 10720: ICE with is(aaOfNonCopyableStruct.nonExistingField)
  40. Bugzilla 10838: Null pointer dereference in gc.gcx.Gcx.isMarked
  41. Bugzilla 10894: Numerous DDoc parameter warnings in druntime (as found by 10236)
  42. Bugzilla 10897: btc, btr and bts shouldn't be safe
  43. Bugzilla 11011: core.time.Duration has example code which cannot compile
  44. Bugzilla 11168: core.stdc.time.asctime() is incorrectly marked as @trusted
  45. Bugzilla 11174: Both AF_PACKET and SO_BINDTODEVICE undefined
  46. Bugzilla 11293: wrong locale enumerate value
  47. Bugzilla 11294: Object destruction with alias this
  48. Bugzilla 11393: [GC] GC realloc and free don't ignore interior pointers
  49. Bugzilla 11414: druntime should run debug unittest
  50. Bugzilla 11446: [GC] GC realloc doesn't ignore non-GC owned pointers
  51. Bugzilla 11519: fix timing issue in core.thread unittest
  52. Bugzilla 11594: synchronized causing segfault instead of Error.
  53. Bugzilla 11674: core.stdc.fenv.fenv_t declaration not architecture aware
  54. Bugzilla 11761: aa.byKey and aa.byValue are not forward ranges
  55. Bugzilla 12121: atomicLoad!(MemoryOrder.acq) should not emit additional code on X86
  56. Bugzilla 12233: Attempting to use TypeInfo.init results in a compiler error due to lack of 'this'.
  57. Bugzilla 12289: incorrect core.stdc.stdio.fpos_t alias
  58. Bugzilla 12755: thread.di is outdated
  59. Bugzilla 12800: Fibers are broken on Win64
  60. Bugzilla 12843: Unit tests fail when GC is compiled with SENTINEL
  61. Bugzilla 12958: core.checkedint.mulu is broken
  62. Bugzilla 12975: posix.mak should use isainfo on Solaris systems to determine model
  63. Bugzilla 13052: TypeInfo.getHash should return same hash for different floating point zeros.
  64. Bugzilla 13057: posix getopt variables in core/sys/posix/unistd.d should be marked __gshared
  65. Bugzilla 13058: Thread priority handling doesn't work in Solaris
  66. Bugzilla 13186: core/sys/posix/sys/uio.d is not linked into the standard lib
  67. Bugzilla 13821: fiber + exception + win server 2012 failures
  68. Bugzilla 13854: Appending to an interior slice of a large array results in unnecessary 16-byte offset
  69. Bugzilla 13878: Appending to an array block with modified flags loses flag info
  70. Bugzilla 14036: Do not throw FinalizeError on OutOfMemoryError or InvalidMemoryOperationError
  71. Bugzilla 14157: fabsf fabsl for CRuntime_Microsoft
  72. Bugzilla 14215: invalid import in core.sys.linux.stdio
  73. Bugzilla 14226: invalid Runtime.traceHandler setup
  74. Bugzilla 14247: string within demangled symbol name should be made escape
  75. Bugzilla 14303: rt.util.container.array.Array unittest contains invalid code
  76. Bugzilla 14319: core.demangle does not support member function attributes
  77. Bugzilla 14350: Unit test failures are not displayed in Windows GUI programs
  78. Bugzilla 14401: typeid(shared X).init is empty for class types
  79. Bugzilla 14423: struct destructors not finalized for AA values
  80. Bugzilla 14439: aa's keys, values not usable in @safe context
  81. Bugzilla 14464: coverage merge doesn't work
  82. Bugzilla 14476: core.thread unit tests failing on FreeBSD 9+
  83. Bugzilla 14536: Calling destroy() on a on an extern(C++) class causes a segfault
  84. Bugzilla 14563: core.demangle: Does not demangle type modifers
  85. Bugzilla 14565: dmd -profile produces garbled output for long-running CPU-intensive processes
  86. Bugzilla 14576: [ddemangle] core.demangle unable to handle ambiguity in symbols
  87. Bugzilla 14601: pthread functions aren't marked @nogc
  88. Bugzilla 14785: Some corner cases are not handled properly by core.checkedint.
  89. Bugzilla 14870: incorrect use of assert to detect environmental errors in core.time
  90. Bugzilla 15009: Object.destroy calls unnecessary postblits for destruction of static arrays object
  91. Bugzilla 15036: SimpleDllMain assumes various symbols are available unqualified
  92. Bugzilla 15104: Switching fibers in finally blocks breaks EH
  93. Bugzilla 15111: hashOf fails for structs that have an alias this to a dynamic array
  94. Bugzilla 15270: use TLS to store Thread.getThis (pthread_getspecific causes heavy lock contention)
  95. Bugzilla 15322: version(Unicode) should affect only default aliases
  96. Bugzilla 15367: array of delegates comparison fails
  97. Bugzilla 15393: Debug versions in GC code doesn't compile.
  98. Bugzilla 15838: Many Win32 API callback functions miss extern(Windows)
  99. Bugzilla 15939: GC.collect causes deadlock in multi-threaded environment
  100. Bugzilla 15958: Missing extern(Windows) of core.sys.windows functions
  101. Bugzilla 15959: core.sys.windows modules should be modified for x64
  102. Bugzilla 15976: explicite TLS initializes badly in DLLs if other threads exist
  103. Bugzilla 15987: core.sys.windows.msacm remains pseudo definitions
  104. Bugzilla 15997: Wrong constant value for ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED in winhttp
  105. Bugzilla 16007: Some Win32 API structs has wrong definitions
  106. Bugzilla 16049: core.sys.windows structs have wrong sizes and aligns
  107. Bugzilla 16230: core.atomic.atomicLoad removes shared from aggregate types too eagerly
  108. Bugzilla 16380: no bindings for err.h
  109. Bugzilla 16470: Segfault with negative array length
  110. Bugzilla 16594: module destructors called again if an exception got thrown earlier
  111. Bugzilla 16651: atomicOp!"-="(ulong, uint) = wrong result/codegen
  112. Bugzilla 16654: hashOf returns different hashes for the same string value
  113. Bugzilla 16658: Win32API: default IE ver. set to 4.0 is too old
  114. Bugzilla 16764: hashOf is misleading, error-prone, and useless
  115. Bugzilla 16856: D does not work on FreeBSD current (what will eventually be 12) due to libunwind
  116. Bugzilla 17108: Associative array byKeyValue is unsafe
  117. Bugzilla 17375: colliding modules detected with binutils 2.28 linker and shared libraries
  118. Bugzilla 17431: GCBits should be @nogc to prevent deadlocks
  119. Bugzilla 17609: core.demangle demangles delegate variables as functions
  120. Bugzilla 17610: core.demangle shows return type of template alias parameter
  121. Bugzilla 17611: core.demangle cannot demangle delegates with function attributes
  122. Bugzilla 17624: typo in Fields documentation section of https://dlang.org/library/object/exception.html
  123. Bugzilla 17665: Win64 atomicLoad for T[] cannot be cast from size_t[2]
  124. Bugzilla 17788: MSCOFF: TLS broken when linking with linker from VS2017 15.3.1
  125. Bugzilla 17829: core.stdc.errno does not work with -betterC
  126. Bugzilla 17851: htonl already defined in phobos64.lib
  127. Bugzilla 17956: core.memory unittest failure (possibly glibc 2.26 specific)
  128. Bugzilla 18011: core.sys.condition cannot be used as shared
  129. Bugzilla 18117: ldiv_t struct in core.stdc.stdlib -- int vs c_long expectations
  130. Bugzilla 18240: core.stdc.wchar_ wmemset, etc. should be pure
  131. Bugzilla 18247: core.stdc.math functions that never set errno should be pure
  132. Bugzilla 18279: rt.util.utf does not properly reserve buffer in toUTF16/toUTF16z
  133. Bugzilla 18300: core.demangle demangling of really long symbol fails
  134. Bugzilla 18482: wincrypt functions should be @nogc nothrow
  135. Bugzilla 18531: core.exception.RangeError@src/core/demangle.d(216): Range violation
  136. Bugzilla 18536: Bad stack traces when building with -m32mscoff
  137. Bugzilla 18537: Cannot pass absolute path to coverage options
  138. Bugzilla 18547: Win32: throwing exception in fiber crashes application
  139. Bugzilla 18643: Compiling error when combining CAS and numeric literal.
  140. Bugzilla 18904: core.internal.string has issues with radix
  141. Bugzilla 18932: core.internal.hash.hashOf(val, seed) ignores seed when val is a raw pointer
  142. Bugzilla 18989: On OSX32, core.stdc.time.clock() should resolve to clock$UNIX2003()
  143. Bugzilla 19008: core.internal.convert.toUbyte doesn't work on enums
  144. Bugzilla 19046: OSX: bad value for core.stdc.time.CLOCKS_PER_SEC
  145. Bugzilla 19073: core.internal.hash should not bitwise hash representations of floating point numbers
  146. Bugzilla 19087: final switch cannot be used in -betterC
  147. Bugzilla 19090: core.internal.hash.bytesHash unit test uses incorrect test vector on BigEndian machines
  148. Bugzilla 19092: __delete doesn't work with immutable
  149. Bugzilla 19177: No version (Solaris) in druntime/src/core/stdc/time.d
  150. Bugzilla 19204: hashOf doesn't accept SIMD vectors
  151. Bugzilla 19250: DWARF Backtraces with very long symbol names read out of bounds when printing
  152. Bugzilla 19262: hashOf associative array should infer nothrow
  153. Bugzilla 19281: GC mishandles allocations >= 4GB
  154. Bugzilla 19282: hashOf segfaults for non-null C++ objects
  155. Bugzilla 19314: Thread object destruction may result in UB
  156. Bugzilla 19332: hashOf fails to compile for const struct that has non-const toHash & has all fields bitwise-hashable
  157. Bugzilla 19401: Fix bug in core.internal.traits.hasElaborateDestructor & hasElaborateCopyConstructor for struct with static array alias & for nested structs/unions
  158. Bugzilla 19433: Don't consume --DRT-* options if rt_cmdline_enabled is false
  159. Bugzilla 19481: Aborting from local/libphobos/libdruntime/core/sync/mutex.d(95) Error: pthread_mutex_init failed.
  160. Bugzilla 19489: Null function call results in no stack trace
  161. Bugzilla 19522: [GC] GC.query/addrOf/sizeOf fail for freed memory
  162. Bugzilla 19554: [2.084.0] Confusing message - Warning: struct Foo has method toHash
  163. Bugzilla 19562: core.internal.hash.hashOf array of pointers or delegates should be @safe
  164. Bugzilla 19568: hashOf should not unnecessarily call a struct's fields' postblits & dtors in CTFE
  165. Bugzilla 19571: Incorrect definition of DTM_FIRST in core.sys.windows.commctrl
  166. Bugzilla 19582: Make core.internal.convert.toUbyte in CTFE for arrays work with reference type elements and not call postblits/dtors
  167. Bugzilla 19593: dstrcmp with -profile causes stack overflow
  168. Bugzilla 19723: wrong time values in GC.profileStats
  169. Bugzilla 19810: destroy does not work for C++ classes without destructor
  170. Bugzilla 19830: core.memory.__delete destructs arrays of structs in the wrong order
  171. Bugzilla 19847: no GC memory above 4GB reported with --DRT-gcopt=profile:1
  172. Bugzilla 19861: core.cpuid reports the wrong number of threads
  173. Bugzilla 19909: core.stdc.errno missing POSIX error code on Windows
  174. Bugzilla 20026: retrying while pthread_cond_signal/pthread_cond_broadcast return EAGAIN
  175. Bugzilla 20049: object.destroy doesn't propagate attributes
  176. Bugzilla 20066: Assertion on void[] does not compile with -checkaction=context
  177. Bugzilla 20088: void[] cast unusable in betterC due to new __ArrayCast template
  178. Bugzilla 20155: Allocating a struct with dtor on the GC heap can produce false pointers
  179. Bugzilla 20214: GC: realloc can result in false pointers if address doesn't change
  180. Bugzilla 20271: Handle forking in the GC
  181. Bugzilla 20299: checkaction=context not working with temporary destructors
  182. Bugzilla 20303: Memory leak in core.thread
  183. Bugzilla 20315: checkaction=context fails for const(void[]) argument
  184. Bugzilla 20322: checkaction=context fails for wstring/dstring arguments
  185. Bugzilla 20323: checkaction=context fails for non-copyable arguments
  186. Bugzilla 20346: std.uuid does not compile with checkaction=context
  187. Bugzilla 20355: undefined identifier U in core.atomic
  188. Bugzilla 20364: [REG2.069] changing length for typeof(null)[] array seg faults in _d_arraysetlengthiT()
  189. Bugzilla 20440: Associative arrays with values whose opAssign doesn't return a ref don't support require function
  190. Bugzilla 20459: Runtime arg parsing should stop at '--'
  191. Bugzilla 20468: emplace doesn't forward constructor arguments' (l/r)valueness
  192. Bugzilla 20476: chainTogether leaks exception with -dip1008
  193. Bugzilla 20497: thread with limited stackspace crashes depending on size of TLS
  194. Bugzilla 20512: Return type of memchr should be inout(void)* rather than void*
  195. Bugzilla 20513: Return type of wmemchr should be inout(wchar_t)* rather than wchar_t*
  196. Bugzilla 20591: ldc doesn't print files' directories when printing stack trace
  197. Bugzilla 20629: atomicStore does not compile for struct using -m64
  198. Bugzilla 20731: checkaction=context fails for structs with 'alias this'
  199. Bugzilla 20750: checkaction=context segfaults for null references
  200. Bugzilla 20757: checkaction=context prints characters as integers
  201. Bugzilla 20760: checkaction=context doesnt print floating point numbers correctly
  202. Bugzilla 20763: checkaction=context does not format pointers
  203. Bugzilla 20767: [DIP1014] __move_post_blt must only recursively call itself on a struct's fields not all members
  204. Bugzilla 20768: [DIP1014] __move_post_blt must recursively call itself on static arrays whose elements are structs or static arrays that recursively contain structs
  205. Bugzilla 20832: Fix ioctl request for TCSETS2
  206. Bugzilla 20852: core.sys.posix.sys.wait missing definitions on FreeBSD
  207. Bugzilla 20910: Default unittest runner reports wrong unittest count
  208. Bugzilla 21029: Remove __ArrayEq which the compiler no longer uses as of DMD PR #11212
  209. Bugzilla 21055: core.stdc.stdarg is not @nogc
  210. Bugzilla 21116: onArrayCastError is horribly unsafe
  211. Bugzilla 21315: TypeInfo_StaticArray.swap is broken
  212. Bugzilla 21323: (64-bit Windows only) core.stdcpp.vector could not have core.stdcpp.vector as element
  213. Bugzilla 21344: core.stdcpp.string.basic_string does not implement opEquals
  214. Bugzilla 21346: core.stdcpp.vector.vector does not implement opEquals
  215. Bugzilla 21365: TypeInfo.swap must not allow reachable memory to be freed if interrupted by a garbage collection pass
  216. Bugzilla 21371: core.stdcpp.allocator: _Adjust_manually_vector_aligned checks for sentinel unconditionally (Windows only)
  217. Bugzilla 21421: core.stdcpp.new_.cpp_delete does not work with classes
  218. Bugzilla 21441: TypeInfo_Enum.destroy and TypeInfo_Enum.postblit not calling destroy and postblit of base type
  219. Bugzilla 21442: Calling AA.remove from a destructor might lead to InvalidMemoryOperationError
  220. Bugzilla 21468: Inscrutable template error when core.stdcpp.vector of a struct with a core.stdcpp.vector field is referenced before the struct's definition
  221. Bugzilla 21484: Infinite recursion in core.memory : GC.{get,set,clr}Attr(const scope void*...)
  222. Bugzilla 21544: -checkaction=context formats enum members as their base type
  223. Bugzilla 21550: core.memory.__delete does not actually work
  224. Bugzilla 21578: core.atomic.atomicFetchSub for pointers incorrectly calls wrong function from core.internal.atomic
  225. Bugzilla 21631: core.atomic.cas fails to compile with const ifThis (if target is a pointer)
  226. Bugzilla 21666: wrong printf format specifier for real with -checkaction=context on Win64
  227. Bugzilla 21701: casWeak is not implemented
  228. Bugzilla 21764: checkaction=context doesn't work for empty tuples
  229. Bugzilla 21857: TypeInfo_Array.compare can give wrong result when either array exceeds 2GB
  230. Bugzilla 21919: darwin: SEGV in core.thread tests on OSX 11
  231. Bugzilla 21983: dup leaves a partially constructed array if postblit/copy ctor throws
  232. Bugzilla 21996: -checkaction=context triggers InvalidMemoryOperationError in finalizer
  233. Bugzilla 22024: hashOf does not work on enum types whose base type is a SIMD vector
  234. Bugzilla 22026: checkaction=context: Exception thrown by toString hides assertion failures
  235. Bugzilla 22076: hashOf(S) can segfault if S.toHash is forwarded via 'alias this' to a receiver which may be null
  236. Bugzilla 22081: DWARF v5 support is utterly broken - 'illegal instruction' when throwing exceptions
  237. Bugzilla 22085: checkaction=context doesn't support extern(C++) classes
  238. Bugzilla 22107: [scope][dip1000] Can't .dup an array of structs with impure copy constructor
  239. Bugzilla 22143: Throwable ctor doesn't increment chained exception's ref count
  240. Bugzilla 22166: On OpenBSD and Android make core.sys.posix.arpa.inet: htonl, htons, ntohl, & ntohs work correctly on big endian architectures
  241. Bugzilla 22167: OpenBSD core.sys.posix.semaphore: sem_t should be a pointer to an opaque struct
  242. Bugzilla 22168: Fix non-compiling ELF32_M_INFO & ELF64_M_INFO in core.sys..sys.elf32 & core.sys..sys.elf64 for DragonFlyBSD, FreeBSD, NetBSD, & OpenBSD
  243. Bugzilla 22218: Dynamic casts across binary boundaries can easily fail
  244. Bugzilla 22328: Specific D types are used instead of Windows type aliases
  245. Bugzilla 22336: core.lifetime.move doesn't work with betterC on elaborate non zero structs
  246. Bugzilla 22440: OpenBSD: Sync sysctl.d
  247. Bugzilla 22443: OpenBSD: Fix Fiber support by adding MAP_STACK
  248. Bugzilla 22453: OpenBSD: Add a dummy value for AI_V4MAPPED
  249. Bugzilla 22455: Remove useless conditional assignment of DISABLED_TESTS in posix.mak
  250. Bugzilla 22456: OpenBSD: timer_* functions don't exist on OpenBSD
  251. Bugzilla 22485: OpenBSD: Fix core.sys.openbsd.unistd imports
  252. Bugzilla 22523: DRuntime options passed after -- affect current process
  253. Bugzilla 22552: moveEmplace wipes context pointer of nested struct contained in non-nested struct
  254. Bugzilla 22702: druntime not compliant with D spec re getLinkage
  255. Bugzilla 22721: importC: some gnu builtins are rejected
  256. Bugzilla 22735: __builtins.di does not implement __builtin_bswap64 correctly
  257. Bugzilla 22741: importC: Error: bswap isn’t a template
  258. Bugzilla 22744: ImportC: builtins defined in __builtins.di cause undefined symbol linker errors.
  259. Bugzilla 22763: importing std.utf fails in BetterC
  260. Bugzilla 22777: stat struct in core.sys.windows.stat assumes CRuntime_DigitalMars
  261. Bugzilla 22779: druntime: Calling __delete with null pointer-to-struct segfaults
  262. Bugzilla 22822: core.sys.posix.sys.stat: PPC stat_t bindings corrupt
  263. Bugzilla 22832: Can't destroy class with overloaded opCast
  264. Bugzilla 22843: Program hangs on full gc collect with --DRT-gcopt=fork:1 if run under valgrind/callgrind
  265. Bugzilla 23051: OpenBSD: Build broken on 2.100.0-beta.1 due to the inout attribute no longer implying the return attribute
  266. Bugzilla 23060: MacOS: core.sys.posix.sys.socket missing some definitions
  267. Bugzilla 23065: importC: __builtin_expect should use c_long
  268. Bugzilla 23067: importC: offsetof macro assumes size_t is defined
  269. Bugzilla 23129: object.destroy doesn't consider initialize=false on D classes
  270. Bugzilla 23228: OpenBSD: No SIGRTMIN or SIGRTMAX

Druntime enhancements

  1. Bugzilla 3851: Array copy error message with no line number
  2. Bugzilla 6649: core.sys.posix.sys.ioctl
  3. Bugzilla 8411: core.time: No easy way to check if Duration is empty
  4. Bugzilla 8544: Expose "cArgs" in druntime
  5. Bugzilla 8831: core.atomic: add compare-and-swap function with other result type
  6. Bugzilla 12891: add atomicFetchAdd and atomicFetchSub to core.atomic
  7. Bugzilla 12964: dev_t is incorrectly defined in runtime for Solaris systems
  8. Bugzilla 12976: ModuleInfo should be immutable on Solaris
  9. Bugzilla 12977: lf64 definitions aren't correct on Solaris
  10. Bugzilla 12978: struct sigaction is too small on 32-bit solaris
  11. Bugzilla 13037: SIGRTMIN and SIGRTMAX aren't correctly defined on Solaris
  12. Bugzilla 13143: Need backtrace support on Solaris
  13. Bugzilla 13144: Add fenv support for Solaris
  14. Bugzilla 13145: Need LC_ locale values for Solaris
  15. Bugzilla 13146: Add missing function definitions from stdlib.h on Solaris
  16. Bugzilla 13559: missing 64-bit version of array short operations
  17. Bugzilla 13725: onInvalidMemoryOperationError et al should not be inlined
  18. Bugzilla 13826: Move volatileLoad/Store to core.volatile when the volatile keyword is removed
  19. Bugzilla 14007: shmctl with IPC_STAT returns wrong number of attachments. shmid_ds is defined wrong.
  20. Bugzilla 14117: core.atomic should be @safe
  21. Bugzilla 14385: AA should use open addressing hash
  22. Bugzilla 14790: coverage merge should detect changed source code
  23. Bugzilla 14892: -profile=gc doesn't account for GC API allocations
  24. Bugzilla 15007: core.atomic match C++11
  25. Bugzilla 15053: Runtime.cArgs not @nogc
  26. Bugzilla 15137: core.time: Support Duration/Duration and Duration%Duration
  27. Bugzilla 15268: possible deadlock for Thread.getAll/Thread.opApply w/ GC.collect
  28. Bugzilla 15628: Exceptions in fibers never caught with /SAFESEH
  29. Bugzilla 16377: Make --DRT GC profile information available outside of GC destruction
  30. Bugzilla 16664: core.demangle functions are not callable from @safe or pure code
  31. Bugzilla 16797: Zero clock resolution lead to division by zero
  32. Bugzilla 17300: Enable setting code coverage options on the command line
  33. Bugzilla 17563: gc_inFinalizer should be public
  34. Bugzilla 18220: Allow rt_trapexceptions to be set from the CLI
  35. Bugzilla 18768: object.getArrayHash with custom toHash shouldn't just sum hashes of array elements
  36. Bugzilla 18816: [betterC] Standard Streams Unlinkable
  37. Bugzilla 18918: core.internal.hash should perform memberwise hashing of structs with references
  38. Bugzilla 18920: core.internal.hash of array of scalars should be @safe
  39. Bugzilla 18921: make core.internal.hash cater to memberwise hash chaining
  40. Bugzilla 18923: Semaphore internal handle should be protected instead of private
  41. Bugzilla 18924: Use addition rather than XOR for order-independent hash combination
  42. Bugzilla 18925: core.internal.hash auto-hash for structs of scalar fields should be @safe
  43. Bugzilla 18942: core.internal.hash can take advantage of alignment info on non-x86
  44. Bugzilla 18943: core.internal.hash remove outdated special case for DMD unaligned reads
  45. Bugzilla 18981: SIGSEGV during backtrace when debug info is compressed
  46. Bugzilla 19009: core.internal.hash.hashOf default hash (absent toHash) should be @nogc
  47. Bugzilla 19048: In core.internal.hash.hashOf reduce template bloat: remove auto ref where unneeded and add const where possible
  48. Bugzilla 19049: object.hashOf - don't wrap a public function with an identical public function
  49. Bugzilla 19071: core.internal.hash should have non-chained toHash overloads
  50. Bugzilla 19072: Object.toHash and typeid(void*).getHash(&ptr) should be more varied in their low bits
  51. Bugzilla 19075: rt.util.random.Rand48.defaultSeed should prefer RDTSC or mach_absolute_time or QueryPerformanceCounter to ctime.time
  52. Bugzilla 19128: argument to alloca may be too large
  53. Bugzilla 19214: Support object.destruct() for efficient (and correct!) destruction
  54. Bugzilla 19218: object.destroy should check for classes for static arrays
  55. Bugzilla 19280: Remove unnecessary error checks in core.time.currSystemTick and currTime
  56. Bugzilla 19398: Document meaning of core.atomic.MemoryOrder
  57. Bugzilla 19414: object.__cmp(T[]) on big-endian architectures can use memcmp for unsigned integers of any size
  58. Bugzilla 19416: Make core.exception.onOutOfMemoryError work in betterC
  59. Bugzilla 19421: Make pureMalloc, etc. usable in BetterC
  60. Bugzilla 19423: In core.stdc.errno directly link __errno on OpenBSD & NetBSD
  61. Bugzilla 19424: Add Haiku support to core.stdc.errno
  62. Bugzilla 19455: GC wastes too much memory
  63. Bugzilla 19468: Improve cyclic dependency error message
  64. Bugzilla 19524: Make core.checkedint work in betterC
  65. Bugzilla 19924: Make core.bitop.bswap(ulong) work in betterC
  66. Bugzilla 19933: MSVC: Undefined std{in,out,err} with -betterC
  67. Bugzilla 19976: Simplify std.internal.convert.toUbyte CTFE path for float and double
  68. Bugzilla 20104: core.atomic has no exchange function
  69. Bugzilla 20105: core.atomic 'cas' function is incomplete
  70. Bugzilla 20106: core.atomic : atomicFence doesn't accept MemoryOrder
  71. Bugzilla 20107: core.atomic : Memory order is missing keys
  72. Bugzilla 20122: core.atomic.cas discards result on failure
  73. Bugzilla 20178: Add TypeInfo_Class/TypeInfo_Interface.isBaseOf (equivalent to C#/Java isAssignableFrom)
  74. Bugzilla 20550: Use fixed seeds for treaps in GC
  75. Bugzilla 20567: GC should not start threads for parallel marking in simple programs
  76. Bugzilla 20577: Add missing symbols related to Windows UAC
  77. Bugzilla 20711: object.update requires the "update" callback to wastefully return a copy of the updated value
  78. Bugzilla 20741: dup, idup for arrays plus keys, values for built-in associative arrays: if a type is known to have a postblit do not emit code for the non-postblit path and vice versa
  79. Bugzilla 20746: Change LCG in garbage collector treap to use full 64 bits of state instead of 48
  80. Bugzilla 20787: Add module core.sys.darwin.sys.attr with getattrlist, setattrlist, searchfs, and related definitions
  81. Bugzilla 20844: DMD compiler should take care of data alignment, after seeing the 'cas' call
  82. Bugzilla 20859: Add overloads of core.sync.rwmutex.ReadWriteMutex.Reader/Writer.tryLock that take a timeout duration
  83. Bugzilla 20936: core.sync.rwmutex should have shared overloads (and make it usable in @safe code)
  84. Bugzilla 21005: Speed up hashOf for associative arrays
  85. Bugzilla 21014: aa.byKeyValue, byKey, byValue very under-documented
  86. Bugzilla 21026: add core.bitop.byteswap(ushort)
  87. Bugzilla 21030: Reduce template function instantiations related to array equality
  88. Bugzilla 21070: -profile=gc makes the program much slower
  89. Bugzilla 21417: core.stdcpp.new_.cpp_delete unnecessarily requires destruction to be @nogc
  90. Bugzilla 21426: dup, idup for arrays plus keys, values for associative arrays: call postblits directly instead of via TypeInfo function pointer
  91. Bugzilla 21784: joining a detached thread results in segfault.
  92. Bugzilla 21789: Codecov should use default umask for file permissions
  93. Bugzilla 22169: Mark as pure core.sys.posix.string: memccpy, stpcpy, stpncpy, strnlen
  94. Bugzilla 22378: OpenBSD: execinfo.d and unistd.d aren't being installed
  95. Bugzilla 22395: OpenBSD: Add more OpenBSD-specific function prototypes in string.d and unistd.d
  96. Bugzilla 22439: OpenBSD: Sync mman.d
  97. Bugzilla 22448: OpenBSD: Add OpenBSD-specific alloc and free function prototypes from stdlib.h
  98. Bugzilla 22454: OpenBSD: Add prototypes for pthread_np.h
  99. Bugzilla 22457: OpenBSD: enableDwarf in opApply in runtime.d
  100. Bugzilla 22542: Explicitly cast backtrace results to int
  101. Bugzilla 22545: OpenBSD: Always use system backtrace
  102. Bugzilla 22669: OpenBSD: Sync socket.d
  103. Bugzilla 22670: Support *BSD kqueue-backed API-compatible inotify shim library
  104. Bugzilla 22766: copyEmplace does not work with copy constructor and @disable this()
  105. Bugzilla 22908: OpenBSD: Add getpwnam_shadow and getpwuid_shadow function prototypes
  106. Bugzilla 22964: array cast message is awkwardly worded

dlang.org bug fixes

  1. Bugzilla 3093: Object.factory has incomplete documentation
  2. Bugzilla 13844: core.stdc.config isn't listed in the docs
  3. Bugzilla 15379: "final" attribute on function parameter
  4. Bugzilla 15476: DDOC_UNDEFINED_MACRO is undocumented
  5. Bugzilla 17324: Floating point 1/(1/x) > 0 if x > 0 not generally true
  6. Bugzilla 17514: "positive" -> "nonnegative"
  7. Bugzilla 17623: Unexpected failure of an assertion on empty strings
  8. Bugzilla 18855: Behavior of Anonymous Union is Undocumented
  9. Bugzilla 18887: inout badly described
  10. Bugzilla 19869: FunctionLiteral allows incorrect forms
  11. Bugzilla 21086: Wrong source link for core.thread.context
  12. Bugzilla 21188: Anonymous structs - not described
  13. Bugzilla 21717: [Oh No! Page Not Found]
  14. Bugzilla 21781: [Oh No! Page Not Found] Links to core libs from Better C
  15. Bugzilla 22064: Missing documentation page for phobos core.builtins
  16. Bugzilla 22237: AA.update is underspecified
  17. Bugzilla 22835: Undocumented type specializations of is-expression
  18. Bugzilla 23062: Function/delegate inference example does not compile
  19. Bugzilla 23237: dmd 2.100.1 download link error.
  20. Bugzilla 23276: DOC: ">" instead of ">" in dmd-windows.html

dlang.org enhancements

  1. Bugzilla 15286: is(typeof(symbol))
  2. Bugzilla 19036: .tupleof order guarantee

Tools bug fixes

  1. Bugzilla 18208: demangle RangeError@src/core/demangle.d(230)

Contributors to this release (293)

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

previous version: 2.100.1