Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.

Change Log: 2.067.0

previous version: 2.066.1 – next version: 2.067.1

Download D 2.067.0
released Mar 24, 2015


List of all bug fixes and enhancements in D 2.067.

Language Changes

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

  2. 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;
    }
    

  3. 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() {}
    

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

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

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

    GC benchmarks
  2. 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.

  3. 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 its 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.

  4. 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);
        }
    }
    
  5. 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);
    }
    
  6. 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`
    
  7. 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

  1. Bugzilla 4890: GC.collect() deadlocks multithreaded program.
  2. Bugzilla 12381: [REG2.065] [ICE] An internal error in e2ir.c while casting array ops
  3. Bugzilla 12422: [REG2.055] Templated nested function is inferred as pure even if it calls impure functions
  4. Bugzilla 12912: Lambda function is incorrectly inferred as impure if it uses member field or function
  5. Bugzilla 13009: [REG2.064] inout overload conflicts with non-inout when used via alias this
  6. Bugzilla 13311: [REG2.065] ICE, CtorDeclaration::semantic(Scope*): Assertion `tf && tf->ty == Tfunction' failed
  7. Bugzilla 13479: [REG2.067a] Templates not emitted when instantiated in mixins mixed in functions
  8. Bugzilla 13497: [REG2.065] [ICE e2ir 1911] Array op compiler error
  9. Bugzilla 13498: Return type is not checked in function template
  10. Bugzilla 13502: [REG2.065] Stray '(' warning not emitted for documentation of enum templates
  11. Bugzilla 13503: [REG2.065] Bad code with -inline, varargs and auto return
  12. Bugzilla 13514: Druntime no longer builds with -g
  13. Bugzilla 13515: [REG2.064] "Range violation" when writing to array of AAs from static this
  14. Bugzilla 13550: [REG2.067a] Inner functions take outer function attributes erroneously
  15. Bugzilla 13564: [REG2.065] nested struct destructor trying to access members of a global class fail to compile
  16. Bugzilla 13601: [REG2.064] static if (__ctfe) should emit error
  17. Bugzilla 13640: [REG2.066] can break immutability with inout
  18. Bugzilla 13644: [REG2.066] ICE with foreach over array of Tuples
  19. Bugzilla 13673: ICE(backend/cod2.d 5114)
  20. Bugzilla 13675: enum type used with template causes compiler to segfault
  21. Bugzilla 13694: Typesafe variadic function template overload fails to match to any template
  22. Bugzilla 13714: [REG2.066.1] Assertion failure: '0' on line 2022 in file 'mtype.c'
  23. Bugzilla 13729: [REG2.067a] One not detected case of not purity
  24. Bugzilla 13760: [REG2.067a] Cannot deduce function for object.get
  25. Bugzilla 13775: [REG2.067a] Broken explicit casting of dynamic array slices of known size to static array of different type
  26. Bugzilla 13776: [REG2.067a] Incorrect "recursive alias declaration" error with __traits(compiles, ...)
  27. Bugzilla 13807: [REG2.067a] inout(T)[] no longer matches string[]
  28. Bugzilla 13827: [REG2.067a] Internal Compiler Error: null field
  29. Bugzilla 13840: [REG2.067a] nothrow attribute affects inside of try-catch block when using foreach with opApply
  30. Bugzilla 13864: [REG2.066] tuple expand causes range violation
  31. Bugzilla 13873: 2.066.1 Compiling with -debug -inline generates huge files
  32. Bugzilla 13886: [REG2.066] global.gaggedErrors ICE
  33. Bugzilla 13921: ICE with template instantiation error
  34. Bugzilla 13934: Cannot pass 'this' to function by reference
  35. Bugzilla 13937: C++ mangling for template negative parameter not correct for dmc
  36. Bugzilla 13942: [REG2.066] Bad template error message
  37. Bugzilla 13950: [REG2.062] zero-length tuple does not work on function default argument
  38. Bugzilla 13952: [REG2.067a] change in struct ctor lowering triggers codegen bug
  39. Bugzilla 13966: [REG2.067a] dmd: expression.c:3761: size_t StringExp::length(int): Assertion `encSize == 1 || encSize == 2 || encSize == 4' failed.
  40. Bugzilla 13968: [REG2.067a] constructing and returing union causes segfault
  41. Bugzilla 13969: [REG2.063] [ICE] (backend\cgcod.c 2309) with cycle(iota(a,b,s))
  42. Bugzilla 13992: [REG2.067a] CTFE produces strange error with += operator on integer type
  43. Bugzilla 13998: Wrong code with -O -inline, loops, and taking address of double
  44. Bugzilla 13999: [REG2.067a] Associative array literal with static array keys must now have matching key lengths
  45. Bugzilla 14038: [REG2.067a] Non-mutable AA initialization segfaults in runtime
  46. Bugzilla 14039: [REG2.067a] function is incorrectly inferred as 'pure'
  47. Bugzilla 14044: dmd generates spurious functions in object file created from empty module
  48. Bugzilla 14049: [REG2.064] Wrong purity inference for nested lambda
  49. Bugzilla 14057: [REG2.066] opSlice not working correctly with AliasThis
  50. Bugzilla 14061: Refused array concat at compile-time
  51. Bugzilla 14074: [REG2.067a] non-separate compilation fails, but separate compilation works
  52. Bugzilla 14075: [REG2.067a] Segfault with ambiguous overloading functions without body
  53. Bugzilla 14089: [REG2.064] Assigning to AA has no value when overriding opAssign
  54. Bugzilla 14090: [REG2.067a] Incorrect "recursive alias declaration"
  55. Bugzilla 14093: [REG2.065] __traits(compiles, cast(Object)(tuple)) is true even if it doesn't compile.
  56. Bugzilla 14104: aa with pointer key type doesn't find existing value
  57. Bugzilla 14106: sort is @safe in release mode, @system in debug mode
  58. Bugzilla 14109: [REG2.066.1] Property-like function call does not work on template value parameter
  59. Bugzilla 14126: GITHEAD - GC seemingly corrupting memory
  60. Bugzilla 14130: [REG2.067a] ICE following error in template parameter default value
  61. Bugzilla 14144: [REG2.067a] opAssign seems broken
  62. Bugzilla 14146: [REG2.067a] ICE with non-empty default constructor in struct
  63. Bugzilla 14155: [REG2.066] A defect in DIP29: the return value of some pure functions cannot be unique pointer
  64. Bugzilla 14160: [REG2.066] mutable global data access is wrongly accepted in pure function
  65. Bugzilla 14166: [REG2.066] Excess CTFE running for the temporary variable in module level expression
  66. Bugzilla 14169: Template symbol visibility regression
  67. Bugzilla 14173: [REG2.064] Omitting return type with override hides an error
  68. Bugzilla 14177: [REG2.066.1] ICE(statement.c) recursive aliases
  69. Bugzilla 14198: [REG2.067a] Link failure with Variant
  70. Bugzilla 14199: [REG2.067a] Dwarf Error: mangled line number section
  71. Bugzilla 14218: [REG2.067a] casting null to integer type causes error message
  72. Bugzilla 14220: Bad codegen for optimized std.conv.text in combination with concatenation
  73. Bugzilla 14232: redundant attribute 'const'
  74. Bugzilla 14235: [REG2.066] full-qualified template instantiation misses its error location
  75. Bugzilla 14262: [REG] [2.067-b3] Can't use class this as ref argument
  76. Bugzilla 14267: [REG2.067beta2] ICE when determining if a function can be inlined
  77. Bugzilla 14283: [2.067-b4]: Spurious "this is not an lvalue" deprecation message for "auto ref" arguments
  78. Bugzilla 14285: [REG2.063] alias this to nothing is accepted
  79. Bugzilla 14299: [REG2.067.0-rc1] "ref" parameter in CTFE handled incorrectly for recursive calls
  80. Bugzilla 14301: [2.067-rc1] Private symbols of module conflicts with public from another
  81. Bugzilla 14304: [REG2.067a] ICE with static immutable variable CTFE
  82. Bugzilla 14317: [REG2.066] ICE (cgcod.c 1767) when compiing with -profile -O -inline

DMD Compiler bugs

  1. Bugzilla 1625: CTFE: cannot evaluate function when return type includes a union
  2. Bugzilla 1829: Inline assembler cannot get label addresses
  3. Bugzilla 2644: Unresolved template reference
  4. Bugzilla 2834: Struct Destructors are not called by the GC, but called on explicit delete.
  5. Bugzilla 3022: scope x = new Foo; does not allocate on stack if Foo has allocator
  6. Bugzilla 3918: Parameter use before its use in an AndAnd expression with reals treats NaN as false
  7. Bugzilla 4062: can call method without this pointer inside is()
  8. Bugzilla 4103: opAssign signature rules not enforced on templated opAssign
  9. Bugzilla 4149: refs displayed as pointers in gdb
  10. Bugzilla 4181: GDB prints wrong value of TLS variables
  11. Bugzilla 5314: Wrong error message: struct within immutable member and postblit function
  12. Bugzilla 5908: Optimizer generates wrong value with divide-by-zero.
  13. Bugzilla 6423: Garbage is returned from void main()
  14. Bugzilla 6565: out 2D fixed-sized array
  15. Bugzilla 6574: Erroneous recursive call in template instantiation
  16. Bugzilla 6810: Strange tuple used as a type error
  17. Bugzilla 7104: linker error on void main(){ typeof(new class{}) c; c = new typeof(c); }
  18. Bugzilla 7151: [CTFE] cannot compare classes with ==
  19. Bugzilla 7465: Duplicate error message for bad template mixin
  20. Bugzilla 7874: [CTFE] internal error: unsupported assignment (x OP= y) = z
  21. Bugzilla 7942: Appending different string types corrupts memory
  22. Bugzilla 8246: tuple fields pollute the linker namespace
  23. Bugzilla 8425: Missing line number and module name that can't use core.simd
  24. Bugzilla 9047: Expression requiring std.math fails with function-local import
  25. Bugzilla 9148: 'pure' is broken
  26. Bugzilla 9537: auto ref returns a reference its own stack
  27. Bugzilla 9554: Inconsistent stringof and mangleof result for module/package identifier
  28. Bugzilla 9581: Exceptions are too slow
  29. Bugzilla 9620: Error messages of failed pure enforcement
  30. Bugzilla 9685: Context pointer of struct isn't copied when a closure is passed by alias
  31. Bugzilla 9728: Ddoc anchors non-unique across overloads
  32. Bugzilla 9906: filter of static opCall
  33. Bugzilla 10307: Bad error message for not supported array operation
  34. Bugzilla 10311: gdb prints wrong value for variable updated from closure
  35. Bugzilla 10528: Private constant (enum) properties not private
  36. Bugzilla 10855: Missing dmd.conf for FreeBSD in DMD 2.063.2 release
  37. Bugzilla 10915: std.typecons.Nullable throws in writeln() if it's null
  38. Bugzilla 10920: template instantiation order dependent link failure problem
  39. Bugzilla 11042: Inconsistent "static condition" behaviors
  40. Bugzilla 11260: Assertion `type->ty != Tstruct || ((TypeStruct *)type)->sym == this' failed
  41. Bugzilla 11355: Copy through alias this with @disabled this(this)
  42. Bugzilla 11467: [CTFE] Overlapping array copy is allowed in CT
  43. Bugzilla 11746: invalid enum forward reference pattern not detected
  44. Bugzilla 11888: Incorrect behaviour taking slice from return value
  45. Bugzilla 11902: DMD debuginfo doesn't seem to write classes correctly
  46. Bugzilla 11915: Inconsistent overload resolution behaviour between ref and out
  47. Bugzilla 11916: [IFTI] Disabled by constraint overload with out with IFTI breaks overload resolution
  48. Bugzilla 12092: Wrong TLS access in PIC code (X86_32)
  49. Bugzilla 12130: Segmentation fault if HOME environment variable does not exist
  50. Bugzilla 12163: pdb debugging (win64): stepping loops points to incorrect lines
  51. Bugzilla 12447: variadic template functions hijack all eponymous enum and alias template overloads
  52. Bugzilla 12495: CTFE slice cast can cause allocation
  53. Bugzilla 12500: ICE in codegen when multiplying an incremented size_t by a double
  54. Bugzilla 12502: Some static array casts incorrectly rejected in safe code
  55. Bugzilla 12531: forward reference with nested struct
  56. Bugzilla 12579: DMD rejects valid function literal
  57. Bugzilla 12636: extern(C++) class that implements D interface segfaults
  58. Bugzilla 12741: DMD accepts functions with contracts and no body
  59. Bugzilla 12776: Wrong type for __vector(int[4]).init
  60. Bugzilla 12780: Multiplying integer array by scalar double fails
  61. Bugzilla 12827: [ICE] Segfault on immutable field self-initialization
  62. Bugzilla 12871: inner function returning pointer to outer context local rejected
  63. Bugzilla 12908: [AA] foreach by keys and values over associative array in pure function allow impure function calls
  64. Bugzilla 12979: Nothrow violation error is hidden by inline assembler
  65. Bugzilla 12983: overload not recognized depending on order of declaration
  66. Bugzilla 13028: [ICE] CTFE internal error: cannot evaluate at compile time
  67. Bugzilla 13064: Redundant auto storage class is allowed for functions
  68. Bugzilla 13095: Sometimes struct destructor is called if constructor throws
  69. Bugzilla 13120: Body of foreach over string with transcoding ignores function attributes
  70. Bugzilla 13200: Assertion `protName' failed
  71. Bugzilla 13236: Invalid recursive struct field error not gagged in 'is'-expression
  72. Bugzilla 13280: this.sizeof rejected as static array length in some cases
  73. Bugzilla 13289: wchar and dchar C++ mangling is incorrect
  74. Bugzilla 13295: [CTFE] Modifications of const user type disappear
  75. Bugzilla 13297: [CTFE] Modifications of user type pointer member passed by ref in function disappear
  76. Bugzilla 13320: Redundant error messages for missing operation on struct instance
  77. Bugzilla 13336: auto ref return deduced to be ref despite return value coercion
  78. Bugzilla 13337: Invalid extern C++ namespace resolution
  79. Bugzilla 13356: [ICE] (dmd 2.066: statement.c:754) with recursive Algebraic
  80. Bugzilla 13361: Empty UDA accepted
  81. Bugzilla 13382: [e2ir] compare string to int - leads to ICE in e2ir.c 1902
  82. Bugzilla 13385: ICE with new package(names) protection
  83. Bugzilla 13403: [ICE][2.067Alpha] Internal error: backend\type.c 332 with new package protection extension.
  84. Bugzilla 13434: [ICE] indexing array with empty tuple causes dmd segfault
  85. Bugzilla 13437: [e2ir] ICE in e2ir.c 4616
  86. Bugzilla 13459: segfault in two auto opSlices()
  87. Bugzilla 13465: Segfault by eager semantic2 running in template instantiation
  88. Bugzilla 13468: Wrong code when comparing class reference with typeof(null)
  89. Bugzilla 13481: bug with inferring attributes from built-in properties
  90. Bugzilla 13484: Template type deduction from delegate parameter fails
  91. Bugzilla 13485: FP wrong-code with -O
  92. Bugzilla 13490: Can't append to array of structs with alias this as lvalue ternary opoerator result
  93. Bugzilla 13505: No line number with void array in class
  94. Bugzilla 13508: array vararg function safety not inferred
  95. Bugzilla 13521: [D1] -di disables declaration shadowing message
  96. Bugzilla 13528: Internal Compiler Error: CTFE DotType:
  97. Bugzilla 13530: [REG 2.066] D Inline Assembler in nothrow function hides errors
  98. Bugzilla 13539: Disallow optional template parameters with C-style syntax
  99. Bugzilla 13563: ICE with opIndexAssign op-overloading and ModuleScopeOperator
  100. Bugzilla 13574: incorrect code for assignment to dollar in slice expression
  101. Bugzilla 13583: Inconsistent naming of template arguments in debug symbols
  102. Bugzilla 13586: Destructors not run when argument list evaluation throws
  103. Bugzilla 13599: [D1] backend/cod1.c ICE with -inline
  104. Bugzilla 13600: ICE in dwarf.c line 1949 with -g enabled and lazy void parameter
  105. Bugzilla 13612: Wrong 'this' variable accessed in recursive ctfe member function
  106. Bugzilla 13613: Pragma msg affects data structure layout
  107. Bugzilla 13630: Senseless error with foreach over variadic list
  108. Bugzilla 13645: Incorrect ddoc generation for deprecated module
  109. Bugzilla 13661: static array init does not call destructors
  110. Bugzilla 13666: Undefined Symbols for __gshared data symbols in templates
  111. Bugzilla 13668: [ICE] unable to compile __traits(allMembers...)
  112. Bugzilla 13669: [CTFE] Destructor call on static array variable is not yet supported in CTFE
  113. Bugzilla 13679: foreach_reverse is allowed for AAs
  114. Bugzilla 13701: [REG2.061] Associative array values ignore immutability
  115. Bugzilla 13707: msvc32 C++ struct return ABI not followed for structs with constructors
  116. Bugzilla 13739: in CTFE making an array over an array copies the data
  117. Bugzilla 13740: CTFE fails ref foreach over range
  118. Bugzilla 13747: Linux CMSG_NXTHDR is private, since alias doesn't change protection level
  119. Bugzilla 13757: [CTFE] extern(C) alias declaration does not work in CTFE
  120. Bugzilla 13779: gdb can't find frame base when using ld.gold
  121. Bugzilla 13783: Function overload with rvalue inout parameter not selected when enum parameter implicitly converted to its base type
  122. Bugzilla 13784: Wrong code with modulo operation and optimisations enabled
  123. Bugzilla 13787: Error without line number when slicing function pointer
  124. Bugzilla 13788: dmd segfault, pragma(mangle) and a mixin
  125. Bugzilla 13795: DMD ICE segfault compiling druntime
  126. Bugzilla 13831: DMD crash on newing struct with overlapped fields in CTFE
  127. Bugzilla 13832: delegates that return ref do not output correctly to .di file
  128. Bugzilla 13835: ICE in interpret.c:736 - Issue with static variables.
  129. Bugzilla 13841: infinite loop in compiler on simd arithmetic
  130. Bugzilla 13843: Issue when passing a delegate as an class alias template parameter
  131. Bugzilla 13847: CTFE internal error: dottype
  132. Bugzilla 13858: Wrong warning about unreachable code with break/goto case
  133. Bugzilla 13860: template required forward reference for typeof(member)
  134. Bugzilla 13861: compiler segfault with nested struct, cannot access frame
  135. Bugzilla 13874: Invalid FunctionTypeOf segfault the compiler
  136. Bugzilla 13879: Default inizialization of function pointers array
  137. Bugzilla 13884: No error line number with std.array.array of range of type tuples
  138. Bugzilla 13899: Unwanted warning for pure opApply
  139. Bugzilla 13902: Compiler allows escaping the address of part of a local
  140. Bugzilla 13907: Surrogate pairs in wchar string literal will cause incorrect length match
  141. Bugzilla 13910: Internal error: e2ir.c 1926
  142. Bugzilla 13932: c++ mangling for template negative int parameter
  143. Bugzilla 13938: IASM shouldn't be able to access TLS variables
  144. Bugzilla 13939: IASM shouldn't access global symbol with PIC code
  145. Bugzilla 13947: Padding in empty structs is compared
  146. Bugzilla 13955: 64 bit C ABI not followed for passing structs with mixed floating types
  147. Bugzilla 13956: 64 bit C ABI not followed for passing empty structs
  148. Bugzilla 13959: ICE in e2ir when casting struct to pointer
  149. Bugzilla 13977: Front-end optimizer bug in AndAndExp
  150. Bugzilla 13978: Front-end optimizer bug in OrOrExp
  151. Bugzilla 13982: D1: wrong template instantiation is not rejected
  152. Bugzilla 13987: Invalid struct segfaults
  153. Bugzilla 14009: iasm parser accepts incorrect AsmExp
  154. Bugzilla 14010: Support mangleof property for opaque enum and struct type
  155. Bugzilla 14016: Nested inherited class doesn't know the type of its outer object
  156. Bugzilla 14022: [CTFE] postblits/destructors not called on static array field assignment
  157. Bugzilla 14023: [CTFE] postblits/destructors not called on static array index assignment
  158. Bugzilla 14024: [CTFE] unstable postblit/destructor call order on static array assignment
  159. Bugzilla 14028: [CTFE] Possible reinterpret cast to a pointer to static array
  160. Bugzilla 14050: dmd -v lists imports from failed __traits(compiles) blocks
  161. Bugzilla 14055: CTFE internal error with uninitialized array: Assertion failure: '0' on line 318 in file 'interpret.c'
  162. Bugzilla 14083: Remained unresolved forward reference issue with template classes
  163. Bugzilla 14096: ICE in toir.c: 187
  164. Bugzilla 14116: Assertion failure: 'p->isPkgMod == PKGmodule' on line 143 in file 'import.c'
  165. Bugzilla 14132: [ICE] error on arrays
  166. Bugzilla 14141: pure member function returning qualified member result is implicitly convertible to unqualified
  167. Bugzilla 14154: [e2ir] Error in e2ir at casting to struct
  168. Bugzilla 14163: No line number for error with disabled class constructor
  169. Bugzilla 14165: Link failure on class declaration with @disable this();
  170. Bugzilla 14174: Weird IFTI deduction failure
  171. Bugzilla 14179: Posix x86_64 varargs prolog clobbers RDX
  172. Bugzilla 14195: Ice when mangling templated function parameter extern(C++) function
  173. Bugzilla 14200: C++ mangling issue with expanded tuples
  174. Bugzilla 14201: fatal error LNK1235: corrupt or invalid COFF symbol table
  175. Bugzilla 14210: invalid merging of template instances
  176. Bugzilla 14229: RAII ordering is wrong
  177. Bugzilla 14272: DMD segfault on invalid circular enum initialization
  178. Bugzilla 14275: Qualified package protection for aggregate member doesn't work
  179. Bugzilla 14276: DWARF debug info for SIMD broken
  180. Bugzilla 14306: Wrong codegen with -inline for generic lambdas
  181. Bugzilla 14311: Win32 COFF: bad symbols/relocation entries for global data accesses
  182. Bugzilla 14313: [ld.gold] gdb: wrong value of shared variables

DMD Compiler enhancements

  1. Bugzilla 1317: Document suggested means of overlapping array copy
  2. Bugzilla 2498: make foreach work for any callable symbol
  3. Bugzilla 2529: 'package' access qualifier should allow access to sub-packages
  4. Bugzilla 3449: const and immutable struct members do not behave according to spec
  5. Bugzilla 4567: dmd should print the dmd.conf location with usage statement
  6. Bugzilla 9089: Very restrictive Tuple constructor
  7. Bugzilla 9915: Typeid .name inconsistent between templated classes and structs
  8. Bugzilla 10165: No syntax to create thread-local shared variables
  9. Bugzilla 11530: need gdb test suite
  10. Bugzilla 12888: Include template constraints in JSON output
  11. Bugzilla 12985: Better error message for not supported array operation
  12. Bugzilla 13019: Different color for "Warning:"
  13. Bugzilla 13350: is(typeof(fun)) causes link error when template fun calls undefined reference
  14. Bugzilla 13388: accept '@' before 'nothrow' and 'pure'
  15. Bugzilla 13510: When adding "New issue" there should be no choice among DStress, puremagic, and D. Just leave D.
  16. Bugzilla 13609: better error message for missing '}'
  17. Bugzilla 13704: Confusing error message when passing the same file on the command line twice
  18. Bugzilla 13756: [AA] Allow ref const index on foreach AA iteration
  19. Bugzilla 13802: Improve pretty-print result for the const(string) type
  20. Bugzilla 13803: Improve pretty-print result for the wstring an dstring types
  21. Bugzilla 13839: Use new style for alias declarations in di files
  22. Bugzilla 13944: Built-in stringof and mangleof properties are unnecessarily fixed to the type 'string'
  23. Bugzilla 13976: Value range propagation to disable some slice bound tests
  24. Bugzilla 14105: strideImpl fails for 0xFF
  25. Bugzilla 14123: cannot compare typeid(object.Object) at compile time
  26. Bugzilla 14156: buffer overflow in LibELF
  27. Bugzilla 14211: Compiler should devirtualize calls to members of final class
  28. Bugzilla 14338: Implement DIP25 Sealed References

Phobos regressions

  1. Bugzilla 13241: [REG2.067a] writeln no longer flushes stdout
  2. Bugzilla 13257: [REG2.067a] Deprecation message when using std.getopt with string[] parameter
  3. Bugzilla 13300: pure function 'std.array.Appender!(T[]).Appender.ensureAddable' cannot call impure function 'test.T.__fieldPostBlit'
  4. Bugzilla 13304: std.algorithm.reduce: "Unable to deduce an acceptable seed type" with float[]
  5. Bugzilla 13367: Buffer overflow when setting PATH
  6. Bugzilla 13375: Linking failure when importing both std.regex and std.algorithm
  7. Bugzilla 13390: [REG2.066] std.range.cycle ctor fails when empty input passed
  8. Bugzilla 13393: [REG2.067a] std.algorithm.joiner Assertion failure in popFront() when using with cartesianProduct
  9. Bugzilla 13621: inout issue with std.container.Array opSlice
  10. Bugzilla 13716: Phobos std.file fails to build
  11. Bugzilla 13717: split no longer defined by std.string
  12. Bugzilla 13766: std.container, std.range, std.regex documentation is now broken
  13. Bugzilla 13774: Multiple definition of conv_50c_dc8 with three libraries and std.file import
  14. Bugzilla 13871: [REG2.067a] Segmentation fault from std/variant.d:609
  15. Bugzilla 14037: Problem with BigInt and std.functional.memoize
  16. Bugzilla 14041: Refused writeln of a fixed size array of chars
  17. Bugzilla 14042: std.conv.to of a immutable char pointer
  18. Bugzilla 14197: "replace" was moved from std.string without alias added
  19. Bugzilla 14212: frexp for const and immutable fails to compile
  20. Bugzilla 14213: Strange deprecated message in std.typecons.Proxy with using method
  21. Bugzilla 14230: [REG2.067b2] std.array.join misses the first element which is empty string
  22. Bugzilla 14233: [REG2.067b2] Can't build Algebraic!(This[]) anymore
  23. Bugzilla 14253: [REG2.067b3] std.traits.ParameterStorageClassTuple gives compiler errors when encountering 'return' functions
  24. Bugzilla 14300: [2.067-rc1] DList casting to base type is broken

Phobos bugs

  1. Bugzilla 649: concatenation hangs in threaded program
  2. Bugzilla 3141: osx syntax problem with touch
  3. Bugzilla 5036: Remove caching from ranges
  4. Bugzilla 5233: [patch] std.range.put accepts any element type when putting to an array.
  5. Bugzilla 5698: va_arg sets wrong length for (u)short[]
  6. Bugzilla 6256: [patch] std.algorithm.map does not support static arrays and has 'length' for narrow strings.
  7. Bugzilla 6339: stdin.byChunk throws with Windows pipes on command line
  8. Bugzilla 7223: Access violation when using rmdirRecurse on folder without modify permissions
  9. Bugzilla 7797: std.typelist should be deprecated
  10. Bugzilla 8578: std.demangle.demangle does not parse symbols that are type names
  11. Bugzilla 8708: Documentation for std.process.exec family is inaccurate
  12. Bugzilla 9507: std.range.transposed behaves poorly with jagged ranges of ranges
  13. Bugzilla 10104: std.algorithm.group of a const/immutable array
  14. Bugzilla 10125: readln!dchar misdecodes Unicode non-BMP
  15. Bugzilla 10139: std.stdio.writef and friends documentation is severely out of date
  16. Bugzilla 10460: std.algorithm: some of algorithms don't use 'auto ref' for front
  17. Bugzilla 11434: std.file.copy doesn't preserve file attributes (eg: executable mode etc)
  18. Bugzilla 11539: wrong "Orphan format specifier:" error message
  19. Bugzilla 11895: Add Strings Overview page to Phobos documentation
  20. Bugzilla 12114: buildNormalizedPath shouldn't normalize current path to empty string
  21. Bugzilla 12320: std.stdio.LockingTextReader populates .front in .empty
  22. Bugzilla 12589: std.random.randomCover fails for empty ranges
  23. Bugzilla 12631: std.string.isNumeric uses among without explicit braces when calling 'std.algorithm.among' when compiling with dmd -property flag
  24. Bugzilla 12733: parallelism.amap incorrect assignment without initialization
  25. Bugzilla 12913: Mistake concerning DLists
  26. Bugzilla 12915: RedBlackTree leaks memory
  27. Bugzilla 12969: std.json: Lack of opIndexAssign operator for JSONValue may become a source of runtime errors
  28. Bugzilla 13018: std.string.translate needs mutable translation table
  29. Bugzilla 13124: std.algorithm.until with not-boolean predicates too
  30. Bugzilla 13248: std.range.tee unit test prints to stdout
  31. Bugzilla 13315: std.getopt: implicit help option doesn't work without config.passThrough
  32. Bugzilla 13316: std.getopt: implicit help option breaks the next argument
  33. Bugzilla 13317: std.getopt: endOfOptions broken when it doesn't look like an option
  34. Bugzilla 13352: Algebraic does not support binary arithmetic when omitting small number types
  35. Bugzilla 13354: Algebraic.opIndex/opIndexAssign makes wrong assumptions on the index/value type
  36. Bugzilla 13391: BigInt division by ulong rejected
  37. Bugzilla 13418: uninitializedArray & core.simd.Vector return incorrect type
  38. Bugzilla 13425: DList.linearRemove on last element returns non-empty range
  39. Bugzilla 13441: joiner asserts with only(x) separator
  40. Bugzilla 13446: Can't use executeShell/escapeShellFileName to redirect to file whose name starts with &
  41. Bugzilla 13447: Do not escape process parameters unless necessary
  42. Bugzilla 13477: std.process should ignore unnamed service variables on Windows
  43. Bugzilla 13529: std.string.lastIndexOf matches wrong element
  44. Bugzilla 13535: byCodeUnit doesn't satisfy hasSlicing
  45. Bugzilla 13592: std.datetime fails its unittests on Windows 7 - no Belarus Standard Time?
  46. Bugzilla 13594: std.algorithm.nextPermutation should accept ranges of lvalues
  47. Bugzilla 13647: std.traits documentation needs linking correctly and has spurious category value
  48. Bugzilla 13649: uniform01 Assertion failure
  49. Bugzilla 13686: Reading unicode string with readf ("%s") produces a wrong string
  50. Bugzilla 13689: byCodeUnit fails to be a random access range
  51. Bugzilla 13746: formatValue of delegates with @nogc
  52. Bugzilla 13781: Tuple assign should be @nogc
  53. Bugzilla 13805: Nested struct initialization error
  54. Bugzilla 13877: Problem with map+join
  55. Bugzilla 13922: std.range.package.takeOne doesn't accept non-forward ranges
  56. Bugzilla 13931: Missing overflow checks in std.conv for negative numbers which start from the most negative number digits
  57. Bugzilla 13935: Problem with std.algorithm.cartesianProduct(map, map)
  58. Bugzilla 13963: BigInt modulo ulong is rejected
  59. Bugzilla 13990: std.algorithm.move incorrectly uses hasAliasing for class references
  60. Bugzilla 14012: std.socket: wrong SocketSet.max on Posix
  61. Bugzilla 14013: std.socket: off-by-one error when automatically resizing on POSIX
  62. Bugzilla 14025: unittests for memoize fail intermittently
  63. Bugzilla 14059: Formatted write with wrong formatting string
  64. Bugzilla 14065: std.json not tracking line:column properly
  65. Bugzilla 14082: RedBlackTree unittest fails with custom predicate less
  66. Bugzilla 14111: Broken DDOC for std.format
  67. Bugzilla 14124: BigInt %= int can return "-0"
  68. Bugzilla 14181: Wrong document for std.mathspecial.normalDistribution
  69. Bugzilla 14223: TimSort algorithm is incorrect
  70. Bugzilla 14231: findRoot fails with trivial bounds
  71. Bugzilla 14297: [2.067-rc1] Broken links in phobos/index.html

Phobos enhancements

  1. Bugzilla 2138: Allow more than 65535 files in Zip archives
  2. Bugzilla 2181: Constant-time std.gc.removeRange
  3. Bugzilla 4493: Add sorting capability to toJSON
  4. Bugzilla 4764: Lazy versions of std.string.split and std.string.splitlines
  5. Bugzilla 5190: std.stdio should have File.fdopen
  6. Bugzilla 5494: [patch,enh] Issues with std.stdarg
  7. Bugzilla 5550: std.range.enumerate()
  8. Bugzilla 6147: file scheme uri from file path and vice versa
  9. Bugzilla 6586: feqrel for const values too
  10. Bugzilla 6756: Idea about std.stdio.chunks and std.range.chunks
  11. Bugzilla 6989: Implement toString for std.concurrency.Tid
  12. Bugzilla 7775: std.range.chunks on const array of strings too
  13. Bugzilla 8371: Add a function to make a range from a sequence of elements
  14. Bugzilla 8851: std.string.join should allow 'char' as joiner
  15. Bugzilla 9959: Add functional pattern matching for object references
  16. Bugzilla 11363: std.process should offer a way to run a executable with a given working directory
  17. Bugzilla 11706: Add a TypedefType trait to extract the underlying type of a std.typecons.Typedef
  18. Bugzilla 12409: Add "each" function as found in Ruby and jQuery
  19. Bugzilla 13091: nothrow std.algorithm.cartesianProduct
  20. Bugzilla 13157: std.typecons.Unique: Support construction and conversion from compatible types
  21. Bugzilla 13319: tzDatabaseNameToWindowsTZName should return null on failure rather than throw
  22. Bugzilla 13380: Conflict with std.typecons.Identity and std.traits.Identity
  23. Bugzilla 13402: code cleanup: removing c-style array declarations in phobos
  24. Bugzilla 13419: code cleanup in std.uni: removing "comma expressions"
  25. Bugzilla 13445: std.process fails to create process with empty (non-null) working directory
  26. Bugzilla 13450: Add WindowsException and wenforce to std.exception
  27. Bugzilla 13483: std.range.tee should also accept a function name
  28. Bugzilla 13555: Categorize functions in std.math
  29. Bugzilla 13595: Extend std.algorithm.groupBy to support non-equivalence relations
  30. Bugzilla 13623: std.typecons.Proxy doesn't work inside classes
  31. Bugzilla 13662: @safe pure @nogc nothrow findRoot
  32. Bugzilla 13681: @safe empty writeln
  33. Bugzilla 13837: Named tuples with type inference
  34. Bugzilla 13908: @safe write of a (uint, uint) tuple
  35. Bugzilla 13909: A problem with immutable zip + assocArray
  36. Bugzilla 14110: std.file.read cannot read files open for writing
  37. Bugzilla 14183: Updates to groupBy

Druntime regressions

  1. Bugzilla 13748: benchmark druntime/benchmark/aabench/string.d fails
  2. Bugzilla 13809: dup no longer works with types with postblit and destructors
  3. Bugzilla 14134: Free of large array does not work
  4. Bugzilla 14192: Access Violation when assigning to shared AA
  5. Bugzilla 14225: [REG2.067a] GDB: error reading variable (string + dup)
  6. Bugzilla 14291: Druntime master no longer builds

Druntime bugs

  1. Bugzilla 5629: core.time unittest disabled
  2. Bugzilla 8960: DMD tester: Unable to set thread priority
  3. Bugzilla 13052: TypeInfo.getHash should return same hash for different floating point zeros.
  4. Bugzilla 13410: Performance problem with associative array byKey/byValue
  5. Bugzilla 13416: dead-lock in FreeBSD suspend handler
  6. Bugzilla 13722: onFinalizeError should not allocate
  7. Bugzilla 13723: onFinalizeError should not be called for Errors
  8. Bugzilla 13854: Appending to an interior slice of a large array results in unnecessary 16-byte offset
  9. Bugzilla 13878: Appending to an array block with modified flags loses flag info
  10. Bugzilla 14036: Do not throw FinalizeError on OutOfMemoryError or InvalidMemoryOperationError
  11. Bugzilla 14157: fabsf fabsl for CRuntime_Microsoft
  12. Bugzilla 14247: string within demangled symbol name should be made escape
  13. Bugzilla 14303: rt.util.container.array.Array unittest contains invalid code

Druntime enhancements

  1. Bugzilla 9119: [AA] Forward range addition to associative arrays.
  2. Bugzilla 11216: Make synchronized statement nothrow
  3. Bugzilla 13401: code cleanup: removing c-style array declarations in druntime
  4. Bugzilla 13559: missing 64-bit version of array short operations
  5. Bugzilla 13725: onInvalidMemoryOperationError et al should not be inlined
  6. Bugzilla 13755: core.sys.linux.stdio, std.stdio.File: fopencookie, fmemopen missing
  7. Bugzilla 14007: shmctl with IPC_STAT returns wrong number of attachments. shmid_ds is defined wrong.

Optlink bugs

  1. Bugzilla 4831: Optlink rejects paths with invalid characters based on HPFS filesystem instead of NTFS

Installer bugs

  1. Bugzilla 9392: Misleading text about required OS version

Website regressions

  1. Bugzilla 14258: SIGSEGV in dpldocs
  2. Bugzilla 14280: Links to command line tools have disappeared from navigation

Website bugs

  1. Bugzilla 8307: inconsistent treatment of auto functions
  2. Bugzilla 9118: typo in github tools repo
  3. Bugzilla 9535: incomplete documentation for std.range.recurrence and std.range.sequence
  4. Bugzilla 9691: Static void arrays are not documented
  5. Bugzilla 9970: Document the definition and difference between storage class and type constructor
  6. Bugzilla 10232: AndExpression grammar is not correct
  7. Bugzilla 10235: Grammar does not contain a rule for function declarations
  8. Bugzilla 10284: dlang.org/phobos/index.html needs redesign
  9. Bugzilla 10285: Enum grammar documentation is incorrect
  10. Bugzilla 12810: PrimaryExpression grammar does not allow type constructors
  11. Bugzilla 13093: D ABI change for guaranteed efficient return of fixed size array
  12. Bugzilla 13308: AsmPrimaryExp documentation is incorrect
  13. Bugzilla 13310: Old style multiple alias declaration not documented
  14. Bugzilla 13328: Missing link to contracts description from function specification page
  15. Bugzilla 13329: AutoDeclarationX grammar lists '=' token and template parameters in the wrong order
  16. Bugzilla 13436: posix.mak is broken for dlang.org repo
  17. Bugzilla 13448: Class specification misses template classes in base classes list
  18. Bugzilla 13451: Lambda syntax with explicit return type not documented
  19. Bugzilla 13467: A little better std.algorithm.canFind documentation
  20. Bugzilla 13523: Auto function declaration does not match any grammar rule
  21. Bugzilla 13525: Redundant SpecialKeyword grammar listd in DefaultInitializerExpression
  22. Bugzilla 13538: Divide old C style syntax from D style grammar rule
  23. Bugzilla 13547: "D is a fully garbage collected language"
  24. Bugzilla 13648: ddoc problem with std.random.uniform01
  25. Bugzilla 13664: Grammar does not allow @<template_instance> UDAs
  26. Bugzilla 13671: https://dlang.org/const3.html incorrectly calls type qualifiers "type constructors"
  27. Bugzilla 13696: Missing entry for unicode code point literals on the lexer page
  28. Bugzilla 13895: Declaration grammar is insufficient
  29. Bugzilla 13941: NewExpression grammar is insufficient
  30. Bugzilla 13979: ForeachType grammar does not allow 'ref' to appear after type constructors
  31. Bugzilla 13991: Invariant grammar does not document that parenthesis are optional
  32. Bugzilla 14002: Book link is broken
  33. Bugzilla 14031: Frame content going outside frame
  34. Bugzilla 14047: "this" missing from AsmPrimaryExp grammar
  35. Bugzilla 14081: Table in the document of std.bigint.BigInt.toString() duplicates.
  36. Bugzilla 14121: Wiki: "Create account" page completely broken!
  37. Bugzilla 14135: std.uuid.randomUUID breaks @safety
  38. Bugzilla 14153: std.format page displaying incorrectly

Website enhancements

  1. Bugzilla 4954: Clarify documentation of foreach with delegates.
  2. Bugzilla 6251: D spec should warn about using foreach_reverse on a delegate
  3. Bugzilla 9469: Keywords list could use linkage; more-humane documentation
  4. Bugzilla 10154: Betas should be posted on dlang.org
  5. Bugzilla 10164: std.string.column examples and documentation
  6. Bugzilla 13325: __vector not documented in language specification
  7. Bugzilla 14011: Canonical links help message should clarify that 'thread' is invalid
previous version: 2.066.1 – next version: 2.067.1