Change Log: 2.067.0
Download D 2.067.0
released Mar 24, 2015
Language Changes
- Destructors for structs allocated on the heap are now invoked.
- asm statements can now be used in pure, nothrow, @nogc, or @trusted code.
- package protection attribute can be optionally bound to specified package
- Sealed references were added (DIP25)
- The with statement now observes temporary object lifetime
Library Changes
- The garbage collector got faster.
- volatileLoad and volatileStore intrinsics were added.
- Experimental: The garbage collector can now be configured.
- byKeyValue was added.
- initOnce was added to perform thread-safe lazy initialization.
- A new range algorithm enumerate was added to attach indexes to range elements.
- A new range algorithm handle was added to enable exception handling in range compositions.
- An experimental logging system was added.
List of all bug fixes and enhancements in D 2.067.
Language Changes
- Destructors for structs allocated on the heap are now invoked.
Previously, when a struct allocated on the heap was freed, the destructor was not invoked. This is no longer the case, and these destructors will now be invoked before the memory is freed by the GC.
- asm statements can now be used in pure, nothrow, @nogc, or @trusted code.
By adding the appropriate attributes to an asm statement you can tell the compiler how that asm code behaves, thus allowing asm statements to be used in pure, nothrow, @nogc, or @safe functions.
asm pure nothrow @nogc @trusted { // the compiler does not check the attributes ret; }
- package protection attribute can be optionally bound to specified package
New optional syntax was added for package protection attribute:
module aaa.bbb.ccc.ddd; // accessible from any module with aaa.bbb in qualified path package(aaa.bbb) void foo() {} // old style, means same as package(aaa.bbb.ccc) package void bar() {}
- Sealed references were added (DIP25)
In @safe functions it is now required to use return ref to return a reference to a parameter or a field of it.
@safe: ref int fun(ref int a) { return a; } // ERROR ref int gun(return ref int a) { return a; } // FINE ref T hun(T)(ref T a) { return a; } // FINE, templates use deduction
See DIP25 for more details.
- The with statement now observes temporary object lifetime
A longstanding bug of the with statement was fixed which prevented the idiomatic use of RAII values.
with (File("output.log", "w")) { writeln("Content"); } // File is automatically closed
Library Changes
- This release comes with various GC optimizations that make many applications faster.
A new GC growth policy was implemented that helps to reduce the number of collections by keeping a collection threshold at 2x the size of the used memory. After each collection the used memory and the threshold are recomputed. This allows for an exponential growth of the GC heap, e.g. during program startup, but limits the heap size relative to the actual used memory. The factor 2x is configurable by setting heapSizeFactor.
The heap traversal during the marking phase is now done using tail recursion with a separate compact state stack. This allows to mark very deep heaps (lists) much faster because the previous recursion limit of 50 is eliminated.
You can see a list of all improvements here.
- volatileLoad and volatileStore intrinsics were added.
Calls to volatileLoad and volatileStore are recognized by the compiler and guaranteed to not be removed or reordered in the same thread.
void example(uint* address, uint value) { import core.bitop; // store value volatileStore(address, value); // wait until value takes affect while (volatileLoad(address) != value) { } }
Note: These intrinsics are currently in core.bitop, but will be moved to core.volatile when volatile is no longer a keyword.
- Experimental: The garbage collector can now be configured through the command line,
the environment or by options embedded into the executable.
By default, GC options can only be passed on the command line of the program to run, e.g.
app "--DRT-gcopt=profile:1 minPoolSize:16" arguments to app
Available GC options are:
- disable:0|1 - start disabled
- profile:0|1 - enable profiling with summary when terminating program
- initReserve:N - initial memory to reserve in MB
- minPoolSize:N - initial and minimum pool size in MB
- maxPoolSize:N - maximum pool size in MB
- incPoolSize:N - pool size increment MB
- heapSizeFactor:N - targeted heap size to used memory ratio
In addition, --DRT-gcopt=help will show the list of options and their current settings.
Command line options starting with "--DRT-" are filtered out before calling main, so the program will not see them. They are still available via rt_args().
Configuration via the command line can be disabled by declaring a variable for the linker to pick up before using it's default from the runtime:
extern(C) __gshared bool rt_cmdline_enabled = false;
Likewise, declare a boolean rt_envvars_enabled to enable configuration via the environment variable "DRT_GCOPT:
extern(C) __gshared bool rt_envvars_enabled = true;
Setting default configuration properties in the executable can be done by specifying an array of options named rt_options:
extern(C) __gshared string[] rt_options = [ "gcopt=initReserve:100 profile:1" ];
Evaluation order of options is rt_options, then environment variables, then command line arguments, i.e. if command line arguments are not disabled, they can override options specified through the environment or embedded in the executable.
- byKeyValue was added.
Built-in associative arrays now have a .byKeyValue method that returns a forward range iterating over key/value pairs.
void main() { auto aa = ["a": 1]; foreach (pair; aa.byKeyValue) { assert(pair.key == "a"); assert(pair.value == 1); } }
- enumerate was added.
enumerate enables iteration of ranges with an index variable:
void main() { import std.stdio : stdin, stdout; import std.range : enumerate; foreach (lineNum, line; stdin.byLine().enumerate(1)) stdout.writefln("line #%s: %s", lineNum, line); }
- handle was added.
handle enables exception handling in range compositions:
import std.algorithm : equal; import std.range : retro; import std.utf : UTFException; auto str = "hello\xFFworld"; // 0xFF is an invalid UTF-8 code unit auto handled = str.handle!(UTFException, RangePrimitive.access, (e, r) => ' '); // Replace invalid code points with spaces assert(handled.equal("hello world")); // `front` is handled, assert(handled.retro.equal("dlrow olleh")); // as well as `back`
- An experimental logging system was added.
import std.experimental.logger; void main() { log("message logging in D"); }
List of all bug fixes and enhancements in D 2.067:
DMD Compiler regressions
- Bugzilla 4890: GC.collect() deadlocks multithreaded program.
- Bugzilla 12381: [REG2.065] [ICE] An internal error in e2ir.c while casting array ops
- Bugzilla 12422: [REG2.055] Templated nested function is inferred as pure even if it calls impure functions
- Bugzilla 12912: Lambda function is incorrectly inferred as impure if it uses member field or function
- Bugzilla 13009: [REG2.064] inout overload conflicts with non-inout when used via alias this
- Bugzilla 13311: [REG2.065] ICE, CtorDeclaration::semantic(Scope*): Assertion `tf && tf->ty == Tfunction' failed
- Bugzilla 13479: [REG2.067a] Templates not emitted when instantiated in mixins mixed in functions
- Bugzilla 13497: [REG2.065] [ICE e2ir 1911] Array op compiler error
- Bugzilla 13498: Return type is not checked in function template
- Bugzilla 13502: [REG2.065] Stray '(' warning not emitted for documentation of enum templates
- Bugzilla 13503: [REG2.065] Bad code with -inline, varargs and auto return
- Bugzilla 13514: Druntime no longer builds with -g
- Bugzilla 13515: [REG2.064] "Range violation" when writing to array of AAs from static this
- Bugzilla 13550: [REG2.067a] Inner functions take outer function attributes erroneously
- Bugzilla 13564: [REG2.065] nested struct destructor trying to access members of a global class fail to compile
- Bugzilla 13601: [REG2.064] static if (__ctfe) should emit error
- Bugzilla 13640: [REG2.066] can break immutability with inout
- Bugzilla 13644: [REG2.066] ICE with foreach over array of Tuples
- Bugzilla 13673: ICE(backend/cod2.d 5114)
- Bugzilla 13675: enum type used with template causes compiler to segfault
- Bugzilla 13694: Typesafe variadic function template overload fails to match to any template
- Bugzilla 13714: [REG2.066.1] Assertion failure: '0' on line 2022 in file 'mtype.c'
- Bugzilla 13729: [REG2.067a] One not detected case of not purity
- Bugzilla 13760: [REG2.067a] Cannot deduce function for object.get
- Bugzilla 13775: [REG2.067a] Broken explicit casting of dynamic array slices of known size to static array of different type
- Bugzilla 13776: [REG2.067a] Incorrect "recursive alias declaration" error with __traits(compiles, ...)
- Bugzilla 13807: [REG2.067a] inout(T)[] no longer matches string[]
- Bugzilla 13827: [REG2.067a] Internal Compiler Error: null field
- Bugzilla 13840: [REG2.067a] nothrow attribute affects inside of try-catch block when using foreach with opApply
- Bugzilla 13864: [REG2.066] tuple expand causes range violation
- Bugzilla 13873: 2.066.1 Compiling with -debug -inline generates huge files
- Bugzilla 13886: [REG2.066] global.gaggedErrors ICE
- Bugzilla 13921: ICE with template instantiation error
- Bugzilla 13934: Cannot pass 'this' to function by reference
- Bugzilla 13937: C++ mangling for template negative parameter not correct for dmc
- Bugzilla 13942: [REG2.066] Bad template error message
- Bugzilla 13950: [REG2.062] zero-length tuple does not work on function default argument
- Bugzilla 13952: [REG2.067a] change in struct ctor lowering triggers codegen bug
- Bugzilla 13966: [REG2.067a] dmd: expression.c:3761: size_t StringExp::length(int): Assertion `encSize == 1 || encSize == 2 || encSize == 4' failed.
- Bugzilla 13968: [REG2.067a] constructing and returing union causes segfault
- Bugzilla 13969: [REG2.063] [ICE] (backend\cgcod.c 2309) with cycle(iota(a,b,s))
- Bugzilla 13992: [REG2.067a] CTFE produces strange error with += operator on integer type
- Bugzilla 13998: Wrong code with -O -inline, loops, and taking address of double
- Bugzilla 13999: [REG2.067a] Associative array literal with static array keys must now have matching key lengths
- Bugzilla 14038: [REG2.067a] Non-mutable AA initialization segfaults in runtime
- Bugzilla 14039: [REG2.067a] function is incorrectly inferred as 'pure'
- Bugzilla 14044: dmd generates spurious functions in object file created from empty module
- Bugzilla 14049: [REG2.064] Wrong purity inference for nested lambda
- Bugzilla 14057: [REG2.066] opSlice not working correctly with AliasThis
- Bugzilla 14061: Refused array concat at compile-time
- Bugzilla 14074: [REG2.067a] non-separate compilation fails, but separate compilation works
- Bugzilla 14075: [REG2.067a] Segfault with ambiguous overloading functions without body
- Bugzilla 14089: [REG2.064] Assigning to AA has no value when overriding opAssign
- Bugzilla 14090: [REG2.067a] Incorrect "recursive alias declaration"
- Bugzilla 14093: [REG2.065] __traits(compiles, cast(Object)(tuple)) is true even if it doesn't compile.
- Bugzilla 14104: aa with pointer key type doesn't find existing value
- Bugzilla 14106: sort is @safe in release mode, @system in debug mode
- Bugzilla 14109: [REG2.066.1] Property-like function call does not work on template value parameter
- Bugzilla 14126: GITHEAD - GC seemingly corrupting memory
- Bugzilla 14130: [REG2.067a] ICE following error in template parameter default value
- Bugzilla 14144: [REG2.067a] opAssign seems broken
- Bugzilla 14146: [REG2.067a] ICE with non-empty default constructor in struct
- Bugzilla 14155: [REG2.066] A defect in DIP29: the return value of some pure functions cannot be unique pointer
- Bugzilla 14160: [REG2.066] mutable global data access is wrongly accepted in pure function
- Bugzilla 14166: [REG2.066] Excess CTFE running for the temporary variable in module level expression
- Bugzilla 14169: Template symbol visibility regression
- Bugzilla 14173: [REG2.064] Omitting return type with override hides an error
- Bugzilla 14177: [REG2.066.1] ICE(statement.c) recursive aliases
- Bugzilla 14198: [REG2.067a] Link failure with Variant
- Bugzilla 14199: [REG2.067a] Dwarf Error: mangled line number section
- Bugzilla 14218: [REG2.067a] casting null to integer type causes error message
- Bugzilla 14220: Bad codegen for optimized std.conv.text in combination with concatenation
- Bugzilla 14232: redundant attribute 'const'
- Bugzilla 14235: [REG2.066] full-qualified template instantiation misses its error location
- Bugzilla 14262: [REG] [2.067-b3] Can't use class this as ref argument
- Bugzilla 14267: [REG2.067beta2] ICE when determining if a function can be inlined
- Bugzilla 14283: [2.067-b4]: Spurious "this is not an lvalue" deprecation message for "auto ref" arguments
- Bugzilla 14285: [REG2.063] alias this to nothing is accepted
- Bugzilla 14299: [REG2.067.0-rc1] "ref" parameter in CTFE handled incorrectly for recursive calls
- Bugzilla 14301: [2.067-rc1] Private symbols of module conflicts with public from another
- Bugzilla 14304: [REG2.067a] ICE with static immutable variable CTFE
- Bugzilla 14317: [REG2.066] ICE (cgcod.c 1767) when compiing with -profile -O -inline
DMD Compiler bugs
- Bugzilla 1625: CTFE: cannot evaluate function when return type includes a union
- Bugzilla 1829: Inline assembler cannot get label addresses
- Bugzilla 2644: Unresolved template reference
- Bugzilla 2834: Struct Destructors are not called by the GC, but called on explicit delete.
- Bugzilla 3022: scope x = new Foo; does not allocate on stack if Foo has allocator
- Bugzilla 3918: Parameter use before its use in an AndAnd expression with reals treats NaN as false
- Bugzilla 4062: can call method without this pointer inside is()
- Bugzilla 4103: opAssign signature rules not enforced on templated opAssign
- Bugzilla 4149: refs displayed as pointers in gdb
- Bugzilla 4181: GDB prints wrong value of TLS variables
- Bugzilla 5314: Wrong error message: struct within immutable member and postblit function
- Bugzilla 5908: Optimizer generates wrong value with divide-by-zero.
- Bugzilla 6423: Garbage is returned from void main()
- Bugzilla 6565: out 2D fixed-sized array
- Bugzilla 6574: Erroneous recursive call in template instantiation
- Bugzilla 6810: Strange tuple used as a type error
- Bugzilla 7104: linker error on void main(){ typeof(new class{}) c; c = new typeof(c); }
- Bugzilla 7151: [CTFE] cannot compare classes with ==
- Bugzilla 7465: Duplicate error message for bad template mixin
- Bugzilla 7874: [CTFE] internal error: unsupported assignment (x OP= y) = z
- Bugzilla 7942: Appending different string types corrupts memory
- Bugzilla 8246: tuple fields pollute the linker namespace
- Bugzilla 8425: Missing line number and module name that can't use core.simd
- Bugzilla 9047: Expression requiring std.math fails with function-local import
- Bugzilla 9148: 'pure' is broken
- Bugzilla 9537: auto ref returns a reference its own stack
- Bugzilla 9554: Inconsistent stringof and mangleof result for module/package identifier
- Bugzilla 9581: Exceptions are too slow
- Bugzilla 9620: Error messages of failed pure enforcement
- Bugzilla 9685: Context pointer of struct isn't copied when a closure is passed by alias
- Bugzilla 9728: Ddoc anchors non-unique across overloads
- Bugzilla 9906: filter of static opCall
- Bugzilla 10307: Bad error message for not supported array operation
- Bugzilla 10311: gdb prints wrong value for variable updated from closure
- Bugzilla 10528: Private constant (enum) properties not private
- Bugzilla 10855: Missing dmd.conf for FreeBSD in DMD 2.063.2 release
- Bugzilla 10915: std.typecons.Nullable throws in writeln() if it's null
- Bugzilla 10920: template instantiation order dependent link failure problem
- Bugzilla 11042: Inconsistent "static condition" behaviors
- Bugzilla 11260: Assertion `type->ty != Tstruct || ((TypeStruct *)type)->sym == this' failed
- Bugzilla 11355: Copy through alias this with @disabled this(this)
- Bugzilla 11467: [CTFE] Overlapping array copy is allowed in CT
- Bugzilla 11746: invalid enum forward reference pattern not detected
- Bugzilla 11888: Incorrect behaviour taking slice from return value
- Bugzilla 11902: DMD debuginfo doesn't seem to write classes correctly
- Bugzilla 11915: Inconsistent overload resolution behaviour between ref and out
- Bugzilla 11916: [IFTI] Disabled by constraint overload with out with IFTI breaks overload resolution
- Bugzilla 12092: Wrong TLS access in PIC code (X86_32)
- Bugzilla 12130: Segmentation fault if HOME environment variable does not exist
- Bugzilla 12163: pdb debugging (win64): stepping loops points to incorrect lines
- Bugzilla 12447: variadic template functions hijack all eponymous enum and alias template overloads
- Bugzilla 12495: CTFE slice cast can cause allocation
- Bugzilla 12500: ICE in codegen when multiplying an incremented size_t by a double
- Bugzilla 12502: Some static array casts incorrectly rejected in safe code
- Bugzilla 12531: forward reference with nested struct
- Bugzilla 12579: DMD rejects valid function literal
- Bugzilla 12636: extern(C++) class that implements D interface segfaults
- Bugzilla 12741: DMD accepts functions with contracts and no body
- Bugzilla 12776: Wrong type for __vector(int[4]).init
- Bugzilla 12780: Multiplying integer array by scalar double fails
- Bugzilla 12827: [ICE] Segfault on immutable field self-initialization
- Bugzilla 12871: inner function returning pointer to outer context local rejected
- Bugzilla 12908: [AA] foreach by keys and values over associative array in pure function allow impure function calls
- Bugzilla 12979: Nothrow violation error is hidden by inline assembler
- Bugzilla 12983: overload not recognized depending on order of declaration
- Bugzilla 13028: [ICE] CTFE internal error: cannot evaluate at compile time
- Bugzilla 13064: Redundant auto storage class is allowed for functions
- Bugzilla 13095: Sometimes struct destructor is called if constructor throws
- Bugzilla 13120: Body of foreach over string with transcoding ignores function attributes
- Bugzilla 13200: Assertion `protName' failed
- Bugzilla 13236: Invalid recursive struct field error not gagged in 'is'-expression
- Bugzilla 13280: this.sizeof rejected as static array length in some cases
- Bugzilla 13289: wchar and dchar C++ mangling is incorrect
- Bugzilla 13295: [CTFE] Modifications of const user type disappear
- Bugzilla 13297: [CTFE] Modifications of user type pointer member passed by ref in function disappear
- Bugzilla 13320: Redundant error messages for missing operation on struct instance
- Bugzilla 13336: auto ref return deduced to be ref despite return value coercion
- Bugzilla 13337: Invalid extern C++ namespace resolution
- Bugzilla 13356: [ICE] (dmd 2.066: statement.c:754) with recursive Algebraic
- Bugzilla 13361: Empty UDA accepted
- Bugzilla 13382: [e2ir] compare string to int - leads to ICE in e2ir.c 1902
- Bugzilla 13385: ICE with new package(names) protection
- Bugzilla 13403: [ICE][2.067Alpha] Internal error: backend\type.c 332 with new package protection extension.
- Bugzilla 13434: [ICE] indexing array with empty tuple causes dmd segfault
- Bugzilla 13437: [e2ir] ICE in e2ir.c 4616
- Bugzilla 13459: segfault in two auto opSlices()
- Bugzilla 13465: Segfault by eager semantic2 running in template instantiation
- Bugzilla 13468: Wrong code when comparing class reference with typeof(null)
- Bugzilla 13481: bug with inferring attributes from built-in properties
- Bugzilla 13484: Template type deduction from delegate parameter fails
- Bugzilla 13485: FP wrong-code with -O
- Bugzilla 13490: Can't append to array of structs with alias this as lvalue ternary opoerator result
- Bugzilla 13505: No line number with void array in class
- Bugzilla 13508: array vararg function safety not inferred
- Bugzilla 13521: [D1] -di disables declaration shadowing message
- Bugzilla 13528: Internal Compiler Error: CTFE DotType:
- Bugzilla 13530: [REG 2.066] D Inline Assembler in nothrow function hides errors
- Bugzilla 13539: Disallow optional template parameters with C-style syntax
- Bugzilla 13563: ICE with opIndexAssign op-overloading and ModuleScopeOperator
- Bugzilla 13574: incorrect code for assignment to dollar in slice expression
- Bugzilla 13583: Inconsistent naming of template arguments in debug symbols
- Bugzilla 13586: Destructors not run when argument list evaluation throws
- Bugzilla 13599: [D1] backend/cod1.c ICE with -inline
- Bugzilla 13600: ICE in dwarf.c line 1949 with -g enabled and lazy void parameter
- Bugzilla 13612: Wrong 'this' variable accessed in recursive ctfe member function
- Bugzilla 13613: Pragma msg affects data structure layout
- Bugzilla 13630: Senseless error with foreach over variadic list
- Bugzilla 13645: Incorrect ddoc generation for deprecated module
- Bugzilla 13661: static array init does not call destructors
- Bugzilla 13666: Undefined Symbols for __gshared data symbols in templates
- Bugzilla 13668: [ICE] unable to compile __traits(allMembers...)
- Bugzilla 13669: [CTFE] Destructor call on static array variable is not yet supported in CTFE
- Bugzilla 13679: foreach_reverse is allowed for AAs
- Bugzilla 13701: [REG2.061] Associative array values ignore immutability
- Bugzilla 13707: msvc32 C++ struct return ABI not followed for structs with constructors
- Bugzilla 13739: in CTFE making an array over an array copies the data
- Bugzilla 13740: CTFE fails ref foreach over range
- Bugzilla 13747: Linux CMSG_NXTHDR is private, since alias doesn't change protection level
- Bugzilla 13757: [CTFE] extern(C) alias declaration does not work in CTFE
- Bugzilla 13779: gdb can't find frame base when using ld.gold
- Bugzilla 13783: Function overload with rvalue inout parameter not selected when enum parameter implicitly converted to its base type
- Bugzilla 13784: Wrong code with modulo operation and optimisations enabled
- Bugzilla 13787: Error without line number when slicing function pointer
- Bugzilla 13788: dmd segfault, pragma(mangle) and a mixin
- Bugzilla 13795: DMD ICE segfault compiling druntime
- Bugzilla 13831: DMD crash on newing struct with overlapped fields in CTFE
- Bugzilla 13832: delegates that return ref do not output correctly to .di file
- Bugzilla 13835: ICE in interpret.c:736 - Issue with static variables.
- Bugzilla 13841: infinite loop in compiler on simd arithmetic
- Bugzilla 13843: Issue when passing a delegate as an class alias template parameter
- Bugzilla 13847: CTFE internal error: dottype
- Bugzilla 13858: Wrong warning about unreachable code with break/goto case
- Bugzilla 13860: template required forward reference for typeof(member)
- Bugzilla 13861: compiler segfault with nested struct, cannot access frame
- Bugzilla 13874: Invalid FunctionTypeOf segfault the compiler
- Bugzilla 13879: Default inizialization of function pointers array
- Bugzilla 13884: No error line number with std.array.array of range of type tuples
- Bugzilla 13899: Unwanted warning for pure opApply
- Bugzilla 13902: Compiler allows escaping the address of part of a local
- Bugzilla 13907: Surrogate pairs in wchar string literal will cause incorrect length match
- Bugzilla 13910: Internal error: e2ir.c 1926
- Bugzilla 13932: c++ mangling for template negative int parameter
- Bugzilla 13938: IASM shouldn't be able to access TLS variables
- Bugzilla 13939: IASM shouldn't access global symbol with PIC code
- Bugzilla 13947: Padding in empty structs is compared
- Bugzilla 13955: 64 bit C ABI not followed for passing structs with mixed floating types
- Bugzilla 13956: 64 bit C ABI not followed for passing empty structs
- Bugzilla 13959: ICE in e2ir when casting struct to pointer
- Bugzilla 13977: Front-end optimizer bug in AndAndExp
- Bugzilla 13978: Front-end optimizer bug in OrOrExp
- Bugzilla 13982: D1: wrong template instantiation is not rejected
- Bugzilla 13987: Invalid struct segfaults
- Bugzilla 14009: iasm parser accepts incorrect AsmExp
- Bugzilla 14010: Support mangleof property for opaque enum and struct type
- Bugzilla 14016: Nested inherited class doesn't know the type of its outer object
- Bugzilla 14022: [CTFE] postblits/destructors not called on static array field assignment
- Bugzilla 14023: [CTFE] postblits/destructors not called on static array index assignment
- Bugzilla 14024: [CTFE] unstable postblit/destructor call order on static array assignment
- Bugzilla 14028: [CTFE] Possible reinterpret cast to a pointer to static array
- Bugzilla 14050: dmd -v lists imports from failed __traits(compiles) blocks
- Bugzilla 14055: CTFE internal error with uninitialized array: Assertion failure: '0' on line 318 in file 'interpret.c'
- Bugzilla 14083: Remained unresolved forward reference issue with template classes
- Bugzilla 14096: ICE in toir.c: 187
- Bugzilla 14116: Assertion failure: 'p->isPkgMod == PKGmodule' on line 143 in file 'import.c'
- Bugzilla 14132: [ICE] error on arrays
- Bugzilla 14141: pure member function returning qualified member result is implicitly convertible to unqualified
- Bugzilla 14154: [e2ir] Error in e2ir at casting to struct
- Bugzilla 14163: No line number for error with disabled class constructor
- Bugzilla 14165: Link failure on class declaration with @disable this();
- Bugzilla 14174: Weird IFTI deduction failure
- Bugzilla 14179: Posix x86_64 varargs prolog clobbers RDX
- Bugzilla 14195: Ice when mangling templated function parameter extern(C++) function
- Bugzilla 14200: C++ mangling issue with expanded tuples
- Bugzilla 14201: fatal error LNK1235: corrupt or invalid COFF symbol table
- Bugzilla 14210: invalid merging of template instances
- Bugzilla 14229: RAII ordering is wrong
- Bugzilla 14272: DMD segfault on invalid circular enum initialization
- Bugzilla 14275: Qualified package protection for aggregate member doesn't work
- Bugzilla 14276: DWARF debug info for SIMD broken
- Bugzilla 14306: Wrong codegen with -inline for generic lambdas
- Bugzilla 14311: Win32 COFF: bad symbols/relocation entries for global data accesses
- Bugzilla 14313: [ld.gold] gdb: wrong value of shared variables
DMD Compiler enhancements
- Bugzilla 1317: Document suggested means of overlapping array copy
- Bugzilla 2498: make foreach work for any callable symbol
- Bugzilla 2529: 'package' access qualifier should allow access to sub-packages
- Bugzilla 3449: const and immutable struct members do not behave according to spec
- Bugzilla 4567: dmd should print the dmd.conf location with usage statement
- Bugzilla 9089: Very restrictive Tuple constructor
- Bugzilla 9915: Typeid .name inconsistent between templated classes and structs
- Bugzilla 10165: No syntax to create thread-local shared variables
- Bugzilla 11530: need gdb test suite
- Bugzilla 12888: Include template constraints in JSON output
- Bugzilla 12985: Better error message for not supported array operation
- Bugzilla 13019: Different color for "Warning:"
- Bugzilla 13350: is(typeof(fun)) causes link error when template fun calls undefined reference
- Bugzilla 13388: accept '@' before 'nothrow' and 'pure'
- Bugzilla 13510: When adding "New issue" there should be no choice among DStress, puremagic, and D. Just leave D.
- Bugzilla 13609: better error message for missing '}'
- Bugzilla 13704: Confusing error message when passing the same file on the command line twice
- Bugzilla 13756: [AA] Allow ref const index on foreach AA iteration
- Bugzilla 13802: Improve pretty-print result for the const(string) type
- Bugzilla 13803: Improve pretty-print result for the wstring an dstring types
- Bugzilla 13839: Use new style for alias declarations in di files
- Bugzilla 13944: Built-in stringof and mangleof properties are unnecessarily fixed to the type 'string'
- Bugzilla 13976: Value range propagation to disable some slice bound tests
- Bugzilla 14105: strideImpl fails for 0xFF
- Bugzilla 14123: cannot compare typeid(object.Object) at compile time
- Bugzilla 14156: buffer overflow in LibELF
- Bugzilla 14211: Compiler should devirtualize calls to members of final class
- Bugzilla 14338: Implement DIP25 Sealed References
Phobos regressions
- Bugzilla 13241: [REG2.067a] writeln no longer flushes stdout
- Bugzilla 13257: [REG2.067a] Deprecation message when using std.getopt with string[] parameter
- Bugzilla 13300: pure function 'std.array.Appender!(T[]).Appender.ensureAddable' cannot call impure function 'test.T.__fieldPostBlit'
- Bugzilla 13304: std.algorithm.reduce: "Unable to deduce an acceptable seed type" with float[]
- Bugzilla 13367: Buffer overflow when setting PATH
- Bugzilla 13375: Linking failure when importing both std.regex and std.algorithm
- Bugzilla 13390: [REG2.066] std.range.cycle ctor fails when empty input passed
- Bugzilla 13393: [REG2.067a] std.algorithm.joiner Assertion failure in popFront() when using with cartesianProduct
- Bugzilla 13621: inout issue with std.container.Array opSlice
- Bugzilla 13716: Phobos std.file fails to build
- Bugzilla 13717: split no longer defined by std.string
- Bugzilla 13766: std.container, std.range, std.regex documentation is now broken
- Bugzilla 13774: Multiple definition of conv_50c_dc8 with three libraries and std.file import
- Bugzilla 13871: [REG2.067a] Segmentation fault from std/variant.d:609
- Bugzilla 14037: Problem with BigInt and std.functional.memoize
- Bugzilla 14041: Refused writeln of a fixed size array of chars
- Bugzilla 14042: std.conv.to of a immutable char pointer
- Bugzilla 14197: "replace" was moved from std.string without alias added
- Bugzilla 14212: frexp for const and immutable fails to compile
- Bugzilla 14213: Strange deprecated message in std.typecons.Proxy with using method
- Bugzilla 14230: [REG2.067b2] std.array.join misses the first element which is empty string
- Bugzilla 14233: [REG2.067b2] Can't build Algebraic!(This[]) anymore
- Bugzilla 14253: [REG2.067b3] std.traits.ParameterStorageClassTuple gives compiler errors when encountering 'return' functions
- Bugzilla 14300: [2.067-rc1] DList casting to base type is broken
Phobos bugs
- Bugzilla 649: concatenation hangs in threaded program
- Bugzilla 3141: osx syntax problem with touch
- Bugzilla 5036: Remove caching from ranges
- Bugzilla 5233: [patch] std.range.put accepts *any* element type when putting to an array.
- Bugzilla 5698: va_arg sets wrong length for (u)short[]
- Bugzilla 6256: [patch] std.algorithm.map does not support static arrays and has 'length' for narrow strings.
- Bugzilla 6339: stdin.byChunk throws with Windows pipes on command line
- Bugzilla 7223: Access violation when using rmdirRecurse on folder without modify permissions
- Bugzilla 7797: std.typelist should be deprecated
- Bugzilla 8578: std.demangle.demangle does not parse symbols that are type names
- Bugzilla 8708: Documentation for std.process.exec family is inaccurate
- Bugzilla 9507: std.range.transposed behaves poorly with jagged ranges of ranges
- Bugzilla 10104: std.algorithm.group of a const/immutable array
- Bugzilla 10125: readln!dchar misdecodes Unicode non-BMP
- Bugzilla 10139: std.stdio.writef and friends documentation is severely out of date
- Bugzilla 10460: std.algorithm: some of algorithms don't use 'auto ref' for front
- Bugzilla 11434: std.file.copy doesn't preserve file attributes (eg: executable mode etc)
- Bugzilla 11539: wrong "Orphan format specifier:" error message
- Bugzilla 11895: Add Strings Overview page to Phobos documentation
- Bugzilla 12114: buildNormalizedPath shouldn't normalize current path to empty string
- Bugzilla 12320: std.stdio.LockingTextReader populates .front in .empty
- Bugzilla 12589: std.random.randomCover fails for empty ranges
- Bugzilla 12631: std.string.isNumeric uses among without explicit braces when calling 'std.algorithm.among' when compiling with dmd -property flag
- Bugzilla 12733: parallelism.amap incorrect assignment without initialization
- Bugzilla 12913: Mistake concerning DLists
- Bugzilla 12915: RedBlackTree leaks memory
- Bugzilla 12969: std.json: Lack of opIndexAssign operator for JSONValue may become a source of runtime errors
- Bugzilla 13018: std.string.translate needs mutable translation table
- Bugzilla 13124: std.algorithm.until with not-boolean predicates too
- Bugzilla 13248: std.range.tee unit test prints to stdout
- Bugzilla 13315: std.getopt: implicit help option doesn't work without config.passThrough
- Bugzilla 13316: std.getopt: implicit help option breaks the next argument
- Bugzilla 13317: std.getopt: endOfOptions broken when it doesn't look like an option
- Bugzilla 13352: Algebraic does not support binary arithmetic when omitting small number types
- Bugzilla 13354: Algebraic.opIndex/opIndexAssign makes wrong assumptions on the index/value type
- Bugzilla 13391: BigInt division by ulong rejected
- Bugzilla 13418: uninitializedArray & core.simd.Vector return incorrect type
- Bugzilla 13425: DList.linearRemove on last element returns non-empty range
- Bugzilla 13441: joiner asserts with only(x) separator
- Bugzilla 13446: Can't use executeShell/escapeShellFileName to redirect to file whose name starts with &
- Bugzilla 13447: Do not escape process parameters unless necessary
- Bugzilla 13477: std.process should ignore unnamed service variables on Windows
- Bugzilla 13529: std.string.lastIndexOf matches wrong element
- Bugzilla 13535: byCodeUnit doesn't satisfy hasSlicing
- Bugzilla 13592: std.datetime fails its unittests on Windows 7 - no Belarus Standard Time?
- Bugzilla 13594: std.algorithm.nextPermutation should accept ranges of lvalues
- Bugzilla 13647: std.traits documentation needs linking correctly and has spurious category value
- Bugzilla 13649: uniform01 Assertion failure
- Bugzilla 13686: Reading unicode string with readf ("%s") produces a wrong string
- Bugzilla 13689: byCodeUnit fails to be a random access range
- Bugzilla 13746: formatValue of delegates with @nogc
- Bugzilla 13781: Tuple assign should be @nogc
- Bugzilla 13805: Nested struct initialization error
- Bugzilla 13877: Problem with map+join
- Bugzilla 13922: std.range.package.takeOne doesn't accept non-forward ranges
- Bugzilla 13931: Missing overflow checks in std.conv for negative numbers which start from the most negative number digits
- Bugzilla 13935: Problem with std.algorithm.cartesianProduct(map, map)
- Bugzilla 13963: BigInt modulo ulong is rejected
- Bugzilla 13990: std.algorithm.move incorrectly uses hasAliasing for class references
- Bugzilla 14012: std.socket: wrong SocketSet.max on Posix
- Bugzilla 14013: std.socket: off-by-one error when automatically resizing on POSIX
- Bugzilla 14025: unittests for memoize fail intermittently
- Bugzilla 14059: Formatted write with wrong formatting string
- Bugzilla 14065: std.json not tracking line:column properly
- Bugzilla 14082: RedBlackTree unittest fails with custom predicate less
- Bugzilla 14111: Broken DDOC for std.format
- Bugzilla 14124: BigInt %= int can return "-0"
- Bugzilla 14181: Wrong document for std.mathspecial.normalDistribution
- Bugzilla 14223: TimSort algorithm is incorrect
- Bugzilla 14231: findRoot fails with trivial bounds
- Bugzilla 14297: [2.067-rc1] Broken links in phobos/index.html
Phobos enhancements
- Bugzilla 2138: Allow more than 65535 files in Zip archives
- Bugzilla 2181: Constant-time std.gc.removeRange
- Bugzilla 4493: Add sorting capability to toJSON
- Bugzilla 4764: Lazy versions of std.string.split and std.string.splitlines
- Bugzilla 5190: std.stdio should have File.fdopen
- Bugzilla 5494: [patch,enh] Issues with std.stdarg
- Bugzilla 5550: std.range.enumerate()
- Bugzilla 6147: file scheme uri from file path and vice versa
- Bugzilla 6586: feqrel for const values too
- Bugzilla 6756: Idea about std.stdio.chunks and std.range.chunks
- Bugzilla 6989: Implement toString for std.concurrency.Tid
- Bugzilla 7775: std.range.chunks on const array of strings too
- Bugzilla 8371: Add a function to make a range from a sequence of elements
- Bugzilla 8851: std.string.join should allow 'char' as joiner
- Bugzilla 9959: Add functional pattern matching for object references
- Bugzilla 11363: std.process should offer a way to run a executable with a given working directory
- Bugzilla 11706: Add a TypedefType trait to extract the underlying type of a std.typecons.Typedef
- Bugzilla 12409: Add "each" function as found in Ruby and jQuery
- Bugzilla 13091: nothrow std.algorithm.cartesianProduct
- Bugzilla 13157: std.typecons.Unique: Support construction and conversion from compatible types
- Bugzilla 13319: tzDatabaseNameToWindowsTZName should return null on failure rather than throw
- Bugzilla 13380: Conflict with std.typecons.Identity and std.traits.Identity
- Bugzilla 13402: code cleanup: removing c-style array declarations in phobos
- Bugzilla 13419: code cleanup in std.uni: removing "comma expressions"
- Bugzilla 13445: std.process fails to create process with empty (non-null) working directory
- Bugzilla 13450: Add WindowsException and wenforce to std.exception
- Bugzilla 13483: std.range.tee should also accept a function name
- Bugzilla 13555: Categorize functions in std.math
- Bugzilla 13595: Extend std.algorithm.groupBy to support non-equivalence relations
- Bugzilla 13623: std.typecons.Proxy doesn't work inside classes
- Bugzilla 13662: @safe pure @nogc nothrow findRoot
- Bugzilla 13681: @safe empty writeln
- Bugzilla 13837: Named tuples with type inference
- Bugzilla 13908: @safe write of a (uint, uint) tuple
- Bugzilla 13909: A problem with immutable zip + assocArray
- Bugzilla 14110: std.file.read cannot read files open for writing
- Bugzilla 14183: Updates to groupBy
Druntime regressions
- Bugzilla 13748: benchmark druntime/benchmark/aabench/string.d fails
- Bugzilla 13809: dup no longer works with types with postblit and destructors
- Bugzilla 14134: Free of large array does not work
- Bugzilla 14192: Access Violation when assigning to shared AA
- Bugzilla 14225: [REG2.067a] GDB: error reading variable (string + dup)
- Bugzilla 14291: Druntime master no longer builds
Druntime bugs
- Bugzilla 5629: core.time unittest disabled
- Bugzilla 8960: DMD tester: Unable to set thread priority
- Bugzilla 13052: TypeInfo.getHash should return same hash for different floating point zeros.
- Bugzilla 13410: Performance problem with associative array byKey/byValue
- Bugzilla 13416: dead-lock in FreeBSD suspend handler
- Bugzilla 13722: onFinalizeError should not allocate
- Bugzilla 13723: onFinalizeError should not be called for Errors
- 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 14247: string within demangled symbol name should be made escape
- Bugzilla 14303: rt.util.container.array.Array unittest contains invalid code
Druntime enhancements
- Bugzilla 9119: [AA] Forward range addition to associative arrays.
- Bugzilla 11216: Make synchronized statement nothrow
- Bugzilla 13401: code cleanup: removing c-style array declarations in druntime
- Bugzilla 13559: missing 64-bit version of array short operations
- Bugzilla 13725: onInvalidMemoryOperationError et al should not be inlined
- Bugzilla 13755: core.sys.linux.stdio, std.stdio.File: fopencookie, fmemopen missing
- Bugzilla 14007: shmctl with IPC_STAT returns wrong number of attachments. shmid_ds is defined wrong.
Optlink bugs
- Bugzilla 4831: Optlink rejects paths with invalid characters based on HPFS filesystem instead of NTFS
Installer bugs
- Bugzilla 9392: Misleading text about required OS version
Website regressions
- Bugzilla 14258: SIGSEGV in dpldocs
- Bugzilla 14280: Links to command line tools have disappeared from navigation
Website bugs
- Bugzilla 8307: inconsistent treatment of auto functions
- Bugzilla 9118: typo in github tools repo
- Bugzilla 9535: incomplete documentation for std.range.recurrence and std.range.sequence
- Bugzilla 9691: Static void arrays are not documented
- Bugzilla 9970: Document the definition and difference between storage class and type constructor
- Bugzilla 10232: AndExpression grammar is not correct
- Bugzilla 10235: Grammar does not contain a rule for function declarations
- Bugzilla 10284: dlang.org/phobos/index.html needs redesign
- Bugzilla 10285: Enum grammar documentation is incorrect
- Bugzilla 12810: PrimaryExpression grammar does not allow type constructors
- Bugzilla 13093: D ABI change for guaranteed efficient return of fixed size array
- Bugzilla 13308: AsmPrimaryExp documentation is incorrect
- Bugzilla 13310: Old style multiple alias declaration not documented
- Bugzilla 13328: Missing link to contracts description from function specification page
- Bugzilla 13329: AutoDeclarationX grammar lists '=' token and template parameters in the wrong order
- Bugzilla 13436: posix.mak is broken for dlang.org repo
- Bugzilla 13448: Class specification misses template classes in base classes list
- Bugzilla 13451: Lambda syntax with explicit return type not documented
- Bugzilla 13467: A little better std.algorithm.canFind documentation
- Bugzilla 13523: Auto function declaration does not match any grammar rule
- Bugzilla 13525: Redundant SpecialKeyword grammar listd in DefaultInitializerExpression
- Bugzilla 13538: Divide old C style syntax from D style grammar rule
- Bugzilla 13547: "D is a fully garbage collected language"
- Bugzilla 13648: ddoc problem with std.random.uniform01
- Bugzilla 13664: Grammar does not allow @<template_instance> UDAs
- Bugzilla 13671: https://dlang.org/const3.html incorrectly calls type qualifiers "type constructors"
- Bugzilla 13696: Missing entry for unicode code point literals on the lexer page
- Bugzilla 13895: Declaration grammar is insufficient
- Bugzilla 13941: NewExpression grammar is insufficient
- Bugzilla 13979: ForeachType grammar does not allow 'ref' to appear after type constructors
- Bugzilla 13991: Invariant grammar does not document that parenthesis are optional
- Bugzilla 14002: Book link is broken
- Bugzilla 14031: Frame content going outside frame
- Bugzilla 14047: "this" missing from AsmPrimaryExp grammar
- Bugzilla 14081: Table in the document of std.bigint.BigInt.toString() duplicates.
- Bugzilla 14121: Wiki: "Create account" page completely broken!
- Bugzilla 14135: std.uuid.randomUUID breaks @safety
- Bugzilla 14153: std.format page displaying incorrectly
Website enhancements
- Bugzilla 4954: Clarify documentation of foreach with delegates.
- Bugzilla 6251: D spec should warn about using foreach_reverse on a delegate
- Bugzilla 9469: Keywords list could use linkage; more-humane documentation
- Bugzilla 10154: Betas should be posted on dlang.org
- Bugzilla 10164: std.string.column examples and documentation
- Bugzilla 13325: __vector not documented in language specification
- Bugzilla 14011: Canonical links help message should clarify that 'thread' is invalid