Change Log: 2.065.0
Download D 2.065.0
released February 24, 2014
Language Changes
- Goto jumps now cannot skip variable declarations.
- All instantiated functions now infer their attributes.
- Add a new type qualifier inout const.
- Entire slicing operation of built-in tuple is now accepted.
- Packages and module names now have no type.
- Const and immutable fields with initializers are now deprecated.
- Deprecate unordered floating point comparisons.
- Deprecate .min property for floating-point types.
- CTFE can handle overlapped union fields.
- Add a new trait getAliasThis.
- Mixing struct constructors and static opCall is no longer allowed.
Library Changes
Linker Changes
List of all bug fixes and enhancements in D 2.065.
Compiler Changes
- 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":
#!rdmd 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
- 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; Label: writeln(v); }
- 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(); }
- 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)[])); }
- 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));
- 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).
- 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 } }
- Deprecate unordered floating point comparisons:
Bugzilla 10369: Deprecate unordered floating point comparisons
- Deprecate .min property for floating-point types:
Bugzilla 10439: Deprecate float.min, double.min, real.min
- 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.
- 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.
- Mixing struct constructors and static opCall is no longer allowed:
This was not implemented correctly and caused ambiguities.
Example:
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
- 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; break; } } }
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 }
- 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 }
- 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 .retro() .byCodePoint() .text(); assert(reverse == "le\u0308on"); // lëon }
Note that byGrapheme will support bidirectionality in the future, obviating the need for array in the above example. - 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
- 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
- Bugzilla 7782: [ICE] With wrong import syntax
- Bugzilla 9107: Value Range Analysis with uint and byte
- Bugzilla 9639: Recursive template instanciation segfault dmd
- Bugzilla 11078: Diagnostic for wrong RHS in property assign of a property group should improve
- Bugzilla 11321: Can't link _D6object15__T7reserveTyaZ7reserveFNaNbNeKAyamZm
- Bugzilla 11441: DMD halts compilation at semantic3
- Bugzilla 11447: Closure provide bogus values
- Bugzilla 11472: REGRESSION(2.064): dmd segfaults on wrong code instead of giving error
- Bugzilla 11487: dmd segfaults on writefln in nested template
- Bugzilla 11504: [CTFE] JSONValue cannot make in CTFE
- Bugzilla 11505: Bad error message: "opAssign [...] is annotated with @disable"
- Bugzilla 11508: [REG 2.064] Wrong code with -O on x86_64 for char comparisons
- Bugzilla 11513: [REG 2.064] Assertion in module.c
- Bugzilla 11525: REG(2.065): Error: 'a[] *= a[]' each element is not a scalar, it is a Complex!double
- Bugzilla 11553: dmd segfault with recursive template
- Bugzilla 11554: is(T == enum); produces an error if T is an enum defined with no members
- Bugzilla 11563: Module dependency cycle causes unrelated template instantiations to fail
- Bugzilla 11566: ICE with invalid array op
- Bugzilla 11596: Internal error: backend/cgcs.c 351
- Bugzilla 11610: Compiler core dumps on FreeBSD, compiles forever on Linux
- Bugzilla 11614: Error: this for _expand_field_0 needs to be type Tuple not type Foo
- Bugzilla 11626: [ICE] (mtype.c line 9718) With missing in ref type
- Bugzilla 11659: false positive goto skips initialization of variable error (skipping enum initialization)
- Bugzilla 11718: [REG2.065a] Unintended mangled names conflict of nested template structs
- Bugzilla 11723: Too many "integer overflow" errors
- Bugzilla 11730: associative array with Nullable!SysTime values: Called get on null Nullable!SysTime.
- Bugzilla 11751: [REG2.065a] Hex float exponents should be decimal
- Bugzilla 11755: Operator <>= and !<>= with arrays make internal error in e2ir
- Bugzilla 11767: doubly mixed-in struct "failed semantic analysis"
- Bugzilla 11776: [ICE] Assertion failure: 'tf->next == NULL' on line 119 in file 'mangle.c'
- Bugzilla 11777: [ICE] dmd memory corruption as Scope::pop frees fieldinit used also in enclosing
- Bugzilla 11805: Removal of Bool has critically broken expression evaluation
- Bugzilla 11818: Ternary operator not allowed in a value parameter anymore
- Bugzilla 11822: -de switch causees ICE with auto return and other stuff
- Bugzilla 11824: A stack variable escaping problem in CTFE Phobos code
- Bugzilla 11844: ICE(template.c:6643) Assertion failed: (td->semanticRun != PASSinit)
- Bugzilla 11849: Recursive enum causes segfault
- Bugzilla 11850: [ICE] Problem with filter with signed-unsigned array comparison
- Bugzilla 11852: RDMD broken on the Github HEAD
- Bugzilla 11854: Git-head does not build with Visual Studio
- Bugzilla 11863: std.conv.to!string(int/uint, radix) returns incorrect string
- Bugzilla 11868: ICE(template.c) on passing inout const argument as TemplateTupleParameter
- Bugzilla 11896: [REG2.066a] isVirtualMethod related GitHub HEAD regression (works with 2.064)
- Bugzilla 11914: Missed tuple unpacking in foreach for cartesianProduct
- Bugzilla 11919: GitHub HEAD regression for getAttributes trait (DMD CORE DUMP)
- Bugzilla 11922: [REG2.065a] ICE on nonexistent identifier in templated auto method
- Bugzilla 11924: inout Variadic Template Parameters
- Bugzilla 11925: [2.065] [REGRESSION] ICE in CompoundStatement::semantic
- Bugzilla 11930: Github regression -- Alias this not considered in is(T unused: U) matching
- Bugzilla 11931: Linkers "Symbol Undefined" again with dmd HEAD when -g specified
- Bugzilla 11941: Errors when appending to aggregate member array in CTFE
- Bugzilla 11956: dmd doesn't lookup /etc/dmd.conf
- Bugzilla 11963: Regression(2.065) ICE(parse.c) Parser crash
- Bugzilla 11965: Regression(2.064) Segfault on garbage
- Bugzilla 11966: Regression 2.065.b1: inout(const(char))[] doesn't convert to inout(char)[]
- Bugzilla 11967: Regression(2.065) ICE(parse.c) Parser crash
- Bugzilla 11980: startaddress pragma broken (DMD 2.061 regression)
- Bugzilla 11993: [REG] typeof(this) in constraint of member function template should reflect method qualifier
- Bugzilla 12002: Internal error: toir.c 181
- Bugzilla 12008: alias this and "unable to resolve forward reference" error
- Bugzilla 12010: [REG DMD2.065-b1] Undefined template symbols for static library linked with debug symbols
- Bugzilla 12016: implicit immutable upcast becomes null in CTFE
- Bugzilla 12017: DDoc leaves out the majority of documentation
- Bugzilla 12023: Regression 2.065-b2: template mixin fails within template class
- Bugzilla 12037: Link-failure with std.numeric.CustomFloat
- Bugzilla 12044: Invalid code gen causes segfault
- Bugzilla 12047: Regression (2.065 git-head): UDAs are not checked
- Bugzilla 12070: Variant opCall not static
- Bugzilla 12079: Internal error: backend/cod4.c 358 for associative array access
- Bugzilla 12080: Internal error: backend/symbol.c 1035 for invariant
- Bugzilla 12089: std.utf.validate and inout(char[]) failts to compile
- Bugzilla 12144: [REG DMD2.064] Unresolved xopEquals when referenced by dynamic array constructor
- Bugzilla 12158: ICE with .init of nonexisting selective import
- Bugzilla 12160: UDA related regressions
DMD Compiler bugs
- Bugzilla 235: goto & scope: cannot goto forward into different try block level
- Bugzilla 275: Undefined identifier in instances of templates with forward mixins
- Bugzilla 602: Compiler allows a goto statement to skip an initalization
- Bugzilla 899: structure field .offsetof property inaccessible in the scope
- Bugzilla 900: changing import order causes type mismatch
- Bugzilla 918: (D1 only): Template order matter, version block change something with typedef, and another template bug.
- Bugzilla 1687: "extern (C++) interface" and vtbl
- Bugzilla 1748: Wrong stringof for templated classes
- Bugzilla 2481: mixing field into anonymous struct inside class generates field overlapping vtable
- Bugzilla 2806: enum member cannot be forward referenced
- Bugzilla 2885: Silent forward reference bug using ReturnType
- Bugzilla 3013: Duplicate error message on calling a function with a type
- Bugzilla 3107: [meta] Property syntax
- Bugzilla 3226: -fPIC flag doesn't seem to work
- Bugzilla 3279: (D1 only) Confusing error message when comparing types
- Bugzilla 3307: Template alias default parameters aren't resolved properly
- Bugzilla 3753: ICE(eh.c): Related to exception handling and alloca.
- Bugzilla 3817: Array op: wrong error message
- Bugzilla 3834: forward reference in templated class
- Bugzilla 3903: Traits compiles as true for an array sum with wrong syntax
- Bugzilla 3970: Problem with cast -1.0L ==> uint/ulong
- Bugzilla 3991: Void initializers in unions considered overlapping
- Bugzilla 4145: cross alias namespace can't be resolve
- Bugzilla 4162: pass by alias offset problems
- Bugzilla 4983: [ICE] Stack overflow while initializing struct member with address of one of its methods
- Bugzilla 5569: 64 bit Dwarf symbolic debug info not recognized by gdb
- Bugzilla 5878: Forward reference in returning superclass from template using is() expression (Breaks std.traits.BaseTypeTuple)
- Bugzilla 6010: -fPIC is broken on freebsd/64
- Bugzilla 6382: edge case with static foreach
- Bugzilla 6439: [CTFE] union fields are initialized independently
- Bugzilla 6764: IFTI fails on typesafe variadic function over static array with non IntegerLiteral length
- Bugzilla 6796: Several __error with wrong enum definition
- Bugzilla 7077: (D1 only) mixin statements can invade the enclosing scope
- Bugzilla 7175: Zero-length static array .ptr is always null
- Bugzilla 7472: Cast from class to basic type not rejected during semantic
- Bugzilla 7645: ICE(e2ir.c) nested classes
- Bugzilla 7744: Forward reference in string mixin
- Bugzilla 7966: First template instantiation inside with results in Error 42: Symbol Undefined
- Bugzilla 8019: (D1 only) can't convert [] to int[]
- Bugzilla 8117: Cannot initialize struct member without default constructor
- Bugzilla 8179: ICE(e2ir.c) with failed fixed size array cast
- Bugzilla 8200: DMD segfault: template aliasing result of map
- Bugzilla 8244: cannot slice a type tuple with '[]' in locations where a type is valid
- Bugzilla 8255: [CTFE] ICE when passing 'ref' literal
- Bugzilla 8313: stack overflow on recursive ifti evaluation
- Bugzilla 8365: Static fixed size array of enums initialization fails
- Bugzilla 8396: wrong order of evaluation for tuple expansion in function arguments
- Bugzilla 8492: can't infer type in static assert
- Bugzilla 8511: Segfault with forward-referenced enum
- Bugzilla 8525: optimizer loops infinitely
- Bugzilla 8543: simd literals need better CTFE support
- Bugzilla 8581: Internal error: backend/cod1.c 1677 on structs with bitfields (when compile with release or optimize parameter)
- Bugzilla 8648: No error line number with incomplete template
- Bugzilla 8658: Passing large structs to function b value causes stack corruption
- Bugzilla 8664: Compiler causes stack overflow with recursive typedef and option -g
- Bugzilla 8711: ICE with initializing function pointer with array
- Bugzilla 8722: foreach triggers a floating point exception with multidimensional array of a dimension equal to 0
- Bugzilla 8735: ICE: Assertion failure: 't' on line 100 in file 'aliasthis.c'
- Bugzilla 8739: DDoc outputs wrong parameter name in delegate parameter list
- Bugzilla 8825: Wrong line number of error message
- Bugzilla 8903: Bad code for enum array members
- Bugzilla 8997: template instances omit symbol that may be used in other modules
- Bugzilla 9008: Another forward referencing bug
- Bugzilla 9050: Too early instantiation of template structs
- Bugzilla 9081: Modules shouldn't have a type
- Bugzilla 9212: Associative array foreach iteration with immutable key
- Bugzilla 9256: A purity-related error message in case of member access
- Bugzilla 9271: Forwarding lambda predicate with type inference causes segfault
- Bugzilla 9296: LITTLE_ENDIAN and BIG_ENDIAN are always defined on Linux
- Bugzilla 9301: using XMM.PSHUFD results in an internal compiler error
- Bugzilla 9356: -inline with inout and append generates wrong code
- Bugzilla 9459: Front-end does not detect invalid array operations
- Bugzilla 9466: Compiler crash with code-coverage generation with large files
- Bugzilla 9504: typeof does not look up properties correctly on template argument
- Bugzilla 9562: Built-in runtime properties should become error with Type.prop
- Bugzilla 9572: Missed wrong implicit integral conversion
- Bugzilla 9577: Crash on static array of function literals
- Bugzilla 9644: Spell checker gives silly suggestions for 1-2 character symbols
- Bugzilla 9662: Implement RDMD test suite
- Bugzilla 9690: cannot access to @disable'd symbol from inner function of another @disable'd
- Bugzilla 9741: undefined identifier with User Defined Attribute
- Bugzilla 9765: Error message with __error with struct literal dotvar expression
- Bugzilla 9807: with statement does not work with alias this
- Bugzilla 9831: Error message with failed lambda inference
- Bugzilla 9861: Spurious 'is used as type' error with failed template instantiation
- Bugzilla 9912: Wrong codegen when using tuple over member variable in more than one method
- Bugzilla 10207: Alias and @attributes: Assertion failure: '!udas' on line 3132 in file 'parse.c'
- Bugzilla 10224: core.simd ICE cgcv.c line 2162 when compiling with -g
- Bugzilla 10251: CTFE: Allow returning pointers to global static variables of known value
- Bugzilla 10259: ICE on invalid compile-time class instantiation
- Bugzilla 10312: compiler assert failure with ctfe on simd vector type
- Bugzilla 10313: inout constructor + IFTI + has indirections arg doesn't work
- Bugzilla 10329: Attributes not inferred for indirectly templated methods
- Bugzilla 10391: Segfault compiling on Mac OS 10.8
- Bugzilla 10459: align(16) does not work on Win64 with seperate compilation
- Bugzilla 10483: ICE(expression.c) .init of struct with block initialized 2D static array
- Bugzilla 10598: Using not-imported type - AssertFail: 'global.errors' line 6040 'template.c'
- Bugzilla 10632: [ICE](glue.c line 1227) With inlining and tuples
- Bugzilla 10635: Error: cannot use array to initialize S
- Bugzilla 10643: Refused const array struct field initialized with void
- Bugzilla 10747: Win64: warning about non-existing vc100.pdb
- Bugzilla 10770: is(T BASE==enum) with tag enum T - AssertFail:'type' line 428 declaration.c
- Bugzilla 10805: wrong error message for wrong delimited string
- Bugzilla 10883: [ICE] Internal error: ../ztc/cod4.c 358 when compiling with -inline
- Bugzilla 10905: [ICE](ctfeexpr.c line 355) with ulong2 in structs
- Bugzilla 10922: Compiler segfaults when using __traits(parent, {})
- Bugzilla 10926: Wrong expression printed when ternary operator used as lvalue
- Bugzilla 10927: Power of complex number causes an internal error
- Bugzilla 10938: ICE on recursive instantiation in opDispatch
- Bugzilla 11019: fwd reference : legal in C++, CT error in D (unable to resolve forward reference in definition)
- Bugzilla 11034: ICE: Assertion failed: (!scope), function toObjFile, file toobj.c, line 366.
- Bugzilla 11155: Wrong SIMD code generated (unaligned movaps)
- Bugzilla 11193: [ICE] String template argument mixed with variadic template arguments causes ICE
- Bugzilla 11198: Error messages for declaring a 'version' inside main() and other functions are unclear
- Bugzilla 11215: inout lose enclosing shared on resolution
- Bugzilla 11224: Inlining stops NRVO
- Bugzilla 11247: Error: typeof(i).sizeof is used as a type
- Bugzilla 11286: Impure dtor makes "cannot call impure function" error, although it won't actually be called.
- Bugzilla 11288: dmd assertion when assigning to (static) opDispatch
- Bugzilla 11297: [ICE](glue.c line 868) with a string concat in global enum lambda
- Bugzilla 11314: inline ice with tuple assignment and if/else again
- Bugzilla 11317: glue.c:1218: virtual unsigned int Type::totym(): Assertion 0 failed.
- Bugzilla 11322: ICE with -inline cgcs.c 221
- Bugzilla 11332: ICE(dt.c) and missing error when interpreting an unimplemented builtin
- Bugzilla 11371: core.simd and ctfe
- Bugzilla 11375: [profile+nothrow] Semantic 'no throw' error with -profile switch
- Bugzilla 11376: ICE on __traits(compiles, ...) with invalid array-op
- Bugzilla 11383: Some array casts incorrectly rejected in safe code
- Bugzilla 11385: XXX is a nested function and cannot be accessed from XXX
- Bugzilla 11394: NRVO should work for object field initialization in constructor
- Bugzilla 11406: ld.gold breaks switch table jumps
- Bugzilla 11425: Broken shadowing variable diagnostic
- Bugzilla 11427: anonymous unions break structs in @safe code
- Bugzilla 11445: adding double[string] causes crash
- Bugzilla 11479: template members ignore private attribute in ddoc
- Bugzilla 11484: [e2ir] Error in e2ir at cast to/from static array
- Bugzilla 11485: [e2ir] Error in e2ir at numeric/bool to class/interface cast
- Bugzilla 11489: Improper implicit cast to immutable.
- Bugzilla 11497: lambda in "static if"/"assert" prevent inlining of function
- Bugzilla 11518: DMD segfault on multiple template match
- Bugzilla 11534: [CTFE] inout + returning a pointer into a member array
- Bugzilla 11540: [ICE] CTFE segfault with try-catch-finally and goto
- Bugzilla 11552: Missing label is not caught during semantic
- Bugzilla 11562: Goto into or out of finally block is not caught during semantic
- Bugzilla 11565: [Optimizer] Zeroes out the higher 32bits of register in ?: expression
- Bugzilla 11587: Cannot compare AAs at compile time
- Bugzilla 11618: Internal Compiler Error
- Bugzilla 11627: [CTFE] cannot cast dchar to char at compile time on AA assignment
- Bugzilla 11629: [CTFE] crash on AA.rehash
- Bugzilla 11635: RDMD eats the -op flag when it should just pass through
- Bugzilla 11653: No error when forgetting break with range cases.
- Bugzilla 11656: property offsetof does not work with __vector fields
- Bugzilla 11661: Meaningless error: "a struct is not a valid initializer for a void function()"
- Bugzilla 11664: A function with a local static variable is unusable in CTFE
- Bugzilla 11689: deprecated local function does not work
- Bugzilla 11696: C++ incorrect static member mangling
- Bugzilla 11722: Qualifier-only casts should not invoke opCast
- Bugzilla 11726: ICE with ufcs on undefined identifier and opDispatch
- Bugzilla 11727: Repeated error message with using forward referenced enum as variable
- Bugzilla 11735: pragma(msg, ...) fails to print wstring, dstring
- Bugzilla 11745: Unittests retrieved by __traits(getUnitTests) can not be invoked if private.
- Bugzilla 11748: [ICE] function call as alias parameter of template gives ICE
- Bugzilla 11749: switch case fallthrough error is enabled with -w, but cannot be made informational warning
- Bugzilla 11750: ICE with debug info and empty #line Filespec
- Bugzilla 11756: Irrelevant variable name printing in CTFE error message
- Bugzilla 11769: Wrong line number in "matches both" error message
- Bugzilla 11785: Order of method/function declarations has an effect on compilation result.
- Bugzilla 11790: ICE(interpret.c): passing creation of array with type string as size to CTFE
- Bugzilla 11793: [ICE] Compiler runs out of memory with trivial program: class with own class member instance
- Bugzilla 11800: alias this matching incorrectly changes lvalue-ness
- Bugzilla 11802: Wrong vtbl order for extern(C++) classes with overloaded functions on win32
- Bugzilla 11813: Improve IFTI error diagnostic
- Bugzilla 11814: Unnecessary error messages "does not match ..." on IFTI failure
- Bugzilla 11843: Template instantiated twice: failed semantic analysis
- Bugzilla 11875: static if template type deduction causes infinite recursion with recursive alias this
- Bugzilla 11926: Segmentation fault when using const in an enum
- Bugzilla 11944: ICE(expression.c) Assertion f failed.
- Bugzilla 11968: ICE(expression.c) Crash when deleting __FILE__
- Bugzilla 11969: ICE(statement.c) When mixing in a array literal containing errors
- Bugzilla 11974: ICE(cast.c) Segfault with invalid assignment
- Bugzilla 11982: ICE(func.c) With function literal with no body
- Bugzilla 12038: alias this and &this cause ICE
- Bugzilla 12040: Compiler segfault with circular reference in variable type
- Bugzilla 12051: Wrong code with ?: resulting in char on x86-64
- Bugzilla 12095: Wrong code with -O -inline
DMD Compiler enhancements
- Bugzilla 3597: Need single source for parser and documentation grammar.
- Bugzilla 5109: some advise
- Bugzilla 5746: Make std.range.iota strongly pure
- Bugzilla 6930: combined type of immutable(T) and inout(T) should be inout(const(T))
- Bugzilla 9477: String (and array) comparisons are needlessly very slow
- Bugzilla 10199: labels cannot be used without a statement
- Bugzilla 11284: add -allinst compiler switch
- Bugzilla 11365: Allow D source file names to have no extension (or an arbitrary extension) when -run is used
- Bugzilla 11417: rotate with immediate not recognized by optimizer
- Bugzilla 11510: Relax restriction for overlapped pointer field access in safe code/during CTFE
- Bugzilla 11533: Compiler should allow to being nested for static local template functions
- Bugzilla 11546: string import dependency failure
- Bugzilla 11711: Add __traits(getAliasThis)
- Bugzilla 11759: Poor error message trying to use lowercase L in literal suffix.
- Bugzilla 11840: Show all errors of undefined identifier used in a line
Phobos regressions
- Bugzilla 1832: reading/writing an archive causes data loss; std.zip horribly broken
- Bugzilla 11309: std.concurrency: OwnerTerminated message doesn't work
- Bugzilla 11512: Can't build Phobos docs with win32 makefile
- Bugzilla 11527: JSONValue cannot set values through named fields
- Bugzilla 11528: appender: crash with -inline -O
- Bugzilla 11576: std.algorithm.remove!(SwapStrategy.unstable) overruns array bounds
- Bugzilla 11583: bigint bug
- Bugzilla 11591: std.typecons.Tuple -s with classes fails at runtime as associative array keys
- Bugzilla 11603: std.algorithm.canFind does not work when needle is 1-byte zero
- Bugzilla 11671: ctRegex broken
- Bugzilla 11684: SIGSEGV with ld.bfd version 2.22
- Bugzilla 11692: can't set file attributes for std.zip.ArchiveMember
- Bugzilla 11764: [REG2.065a]std.getopt broken
- Bugzilla 11831: std.zip no longer allows setting madeVersion field in zip file
- Bugzilla 11838: Missing emplace import for std.range.zip?
- Bugzilla 11853: Tuples fail "isAssignable"
- Bugzilla 11973: std/datetime.d(14647): Deprecation: function std.algorithm.canFind!(not).canFind!(immutable(dchar)[]).canFind is deprecated - Please use any instead
- Bugzilla 12024: [REG DMD2.065-b2] template instantiation for swap(SysTime, SysTime) fails
- Bugzilla 12071: Algebraic won't take delegate returning structure
- Bugzilla 12098: libcurl bad argument on handle null
- Bugzilla 12135: [AA] Format tail after associative array value is treated as separator if explicit separator is empty
- Bugzilla 12168: [REG2.065a] Add ref to array() and object() of JSONValue getters to add new element
Phobos bugs
- Bugzilla 1804: Severe GC leaks with repetitive array allocations
- Bugzilla 2162: Access violation when threads run closures
- Bugzilla 4301: BigInt * const(BigInt) doesn't work well
- Bugzilla 4673: Bug in std.string (isNumeric)
- Bugzilla 4874: std.numeric.dotProduct doesn't work with bigints
- Bugzilla 5280: to!FP(Hex float string) doesn't work well
- Bugzilla 5762: getopt: short option parameter read incorrectly when bundling enabled
- Bugzilla 5977: String splitting with empty separator
- Bugzilla 6730: std.algorithm.splitter conflicts with std.array.splitter
- Bugzilla 7069: Variant Doesn't Handle Const or Immutable Contents
- Bugzilla 7689: splitter() on ivalid UTF-8 sequences
- Bugzilla 8013: splitter() and split() give different results
- Bugzilla 8203: Use of std.regex.match() generates "not enough preallocated memory" error
- Bugzilla 8291: dirEntry cannot handle root directories + unhandled exception causes crash
- Bugzilla 8298: dirEntries special linux file in Home dir
- Bugzilla 8877: std.encoding.transcode is extremely slow
- Bugzilla 9528: std.array.appender can't append elements with const members
- Bugzilla 9645: std.algorithm.splitter on string with char as separator performs badly in certain situations
- Bugzilla 9823: Delegate accepting element not accepted in std.range.put
- Bugzilla 10569: std.traits: EnumMembers, isExpressionTuple, isTypeTuple & Largest balks at large input
- Bugzilla 10571: formattedWrite error with delegate and string
- Bugzilla 10710: shared phobos library doesn't work on all linux distributions
- Bugzilla 10864: [REG 2.064][PERFORMANCE] new Safe appender is slower than "~="
- Bugzilla 11005: std.xml does not encode attributes
- Bugzilla 11110: Variant.convertsTo doesn't work like isImplicitlyConvertible
- Bugzilla 11112: Unable to execute shell commands in different threads
- Bugzilla 11148: Can't implicitly convert const(BigInt) or immutable(BigInt) to BigInt
- Bugzilla 11180: Launching a process from a Windows GUI process using std.process.spawnProcess always fails
- Bugzilla 11403: functions in std.algo can't be used as pred
- Bugzilla 11459: std.container.Array bool constraint ambiguity
- Bugzilla 11568: can't compile std.stdio.rawWrite with -m64 in Windows
- Bugzilla 11600: to!BigInt(string) accepts non-numeric input
- Bugzilla 11606: Cannot instantiate Tuple of non printable
- Bugzilla 11617: std.uni.normalize doesn't compile
- Bugzilla 11652: Support numerical ^^ complex operations in std.complex
- Bugzilla 11681: std.datetime.IntervalRange.opAssign with non-ref parameter is required
- Bugzilla 11691: can't join pathSplitter with dirSeparator
- Bugzilla 11713: std.string munch() does not properly handle UTF strings.
- Bugzilla 11738: partialShuffle actually shuffles the entire input
- Bugzilla 11771: Unicode set intersection with char is broken
- Bugzilla 11775: std.regex should check for valid repetition range in assert mode
- Bugzilla 11780: RangeError in format for incomplete format specifier
- Bugzilla 11808: std.uni.CodepointSet('А', 'Я'+1, 'а', 'я'+1) asserts
- Bugzilla 11839: std.regex capture group names should allow numbers to be in them
- Bugzilla 11879: missing default User-Agent in std.net.curl
- Bugzilla 11884: std.container.Array lacks a constructor from an input range
- Bugzilla 12069: ctRegex is 3x slower then R-T ?
Phobos enhancements
- Bugzilla 3868: It would be nice to have a function which read a file lazily using a range
- Bugzilla 4859: Another File.byChunk()
- Bugzilla 4909: Two suggestions for std.algorithm.schwartzSort()
- Bugzilla 5611: back() and front() with ref return + opSlice() in sort() constraint
- Bugzilla 6986: SortedRange[x..$] fails with unidentified __dollar
- Bugzilla 8167: BigInt(BigInt(1)) too
- Bugzilla 9061: BigInt | BigInt, BigInt & int
- Bugzilla 11770: std.regex.Captures should be convertible to bool
- Bugzilla 11789: No setAttributes to complement getAttributes
- Bugzilla 11798: std.algorithm.all with no predicate too
Druntime regressions
- Bugzilla 11478: shared library on osx: worked in 2.062, fails in 2.063.2, still fails in 2.064
Druntime bugs
- Bugzilla 3454: Inconsistent flag setting in GC.realloc()
- Bugzilla 4809: Stack trace when throwing exception misses location of the throw statement
- Bugzilla 7508: float4 values aren't stored on initialisation
- Bugzilla 8301: Access violation when a big array is allocated
- Bugzilla 10701: [GC] segfault in GC
- Bugzilla 11806: Freeze in GC.collect() in in-contracts when multithreading is used
Optlink regressions
- Bugzilla 11559: Optlink crash with more than 2048 modules generated and debug info
Optlink bugs
- Bugzilla 2837: OPTLINK and LARGEADDRESSAWARE
- Bugzilla 3956: linker removes underscore from all exported symbols of a module but the first
- Bugzilla 6673: Map file contains broken lines on every 16,384 bytes
- Bugzilla 7634: optlink creates bad debug info for a large number of modules
Installer bugs
- Bugzilla 10246: Windows installer still downloads from ftp.digitalmars.com
- Bugzilla 11799: Incompatible argument types in create_dmd_release
Installer enhancements
- Bugzilla 10153: Beta releases should all have unique names
Website regressions
- Bugzilla 11449: Jump lists of phobos are in wrong order
Website bugs
- Bugzilla 5388: SList.insertFront has complexity O(log(n))
- Bugzilla 9734: setIntersection accepts only 2 ranges, but documentation says otherwise
- Bugzilla 10205: 'deprecated' '(' assignExpression ')' grammar is not documented
- Bugzilla 10206: User-defined attributes not documented well in language specification
- Bugzilla 10250: Grammar does not allow invariants in struct declarations
- Bugzilla 10514: Constructor declaration grammar is incorrect
- Bugzilla 11398: Language spec does not allow new eponymous template syntax
- Bugzilla 11579: dlang.org repo can't be built without git
- Bugzilla 11762: std.regex macro is not displayed/expanded properly
Website enhancements
- Bugzilla 11676: Add a link to D Wiki Sidebar to take users back to DLang.org
- Bugzilla 12087: Add Readme to dlang.org repository that explains how to contribute