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

previous version: 2.100.1 – next version: 2.101.0

Download D 2.100.2
released Sep 10, 2022

2.100.2 comes with 1 major change and 21 fixed Bugzilla issues. A huge thanks goes to the 18 contributors who made 2.100.2 possible.

List of all bug fixes and enhancements in D 2.100.2.

Compiler changes

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


List of all bug fixes and enhancements in D 2.100.2:

DMD Compiler regression fixes

  1. Bugzilla 23100: empty array literal passed to scope param not 'falsey' anymore
  2. Bugzilla 23148: Missing invariant symbol with static library when template function declares struct with destructor and invariant that instantiates template with lambda, also main has a lambda
  3. Bugzilla 23170: Array literal passed to map in lambda, then returned from nested function, is memory corrupted
  4. Bugzilla 23172: [REG2.100] Wrong cast inserted for ternary operator and non-int enums
  5. Bugzilla 23181: [REG 2.099] AssertError@src/dmd/e2ir.d(6094): Trying reference _d_arraysetctor

DMD Compiler bug fixes

  1. Bugzilla 20143: ICE in optimizer on real 0/0 returned as double
  2. Bugzilla 21443: scope (failure) with a return breaks safety
  3. Bugzilla 21723: Linker error: two module static library, main compiled inline, invariant that defines a function, type alias, and an alias lambda
  4. Bugzilla 23082: stringof of template alias overloaded with function accessed by trait: segfault.
  5. Bugzilla 23102: pinholeopt, "Conditional jump or move depends on uninitialised value(s)"
  6. Bugzilla 23108: ICE: AssertError@src/dmd/clone.d(567): Assertion failure
  7. Bugzilla 23109: ICE: AssertError@src/dmd/dclass.d(449): Assertion failure
  8. Bugzilla 23114: Can't use noreturn operand in arithmetic expression
  9. Bugzilla 23120: dmd illegal instruction throw expression
  10. Bugzilla 23166: seg fault when compiling with -inline
  11. Bugzilla 23177: ModuleInfo is not exported on Windows
  12. Bugzilla 23234: Delegate literal with inferred return value that requires following alias-this uses class cast instead.
  13. Bugzilla 23258: ICE on SumType of two arrays of classes

Phobos regression fixes

  1. Bugzilla 23132: "cannot access frame pointer" comparing two ranges for equality from v2.099.0
  2. Bugzilla 23140: Array!T where T is a shared class no longer works
  3. Bugzilla 23238: Cannot write a const Nullable(T, T nullValue)

Contributors to this release (18)

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

previous version: 2.100.1 – next version: 2.101.0