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

previous version: 2.064 – next version: 2.066.0

Download D 2.065.0
released February 24, 2014

List of all bug fixes and enhancements in D 2.065.

Compiler Changes

  1. Extensionless D source file names can now be run when using the -run switch:

    On Posix systems it is frequently useful to have a shebang line at the start of an extensionless file, which marks the tool used to compile the script. It's now possible to use this technique with D, e.g. the following is a D source file with the file name "my-script":

    void main()

    Note: This does not allow an arbitrary extension, as D source files need to be proper D identifiers.

    Note: This feature is not available on Windows, as Windows does not have extensionless executable files.

    Note: When compiling, and in order to avoid the default behavior of generating an extensionless executable which would overwrite the source file, the compiler will generate "a.out" instead.

Language Changes

  1. Goto jumps now cannot skip variable declarations:

    For a very long period, the following code had been allowed by mistake, but it is prohibited now:

    import std.stdio;
    void main()
        goto Label; // Error: goto skips declaration of variable v
        int v = 42;

  2. All instantiated functions now infer their attributes:

    Regardless of how directly or indirectly a function is instantiated, its attributes will still be inferred:

    struct S(T)
        T square(T x)
            T calc()
                return x * x;
            return calc();
        static double pi() { return 3.141592; }
    void main() pure @safe nothrow
        S!int s;
        // S!int.square and its nested function calc are instantiated functions, so
        // their attributes are inferred as pure and callable from main()
        assert(s.square(2) == 4);  // ok
        // static member function attributes are also inferred now
        auto pi = typeof(s).pi();

  3. Add a new type qualifier inout const:

    Until now, the common type of immutable(T) and inout(T) had been const(T). But that loses the inout information, which might then refuse some valid code. Now the type becomes inout(const(T)), which meaningfully propagates the appropriate type qualifier.

    inout(const(int))[] foo(bool condition, inout(int)[] x, immutable(int)[] y)
        static assert(is(typeof(condition ? x : y) == inout(const(int))[]));
        return condition ? x : y;
    void main()
        int[] marr = [1,2,3];
        const(int)[] carr = [4,5,6];
        immutable(int)[] iarr = [7,8,9];
        // inout(const(int))[] can go back to const(int)[] or immutable(int)[].
        static assert(is(typeof(foo(true, marr, iarr)) == const(int)[]));
        static assert(is(typeof(foo(true, carr, iarr)) == const(int)[]));
        static assert(is(typeof(foo(true, iarr, iarr)) == immutable(int)[]));

  4. Entire slicing operation of built-in tuple is now accepted:

    Bugzilla 8244: cannot slice a type tuple with '[]' in locations where a type is valid:

    import std.typetuple;
    alias Types = TypeTuple!(int, double, string);
    // Was error in 2.064, but allowed from 2.065.
    alias Types2 = Types[];
    static assert(is(Types == Types2));

  5. Packages and module names now have no type:

    Bugzilla 9081: Modules shouldn't have a type

    import std.stdio;
    // Both had printed 'void' in 2.064.
    // From 2.065, both will cause "has no type" error.
    pragma(msg, typeof(std));
    pragma(msg, typeof(std.stdio));

    By the change, an idiom that used to work is(typeof(package_or_module_name)) is changed to not work. Instead use: __traits(compiles, package_or_module_name).

  6. Const and immutable fields with initializers are now deprecated:

    Eventually, they will be changed to occupy space in the object. Such fields should now be changed to enum or static. See also the release note in 2.063.

    Related to that, void-initialized const or immutable fields will now occupy space in the object instance ahead of schedule:

    struct S
        const int[1000] x = void;
        this(int n)
            // Was disallowed in 2.064.
            // From 2.065 x is a field of runtime object.
            x[] = n;
    // S.sizeof had been 1 in 2.064.
    // From 2.065, field s.x occupies space in the object.
    static assert(S.sizeof == int.sizeof * 1000);
    void main()
        S s = S(3);
        foreach (e; s.x)
            assert(e == 3); // OK

  7. Deprecate unordered floating point comparisons:

    Bugzilla 10369: Deprecate unordered floating point comparisons

  8. Deprecate .min property for floating-point types:

    Bugzilla 10439: Deprecate float.min, double.min, real.min

  9. CTFE can handle overlapped union fields:

    Example code:

    union U
        size_t x;
        int* y;
    bool test()
        U u;
        assert(u.x == 0);
        // In here, reading u.y will cause CTFE error.
        u.y = [1,2,3].ptr;
        // Writing value to overlapped field u.y will make corresponding field u.x invalid.
        assert(u.y[0..3] == [1,2,3]);
        // u.y holds valid field and reading it is allowed
        // In here, reading u.x will cause CTFE error.
        u.x = 10;
        // Set value to u.x again.
        assert(u.x == 10);  // OK
        // In here, reading u.y will cause CTFE error.
        return true;
    static assert(test());  // run CTFE

    Bit image reinterpretation by using two overlapped union fields is not allowed during CTFE.

  10. Add a new trait getAliasThis:

    The new getAliasThis trait will return a tuple of field names which are marked as the subtypes of an aggregate type. For example:

    struct S
        string var;
        alias var this;
    static assert(__traits(getAliasThis, S)[0] == "var");

    Note: Multiple subtyping is not yet implemented in D, therefore this trait will always return a tuple of length 1.

  11. Mixing struct constructors and static opCall is no longer allowed:

    This was not implemented correctly and caused ambiguities.


    struct S
        this(int i) {}
        static S opCall()   // disallowed due to constructor
            return S.init;

    Note: static opCall can be used to simulate struct constructors with no arguments, but this is not recommended practice. Instead, the preferred solution is to use a factory function to create struct instances.

Library Changes

  1. Many functions in std.algorithm can now be used as predicates to other functions:

    Functions such as any, all, canFind and equal are now templates, which allows them to be used as predicates to other templates, as well as allowing the user to alias an instantiation of any such templates. For an example of how this allows terser syntax in user-code, in the following example the programmer wants to check whether all the strings in a string array have at least one ASCII digit:

    import std.algorithm : all;
    import std.ascii : isDigit;
    void main()
        string[] inputs = ["foo1", "bar2"];
        bool allContainDigit;
        foreach (input; inputs)
            if (!any!isDigit(input))  // none of the characters are ASCII digits
                allContainDigit = false;

    But it is now simpler to use the any template itself as a predicate. We can make it a predicate to another useful template, the all template:

    import std.algorithm : any, all;
    import std.ascii : isDigit;
    void main()
        string[] inputs = ["foo1", "bar2"];
        bool allContainDigit = all!(any!isDigit)(inputs);

    In addition to allowing these functions to become predicates they can now also be aliased, which allow you to make your functions simpler to understand:

    import std.algorithm : any, all;
    import std.ascii : isDigit;
    void main()
        alias isAnyDigit = any!isDigit;  // less visual noise and a self-describing function
        string[] inputs = ["foo1", "bar2"];
        bool allContainDigit = all!isAnyDigit(inputs);  // easier to understand
        alias doAllContainDigits = all!isAnyDigit;  // or wrap the entire algorithm into one symbol!
        assert( doAllContainDigits(["1", "a 1", "b 2"]));  // self-describing code
        assert(!doAllContainDigits(["c", "a 1", "b 2"]));

    You can of course combine all and any in a number of combinations. For example, if you want to reverse the test and instead check whether any of the strings in the string array contain all digits, the code might look like the following:

    import std.algorithm : any, all;
    import std.ascii : isDigit;
    void main()
        alias areAllDigits = all!isDigit;
        alias areAnyIntegrals = any!areAllDigits;
        assert( areAnyIntegrals(["123", "456"]));
        assert( areAnyIntegrals(["abc", "123"]));  // "123" is a number
        assert(!areAnyIntegrals(["abc", "def123"])); // "def123" is not really a number

    If on the other hand you want to ensure that all strings in the string array contain all digits, the could might look like the following:

    import std.algorithm : any, all;
    import std.ascii : isDigit;
    void main()
        alias areAllDigits = all!isDigit;
        alias allStringsDigits = all!areAllDigits;
        assert( allStringsDigits(["123", "456"]));
        assert(!allStringsDigits(["abc", "123"]));  // "123" is a number, but "abc" is not

  2. Allow std.algorithm.all to be used without a predicate.

    You no longer need to pass a predicate if you want to match all items in a range which implicitly convert to true:

    import std.algorithm;
    void main()
        auto arr1 = [true, true, true];
        assert( all(arr1));  // all values are true
        auto arr2 = [false, true, true];
        assert(!all(arr2));  // all values are not true
        auto arr3 = [1, 2, 3];
        assert( all(arr3));  // all values convert to true
        auto arr4 = [0, 2, 3];
        assert(!all(arr4));  // all values do not convert to true

  3. Add std.uni.byGrapheme and std.uni.byCodePoint.

    Complementary higher-order ranges which enable range operations on graphemes:

    import std.array : array;
    import std.range : retro;
    import std.string : text;
    import std.uni : byCodePoint, byGrapheme;
    void main()
        string s = "noe\u0308l"; // noël
        // reverse it and convert the result back to UTF-8
        string reverse = s.byGrapheme()
            .array() // Note: byGrapheme will support bidirectionality in the future
        assert(reverse == "le\u0308on"); // lëon
    Note that byGrapheme will support bidirectionality in the future, obviating the need for array in the above example.

  4. Add support for any number of arguments to std.range.only.

    only can now be used with more than one argument:

    import std.algorithm : joiner;
    import std.range : equal, only;
    void main()
        assert(only("one", "two", "three").joiner(" ").equal("one two three"));

    Additionally, only() is now a way to get an empty range.

Linker Changes

  1. Added /LARGEADDRESSAWARE to the Win32 Optlink linker.

    When using the default Optlink linker on win32 (for linking 32-bit object files and executables), the /LARGEADDRESSAWARE option tells the linker that the application can handle addresses larger than 2 gigabytes. This is equivalent to Visual C's linker option of the same name since this is an operating-system feature that is enabled by setting a specific flag in the executable.

List of all bug fixes and enhancements in D 2.065:

DMD Compiler regressions

  1. Bugzilla 7782: [ICE] With wrong import syntax
  2. Bugzilla 9107: Value Range Analysis with uint and byte
  3. Bugzilla 9639: Recursive template instanciation segfault dmd
  4. Bugzilla 11078: Diagnostic for wrong RHS in property assign of a property group should improve
  5. Bugzilla 11321: Can't link _D6object15__T7reserveTyaZ7reserveFNaNbNeKAyamZm
  6. Bugzilla 11441: DMD halts compilation at semantic3
  7. Bugzilla 11447: Closure provide bogus values
  8. Bugzilla 11472: REGRESSION(2.064): dmd segfaults on wrong code instead of giving error
  9. Bugzilla 11487: dmd segfaults on writefln in nested template
  10. Bugzilla 11504: [CTFE] JSONValue cannot make in CTFE
  11. Bugzilla 11505: Bad error message: "opAssign [...] is annotated with @disable"
  12. Bugzilla 11508: [REG 2.064] Wrong code with -O on x86_64 for char comparisons
  13. Bugzilla 11513: [REG 2.064] Assertion in module.c
  14. Bugzilla 11525: REG(2.065): Error: 'a[] *= a[]' each element is not a scalar, it is a Complex!double
  15. Bugzilla 11553: dmd segfault with recursive template
  16. Bugzilla 11554: is(T == enum); produces an error if T is an enum defined with no members
  17. Bugzilla 11563: Module dependency cycle causes unrelated template instantiations to fail
  18. Bugzilla 11566: ICE with invalid array op
  19. Bugzilla 11596: Internal error: backend/cgcs.c 351
  20. Bugzilla 11610: Compiler core dumps on FreeBSD, compiles forever on Linux
  21. Bugzilla 11614: Error: this for _expand_field_0 needs to be type Tuple not type Foo
  22. Bugzilla 11626: [ICE] (mtype.c line 9718) With missing in ref type
  23. Bugzilla 11659: false positive goto skips initialization of variable error (skipping enum initialization)
  24. Bugzilla 11718: [REG2.065a] Unintended mangled names conflict of nested template structs
  25. Bugzilla 11723: Too many "integer overflow" errors
  26. Bugzilla 11730: associative array with Nullable!SysTime values: Called get on null Nullable!SysTime.
  27. Bugzilla 11751: [REG2.065a] Hex float exponents should be decimal
  28. Bugzilla 11755: Operator <>= and !<>= with arrays make internal error in e2ir
  29. Bugzilla 11767: doubly mixed-in struct "failed semantic analysis"
  30. Bugzilla 11776: [ICE] Assertion failure: 'tf->next == NULL' on line 119 in file 'mangle.c'
  31. Bugzilla 11777: [ICE] dmd memory corruption as Scope::pop frees fieldinit used also in enclosing
  32. Bugzilla 11805: Removal of Bool has critically broken expression evaluation
  33. Bugzilla 11818: Ternary operator not allowed in a value parameter anymore
  34. Bugzilla 11822: -de switch causees ICE with auto return and other stuff
  35. Bugzilla 11824: A stack variable escaping problem in CTFE Phobos code
  36. Bugzilla 11844: ICE(template.c:6643) Assertion failed: (td->semanticRun != PASSinit)
  37. Bugzilla 11849: Recursive enum causes segfault
  38. Bugzilla 11850: [ICE] Problem with filter with signed-unsigned array comparison
  39. Bugzilla 11852: RDMD broken on the Github HEAD
  40. Bugzilla 11854: Git-head does not build with Visual Studio
  41. Bugzilla 11863:!string(int/uint, radix) returns incorrect string
  42. Bugzilla 11868: ICE(template.c) on passing inout const argument as TemplateTupleParameter
  43. Bugzilla 11896: [REG2.066a] isVirtualMethod related GitHub HEAD regression (works with 2.064)
  44. Bugzilla 11914: Missed tuple unpacking in foreach for cartesianProduct
  45. Bugzilla 11919: GitHub HEAD regression for getAttributes trait (DMD CORE DUMP)
  46. Bugzilla 11922: [REG2.065a] ICE on nonexistent identifier in templated auto method
  47. Bugzilla 11924: inout Variadic Template Parameters
  48. Bugzilla 11925: [2.065] [REGRESSION] ICE in CompoundStatement::semantic
  49. Bugzilla 11930: Github regression -- Alias this not considered in is(T unused: U) matching
  50. Bugzilla 11931: Linkers "Symbol Undefined" again with dmd HEAD when -g specified
  51. Bugzilla 11941: Errors when appending to aggregate member array in CTFE
  52. Bugzilla 11956: dmd doesn't lookup /etc/dmd.conf
  53. Bugzilla 11963: Regression(2.065) ICE(parse.c) Parser crash
  54. Bugzilla 11965: Regression(2.064) Segfault on garbage
  55. Bugzilla 11966: Regression 2.065.b1: inout(const(char))[] doesn't convert to inout(char)[]
  56. Bugzilla 11967: Regression(2.065) ICE(parse.c) Parser crash
  57. Bugzilla 11980: startaddress pragma broken (DMD 2.061 regression)
  58. Bugzilla 11993: [REG] typeof(this) in constraint of member function template should reflect method qualifier
  59. Bugzilla 12002: Internal error: toir.c 181
  60. Bugzilla 12008: alias this and "unable to resolve forward reference" error
  61. Bugzilla 12010: [REG DMD2.065-b1] Undefined template symbols for static library linked with debug symbols
  62. Bugzilla 12016: implicit immutable upcast becomes null in CTFE
  63. Bugzilla 12017: DDoc leaves out the majority of documentation
  64. Bugzilla 12023: Regression 2.065-b2: template mixin fails within template class
  65. Bugzilla 12037: Link-failure with std.numeric.CustomFloat
  66. Bugzilla 12044: Invalid code gen causes segfault
  67. Bugzilla 12047: Regression (2.065 git-head): UDAs are not checked
  68. Bugzilla 12070: Variant opCall not static
  69. Bugzilla 12079: Internal error: backend/cod4.c 358 for associative array access
  70. Bugzilla 12080: Internal error: backend/symbol.c 1035 for invariant
  71. Bugzilla 12089: std.utf.validate and inout(char[]) failts to compile
  72. Bugzilla 12144: [REG DMD2.064] Unresolved xopEquals when referenced by dynamic array constructor
  73. Bugzilla 12158: ICE with .init of nonexisting selective import
  74. Bugzilla 12160: UDA related regressions

DMD Compiler bugs

  1. Bugzilla 235: goto & scope: cannot goto forward into different try block level
  2. Bugzilla 275: Undefined identifier in instances of templates with forward mixins
  3. Bugzilla 602: Compiler allows a goto statement to skip an initalization
  4. Bugzilla 899: structure field .offsetof property inaccessible in the scope
  5. Bugzilla 900: changing import order causes type mismatch
  6. Bugzilla 918: (D1 only): Template order matter, version block change something with typedef, and another template bug.
  7. Bugzilla 1687: "extern (C++) interface" and vtbl
  8. Bugzilla 1748: Wrong stringof for templated classes
  9. Bugzilla 2481: mixing field into anonymous struct inside class generates field overlapping vtable
  10. Bugzilla 2806: enum member cannot be forward referenced
  11. Bugzilla 2885: Silent forward reference bug using ReturnType
  12. Bugzilla 3013: Duplicate error message on calling a function with a type
  13. Bugzilla 3107: [meta] Property syntax
  14. Bugzilla 3226: -fPIC flag doesn't seem to work
  15. Bugzilla 3279: (D1 only) Confusing error message when comparing types
  16. Bugzilla 3307: Template alias default parameters aren't resolved properly
  17. Bugzilla 3753: ICE(eh.c): Related to exception handling and alloca.
  18. Bugzilla 3817: Array op: wrong error message
  19. Bugzilla 3834: forward reference in templated class
  20. Bugzilla 3903: Traits compiles as true for an array sum with wrong syntax
  21. Bugzilla 3970: Problem with cast -1.0L ==> uint/ulong
  22. Bugzilla 3991: Void initializers in unions considered overlapping
  23. Bugzilla 4145: cross alias namespace can't be resolve
  24. Bugzilla 4162: pass by alias offset problems
  25. Bugzilla 4983: [ICE] Stack overflow while initializing struct member with address of one of its methods
  26. Bugzilla 5569: 64 bit Dwarf symbolic debug info not recognized by gdb
  27. Bugzilla 5878: Forward reference in returning superclass from template using is() expression (Breaks std.traits.BaseTypeTuple)
  28. Bugzilla 6010: -fPIC is broken on freebsd/64
  29. Bugzilla 6382: edge case with static foreach
  30. Bugzilla 6439: [CTFE] union fields are initialized independently
  31. Bugzilla 6764: IFTI fails on typesafe variadic function over static array with non IntegerLiteral length
  32. Bugzilla 6796: Several __error with wrong enum definition
  33. Bugzilla 7077: (D1 only) mixin statements can invade the enclosing scope
  34. Bugzilla 7175: Zero-length static array .ptr is always null
  35. Bugzilla 7472: Cast from class to basic type not rejected during semantic
  36. Bugzilla 7645: ICE(e2ir.c) nested classes
  37. Bugzilla 7744: Forward reference in string mixin
  38. Bugzilla 7966: First template instantiation inside with results in Error 42: Symbol Undefined
  39. Bugzilla 8019: (D1 only) can't convert [] to int[]
  40. Bugzilla 8117: Cannot initialize struct member without default constructor
  41. Bugzilla 8179: ICE(e2ir.c) with failed fixed size array cast
  42. Bugzilla 8200: DMD segfault: template aliasing result of map
  43. Bugzilla 8244: cannot slice a type tuple with '[]' in locations where a type is valid
  44. Bugzilla 8255: [CTFE] ICE when passing 'ref' literal
  45. Bugzilla 8313: stack overflow on recursive ifti evaluation
  46. Bugzilla 8365: Static fixed size array of enums initialization fails
  47. Bugzilla 8396: wrong order of evaluation for tuple expansion in function arguments
  48. Bugzilla 8492: can't infer type in static assert
  49. Bugzilla 8511: Segfault with forward-referenced enum
  50. Bugzilla 8525: optimizer loops infinitely
  51. Bugzilla 8543: simd literals need better CTFE support
  52. Bugzilla 8581: Internal error: backend/cod1.c 1677 on structs with bitfields (when compile with release or optimize parameter)
  53. Bugzilla 8648: No error line number with incomplete template
  54. Bugzilla 8658: Passing large structs to function b value causes stack corruption
  55. Bugzilla 8664: Compiler causes stack overflow with recursive typedef and option -g
  56. Bugzilla 8711: ICE with initializing function pointer with array
  57. Bugzilla 8722: foreach triggers a floating point exception with multidimensional array of a dimension equal to 0
  58. Bugzilla 8735: ICE: Assertion failure: 't' on line 100 in file 'aliasthis.c'
  59. Bugzilla 8739: DDoc outputs wrong parameter name in delegate parameter list
  60. Bugzilla 8825: Wrong line number of error message
  61. Bugzilla 8903: Bad code for enum array members
  62. Bugzilla 8997: template instances omit symbol that may be used in other modules
  63. Bugzilla 9008: Another forward referencing bug
  64. Bugzilla 9050: Too early instantiation of template structs
  65. Bugzilla 9081: Modules shouldn't have a type
  66. Bugzilla 9212: Associative array foreach iteration with immutable key
  67. Bugzilla 9256: A purity-related error message in case of member access
  68. Bugzilla 9271: Forwarding lambda predicate with type inference causes segfault
  69. Bugzilla 9296: LITTLE_ENDIAN and BIG_ENDIAN are always defined on Linux
  70. Bugzilla 9301: using XMM.PSHUFD results in an internal compiler error
  71. Bugzilla 9356: -inline with inout and append generates wrong code
  72. Bugzilla 9459: Front-end does not detect invalid array operations
  73. Bugzilla 9466: Compiler crash with code-coverage generation with large files
  74. Bugzilla 9504: typeof does not look up properties correctly on template argument
  75. Bugzilla 9562: Built-in runtime properties should become error with Type.prop
  76. Bugzilla 9572: Missed wrong implicit integral conversion
  77. Bugzilla 9577: Crash on static array of function literals
  78. Bugzilla 9644: Spell checker gives silly suggestions for 1-2 character symbols
  79. Bugzilla 9662: Implement RDMD test suite
  80. Bugzilla 9690: cannot access to @disable'd symbol from inner function of another @disable'd
  81. Bugzilla 9741: undefined identifier with User Defined Attribute
  82. Bugzilla 9765: Error message with __error with struct literal dotvar expression
  83. Bugzilla 9807: with statement does not work with alias this
  84. Bugzilla 9831: Error message with failed lambda inference
  85. Bugzilla 9861: Spurious 'is used as type' error with failed template instantiation
  86. Bugzilla 9912: Wrong codegen when using tuple over member variable in more than one method
  87. Bugzilla 10207: Alias and @attributes: Assertion failure: '!udas' on line 3132 in file 'parse.c'
  88. Bugzilla 10224: core.simd ICE cgcv.c line 2162 when compiling with -g
  89. Bugzilla 10251: CTFE: Allow returning pointers to global static variables of known value
  90. Bugzilla 10259: ICE on invalid compile-time class instantiation
  91. Bugzilla 10312: compiler assert failure with ctfe on simd vector type
  92. Bugzilla 10313: inout constructor + IFTI + has indirections arg doesn't work
  93. Bugzilla 10329: Attributes not inferred for indirectly templated methods
  94. Bugzilla 10391: Segfault compiling on Mac OS 10.8
  95. Bugzilla 10459: align(16) does not work on Win64 with seperate compilation
  96. Bugzilla 10483: ICE(expression.c) .init of struct with block initialized 2D static array
  97. Bugzilla 10598: Using not-imported type - AssertFail: 'global.errors' line 6040 'template.c'
  98. Bugzilla 10632: [ICE](glue.c line 1227) With inlining and tuples
  99. Bugzilla 10635: Error: cannot use array to initialize S
  100. Bugzilla 10643: Refused const array struct field initialized with void
  101. Bugzilla 10747: Win64: warning about non-existing vc100.pdb
  102. Bugzilla 10770: is(T BASE==enum) with tag enum T - AssertFail:'type' line 428 declaration.c
  103. Bugzilla 10805: wrong error message for wrong delimited string
  104. Bugzilla 10883: [ICE] Internal error: ../ztc/cod4.c 358 when compiling with -inline
  105. Bugzilla 10905: [ICE](ctfeexpr.c line 355) with ulong2 in structs
  106. Bugzilla 10922: Compiler segfaults when using __traits(parent, {})
  107. Bugzilla 10926: Wrong expression printed when ternary operator used as lvalue
  108. Bugzilla 10927: Power of complex number causes an internal error
  109. Bugzilla 10938: ICE on recursive instantiation in opDispatch
  110. Bugzilla 11019: fwd reference : legal in C++, CT error in D (unable to resolve forward reference in definition)
  111. Bugzilla 11034: ICE: Assertion failed: (!scope), function toObjFile, file toobj.c, line 366.
  112. Bugzilla 11155: Wrong SIMD code generated (unaligned movaps)
  113. Bugzilla 11193: [ICE] String template argument mixed with variadic template arguments causes ICE
  114. Bugzilla 11198: Error messages for declaring a 'version' inside main() and other functions are unclear
  115. Bugzilla 11215: inout lose enclosing shared on resolution
  116. Bugzilla 11224: Inlining stops NRVO
  117. Bugzilla 11247: Error: typeof(i).sizeof is used as a type
  118. Bugzilla 11286: Impure dtor makes "cannot call impure function" error, although it won't actually be called.
  119. Bugzilla 11288: dmd assertion when assigning to (static) opDispatch
  120. Bugzilla 11297: [ICE](glue.c line 868) with a string concat in global enum lambda
  121. Bugzilla 11314: inline ice with tuple assignment and if/else again
  122. Bugzilla 11317: glue.c:1218: virtual unsigned int Type::totym(): Assertion 0 failed.
  123. Bugzilla 11322: ICE with -inline cgcs.c 221
  124. Bugzilla 11332: ICE(dt.c) and missing error when interpreting an unimplemented builtin
  125. Bugzilla 11371: core.simd and ctfe
  126. Bugzilla 11375: [profile+nothrow] Semantic 'no throw' error with -profile switch
  127. Bugzilla 11376: ICE on __traits(compiles, ...) with invalid array-op
  128. Bugzilla 11383: Some array casts incorrectly rejected in safe code
  129. Bugzilla 11385: XXX is a nested function and cannot be accessed from XXX
  130. Bugzilla 11394: NRVO should work for object field initialization in constructor
  131. Bugzilla 11406: breaks switch table jumps
  132. Bugzilla 11425: Broken shadowing variable diagnostic
  133. Bugzilla 11427: anonymous unions break structs in @safe code
  134. Bugzilla 11445: adding double[string] causes crash
  135. Bugzilla 11479: template members ignore private attribute in ddoc
  136. Bugzilla 11484: [e2ir] Error in e2ir at cast to/from static array
  137. Bugzilla 11485: [e2ir] Error in e2ir at numeric/bool to class/interface cast
  138. Bugzilla 11489: Improper implicit cast to immutable.
  139. Bugzilla 11497: lambda in "static if"/"assert" prevent inlining of function
  140. Bugzilla 11518: DMD segfault on multiple template match
  141. Bugzilla 11534: [CTFE] inout + returning a pointer into a member array
  142. Bugzilla 11540: [ICE] CTFE segfault with try-catch-finally and goto
  143. Bugzilla 11552: Missing label is not caught during semantic
  144. Bugzilla 11562: Goto into or out of finally block is not caught during semantic
  145. Bugzilla 11565: [Optimizer] Zeroes out the higher 32bits of register in ?: expression
  146. Bugzilla 11587: Cannot compare AAs at compile time
  147. Bugzilla 11618: Internal Compiler Error
  148. Bugzilla 11627: [CTFE] cannot cast dchar to char at compile time on AA assignment
  149. Bugzilla 11629: [CTFE] crash on AA.rehash
  150. Bugzilla 11635: RDMD eats the -op flag when it should just pass through
  151. Bugzilla 11653: No error when forgetting break with range cases.
  152. Bugzilla 11656: property offsetof does not work with __vector fields
  153. Bugzilla 11661: Meaningless error: "a struct is not a valid initializer for a void function()"
  154. Bugzilla 11664: A function with a local static variable is unusable in CTFE
  155. Bugzilla 11689: deprecated local function does not work
  156. Bugzilla 11696: C++ incorrect static member mangling
  157. Bugzilla 11722: Qualifier-only casts should not invoke opCast
  158. Bugzilla 11726: ICE with ufcs on undefined identifier and opDispatch
  159. Bugzilla 11727: Repeated error message with using forward referenced enum as variable
  160. Bugzilla 11735: pragma(msg, ...) fails to print wstring, dstring
  161. Bugzilla 11745: Unittests retrieved by __traits(getUnitTests) can not be invoked if private.
  162. Bugzilla 11748: [ICE] function call as alias parameter of template gives ICE
  163. Bugzilla 11749: switch case fallthrough error is enabled with -w, but cannot be made informational warning
  164. Bugzilla 11750: ICE with debug info and empty #line Filespec
  165. Bugzilla 11756: Irrelevant variable name printing in CTFE error message
  166. Bugzilla 11769: Wrong line number in "matches both" error message
  167. Bugzilla 11785: Order of method/function declarations has an effect on compilation result.
  168. Bugzilla 11790: ICE(interpret.c): passing creation of array with type string as size to CTFE
  169. Bugzilla 11793: [ICE] Compiler runs out of memory with trivial program: class with own class member instance
  170. Bugzilla 11800: alias this matching incorrectly changes lvalue-ness
  171. Bugzilla 11802: Wrong vtbl order for extern(C++) classes with overloaded functions on win32
  172. Bugzilla 11813: Improve IFTI error diagnostic
  173. Bugzilla 11814: Unnecessary error messages "does not match ..." on IFTI failure
  174. Bugzilla 11843: Template instantiated twice: failed semantic analysis
  175. Bugzilla 11875: static if template type deduction causes infinite recursion with recursive alias this
  176. Bugzilla 11926: Segmentation fault when using const in an enum
  177. Bugzilla 11944: ICE(expression.c) Assertion f failed.
  178. Bugzilla 11968: ICE(expression.c) Crash when deleting __FILE__
  179. Bugzilla 11969: ICE(statement.c) When mixing in a array literal containing errors
  180. Bugzilla 11974: ICE(cast.c) Segfault with invalid assignment
  181. Bugzilla 11982: ICE(func.c) With function literal with no body
  182. Bugzilla 12038: alias this and &this cause ICE
  183. Bugzilla 12040: Compiler segfault with circular reference in variable type
  184. Bugzilla 12051: Wrong code with ?: resulting in char on x86-64
  185. Bugzilla 12095: Wrong code with -O -inline

DMD Compiler enhancements

  1. Bugzilla 3597: Need single source for parser and documentation grammar.
  2. Bugzilla 5109: some advise
  3. Bugzilla 5746: Make std.range.iota strongly pure
  4. Bugzilla 6930: combined type of immutable(T) and inout(T) should be inout(const(T))
  5. Bugzilla 9477: String (and array) comparisons are needlessly very slow
  6. Bugzilla 10199: labels cannot be used without a statement
  7. Bugzilla 11284: add -allinst compiler switch
  8. Bugzilla 11365: Allow D source file names to have no extension (or an arbitrary extension) when -run is used
  9. Bugzilla 11417: rotate with immediate not recognized by optimizer
  10. Bugzilla 11510: Relax restriction for overlapped pointer field access in safe code/during CTFE
  11. Bugzilla 11533: Compiler should allow to being nested for static local template functions
  12. Bugzilla 11546: string import dependency failure
  13. Bugzilla 11711: Add __traits(getAliasThis)
  14. Bugzilla 11759: Poor error message trying to use lowercase L in literal suffix.
  15. Bugzilla 11840: Show all errors of undefined identifier used in a line

Phobos regressions

  1. Bugzilla 1832: reading/writing an archive causes data loss; horribly broken
  2. Bugzilla 11309: std.concurrency: OwnerTerminated message doesn't work
  3. Bugzilla 11512: Can't build Phobos docs with win32 makefile
  4. Bugzilla 11527: JSONValue cannot set values through named fields
  5. Bugzilla 11528: appender: crash with -inline -O
  6. Bugzilla 11576: std.algorithm.remove!(SwapStrategy.unstable) overruns array bounds
  7. Bugzilla 11583: bigint bug
  8. Bugzilla 11591: std.typecons.Tuple -s with classes fails at runtime as associative array keys
  9. Bugzilla 11603: std.algorithm.canFind does not work when needle is 1-byte zero
  10. Bugzilla 11671: ctRegex broken
  11. Bugzilla 11684: SIGSEGV with ld.bfd version 2.22
  12. Bugzilla 11692: can't set file attributes for
  13. Bugzilla 11764: [REG2.065a]std.getopt broken
  14. Bugzilla 11831: no longer allows setting madeVersion field in zip file
  15. Bugzilla 11838: Missing emplace import for
  16. Bugzilla 11853: Tuples fail "isAssignable"
  17. Bugzilla 11973: std/datetime.d(14647): Deprecation: function std.algorithm.canFind!(not).canFind!(immutable(dchar)[]).canFind is deprecated - Please use any instead
  18. Bugzilla 12024: [REG DMD2.065-b2] template instantiation for swap(SysTime, SysTime) fails
  19. Bugzilla 12071: Algebraic won't take delegate returning structure
  20. Bugzilla 12098: libcurl bad argument on handle null
  21. Bugzilla 12135: [AA] Format tail after associative array value is treated as separator if explicit separator is empty
  22. Bugzilla 12168: [REG2.065a] Add ref to array() and object() of JSONValue getters to add new element

Phobos bugs

  1. Bugzilla 1804: Severe GC leaks with repetitive array allocations
  2. Bugzilla 2162: Access violation when threads run closures
  3. Bugzilla 4301: BigInt * const(BigInt) doesn't work well
  4. Bugzilla 4673: Bug in std.string (isNumeric)
  5. Bugzilla 4874: std.numeric.dotProduct doesn't work with bigints
  6. Bugzilla 5280: to!FP(Hex float string) doesn't work well
  7. Bugzilla 5762: getopt: short option parameter read incorrectly when bundling enabled
  8. Bugzilla 5977: String splitting with empty separator
  9. Bugzilla 6730: std.algorithm.splitter conflicts with std.array.splitter
  10. Bugzilla 7069: Variant Doesn't Handle Const or Immutable Contents
  11. Bugzilla 7689: splitter() on ivalid UTF-8 sequences
  12. Bugzilla 8013: splitter() and split() give different results
  13. Bugzilla 8203: Use of std.regex.match() generates "not enough preallocated memory" error
  14. Bugzilla 8291: dirEntry cannot handle root directories + unhandled exception causes crash
  15. Bugzilla 8298: dirEntries special linux file in Home dir
  16. Bugzilla 8877: std.encoding.transcode is extremely slow
  17. Bugzilla 9528: std.array.appender can't append elements with const members
  18. Bugzilla 9645: std.algorithm.splitter on string with char as separator performs badly in certain situations
  19. Bugzilla 9823: Delegate accepting element not accepted in std.range.put
  20. Bugzilla 10569: std.traits: EnumMembers, isExpressionTuple, isTypeTuple & Largest balks at large input
  21. Bugzilla 10571: formattedWrite error with delegate and string
  22. Bugzilla 10710: shared phobos library doesn't work on all linux distributions
  23. Bugzilla 10864: [REG 2.064][PERFORMANCE] new Safe appender is slower than "~="
  24. Bugzilla 11005: std.xml does not encode attributes
  25. Bugzilla 11110: Variant.convertsTo doesn't work like isImplicitlyConvertible
  26. Bugzilla 11112: Unable to execute shell commands in different threads
  27. Bugzilla 11148: Can't implicitly convert const(BigInt) or immutable(BigInt) to BigInt
  28. Bugzilla 11180: Launching a process from a Windows GUI process using std.process.spawnProcess always fails
  29. Bugzilla 11403: functions in std.algo can't be used as pred
  30. Bugzilla 11459: std.container.Array bool constraint ambiguity
  31. Bugzilla 11568: can't compile std.stdio.rawWrite with -m64 in Windows
  32. Bugzilla 11600: to!BigInt(string) accepts non-numeric input
  33. Bugzilla 11606: Cannot instantiate Tuple of non printable
  34. Bugzilla 11617: std.uni.normalize doesn't compile
  35. Bugzilla 11652: Support numerical ^^ complex operations in std.complex
  36. Bugzilla 11681: std.datetime.IntervalRange.opAssign with non-ref parameter is required
  37. Bugzilla 11691: can't join pathSplitter with dirSeparator
  38. Bugzilla 11713: std.string munch() does not properly handle UTF strings.
  39. Bugzilla 11738: partialShuffle actually shuffles the entire input
  40. Bugzilla 11771: Unicode set intersection with char is broken
  41. Bugzilla 11775: std.regex should check for valid repetition range in assert mode
  42. Bugzilla 11780: RangeError in format for incomplete format specifier
  43. Bugzilla 11808: std.uni.CodepointSet('А', 'Я'+1, 'а', 'я'+1) asserts
  44. Bugzilla 11839: std.regex capture group names should allow numbers to be in them
  45. Bugzilla 11879: missing default User-Agent in
  46. Bugzilla 11884: std.container.Array lacks a constructor from an input range
  47. Bugzilla 12069: ctRegex is 3x slower then R-T ?

Phobos enhancements

  1. Bugzilla 3868: It would be nice to have a function which read a file lazily using a range
  2. Bugzilla 4859: Another File.byChunk()
  3. Bugzilla 4909: Two suggestions for std.algorithm.schwartzSort()
  4. Bugzilla 5611: back() and front() with ref return + opSlice() in sort() constraint
  5. Bugzilla 6986: SortedRange[x..$] fails with unidentified __dollar
  6. Bugzilla 8167: BigInt(BigInt(1)) too
  7. Bugzilla 9061: BigInt | BigInt, BigInt & int
  8. Bugzilla 11770: std.regex.Captures should be convertible to bool
  9. Bugzilla 11789: No setAttributes to complement getAttributes
  10. Bugzilla 11798: std.algorithm.all with no predicate too

Druntime regressions

  1. Bugzilla 11478: shared library on osx: worked in 2.062, fails in 2.063.2, still fails in 2.064

Druntime bugs

  1. Bugzilla 3454: Inconsistent flag setting in GC.realloc()
  2. Bugzilla 4809: Stack trace when throwing exception misses location of the throw statement
  3. Bugzilla 7508: float4 values aren't stored on initialisation
  4. Bugzilla 8301: Access violation when a big array is allocated
  5. Bugzilla 10701: [GC] segfault in GC
  6. Bugzilla 11806: Freeze in GC.collect() in in-contracts when multithreading is used

Optlink regressions

  1. Bugzilla 11559: Optlink crash with more than 2048 modules generated and debug info

Optlink bugs

  2. Bugzilla 3956: linker removes underscore from all exported symbols of a module but the first
  3. Bugzilla 6673: Map file contains broken lines on every 16,384 bytes
  4. Bugzilla 7634: optlink creates bad debug info for a large number of modules

Installer bugs

  1. Bugzilla 10246: Windows installer still downloads from
  2. Bugzilla 11799: Incompatible argument types in create_dmd_release

Installer enhancements

  1. Bugzilla 10153: Beta releases should all have unique names

Website regressions

  1. Bugzilla 11449: Jump lists of phobos are in wrong order

Website bugs

  1. Bugzilla 5388: SList.insertFront has complexity O(log(n))
  2. Bugzilla 9734: setIntersection accepts only 2 ranges, but documentation says otherwise
  3. Bugzilla 10205: 'deprecated' '(' assignExpression ')' grammar is not documented
  4. Bugzilla 10206: User-defined attributes not documented well in language specification
  5. Bugzilla 10250: Grammar does not allow invariants in struct declarations
  6. Bugzilla 10514: Constructor declaration grammar is incorrect
  7. Bugzilla 11398: Language spec does not allow new eponymous template syntax
  8. Bugzilla 11579: repo can't be built without git
  9. Bugzilla 11762: std.regex macro is not displayed/expanded properly

Website enhancements

  1. Bugzilla 11676: Add a link to D Wiki Sidebar to take users back to
  2. Bugzilla 12087: Add Readme to repository that explains how to contribute
previous version: 2.064 – next version: 2.066.0