Change Log: 2.101.0
Download D 2.101.0 Beta
to be released Nov 14, 2022
Compiler changes
- Add bit fields to D
- Added __traits(classInstanceAlignment)
- Relaxed pragma(crt_constructor) / pragma(crt_destructor) linkage check
- Add predefined version D_Optimized when compiling with -O
- Throwing from contracts of nothrow functions has been deprecated
- Using integers for version or debug conditions has been deprecated
- Print deprecations for scope pointer errors
- Improvements for the C++ header generation
- -preview=fixImmmutableConv has been added
- Returning a discarded void value from a function is now deprecated
- ImportC now recognizes the typeof(...) operator
- Removed the -transition=markdown and -revert=markdown switches
- new can now allocate an associative array
- -preview=in can now be used with extern(C++), disabled for other non-D linkage
- The shortened method syntax is now available by default.
Runtime changes
Library changes
- Added SafeRefCounted, that can be used in @safe with -preview=dip1000.
- Move logger out of experimental.
- remove std.experimental.logger's capability to set the minimal LogLevel at compile time
- Change std.experimental.logger.core.sharedLog to return shared(Logger)
- std.experimental.typecons has been removed
- std.digest.digest has been removed
- std.xml has been removed
- std.socket.Socket methods now accept only scope arrays.
- Add custom fill value to std.outbuffer.OutBuffer class
Dub changes
- Building the special test runner configuration
- Output will now be colorized
- dub will now warn on unrecognized settings or selections file
- The two new build types cov-ctfe and unittest-cov-ctfe have been added.
- DUB settings & packages directory placement overhauled
- DUB command exit codes have been made more consistent
- 'install' and 'uninstall' commands have been removed
- When copyFiles is used to copy read-only files, it now makes the copy writable.
- The override system is deprecated
- The shortcut syntax for "dub run" is now also available for sub packages.
- Upgrading all sub packages at once
List of all bug fixes and enhancements in D 2.101.0.
Compiler changes
- 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 }
- Added __traits(classInstanceAlignment)
To complement __traits(classInstanceSize), providing the required alignment for manual buffers etc.:
align(__traits(classInstanceAlignment, C)) void[__traits(classInstanceSize, C)] buffer;
- 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.
- Add predefined version D_Optimized when compiling with -O
It allows code to distinguish whether it's being compiled with optimizations enabled (the -O flag was provided). This is orthogonal to whether -release mode is active - for that see the predefined versions assert, D_NoBoundsChecks, D_Invariants, etc.
- Throwing from contracts of nothrow functions has been deprecated
Up until now, the compiler accepted in and out contracts of nothrow functions to throw exceptions and call throwing functions. As this breaks nothrow guarantees, a deprecation notice is now triggered.
// deprecated: float sqrt(float n) nothrow in { if (n < 0) throw new Exception("n must be positive"); } do { // ... } // fix: remove nothrow attribute or use assertions float sqrt(float n) nothrow in { assert(n >= 0); } do { // ... }
- 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() {}
- 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:
- 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.
- -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.
- 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.
- 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.
- 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.
- 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.
- -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++.
- The shortened method syntax is now available by default.
DIP 1043---Shortened Method Syntax has been accepted, the flag -preview=shortenedMethods is no longer required to write shortened function bodies:
int add(int x, int y) pure => x + y; // equivalent full function body: int add(int x, int y) pure { return x + y; }
The preview flag will still work until it is deprecated in a future release.
Runtime changes
- Added avx512f detection to core.cpuid
The feature flag core.cpuid.avx512f has been added to allow detection at run-time CPUs with 512-bit vector support.
- --DRT-oncycle=deprecate is removed
The option was introduced in 2.072.2 to help transition code that relied on the old faulty cycle checker for module constructors. It now prints a warning and does the same as the default, --DRT-oncycle=abort. See also: Order of Static Construction in the specification.
- Posix (excl. Darwin): Switch default GC signals from SIGUSR1/2 to SIGRTMIN/SIGRTMIN+1
As the SIGUSR ones might be used by 'system' libraries (e.g., Android Dalvik VM or LLVM libFuzzer), while the SIGRT ones are reserved for user-defined purposes and less likely to collide.
The used signals can still be customized with an early call to core.thread.osthread.thread_setGCSignals().
Library changes
- Added SafeRefCounted, that can be used in @safe with -preview=dip1000.
RefCounted is only available for @system code, because of the possibility of escaping a reference to its payload past the end of its lifetime. a modified copy of it, std.typecons.SafeRefCounted has been added. Also added is a borrow function, that lets one safely access and modify the payload. -preview=dip1000 prevents escaping a reference to it in @safe code.
@safe pure nothrow void fun() { import std.typecons; auto rcInt = safeRefCounted(5); assert(rcInt.borrow!(theInt => theInt) == 5); auto sameInt = rcInt; assert(sameInt.borrow!"a" == 5); // using `ref` in the function auto arr = [0, 1, 2, 3, 4, 5, 6]; sameInt.borrow!(ref (x) => arr[x]) = 10; assert(arr == [0, 1, 2, 3, 4, 10, 6]); // modifying the payload via an alias sameInt.borrow!"a*=2"; assert(rcInt.borrow!"a" == 10); }
Direct access to the payload unfortunately has to be @system, though. While -dip1000 could prevent escaping the reference, it is possible to destroy the last reference before the end of it's scope:
int destroyFirstAndUseLater() { import std.typecons; auto rc = SafeRefCounted!int(123); int* ptr = &rc.refCountedPayload(); destroy(rc); return *ptr; // Reads from freed memory. Don't do this. }
As a side effect, this enabled us to make std.file.dirEntries @safe with -preview=dip1000.
Some member functions of RefCounted that are @safe are not so in SafeRefCounted. The RefCounted type and refCounted function are still available for the old behaviour. However, their main purpose is backwards compatibility. They are not recommended for new code.
- 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.
- 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.
- 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.
- std.experimental.typecons has been removed
This was an attempt to update std.typecons.wrap with an implementation that could work with struct, but it did not go anywhere. See this post on the forum.
- std.digest.digest has been removed
This module was initially deprecated in 2.076.1, and has been empty since 2.092.0 when all deprecated symbols were removed in favour of importing std.digest or its submodules instead.
- std.xml has been removed
This module is considered out-dated and not up to Phobos' current standards. If you still need it, go to https://github.com/DigitalMars/undeaD
- 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.
- 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
- 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.
- Output will now be colorized
Dub output has been improved to be more human readable, which means the most important informations in the output will now be colorized / bold.
As is usual with CLI tools, this behavior is automatically turned on whether the output is a TTY. To force the old output in the presence of a TTY, use --color=off. To force colored output in the absence of a TTY, use --color=on.
The --color flag, if set to on or off, is automatically forwarded to the compiler. This is especially useful for CI pipelines to ensure human-readable output.
- 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.
- 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.
- DUB settings & packages directory placement overhauled
You can now configure where DUB places its downloaded packages and where the user configuration is stored through environment variables or through the dub configuration. You need to use an environment variable or the system-wide dub configuration to specify where the user configuration is stored.
By default DUB stores the packages on
- Windows: %APPDATA%/dub/settings.json + %LOCALAPPDATA%/dub/packages/
- Posix: $HOME/.dub/{packages/,settings.json}
now if the DUB_HOME environment variable is set it instead stores the packages (and other config) in
- $DUB_HOME/{packages/,settings.json}
alternatively if DUB_HOME isn't set, but DPATH is set, the following path is used:
- $DPATH/dub/{packages/,settings.json}
The DPATH environment variable is intended to be used by all D tooling related things doing user-space installation of things. It can be used to avoid cluttering the home folder.
Additionally to environment variables it is possible to configure the package placement path + settings.json path through DUB's settings.json file. To configure where the user-editable settings.json is placed you need to adjust the system-wide dub configuration.
In the settings.json you can set the following fields:
{ "dubHome": "/path/to/dub", // sets both package store and config location }
Additionally, these config paths will have environment variables using the $VARIABLE syntax resolved.
The following list describes which path is going to be picked, from top to bottom, stopping whenever one is found:
- $DUB_HOME environment variable
- $DPATH environment variable
- system-wide settings.json: "dubHome" property (only for userSettings)
- most specific settings.json: "dubHome" property (only for localRepository)
- 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
- '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.
- 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.
- The override system is deprecated
Dub had an "override" system, allowing a specific version or version range to be overriden by a specific package. This override system was developed with a purely version-based approach in mind, however since its inception, more ways to specify dependencies have been added, making the override approach redundant and less flexible than other approaches. From this release, dub will warn you if it finds an override file, or when using the dub add-override / dub remove-override commands.
- 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".
- 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
- Bugzilla 4854: Regression(2.047, Mac 10.5 only) writefln Segmentation fault if no globals
- Bugzilla 7375: Regression(2.057): Invalid downcast permitted with derived/aliased template classes
- Bugzilla 7995: regression(2.059): D runtime initialization from C fails on OSX in 2.059, worked in 2.058
- Bugzilla 9052: [2.061 alpha] AA.length in a const context tries to call opAssign + no error line number
- Bugzilla 10106: [ICE] Ice in glue.c:1215 + 2 error messages without lines
- Bugzilla 10440: shared library on osx: worked in 2.062, fails in 2.063 / 2.063.2
- Bugzilla 11203: extern (C++) classes broken
- Bugzilla 11344: [2.064 beta] Error: object.destroy called with argument types matches both
- Bugzilla 12580: [REG2.066a] dup() won't accept void[]
- Bugzilla 13025: Tools repository does not build on Ubuntu
- Bugzilla 13034: [Reg] core.stdc.stdio - deprecation warning with dmd -inline
- Bugzilla 14104: aa with pointer key type doesn't find existing value
- Bugzilla 14573: [REG2.067] Extreme memory usage when synchronized( object ) is used
- Bugzilla 14926: Programs compiled using dmd 2.068 are generating dummy profilegc.log files
- Bugzilla 15430: [REG2.069] amdMmx hangs up
- Bugzilla 15947: [REG 2.069.0?] simple multithreaded program + "-profile=gc" = crash
- Bugzilla 17876: [REG 2.074] Internal error when comparing inout(Foo[][]) with Foo[][]
- Bugzilla 18068: No file names and line numbers in stack trace
- Bugzilla 20809: return statement might access memory from destructed temporary
- Bugzilla 21197: Wrong lifetime inference with DIP1000 in dmd 2.093.0
- Bugzilla 22300: [REG 2.098-rc.2] -checkaction=context of a shared type with an opCast fails to compile
- Bugzilla 22844: [REG 2.089] SIGBUS, Bus error in _d_newitemU
- Bugzilla 23019: Missing filename when -of points to an existing directory
- Bugzilla 23046: [REG][CODEGEN] __simd(XMM.LODLPS) bad codegen
- Bugzilla 23076: SIMD assert fail with -inline -O converting float to short
- Bugzilla 23247: Deprecation: argument 0.0L for format specification "%La" must be double, not real
- Bugzilla 23271: goto skips declaration of variable bugred.A.test.__appendtmp4
- Bugzilla 23291: Members of arrays of shared classes cannot be compared
- Bugzilla 23337: Wrongly elided postblit/copy ctor for array construction (_d_arrayctor lowering)
- Bugzilla 23386: Segfault on enum member UDA inside template
DMD Compiler bug fixes
- Bugzilla 1: asm enter and leave bug
- Bugzilla 2: Hook up new dmd command line arguments
- Bugzilla 1761: TypeInfo.toString for function types always indicates no-parameter function
- Bugzilla 2384: abi spec is unclear on parameter passing
- Bugzilla 2396: -O causes very long execution time on foreach loop of large array of structs
- Bugzilla 2834: Struct Destructors are not called by the GC, but called on explicit delete.
- Bugzilla 2952: Segfault on exit when using array ops with arrays of doubles larger than 8 elements
- Bugzilla 3831: writeln of a delegate typeid
- Bugzilla 4583: PIC code not working: EBX register set incorrectly
- Bugzilla 5689: [64-Bit] uniform() fails with -profile
- Bugzilla 5835: TypeInfo_Array.getHash creates raw data hash instead using array element hash function
- Bugzilla 5842: hash table corruption
- Bugzilla 5995: string append negative integer causes segfault
- Bugzilla 8366: Overriding const member function in conjunction with mutable overload causes a strange error
- Bugzilla 8828: Long compilation time of a destroy() on a large fixed-sized matrix
- Bugzilla 9092: GC.extend allocates less then it reports
- Bugzilla 9161: Linker error on linux if struct has @disabled ~this();
- Bugzilla 10277: Incorrect error file and line on redeclaration of TypeInfo
- Bugzilla 10747: Win64: warning about non-existing vc100.pdb
- Bugzilla 11653: No error when forgetting break with range cases.
- Bugzilla 12962: osver.mak should use isainfo on Solaris to determine model
- Bugzilla 13123: Disallow throwing contracts for nothrow functions
- Bugzilla 13661: static array init does not call destructors
- Bugzilla 13732: Regular templates can use "template this", and they allow any type to be passed
- Bugzilla 14024: [CTFE] unstable postblit/destructor call order on static array assignment
- Bugzilla 14617: PTHREAD_MUTEX_INITIALIZER does not work on OSX
- Bugzilla 14694: Functions nested within functions need their body in the generated .di file
- Bugzilla 14905: duplicate error message: 'Warning: statement is not reachable'
- Bugzilla 15290: length of associative array literal with duplicate keys is wrong
- Bugzilla 15353: std.experimental.allocator cannot free memory in its destructor if the GC is an ancestor
- Bugzilla 15525: SEGV running semantic analysis on non-root decl that has errors.
- Bugzilla 16575: [ICE] extern(C++) function with D specific types
- Bugzilla 16743: Intrinsic recognition sometimes fails if a software implementation is available
- Bugzilla 17764: [scope][DIP1000] Escape checker defeated by composition transformations
- Bugzilla 18828: [-betterC] helpless error in object.d
- Bugzilla 18973: @disable on const toHash causes unresolved symbol error
- Bugzilla 19178: Static initialization of 2d static arrays in structs produces garbage or doesn't compile sometimes
- Bugzilla 19285: false positive GC inferred
- Bugzilla 19635: -checkaction=context not working with attributes
- Bugzilla 19783: Fail to emplace struct with betterC
- Bugzilla 19831: throw/catch in scope(exit) crashes with illegal instruction
- Bugzilla 20019: Symbol not found: _dyld_enumerate_tlv_storage on macOS 10.15
- Bugzilla 20048: [Windows] Program segfaults when running tests
- Bugzilla 20365: Copy constructor not invoked on static arrays of structs but the postblit works
- Bugzilla 20559: Reference type + alias this + AA + AA.clear causes SEGV
- Bugzilla 20613: String switch in -betterC fails for 7+ labels
- Bugzilla 20823: [DIP 1000] un-@safe code fails with dip1000
- Bugzilla 21314: ICE on extern(c++) static class variables
- Bugzilla 21416: betterC mode program with C++ interface fails to link
- Bugzilla 21432: [CTFE] Cannot declare enum array in function scope
- Bugzilla 21472: -checkaction=context doesn't work with tupleof
- Bugzilla 21477: TypeInfo errors in betterC are cryptic
- Bugzilla 21676: [ICE][SIMD] DMD crashing with SIMD + optimizations + inlining
- Bugzilla 21956: ice on foreach over an AA of noreturn
- Bugzilla 22108: DIP1000 parameter mistakenly interpreted as return scope instead of scope
- Bugzilla 22124: Corrupted closure when compiling with -preview=dip1000
- Bugzilla 22126: -checkaction=context should not print overlapped struct members
- Bugzilla 22134: Deprecate returning a discarded void value from a function
- Bugzilla 22179: core.stdcpp.utility is missing in dmd binary dist
- Bugzilla 22283: -preview=in -inline leads to strange error inside object.d
- Bugzilla 22351: extern(C++) function contravariant in D, but not C++
- Bugzilla 22390: Compiler crash when iterating empty array of bottom types
- Bugzilla 22429: importC: designator-list not supported yet
- Bugzilla 22535: ImportC: gcc/clang math intrinsics are rejected.
- Bugzilla 22553: ImportC: undefined identifier __uint128_t
- Bugzilla 22598: importC: Add support for __extension__ keyword
- Bugzilla 22610: ImportC: 3 extra initializer(s) for struct __tag21
- Bugzilla 22626: Can't use synchronized member functions with -nosharedaccess
- Bugzilla 22652: importC: Braceless initializer of nested struct is rejected.
- Bugzilla 22664: Disassembler mistakes rdtscp for invlpg ECX
- Bugzilla 22674: ImportC: compatible types declared in different translation units are not treated equivalent in D.
- Bugzilla 22680: @safe hole with destructors
- Bugzilla 22706: Bad error on explicit instantiation of function template with auto ref parameter
- Bugzilla 22717: object.TypeInfo_Struct.equals swaps lhs and rhs parameters
- Bugzilla 22724: ImportC: VC extension __pragma(pack) is not implemented
- Bugzilla 22756: ImportC: no __builtin_offsetof
- Bugzilla 22784: pragma(printf) applies to nested functions
- Bugzilla 22830: Solaris: error: module 'core.stdc.math' import 'signbit' not found
- Bugzilla 22846: [REG 2.066] SIGBUS, Bus error in _d_newarrayiT
- Bugzilla 22865: __traits(compiles) affects inferrence of attributes
- Bugzilla 22875: importC: cannot assign const typedef with pointers to non-const one
- Bugzilla 22925: importC: multi-dimensional array is not a static and cannot have static initializer
- Bugzilla 22952: Compiler fails to find package.d modules via -mv map
- Bugzilla 22973: importC: sizeof with array and pointer access gives array type has incomplete element type
- Bugzilla 23006: importC: dmd segfaults on static initializer for multi-dimensional array inside struct
- Bugzilla 23007: importC: dmd segfaults for extra braces in array initializer
- Bugzilla 23009: [CODEGEN][SIMD] SIMD + optimizations + inlining + double
- Bugzilla 23010: mixed in aliaseqs used as type dont initualize
- Bugzilla 23012: importC: asm label to set symbol name not applied from forward declaration
- Bugzilla 23018: importC: syntax error for sizeof with postfix operator on parenthesized expression
- Bugzilla 23022: [dip1000] typesafe variadic parameter should not infer return
- Bugzilla 23027: ImportC: Array of struct is not a static and cannot have static initializer
- Bugzilla 23030: importC: errors using typedef struct after first use as const
- Bugzilla 23037: importC: type with only type-qualifier doesn't work
- Bugzilla 23038: importC: sizeof inside struct has struct members in scope
- Bugzilla 23039: importC: declaration with array length has itself in scope
- Bugzilla 23042: -betterC still includes RTInfo
- Bugzilla 23044: importC: comma expression with function call parsed as declaration
- Bugzilla 23045: importC: casted function type is missing extern(C)
- Bugzilla 23047: [ICE][SIMD] Do not SROA vector types
- Bugzilla 23050: Incorrect disassembly of code with -vasm and 0xBE and 0xBF opcodes
- Bugzilla 23054: importC: struct compound-literal assigned by pointer has wrong storage duration
- Bugzilla 23056: importC: dmd asserts for missing return statement in CTFE function
- Bugzilla 23057: importC: dmd segfault on invalid syntax
- Bugzilla 23063: It is possible to return a noreturn value
- Bugzilla 23068: [betterC] BetterC does not respect -checkaction=halt
- Bugzilla 23073: [dip1000] scope inference from pure doesn't consider self-assignment
- Bugzilla 23088: spurious case of "expression has no effect"
- Bugzilla 23105: __trait(getMember) and mixin() of the same code as a string behave differently
- Bugzilla 23112: code passes @nogc, allocates anyway
- Bugzilla 23123: -vasm wrong result for cmpxchg16b
- Bugzilla 23135: Covariance rules for C++ member functions mismatch D
- Bugzilla 23138: Overrides of member functions of an inherited class ignores attribute "downcast"
- Bugzilla 23159: [betterC] scope(failure) use in betterC gives confusing error
- Bugzilla 23167: inaccurate diagnostic for internal tuple bound violation
- Bugzilla 23168: [DIP1000] return scope wrongly rewritten for structs with no indirections
- Bugzilla 23169: [DIP1000] Mangling does not distinguish return and return scope
- Bugzilla 23173: "Error: signed integer overflow" for compiler generated string of long.min
- Bugzilla 23174: Can't alias tuple when it's part of dot expression following a struct literal
- Bugzilla 23176: -vasm misses immediates for some SSE2 instructions
- Bugzilla 23178: Unknown error using alias to __traits evaluated as expression
- Bugzilla 23192: Can't iterate aggregate fields with static foreach inside a member function
- Bugzilla 23205: Can't declare mixin template inside a function
- Bugzilla 23206: ImportC: __declspec(noreturn) does not compile
- Bugzilla 23207: dmd hangs compiling druntime/src/core/stdc/errno.c
- Bugzilla 23213: ImportC - variable length array does not compile
- Bugzilla 23214: ImportC: typedef with unsigned types does not compile
- Bugzilla 23217: ImportC: extra initializer(s) error for array of structs
- Bugzilla 23222: vcg-ast segfaults on aliases to parent module
- Bugzilla 23223: Aliases to modules print the modules contents into ast dump
- Bugzilla 23224: ImportC: memory model switch is not passed to C preprocessor
- Bugzilla 23225: OpenBSD: cpp invocation cannot find files
- Bugzilla 23230: cannot implicitly convert expression define of type char[7] to char
- Bugzilla 23235: [DIP1000] typesafe variadic parameters should automatically be scope
- Bugzilla 23236: can't initialize a @mustuse member in constructor
- Bugzilla 23241: __traits getMember breaks compilation when hit an alias
- Bugzilla 23249: Deprecation: argument &p for format specification "%m" must be char*, not char**
- Bugzilla 23251: Deprecation: format specifier "%[a-z]" is invalid
- Bugzilla 23252: Deprecation: format specifier "%[]]" is invalid
- Bugzilla 23254: Deprecation: format specifier "%S" and "%C" are invalid
- Bugzilla 23256: must supply -mscrtlib manually when compiling for Windows
- Bugzilla 23262: typesafe variadic function parameter cannot infer return
- Bugzilla 23293: ImportC: _Bool bit fields layout does not match gcc
- Bugzilla 23308: Can't resolve overload of varargs function if one parameter is the result of a ternary expression
- Bugzilla 23327: [ICE] SEGV in AssocArray!(Identifier, Dsymbol).AssocArray.opIndex(const(Identifier)) at src/dmd/root/aav.d:313
- Bugzilla 23331: implicit cast from noreturn crashes compiler in various ways
- Bugzilla 23338: braceless subarray initalizers for struct fields fails
- Bugzilla 23340: std.path: expandTilde erroneously raises onOutOfMemory on failed getpwam_r()
- Bugzilla 23342: ImportC: Array compound literals use the GC
- Bugzilla 23343: ImportC: functions declared with asm label to set symbol name gets extra underscore prepended
- Bugzilla 23345: ImportC: out of order designated initializers initialize to wrong value
- Bugzilla 23346: ImportC: pragma pack is not popped
- Bugzilla 23347: ImportC: pragma pack causes asm label to set symbol name to be ignored
- Bugzilla 23348: not handling braceless sub structs in initializers
- Bugzilla 23351: A bunch of Mayonix's dmd-segfaulting programs
- Bugzilla 23355: invalid template parameter loses error location in some cases
- Bugzilla 23357: ImportC: compatible types with definitions leads to redeclaration error when used from D.
- Bugzilla 23379: Cast of expressions with type noreturn result in ice
- Bugzilla 23380: [dip1000] class parameter should not be treated as ref qua lifetime
- Bugzilla 23406: [seg fault] enums can cause compile time seg faults with assignments using alias this
DMD Compiler enhancements
- Bugzilla 3952: pragma(msg,...) has bugs + alternative idea
- Bugzilla 7243: Compiler should call separate function when allocating a struct on the heap
- Bugzilla 7372: Error provides too little information to diagnose the problem (error: undefined identifier)
- Bugzilla 9726: Add minimum % coverage required for -cov testing
- Bugzilla 12330: array.reserve at compile time too
- Bugzilla 13138: add peek/poke as compiler intrinsics
- Bugzilla 14690: pragma(inline, true) functions must have their bodies emitted in the .di file
- Bugzilla 14755: Could -profile=gc also give the number of allocations that led to X bytes being allocated?
- Bugzilla 16394: TypeInfo.init() for static arrays returns single element instead of whole array
- Bugzilla 16558: [Mir] Generic unaligned load/store like (like LDC loadUnaligned and storeUnaligned)
- Bugzilla 16701: Remove Restriction of "package.d" Source File Module Forced to All Lowercase
- Bugzilla 17575: named mixin template error message
- Bugzilla 21243: Allow lambdas to return auto ref
- Bugzilla 21673: [SIMD][Win64] Wrong codegen for _mm_move_ss
- Bugzilla 22880: importC: support __restrict__ __signed__ __asm__
- Bugzilla 22911: dtoh: make include directives sorted for generated headers
- Bugzilla 23079: [dip1000] be more lenient when taking address of ref return
- Bugzilla 23141: Improve -release switch description
- Bugzilla 23142: Scope should not apply to unittests
- Bugzilla 23143: ImportC: forward enum declarations need to be supported
- Bugzilla 23165: lambda functions are not inlined
- Bugzilla 23191: [dip1000] scope parameter can be returned in @system code
- Bugzilla 23216: Better Error Message For foreach_reverse Without Bidirectional Range
- Bugzilla 23284: Enhance floating point not representable error message
- Bugzilla 23295: [dip1000] explain why scope inference failed
- Bugzilla 23306: @disable new() ought not disable scope A = new A
- Bugzilla 23369: Confusing error message for duplicate import
- Bugzilla 23376: Allow multi-code-point HTML entities
- Bugzilla 23384: Suggest calling matching base class method when hidden
Phobos regression fixes
- Bugzilla 11309: std.concurrency: OwnerTerminated message doesn't work
- Bugzilla 20354: interface is not supported by CanCAS in core.internal.atomic
- Bugzilla 23245: [REG 2.099] std.format ignores non-const toString method of static array element
- Bugzilla 23246: [REG 2.099] std.format ignores non-const toString method of associative array value
- Bugzilla 23268: clamp no longer accepts shorts
Phobos bug fixes
- Bugzilla 64: Unhandled errors should go to stderr
- Bugzilla 3798: core.cpuid locks systems with Xeon E5530 CPU
- Bugzilla 9025: core.thread.Fiber seems to crash on Win64
- Bugzilla 10469: WinAPI declarations in std.process should be moved to core.sys.windows.windows
- Bugzilla 11192: std.demangle doesn't demangle alias template arguments
- Bugzilla 14543: std.algorithm.searching.until does not handle range sentinels nicely
- Bugzilla 16034: map should be possible with a reference only
- Bugzilla 16232: std.experimental.logger.core.sharedLog isn't thread-safe
- Bugzilla 17966: chunkBy cannot accept an input range (from multiwayMerge)
- Bugzilla 18631: std.random.choice does not work with const arrays
- Bugzilla 22637: std.conv to!double and parse!double dont throw on under/overflow
- Bugzilla 22683: core.math.rndtonl can't be linked
- Bugzilla 23182: Can't assign struct with opAssign to SumType in CTFE
- Bugzilla 23196: File constructor fails to preallocate oom error, uses exception instead
- Bugzilla 23215: calling std.file.remove with null string segfaults in strlen
- Bugzilla 23250: Unicode regional indicators are not paired correctly
- Bugzilla 23270: std.random.dice is poorly documented
- Bugzilla 23288: zlib: Fix potential buffer overflow
- Bugzilla 23324: Incorrect source link in std.format docs
- Bugzilla 23350: Nondeterministic test failure in std.concurrency
- Bugzilla 23362: Permutations should be a forward range
Phobos enhancements
- Bugzilla 13893: "rawRead must take a non-empty buffer"
- Bugzilla 15128: "IP_ADD_MEMBERSHIP" error in winsock2.d
- Bugzilla 18735: all versions of find and canfind should identify usage of predicate
- Bugzilla 20869: std.algorithm.mutation : move is overly trusting of opPostMove
- Bugzilla 21000: -preview=nosharedaccess precludes use of stdin,stdout,stderr
- Bugzilla 23101: [std.sumtype] canMatch does not account ref
- Bugzilla 23298: std.string wrap wraps early
- Bugzilla 23333: DList range can be @nogc
- Bugzilla 23370: std.base64 can have more @nogc functions
Druntime regression fixes
- Bugzilla 1180: the GC failes to handle large allocation requests propperly
- Bugzilla 7365: [Regression after 2.057] AAs broken for Object keys and values with opEquals
- Bugzilla 8477: [2.060 beta] Strange error calling member func from overridden Exception::toString()
- Bugzilla 8633: core.atomic not documented
- Bugzilla 9099: core.atomic.atomicLoad() cannot handle non-POD structs
- Bugzilla 10976: thread_joinAll after main exit performed too late
- Bugzilla 11149: Runtime.args no longer available in static constructors.
- Bugzilla 11301: [2.064 beta] core.sys.linux.sys.mman triggers enum resolution error
- Bugzilla 11378: implicit runtime initialization/finalization is broken
- Bugzilla 11478: shared library on osx: worked in 2.062, fails in 2.063.2, still fails in 2.064
- Bugzilla 12136: [AA] Associative array keys and values become non-properties.
- Bugzilla 12220: [REG2.066a] hash.get() does not accept proper parameters
- Bugzilla 12427: Regression (2.066 git-head): Building druntime fails with -debug=PRINTF
- Bugzilla 12710: Bad @nogc requirement for Windows callbacks
- Bugzilla 12738: core.sys.posix.signal sigaction_t handler type mismatch
- Bugzilla 12848: [REG2.061] crash in _d_run_main() on some unicode command line argument (Win32)
- Bugzilla 13078: [dmd 2.066-b2] AA rehash failed with shared
- Bugzilla 13084: ModuleInfo.opApply delegate expects immutable parameter
- Bugzilla 13111: GC.realloc returns invalid memory for large reallocation
- Bugzilla 13148: ModuleInfo fields are unnecessary changed to const
- Bugzilla 13399: va_arg is nothrow yet may throw
- Bugzilla 13748: benchmark druntime/benchmark/aabench/string.d fails
- Bugzilla 13809: dup no longer works with types with postblit and destructors
- Bugzilla 14467: arr.capacity sometimes erroneously returns 0
- Bugzilla 14626: [REG2.066] byValue doesn't work with inout AA
- Bugzilla 14746: [REG2.068a] Behavior change with struct destructor and alias this
- Bugzilla 14750: druntime/test/coverage was added to druntime, but not to the MANIFEST - zip file broken again
- Bugzilla 14863: CLOCK_BOOTTIME should be optional to support <2.6.39 kernels
- Bugzilla 14882: [REG] MANIFEST is missing test/common.mak
- Bugzilla 14990: No rule to make target `src/core/sys/windows/stdio_msvc12.d', needed by 'druntime.zip'.
- Bugzilla 14993: Allocating in a destructor segfaults instead of throwing InvalidMemoryOperationError
- Bugzilla 15224: making 'clean' results in garbage commands
- Bugzilla 15334: [REG 2.069] OS X core.time ticksPerSecond calculation is incorrect
- Bugzilla 15434: [REG2.068] object.d imports from rt (breaking inline builds)
- Bugzilla 15482: new uuid.d forbids to link statically with other libraries
- Bugzilla 15822: InvalidMemoryOperationError when calling GC.removeRange/Root from a finalizer
- Bugzilla 15911: undefined __Unwind_GetIPInfo for x86_64
- Bugzilla 16211: [REG 2.058] Cyclic dependencies broken again
- Bugzilla 16974: [REG2.068] Equal associative arrays with associative array keys are considered unequal
- Bugzilla 17188: stdc qsort predicate requires scope parameters
- Bugzilla 17914: [Reg 2.075] Fibers guard page uses a lot more memory mappings
- Bugzilla 18071: [REG2.078] byKey, byValue and byKeyValue are now a hole for unsafe code
- Bugzilla 18193: module config is in file 'rt/config.d' which cannot be read
- Bugzilla 18252: [Reg 2.078] comparison of arrays of associative arrays no longer compiles
- Bugzilla 18652: hashOf example doesn't compile
- Bugzilla 18996: Inserting a type containing indirections into an std.container Array causes SIGILL(4). Illegal Instruction.
- Bugzilla 19005: [REG2.081-b1] object.hashOf no longer works for std.datetime.date.Date
- Bugzilla 19322: A lot of memory is consumed and not freed to the system when Exception is formatted with stacktrace in debug
- Bugzilla 19498: undefined identifier rt_loadLibraryW
- Bugzilla 19701: undefined reference to `_D6object__T6hashOf
- Bugzilla 19796: druntime PR#1982 broke array ops on double[] due to wrong assumption of integral element type
- Bugzilla 19902: hasElaborateCopyConstructor doesn't know about copy constructors
- Bugzilla 20219: Idle D programs keep consuming CPU in Gcx.scanBackground
- Bugzilla 20227: "Aborting from src/core/sync/event.d(141) Error: pthread_mutex_destroy failed." after fork()
- Bugzilla 20256: problem with signal handling and parallel GC on linux
- Bugzilla 20270: [REG2.087] Deadlock in garbage collection when running processes in parallel
- Bugzilla 20438: [Reg 2.086] GC: memory not reusable when calling GC.collect after GC.free
- Bugzilla 20447: [REG 2.089] importing core.thread exposes unistd, hiding object.dup
- Bugzilla 20748: Deprecation for assert using shared type and checkaction=context
- Bugzilla 20778: exception messages with nulls within are treated inconsistently
- Bugzilla 21097: [REG2.083] Stack exhaustion upon large struct .destroy
- Bugzilla 21110: OOB memory access, safety violation
- Bugzilla 21309: Missing core.thread.threadbase documentation
- Bugzilla 21363: [REG2.094] Implementation of core.bitop.ror(x,0) is using UB
- Bugzilla 21642: [REG 2.084] hashOf will fail to compile for some structs/unions that recursively contain shared enums
- Bugzilla 21656: [REG2.091] Wrong file read during exception stringification leads to SIGBUS
- Bugzilla 21712: [REG 2.096.0] sometimes coverage *.lst files are corrupted
- Bugzilla 22178: [REG 2.097] Compilers do not compile on Musl Libc
- Bugzilla 22210: std.meta.allSatisfy in mutual recursion classes cannot be compiled
- Bugzilla 22235: core.demangle does not support noreturn
- Bugzilla 22829: [REG master] Undefined symbol stderr first referenced in file test19933.o
- Bugzilla 22834: runnable_cxx/stdint.d: Undefined reference to _Z15testCppI8Mangleahahah
Druntime bug fixes
- Bugzilla 391: .sort and .reverse break utf8 encoding
- Bugzilla 3454: Inconsistent flag setting in GC.realloc()
- Bugzilla 4809: Stack trace when throwing exception misses location of the throw statement
- Bugzilla 5272: Postblit not called on copying due to array append
- Bugzilla 5375: Detection of cyclic module imports provides error findings on console, instead of exception msg
- Bugzilla 5407: X86_64: Segfault on AA Foreach
- Bugzilla 5593: Add dladdr to druntime for linux/FreeBSD
- Bugzilla 5930: cas doesn't work when used in code compiled with -D
- Bugzilla 5999: Runtime treats floating NaNs to be equal
- Bugzilla 6045: Unable to demangle symbols
- Bugzilla 6333: The 'capacity' function is not pure/nothrow/@safe.
- Bugzilla 6376: core.thread.thread_scanAll doesn't scan the stack due to ASLR on Mac OS X 10.7
- Bugzilla 6646: [SafeD] array.reserve is not @safe/trusted
- Bugzilla 7112: Add function in core.sys.posix.signal
- Bugzilla 7606: core.time.TickDuration opCmp accepts only lvalues
- Bugzilla 7954: x86_64 Windows fibers do not save nonvolatile XMM registers
- Bugzilla 7971: Cannot compile druntime with -debug=PRINTF
- Bugzilla 8046: simd.d needs some documentation
- Bugzilla 8132: LPTSTR always aliases to LPSTR
- Bugzilla 8274: thread_attachThis only works for main thread
- Bugzilla 8301: Access violation when a big array is allocated
- Bugzilla 8527: object.destroy doesn't destroy interfaces
- Bugzilla 8650: SLice opOpAssign SLice with overlap does not throw
- Bugzilla 8872: Missing extended window styles (WS_EX_... enumeration) in windows header
- Bugzilla 8960: DMD tester: Unable to set thread priority
- Bugzilla 9030: immutable _d_args can be written to with main(char[][])
- Bugzilla 9275: [GC] removeRoot hits assert(0) instead of being a no-op (as documented)
- Bugzilla 9373: Add deprecation message to all empty deprecation statements
- Bugzilla 9783: profiling recursive function calls yields bad tree timing
- Bugzilla 9799: Missing aliases and enums in druntime imports
- Bugzilla 9852: Empty associative array crashes program
- Bugzilla 10057: [2.063 beta] Module info overwritten in shared phobos.
- Bugzilla 10420: Incorrect function attributes in core.exception
- Bugzilla 10436: The runtime should print stack traces to stderr (like on *nix), not stdout
- Bugzilla 10457: _d_toObject might fail with shared libraries
- Bugzilla 10593: array's reserve/capacity go haywire if length has been changed prior
- Bugzilla 10701: [GC] segfault in GC
- Bugzilla 10711: shared phobos library should not depend on _Dmain
- Bugzilla 10720: ICE with is(aaOfNonCopyableStruct.nonExistingField)
- Bugzilla 10838: Null pointer dereference in gc.gcx.Gcx.isMarked
- Bugzilla 10894: Numerous DDoc parameter warnings in druntime (as found by 10236)
- Bugzilla 10897: btc, btr and bts shouldn't be safe
- Bugzilla 11011: core.time.Duration has example code which cannot compile
- Bugzilla 11168: core.stdc.time.asctime() is incorrectly marked as @trusted
- Bugzilla 11174: Both AF_PACKET and SO_BINDTODEVICE undefined
- Bugzilla 11293: wrong locale enumerate value
- Bugzilla 11294: Object destruction with alias this
- Bugzilla 11393: [GC] GC realloc and free don't ignore interior pointers
- Bugzilla 11414: druntime should run debug unittest
- Bugzilla 11446: [GC] GC realloc doesn't ignore non-GC owned pointers
- Bugzilla 11519: fix timing issue in core.thread unittest
- Bugzilla 11594: synchronized causing segfault instead of Error.
- Bugzilla 11674: core.stdc.fenv.fenv_t declaration not architecture aware
- Bugzilla 11761: aa.byKey and aa.byValue are not forward ranges
- Bugzilla 12121: atomicLoad!(MemoryOrder.acq) should not emit additional code on X86
- Bugzilla 12233: Attempting to use TypeInfo.init results in a compiler error due to lack of 'this'.
- Bugzilla 12289: incorrect core.stdc.stdio.fpos_t alias
- Bugzilla 12755: thread.di is outdated
- Bugzilla 12800: Fibers are broken on Win64
- Bugzilla 12843: Unit tests fail when GC is compiled with SENTINEL
- Bugzilla 12958: core.checkedint.mulu is broken
- Bugzilla 12975: posix.mak should use isainfo on Solaris systems to determine model
- Bugzilla 13052: TypeInfo.getHash should return same hash for different floating point zeros.
- Bugzilla 13057: posix getopt variables in core/sys/posix/unistd.d should be marked __gshared
- Bugzilla 13058: Thread priority handling doesn't work in Solaris
- Bugzilla 13186: core/sys/posix/sys/uio.d is not linked into the standard lib
- Bugzilla 13821: fiber + exception + win server 2012 failures
- Bugzilla 13854: Appending to an interior slice of a large array results in unnecessary 16-byte offset
- Bugzilla 13878: Appending to an array block with modified flags loses flag info
- Bugzilla 14036: Do not throw FinalizeError on OutOfMemoryError or InvalidMemoryOperationError
- Bugzilla 14157: fabsf fabsl for CRuntime_Microsoft
- Bugzilla 14215: invalid import in core.sys.linux.stdio
- Bugzilla 14226: invalid Runtime.traceHandler setup
- Bugzilla 14247: string within demangled symbol name should be made escape
- Bugzilla 14303: rt.util.container.array.Array unittest contains invalid code
- Bugzilla 14319: core.demangle does not support member function attributes
- Bugzilla 14350: Unit test failures are not displayed in Windows GUI programs
- Bugzilla 14401: typeid(shared X).init is empty for class types
- Bugzilla 14423: struct destructors not finalized for AA values
- Bugzilla 14439: aa's keys, values not usable in @safe context
- Bugzilla 14464: coverage merge doesn't work
- Bugzilla 14476: core.thread unit tests failing on FreeBSD 9+
- Bugzilla 14536: Calling destroy() on a on an extern(C++) class causes a segfault
- Bugzilla 14563: core.demangle: Does not demangle type modifers
- Bugzilla 14565: dmd -profile produces garbled output for long-running CPU-intensive processes
- Bugzilla 14576: [ddemangle] core.demangle unable to handle ambiguity in symbols
- Bugzilla 14601: pthread functions aren't marked @nogc
- Bugzilla 14785: Some corner cases are not handled properly by core.checkedint.
- Bugzilla 14870: incorrect use of assert to detect environmental errors in core.time
- Bugzilla 15009: Object.destroy calls unnecessary postblits for destruction of static arrays object
- Bugzilla 15036: SimpleDllMain assumes various symbols are available unqualified
- Bugzilla 15104: Switching fibers in finally blocks breaks EH
- Bugzilla 15111: hashOf fails for structs that have an alias this to a dynamic array
- Bugzilla 15270: use TLS to store Thread.getThis (pthread_getspecific causes heavy lock contention)
- Bugzilla 15322: version(Unicode) should affect only default aliases
- Bugzilla 15367: array of delegates comparison fails
- Bugzilla 15393: Debug versions in GC code doesn't compile.
- Bugzilla 15838: Many Win32 API callback functions miss extern(Windows)
- Bugzilla 15939: GC.collect causes deadlock in multi-threaded environment
- Bugzilla 15958: Missing extern(Windows) of core.sys.windows functions
- Bugzilla 15959: core.sys.windows modules should be modified for x64
- Bugzilla 15976: explicite TLS initializes badly in DLLs if other threads exist
- Bugzilla 15987: core.sys.windows.msacm remains pseudo definitions
- Bugzilla 15997: Wrong constant value for ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED in winhttp
- Bugzilla 16007: Some Win32 API structs has wrong definitions
- Bugzilla 16049: core.sys.windows structs have wrong sizes and aligns
- Bugzilla 16230: core.atomic.atomicLoad removes shared from aggregate types too eagerly
- Bugzilla 16380: no bindings for err.h
- Bugzilla 16470: Segfault with negative array length
- Bugzilla 16594: module destructors called again if an exception got thrown earlier
- Bugzilla 16651: atomicOp!"-="(ulong, uint) = wrong result/codegen
- Bugzilla 16654: hashOf returns different hashes for the same string value
- Bugzilla 16658: Win32API: default IE ver. set to 4.0 is too old
- Bugzilla 16764: hashOf is misleading, error-prone, and useless
- Bugzilla 16856: D does not work on FreeBSD current (what will eventually be 12) due to libunwind
- Bugzilla 17108: Associative array byKeyValue is unsafe
- Bugzilla 17375: colliding modules detected with binutils 2.28 linker and shared libraries
- Bugzilla 17431: GCBits should be @nogc to prevent deadlocks
- Bugzilla 17609: core.demangle demangles delegate variables as functions
- Bugzilla 17610: core.demangle shows return type of template alias parameter
- Bugzilla 17611: core.demangle cannot demangle delegates with function attributes
- Bugzilla 17624: typo in Fields documentation section of https://dlang.org/library/object/exception.html
- Bugzilla 17665: Win64 atomicLoad for T[] cannot be cast from size_t[2]
- Bugzilla 17788: MSCOFF: TLS broken when linking with linker from VS2017 15.3.1
- Bugzilla 17829: core.stdc.errno does not work with -betterC
- Bugzilla 17851: htonl already defined in phobos64.lib
- Bugzilla 17956: core.memory unittest failure (possibly glibc 2.26 specific)
- Bugzilla 18011: core.sys.condition cannot be used as shared
- Bugzilla 18117: ldiv_t struct in core.stdc.stdlib -- int vs c_long expectations
- Bugzilla 18240: core.stdc.wchar_ wmemset, etc. should be pure
- Bugzilla 18247: core.stdc.math functions that never set errno should be pure
- Bugzilla 18279: rt.util.utf does not properly reserve buffer in toUTF16/toUTF16z
- Bugzilla 18300: core.demangle demangling of really long symbol fails
- Bugzilla 18482: wincrypt functions should be @nogc nothrow
- Bugzilla 18531: core.exception.RangeError@src/core/demangle.d(216): Range violation
- Bugzilla 18536: Bad stack traces when building with -m32mscoff
- Bugzilla 18537: Cannot pass absolute path to coverage options
- Bugzilla 18547: Win32: throwing exception in fiber crashes application
- Bugzilla 18643: Compiling error when combining CAS and numeric literal.
- Bugzilla 18904: core.internal.string has issues with radix
- Bugzilla 18932: core.internal.hash.hashOf(val, seed) ignores seed when val is a raw pointer
- Bugzilla 18989: On OSX32, core.stdc.time.clock() should resolve to clock$UNIX2003()
- Bugzilla 19008: core.internal.convert.toUbyte doesn't work on enums
- Bugzilla 19046: OSX: bad value for core.stdc.time.CLOCKS_PER_SEC
- Bugzilla 19073: core.internal.hash should not bitwise hash representations of floating point numbers
- Bugzilla 19087: final switch cannot be used in -betterC
- Bugzilla 19090: core.internal.hash.bytesHash unit test uses incorrect test vector on BigEndian machines
- Bugzilla 19092: __delete doesn't work with immutable
- Bugzilla 19177: No version (Solaris) in druntime/src/core/stdc/time.d
- Bugzilla 19204: hashOf doesn't accept SIMD vectors
- Bugzilla 19250: DWARF Backtraces with very long symbol names read out of bounds when printing
- Bugzilla 19262: hashOf associative array should infer nothrow
- Bugzilla 19281: GC mishandles allocations >= 4GB
- Bugzilla 19282: hashOf segfaults for non-null C++ objects
- Bugzilla 19314: Thread object destruction may result in UB
- Bugzilla 19332: hashOf fails to compile for const struct that has non-const toHash & has all fields bitwise-hashable
- Bugzilla 19401: Fix bug in core.internal.traits.hasElaborateDestructor & hasElaborateCopyConstructor for struct with static array alias & for nested structs/unions
- Bugzilla 19433: Don't consume --DRT-* options if rt_cmdline_enabled is false
- Bugzilla 19481: Aborting from local/libphobos/libdruntime/core/sync/mutex.d(95) Error: pthread_mutex_init failed.
- Bugzilla 19489: Null function call results in no stack trace
- Bugzilla 19522: [GC] GC.query/addrOf/sizeOf fail for freed memory
- Bugzilla 19554: [2.084.0] Confusing message - Warning: struct Foo has method toHash
- Bugzilla 19562: core.internal.hash.hashOf array of pointers or delegates should be @safe
- Bugzilla 19568: hashOf should not unnecessarily call a struct's fields' postblits & dtors in CTFE
- Bugzilla 19571: Incorrect definition of DTM_FIRST in core.sys.windows.commctrl
- Bugzilla 19582: Make core.internal.convert.toUbyte in CTFE for arrays work with reference type elements and not call postblits/dtors
- Bugzilla 19593: dstrcmp with -profile causes stack overflow
- Bugzilla 19723: wrong time values in GC.profileStats
- Bugzilla 19810: destroy does not work for C++ classes without destructor
- Bugzilla 19830: core.memory.__delete destructs arrays of structs in the wrong order
- Bugzilla 19847: no GC memory above 4GB reported with --DRT-gcopt=profile:1
- Bugzilla 19861: core.cpuid reports the wrong number of threads
- Bugzilla 19909: core.stdc.errno missing POSIX error code on Windows
- Bugzilla 20026: retrying while pthread_cond_signal/pthread_cond_broadcast return EAGAIN
- Bugzilla 20049: object.destroy doesn't propagate attributes
- Bugzilla 20066: Assertion on void[] does not compile with -checkaction=context
- Bugzilla 20088: void[] cast unusable in betterC due to new __ArrayCast template
- Bugzilla 20155: Allocating a struct with dtor on the GC heap can produce false pointers
- Bugzilla 20214: GC: realloc can result in false pointers if address doesn't change
- Bugzilla 20271: Handle forking in the GC
- Bugzilla 20299: checkaction=context not working with temporary destructors
- Bugzilla 20303: Memory leak in core.thread
- Bugzilla 20315: checkaction=context fails for const(void[]) argument
- Bugzilla 20322: checkaction=context fails for wstring/dstring arguments
- Bugzilla 20323: checkaction=context fails for non-copyable arguments
- Bugzilla 20346: std.uuid does not compile with checkaction=context
- Bugzilla 20355: undefined identifier U in core.atomic
- Bugzilla 20364: [REG2.069] changing length for typeof(null)[] array seg faults in _d_arraysetlengthiT()
- Bugzilla 20440: Associative arrays with values whose opAssign doesn't return a ref don't support require function
- Bugzilla 20459: Runtime arg parsing should stop at '--'
- Bugzilla 20468: emplace doesn't forward constructor arguments' (l/r)valueness
- Bugzilla 20476: chainTogether leaks exception with -dip1008
- Bugzilla 20497: thread with limited stackspace crashes depending on size of TLS
- Bugzilla 20512: Return type of memchr should be inout(void)* rather than void*
- Bugzilla 20513: Return type of wmemchr should be inout(wchar_t)* rather than wchar_t*
- Bugzilla 20591: ldc doesn't print files' directories when printing stack trace
- Bugzilla 20629: atomicStore does not compile for struct using -m64
- Bugzilla 20731: checkaction=context fails for structs with 'alias
this' - Bugzilla 20750: checkaction=context segfaults for null references
- Bugzilla 20757: checkaction=context prints characters as integers
- Bugzilla 20760: checkaction=context doesnt print floating point numbers correctly
- Bugzilla 20763: checkaction=context does not format pointers
- Bugzilla 20767: [DIP1014] __move_post_blt must only recursively call itself on a struct's fields not all members
- Bugzilla 20768: [DIP1014] __move_post_blt must recursively call itself on static arrays whose elements are structs or static arrays that recursively contain structs
- Bugzilla 20832: Fix ioctl request for TCSETS2
- Bugzilla 20852: core.sys.posix.sys.wait missing definitions on FreeBSD
- Bugzilla 20910: Default unittest runner reports wrong unittest count
- Bugzilla 21029: Remove __ArrayEq which the compiler no longer uses as of DMD PR #11212
- Bugzilla 21055: core.stdc.stdarg is not @nogc
- Bugzilla 21116: onArrayCastError is horribly unsafe
- Bugzilla 21315: TypeInfo_StaticArray.swap is broken
- Bugzilla 21323: (64-bit Windows only) core.stdcpp.vector could not have core.stdcpp.vector as element
- Bugzilla 21344: core.stdcpp.string.basic_string does not implement opEquals
- Bugzilla 21346: core.stdcpp.vector.vector does not implement opEquals
- Bugzilla 21365: TypeInfo.swap must not allow reachable memory to be freed if interrupted by a garbage collection pass
- Bugzilla 21371: core.stdcpp.allocator: _Adjust_manually_vector_aligned checks for sentinel unconditionally (Windows only)
- Bugzilla 21421: core.stdcpp.new_.cpp_delete does not work with classes
- Bugzilla 21441: TypeInfo_Enum.destroy and TypeInfo_Enum.postblit not calling destroy and postblit of base type
- Bugzilla 21442: Calling AA.remove from a destructor might lead to InvalidMemoryOperationError
- 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
- Bugzilla 21484: Infinite recursion in core.memory : GC.{get,set,clr}Attr(const scope void*...)
- Bugzilla 21544: -checkaction=context formats enum members as their base type
- Bugzilla 21550: core.memory.__delete does not actually work
- Bugzilla 21578: core.atomic.atomicFetchSub for pointers incorrectly calls wrong function from core.internal.atomic
- Bugzilla 21631: core.atomic.cas fails to compile with const ifThis (if target is a pointer)
- Bugzilla 21666: wrong printf format specifier for real with -checkaction=context on Win64
- Bugzilla 21701: casWeak is not implemented
- Bugzilla 21764: checkaction=context doesn't work for empty tuples
- Bugzilla 21857: TypeInfo_Array.compare can give wrong result when either array exceeds 2GB
- Bugzilla 21919: darwin: SEGV in core.thread tests on OSX 11
- Bugzilla 21983: dup leaves a partially constructed array if postblit/copy ctor throws
- Bugzilla 21996: -checkaction=context triggers InvalidMemoryOperationError in finalizer
- Bugzilla 22024: hashOf does not work on enum types whose base type is a SIMD vector
- Bugzilla 22026: checkaction=context: Exception thrown by toString hides assertion failures
- Bugzilla 22076: hashOf(S) can segfault if S.toHash is forwarded via 'alias this' to a receiver which may be null
- Bugzilla 22081: DWARF v5 support is utterly broken - 'illegal instruction' when throwing exceptions
- Bugzilla 22085: checkaction=context doesn't support extern(C++) classes
- Bugzilla 22107: [scope][dip1000] Can't .dup an array of structs with impure copy constructor
- Bugzilla 22143: Throwable ctor doesn't increment chained exception's ref count
- Bugzilla 22166: On OpenBSD and Android make core.sys.posix.arpa.inet: htonl, htons, ntohl, & ntohs work correctly on big endian architectures
- Bugzilla 22167: OpenBSD core.sys.posix.semaphore: sem_t should be a pointer to an opaque struct
- 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
- Bugzilla 22218: Dynamic casts across binary boundaries can easily fail
- Bugzilla 22328: Specific D types are used instead of Windows type aliases
- Bugzilla 22336: core.lifetime.move doesn't work with betterC on elaborate non zero structs
- Bugzilla 22440: OpenBSD: Sync sysctl.d
- Bugzilla 22443: OpenBSD: Fix Fiber support by adding MAP_STACK
- Bugzilla 22453: OpenBSD: Add a dummy value for AI_V4MAPPED
- Bugzilla 22455: Remove useless conditional assignment of DISABLED_TESTS in posix.mak
- Bugzilla 22456: OpenBSD: timer_* functions don't exist on OpenBSD
- Bugzilla 22485: OpenBSD: Fix core.sys.openbsd.unistd imports
- Bugzilla 22523: DRuntime options passed after -- affect current process
- Bugzilla 22552: moveEmplace wipes context pointer of nested struct contained in non-nested struct
- Bugzilla 22702: druntime not compliant with D spec re getLinkage
- Bugzilla 22721: importC: some gnu builtins are rejected
- Bugzilla 22735: __builtins.di does not implement __builtin_bswap64 correctly
- Bugzilla 22741: importC: Error: bswap isn’t a template
- Bugzilla 22744: ImportC: builtins defined in __builtins.di cause undefined symbol linker errors.
- Bugzilla 22763: importing std.utf fails in BetterC
- Bugzilla 22777: stat struct in core.sys.windows.stat assumes CRuntime_DigitalMars
- Bugzilla 22779: druntime: Calling __delete with null pointer-to-struct segfaults
- Bugzilla 22822: core.sys.posix.sys.stat: PPC stat_t bindings corrupt
- Bugzilla 22832: Can't destroy class with overloaded opCast
- Bugzilla 22843: Program hangs on full gc collect with --DRT-gcopt=fork:1 if run under valgrind/callgrind
- Bugzilla 23051: OpenBSD: Build broken on 2.100.0-beta.1 due to the inout attribute no longer implying the return attribute
- Bugzilla 23060: MacOS: core.sys.posix.sys.socket missing some definitions
- Bugzilla 23065: importC: __builtin_expect should use c_long
- Bugzilla 23067: importC: offsetof macro assumes size_t is defined
- Bugzilla 23129: object.destroy doesn't consider initialize=false on D classes
- Bugzilla 23228: OpenBSD: No SIGRTMIN or SIGRTMAX
- Bugzilla 23302: std.algorithm.comparison.predSwitch producing SwitchError with error message as the filename
Druntime enhancements
- Bugzilla 3851: Array copy error message with no line number
- Bugzilla 6649: core.sys.posix.sys.ioctl
- Bugzilla 8411: core.time: No easy way to check if Duration is empty
- Bugzilla 8544: Expose "cArgs" in druntime
- Bugzilla 8831: core.atomic: add compare-and-swap function with other result type
- Bugzilla 12891: add atomicFetchAdd and atomicFetchSub to core.atomic
- Bugzilla 12964: dev_t is incorrectly defined in runtime for Solaris systems
- Bugzilla 12976: ModuleInfo should be immutable on Solaris
- Bugzilla 12977: lf64 definitions aren't correct on Solaris
- Bugzilla 12978: struct sigaction is too small on 32-bit solaris
- Bugzilla 13037: SIGRTMIN and SIGRTMAX aren't correctly defined on Solaris
- Bugzilla 13143: Need backtrace support on Solaris
- Bugzilla 13144: Add fenv support for Solaris
- Bugzilla 13145: Need LC_ locale values for Solaris
- Bugzilla 13146: Add missing function definitions from stdlib.h on Solaris
- Bugzilla 13559: missing 64-bit version of array short operations
- Bugzilla 13725: onInvalidMemoryOperationError et al should not be inlined
- Bugzilla 13826: Move volatileLoad/Store to core.volatile when the volatile keyword is removed
- Bugzilla 14007: shmctl with IPC_STAT returns wrong number of attachments. shmid_ds is defined wrong.
- Bugzilla 14117: core.atomic should be @safe
- Bugzilla 14385: AA should use open addressing hash
- Bugzilla 14790: coverage merge should detect changed source code
- Bugzilla 14892: -profile=gc doesn't account for GC API allocations
- Bugzilla 15007: core.atomic match C++11
- Bugzilla 15053: Runtime.cArgs not @nogc
- Bugzilla 15137: core.time: Support Duration/Duration and Duration%Duration
- Bugzilla 15268: possible deadlock for Thread.getAll/Thread.opApply w/ GC.collect
- Bugzilla 15628: Exceptions in fibers never caught with /SAFESEH
- Bugzilla 16377: Make --DRT GC profile information available outside of GC destruction
- Bugzilla 16664: core.demangle functions are not callable from @safe or pure code
- Bugzilla 16797: Zero clock resolution lead to division by zero
- Bugzilla 17300: Enable setting code coverage options on the command line
- Bugzilla 17563: gc_inFinalizer should be public
- Bugzilla 18220: Allow rt_trapexceptions to be set from the CLI
- Bugzilla 18768: object.getArrayHash with custom toHash shouldn't just sum hashes of array elements
- Bugzilla 18816: [betterC] Standard Streams Unlinkable
- Bugzilla 18918: core.internal.hash should perform memberwise hashing of structs with references
- Bugzilla 18920: core.internal.hash of array of scalars should be @safe
- Bugzilla 18921: make core.internal.hash cater to memberwise hash chaining
- Bugzilla 18923: Semaphore internal handle should be protected instead of private
- Bugzilla 18924: Use addition rather than XOR for order-independent hash combination
- Bugzilla 18925: core.internal.hash auto-hash for structs of scalar fields should be @safe
- Bugzilla 18942: core.internal.hash can take advantage of alignment info on non-x86
- Bugzilla 18943: core.internal.hash remove outdated special case for DMD unaligned reads
- Bugzilla 18981: SIGSEGV during backtrace when debug info is compressed
- Bugzilla 19009: core.internal.hash.hashOf default hash (absent toHash) should be @nogc
- Bugzilla 19048: In core.internal.hash.hashOf reduce template bloat: remove auto ref where unneeded and add const where possible
- Bugzilla 19049: object.hashOf - don't wrap a public function with an identical public function
- Bugzilla 19071: core.internal.hash should have non-chained toHash overloads
- Bugzilla 19072: Object.toHash and typeid(void*).getHash(&ptr) should be more varied in their low bits
- Bugzilla 19075: rt.util.random.Rand48.defaultSeed should prefer RDTSC or mach_absolute_time or QueryPerformanceCounter to ctime.time
- Bugzilla 19128: argument to alloca may be too large
- Bugzilla 19214: Support object.destruct() for efficient (and correct!) destruction
- Bugzilla 19218: object.destroy should check for classes for static arrays
- Bugzilla 19280: Remove unnecessary error checks in core.time.currSystemTick and currTime
- Bugzilla 19398: Document meaning of core.atomic.MemoryOrder
- Bugzilla 19414: object.__cmp(T[]) on big-endian architectures can use memcmp for unsigned integers of any size
- Bugzilla 19416: Make core.exception.onOutOfMemoryError work in betterC
- Bugzilla 19421: Make pureMalloc, etc. usable in BetterC
- Bugzilla 19423: In core.stdc.errno directly link __errno on OpenBSD & NetBSD
- Bugzilla 19424: Add Haiku support to core.stdc.errno
- Bugzilla 19455: GC wastes too much memory
- Bugzilla 19468: Improve cyclic dependency error message
- Bugzilla 19524: Make core.checkedint work in betterC
- Bugzilla 19924: Make core.bitop.bswap(ulong) work in betterC
- Bugzilla 19933: MSVC: Undefined std{in,out,err} with -betterC
- Bugzilla 19976: Simplify std.internal.convert.toUbyte CTFE path for float and double
- Bugzilla 20104: core.atomic has no exchange function
- Bugzilla 20105: core.atomic 'cas' function is incomplete
- Bugzilla 20106: core.atomic : atomicFence doesn't accept MemoryOrder
- Bugzilla 20107: core.atomic : Memory order is missing keys
- Bugzilla 20122: core.atomic.cas discards result on failure
- Bugzilla 20178: Add TypeInfo_Class/TypeInfo_Interface.isBaseOf (equivalent to C#/Java isAssignableFrom)
- Bugzilla 20550: Use fixed seeds for treaps in GC
- Bugzilla 20567: GC should not start threads for parallel marking in simple programs
- Bugzilla 20577: Add missing symbols related to Windows UAC
- Bugzilla 20711: object.update requires the "update" callback to wastefully return a copy of the updated value
- 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
- Bugzilla 20746: Change LCG in garbage collector treap to use full 64 bits of state instead of 48
- Bugzilla 20787: Add module core.sys.darwin.sys.attr with getattrlist, setattrlist, searchfs, and related definitions
- Bugzilla 20844: DMD compiler should take care of data alignment, after seeing the 'cas' call
- Bugzilla 20859: Add overloads of core.sync.rwmutex.ReadWriteMutex.Reader/Writer.tryLock that take a timeout duration
- Bugzilla 20936: core.sync.rwmutex should have shared overloads (and make it usable in @safe code)
- Bugzilla 21005: Speed up hashOf for associative arrays
- Bugzilla 21014: aa.byKeyValue, byKey, byValue very under-documented
- Bugzilla 21026: add core.bitop.byteswap(ushort)
- Bugzilla 21030: Reduce template function instantiations related to array equality
- Bugzilla 21070: -profile=gc makes the program much slower
- Bugzilla 21417: core.stdcpp.new_.cpp_delete unnecessarily requires destruction to be @nogc
- Bugzilla 21426: dup, idup for arrays plus keys, values for associative arrays: call postblits directly instead of via TypeInfo function pointer
- Bugzilla 21784: joining a detached thread results in segfault.
- Bugzilla 21789: Codecov should use default umask for file permissions
- Bugzilla 22169: Mark as pure core.sys.posix.string: memccpy, stpcpy, stpncpy, strnlen
- Bugzilla 22378: OpenBSD: execinfo.d and unistd.d aren't being installed
- Bugzilla 22395: OpenBSD: Add more OpenBSD-specific function prototypes in string.d and unistd.d
- Bugzilla 22439: OpenBSD: Sync mman.d
- Bugzilla 22448: OpenBSD: Add OpenBSD-specific alloc and free function prototypes from stdlib.h
- Bugzilla 22454: OpenBSD: Add prototypes for pthread_np.h
- Bugzilla 22457: OpenBSD: enableDwarf in opApply in runtime.d
- Bugzilla 22542: Explicitly cast backtrace results to int
- Bugzilla 22545: OpenBSD: Always use system backtrace
- Bugzilla 22669: OpenBSD: Sync socket.d
- Bugzilla 22670: Support *BSD kqueue-backed API-compatible inotify shim library
- Bugzilla 22766: copyEmplace does not work with copy constructor and @disable this()
- Bugzilla 22908: OpenBSD: Add getpwnam_shadow and getpwuid_shadow function prototypes
- Bugzilla 22964: array cast message is awkwardly worded
dlang.org bug fixes
- Bugzilla 3093: Object.factory has incomplete documentation
- Bugzilla 13844: core.stdc.config isn't listed in the docs
- Bugzilla 14542: Table of contents in specification PDF is broken
- Bugzilla 15379: "final" attribute on function parameter
- Bugzilla 15476: DDOC_UNDEFINED_MACRO is undocumented
- Bugzilla 17324: Floating point 1/(1/x) > 0 if x > 0 not generally true
- Bugzilla 17514: "positive" -> "nonnegative"
- Bugzilla 17623: Unexpected failure of an assertion on empty strings
- Bugzilla 18496: Complement expressions now actually int promote
- Bugzilla 18855: Behavior of Anonymous Union is Undocumented
- Bugzilla 18887: inout badly described
- Bugzilla 19869: FunctionLiteral allows incorrect forms
- Bugzilla 21086: Wrong source link for core.thread.context
- Bugzilla 21188: Anonymous structs - not described
- Bugzilla 21279: cast expression between integer types is not defined
- Bugzilla 21717: [Oh No! Page Not Found]
- Bugzilla 21781: [Oh No! Page Not Found] Links to core libs from Better C
- Bugzilla 22064: Missing documentation page for phobos core.builtins
- Bugzilla 22237: AA.update is underspecified
- Bugzilla 22835: Undocumented type specializations of is-expression
- Bugzilla 23062: Function/delegate inference example does not compile
- Bugzilla 23194: Add our company to the list of D firms
- Bugzilla 23237: dmd 2.100.1 download link error.
- Bugzilla 23276: DOC: ">" instead of ">" in dmd-windows.html
- Bugzilla 23296: Value Range Propagation not documented
- Bugzilla 23314: Language spec falsely states that struct field invariants are checked
- Bugzilla 23325: Assigning dynamic array to static array not documented
- Bugzilla 23358: Link unusable due to space insertion
dlang.org enhancements
- Bugzilla 15286: is(typeof(symbol))
- Bugzilla 19036: .tupleof order guarantee
- Bugzilla 22141: Property .capacity is not listed in the array properties section
- Bugzilla 23186: wchar/dchar do not have their endianess defined
- Bugzilla 23359: Rename InOut to ParameterStorageClass
Tools bug fixes
- Bugzilla 18208: demangle RangeError@src/core/demangle.d(230)
Contributors to this release (299)
A huge thanks goes to all the awesome people who made this release possible.
- 0l-l0
- 12345swordy
- Adam D. Ruppe
- Adam Saka
- Adam Wilson
- Adela Vais
- adil
- adilbaig
- aG0aep6G
- Ahmet Sait
- Alex Rønne Petersen
- Alexandru Caciulescu
- Alexandru Jercaianu
- Alexandru Militaru
- Alexandru Razvan Caciulescu
- Ali Akhtarzada
- Amaury
- Andrea Fontana
- Andreas Hollandt
- Andrei Alexandrescu
- Andrej Mitrovic
- Andrej Petrović
- Andrew Edwards
- Andrew Gough
- Andy Smith
- Anton Dutov
- Arun Chandrasekaran
- Asakusa Yakumo
- Ast-x64
- Ate Eskola
- Atila Neves
- BarrOff
- Basile Burg
- Bastiaan Veelo
- BBasile
- Ben Boeckel
- Ben Jones
- Benjamin Thaut
- bistcuite
- Boris Carvajal
- Brad Anderson
- Brad Roberts
- Brian Callahan
- Brian Schott
- Carlos Une
- Carsten Schlote
- Cauterite
- Chigusa0w0
- chloekek
- Chloé
- Christian Koestlin
- Clement Courbet
- Cristi Cobzarenco
- damianday
- Dan Olson
- Dan Printzell
- Daniel Graczer
- Daniel Green
- Daniel Murphy
- Danny Milosavljevic
- David Dorfman
- David Held
- David Herberth
- David Nadlinger
- David Simcha
- David Soria Parra
- Denis Feklushkin
- Denis Shelomovskij
- Dennis
- Dennis Korpel
- deviator
- Diederik de Groot
- dkorpel
- Dmitry Olshansky
- DoctorNoobingstoneIPresume
- Don Clugston
- Don.Clugston
- drpriver
- Dylan Knutson
- Dzugaru
- e-y-e
- Eduard Staniloiu
- Elias Batek
- Ellery Newcomer
- Emanuele Torre
- Ernesto Castellotti
- Etienne Brateau
- Etienne Cimon
- etienne02
- Eugen Wissner
- Florian
- Florian Brandt
- Flying-Toast
- Gary Willoughby
- GeneralGDA
- George Sapkin
- Giles Bathgate
- GoaLitiuM
- godmyoh
- Greg V
- Grim Maple
- Guillaume Chatelet
- Guillaume Piolat
- H. S. Teoh
- Hara Kenji
- Harry T. Vennik
- hatf0
- Hiroki Noda
- Hiroo Ono
- human
- hygonsoc
- Iain Buclaw
- ichordev
- Igor Khasilev
- Igor Stepanov
- Ilya Yaroshenko
- Imperatorn
- Ingrater
- Iulia Dumitru
- ivan.roubicek
- Jack Stouffer
- Jacob Carlborg
- Jakob Bornecrantz
- Jakob Øvrum
- james
- Jan Jurzitza
- Jasmine Hegman
- Jason Evans
- Jason King
- jdunlap
- Jeremy DeHaan
- Jiyuan Zhang
- jmdavis
- Joakim Brannstrom
- Joakim Noah
- Joan Piles
- Joe
- Johan Engelen
- Johannes Bblume
- Johannes Pfau
- John Colvin
- john-sevsk
- johnch
- Jonas Drewsen
- Jonathan Crapuchettes
- Jonathan M Davis
- Jonathan Marler
- Jose Armando Garcia Sancio
- Joseph Rushton Wakeling
- João Lourenço
- jpiles
- jsatellite
- Kai Nacke
- karita
- KennyTM~
- Kevin Lamonte
- Laeeth Isharc
- Lars T. Kyllingstad
- Leandro Lucarella
- LemonBoy
- lempiji
- lenoil98
- Les De Ridder
- Lionello Lunesu
- Logan Capaldo
- look-at-me
- Lorenzo Gabriele
- Lucia Mcojocaru
- Lucian Danescu
- lucica28
- Luhrel
- Luís Ferreira
- Luís Marques
- Manu Evans
- Marco Leise
- Martin Kinkelin
- Martin Krejcirik
- Martin Nowak
- Mathias Lang
- Mathis Beer
- Matt Kline
- Max Haughton
- Max Samukha
- Maxim Fomin
- Maya Rashish
- MetaLang
- mhh
- Michel Fortin
- Mihails Strasuns
- Mike Franklin
- Mike Parker
- MoGu
- monarchdodra
- MoonlightSentinel
- Moritz Maxeiner
- Márcio Martins
- Nathan Sashihara
- Nemanja Boric
- Nicholas Wilson
- Nick Sabalausky
- Nick Treleaven
- Nicolas F
- Nikolay Tolstokulakov
- Nils Boßung
- Nils Lankila
- nmiculinic
- nordlow
- o3o
- Oleg Nykytenko
- onyx
- Orvid King
- Paul Backus
- Paul O'Neil
- Per Nordlöw
- Petar Kirov
- Peter Alexander
- Philpax
- Puneet Goel
- qchikara
- Quirin F. Schroll
- Radu Racariu
- Rainer Schuetze
- Rasmus Thomsen
- Razvan Nitu
- Richard Andrew Cattermole
- Richard Manthorpe
- Richard Webb
- Robert Blake Anderton
- Robert burner Schadek
- Robert Jacques
- Robert Klotzner
- Robert Schadek
- Roman Chistokhodov
- Roy Margalit
- rracariu
- rsw0x
- Ryan Boggs
- ryuukk
- Safety0ff
- Sanjay S
- scott
- Sean Kelly
- Sebastiaan Koppe
- Sebastian Wilzbach
- Sergei Akhmatdinov
- Shigeki Karita
- shoo
- Simen Kjærås
- Simon Harris
- sinkuu
- skl131313
- Sophie Kirschner
- sprinkle131313
- Stanislav Blinov
- Stefan Koch
- Stefan Rohe
- Stefanos Baziotis
- stefanos-baziotis
- Steven Dwy
- Steven Schveighoffer
- Su
- sumitraja
- Sönke Ludwig
- tcak
- Temtaime
- teo
- Teodor Dutu
- Tero Hänninen
- thaven
- Thayne McCombs
- the-horo
- TheGag96
- Thomas Mader
- Tim Schendekehl
- Timothee Cour
- Tolstokulakov Nikolay
- Tomer Filiba
- Tomoya Tanjo
- Tomáš Chaloupka
- Tony Tung
- tsbockman
- tynuk
- unknown
- vali0901
- Vladimir Panteleev
- w0rp
- Walter Bright
- Walter Waldron
- wazar
- wolframw
- Yao Gómez
- Yazan Dabain
- yglukhov
- yori
- Yuxuan Shui
- Ömer Faruk Irmak
- Ömer Faruk IRMAK
- Михаил Страшун
- سليمان السهمي (Suleyman Sahmi)