Menu

- Learn
- Documentation
  - Language Reference
  - Library Reference
  - Command-line Reference
  - Feature Overview
  - Articles
- Downloads
- Packages
- Community
  - Blog
  - Orgs using D
  - Twitter
  - Forums
  - IRC
  - Community Discord
  - Wiki
  - GitHub
  - Issues
  - Get involved
  - Contributors
  - Foundation
  - Security Team
  - Donate
  - Sponsors
- Resources
  - Tour
  - Books
  - Tutorials
  - Tools
  - Editors
  - IDEs
  - run.dlang.io
  - Visual D
  - Acknowledgments
  - D Style
  - Glossary
  - Sitemap

Search
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

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.

#### Compiler changes

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

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.

- Boris Carvajal
- dawg
- Dennis
- Dennis Korpel
- FeepingCreature
- Iain Buclaw
- Martin Kinkelin
- Martin Nowak
- Mathis Beer
- Max Haughton
- mhh
- Paul Backus
- Razvan Nitu
- richard andrew cattermole
- RubyTheRoobster
- Tomáš Chaloupka
- Walter Bright
- wolframw

Copyright © 1999-2023 by the D Language Foundation | Page generated by Ddoc on Sun Jul 2 00:31:14 2023