Hello community, here is the log from the commit of package dmd for openSUSE:Factory checked in at 2018-08-20 16:19:44 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/dmd (Old) and /work/SRC/openSUSE:Factory/.dmd.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "dmd" Mon Aug 20 16:19:44 2018 rev:18 rq:630330 version:2.081.2 Changes: -------- --- /work/SRC/openSUSE:Factory/dmd/dmd.changes 2018-07-18 22:52:35.783228216 +0200 +++ /work/SRC/openSUSE:Factory/.dmd.new/dmd.changes 2018-08-20 16:19:46.036851821 +0200 @@ -1,0 +2,18 @@ +Sat Aug 18 21:58:23 UTC 2018 - matthias.elias...@gmail.com + +- Update to 2.081.2 + - DMD Compiler regressions + * [REG 2.080] SIGSEGV in el_ptr (s=0x15) at dmd/backend/el.c:1760 + * dmd 2.081 crashed by getVirtualFunctions for a interface extended interface + - DMD Compiler bugs + * Associative array opIn with static array key fails with dynamic array + - Phobos bugs + * Cannot inline "...Slides.numberOfFullFrames", "...Slides.gap" + - Druntime bugs + * __delete doesn't work with immutable +- Changes in 2.081.1 + - DMD Compiler regressions + * [REG2.081] getOverloads traits returns empty tuples for void functions + * [REG 2.080.1] Error: const(Object) is used as a type with structs that have symbol named Object + +------------------------------------------------------------------- Old: ---- dmd-2.081.0.tar.gz druntime-2.081.0.tar.gz phobos-2.081.0.tar.gz New: ---- dmd-2.081.2.tar.gz druntime-2.081.2.tar.gz phobos-2.081.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ dmd.spec ++++++ --- /var/tmp/diff_new_pack.SDMCk7/_old 2018-08-20 16:19:47.788854295 +0200 +++ /var/tmp/diff_new_pack.SDMCk7/_new 2018-08-20 16:19:47.792854301 +0200 @@ -20,7 +20,7 @@ %define sover 0_81 %define auto_bootstrap 1 Name: dmd -Version: 2.081.0 +Version: 2.081.2 Release: 0 Summary: D Programming Language 2.0 License: BSL-1.0 ++++++ dmd-2.081.0.tar.gz -> dmd-2.081.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.081.0/VERSION new/dmd-2.081.2/VERSION --- old/dmd-2.081.0/VERSION 2018-07-03 20:08:37.000000000 +0200 +++ new/dmd-2.081.2/VERSION 2018-08-12 13:50:48.000000000 +0200 @@ -1 +1 @@ -v2.081.0 +v2.081.2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.081.0/changelog/deprecate_ctor_in_static_block.dd new/dmd-2.081.2/changelog/deprecate_ctor_in_static_block.dd --- old/dmd-2.081.0/changelog/deprecate_ctor_in_static_block.dd 2018-07-03 20:08:37.000000000 +0200 +++ new/dmd-2.081.2/changelog/deprecate_ctor_in_static_block.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,54 +0,0 @@ -Deprecate allowing a constructor declaration in a static block - -Before patch: -The language specification states that a static constructor is -defined using the construction "static this()". Defining a -constructor inside a static block does not have any effect -on the constructor. The following code samples do not affect -the constructor in any way: - ---- -static: - this() {} ---- - ---- -static -{ - this() {} -} ---- - -The compiler does not issue any warning/error on the above code -samples and generates a normal constructor which is not ran before -the main() function. This leads to situations in which the -compiler is not able to correctly indicate the problem: - ---- -class A -{ - static - { - this() {} - } - - this() {} -} - -void main() -{ - new A(); -} ---- - -This code will result in an error message indicating that -there is a multiple definition of the constructor this() -which is a misleading message. - -After patch: -Whenever a constructor is encountered in a static context a -deprecation message is issued stating that the `static` -keyword does not have any effect on the constructor. -The solution is to declare the constructor outside the -static block either as a normal constructor or a static -one (`static this()`). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.081.0/changelog/deprecate_this_super_as_types.dd new/dmd-2.081.2/changelog/deprecate_this_super_as_types.dd --- old/dmd-2.081.0/changelog/deprecate_this_super_as_types.dd 2018-07-03 20:08:37.000000000 +0200 +++ new/dmd-2.081.2/changelog/deprecate_this_super_as_types.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,33 +0,0 @@ -Deprecate usage of `this` and `super` as types - -Prior to this release, `this` and `super` could be used as both data or types -depending on the context. Starting with this release using `this` or `super` -as a type will result in a compiler error. - ---- -class C -{ - shared(this) x; // Deprecation: Using `this` as a type is deprecated. Use `typeof(this)` instead -} - -class D : C -{ - shared(super) a; // Deprecation: Using `super` as a type is deprecated. Use `typeof(super)` instead - super b; // Deprecation: Using `super` as a type is deprecated. Use `typeof(super)` instead -} ---- - -Use `typeof(super)` or `typeof(this)` instead. - ---- -class C -{ - shared(typeof(this)) x; -} - -class D : C -{ - shared(typeof(super)) a; - typeof(super) b; -} ---- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.081.0/changelog/expression-based_contract_syntax.dd new/dmd-2.081.2/changelog/expression-based_contract_syntax.dd --- old/dmd-2.081.0/changelog/expression-based_contract_syntax.dd 2018-07-03 20:08:37.000000000 +0200 +++ new/dmd-2.081.2/changelog/expression-based_contract_syntax.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,22 +0,0 @@ -Implement DIP 1009 - Add Expression-Based Contract Syntax - -Expression-based contract syntax has been added: Contracts that consist of a single assertion can now be written more succinctly and multiple `in` or `out` contracts can be specified for the same function. - -Example: - ---- -class C { - private int x; - invariant(x >= 0); - // ... -} - -int fun(ref int a, int b) - in(a > 0) - in(b >= 0, "b cannot be negative") - out(r; r > 0, "return must be positive") - out(; a != 0) -{ - // ... -} ---- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.081.0/changelog/extern_cpp_overhaul.dd new/dmd-2.081.2/changelog/extern_cpp_overhaul.dd --- old/dmd-2.081.0/changelog/extern_cpp_overhaul.dd 2018-07-03 20:08:37.000000000 +0200 +++ new/dmd-2.081.2/changelog/extern_cpp_overhaul.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,27 +0,0 @@ -`extern (C++)` construction, destruction, operators and other mangling improvements - -Many improvements have been made to the `extern(C++)` experience in this release cycle. - -Mangling improvements include: - -$(UL - $(LI Constructor/destructor mangling matches C++) - $(LI Compatible D style operators now mangle as C++ operators) - $(LI `nullptr_t` mangles correctly) - $(LI Various mangling bugs have been fixed) -) - -`extern(C++)` APIs that use `nullptr_t` can use `typeof(null)` on the D side: ---- -alias nullptr_t = typeof(null); -extern (C++) void fun(nullptr_t); ---- - -`extern (C++)` mangling of operators is working for all operators that are semantically equivalent. -This list includes all instantiations of `opUnary`, `opBinary`, `opAssign`, `opOpAssign`, `opCast`, `opEquals`, `opIndex`, `opCall`. -Two notable exceptions are `opCmp`, and C++ `operator !`, which don't have compatible implementations. - -Mangling of `extern (C++) class` constructors and destructor are working. - -This release also includes ABI fixes where destructors are now correctly added to the virtual table, and constructor/destructor calling semantics now match C++. -With this, mixed-language class hierarchies are working, with construction/destruction being supported in either language. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.081.0/changelog/fix16206.dd new/dmd-2.081.2/changelog/fix16206.dd --- old/dmd-2.081.0/changelog/fix16206.dd 2018-07-03 20:08:37.000000000 +0200 +++ new/dmd-2.081.2/changelog/fix16206.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,25 +0,0 @@ -Support for iterating template overloads - -`__traits(getOverloads)` has been extended to return template overloads when passed an optional parameter with a true value. - ---- -struct S -{ - static int foo()() { return 0; } - static int foo()(int n) { return 1; } - static int foo(string s) { return 2; } - enum foo(int[] arr) = arr.length; -} - -alias AliasSeq(T...) = T; - -alias allFoos = AliasSeq!(__traits(getOverloads, S, "foo", true)); - -static assert(allFoos.length == 4); - -static assert(allFoos[0]("") == 2); -static assert(allFoos[1]() == 0); -static assert(allFoos[2](1) == 1); -alias foo3 = allFoos[3]; -static assert(foo3!([]) == 0); ---- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.081.0/changelog/getlinkage_for_classes.dd new/dmd-2.081.2/changelog/getlinkage_for_classes.dd --- old/dmd-2.081.0/changelog/getlinkage_for_classes.dd 2018-07-03 20:08:37.000000000 +0200 +++ new/dmd-2.081.2/changelog/getlinkage_for_classes.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,14 +0,0 @@ -__traits(getLinkage, ...) now works on structs, classes, and interfaces. - -It is now possible to detect the language ABI specified for a struct, class, or interface. - ---- -class MyClass {} -extern (C++) struct MyCPPStruct {} -extern (C++) interface MyCPPInterface {} -extern (Objective-C) interface MyObjcInterface {} -static assert(__traits(getLinkage, MyClass) == "D"); -static assert(__traits(getLinkage, MyCPPStruct) == "C++"); -static assert(__traits(getLinkage, MyCPPInterface) == "C++"); -static assert(__traits(getLinkage, MyObjcInterface) == "Objective-C"); ---- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.081.0/changelog/implicit_catch_error.dd new/dmd-2.081.2/changelog/implicit_catch_error.dd --- old/dmd-2.081.0/changelog/implicit_catch_error.dd 2018-07-03 20:08:37.000000000 +0200 +++ new/dmd-2.081.2/changelog/implicit_catch_error.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,23 +0,0 @@ -Implicit `catch` statements will now result in an error - -See the $(LINK2 $(ROOT_DIR)deprecate.html#Implicit catch statement, Deprecated Features) -for more information. - -Implicit `catch` statements were deprecated in 2.072. Starting with this release, implicit -`catch` statements will cause the compiler to emit an error. - ---- -import std.stdio; - -void main() -{ - int[] arr = new int[](10); - // This will throw a RangeError - try { arr[42]++; } - catch // Error: `catch` statement without an exception specification is deprecated; - // use `catch(Throwable)` for old behavior - { - writeln("An error was caught and ignored"); - } -} ---- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.081.0/changelog/implicit_enum_comparison_error.dd new/dmd-2.081.2/changelog/implicit_enum_comparison_error.dd --- old/dmd-2.081.0/changelog/implicit_enum_comparison_error.dd 2018-07-03 20:08:37.000000000 +0200 +++ new/dmd-2.081.2/changelog/implicit_enum_comparison_error.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,21 +0,0 @@ -Implicit comparison of different enums will now result in an error - -See the $(LINK2 $(ROOT_DIR)deprecate.html#Implicit comparison of different enums, Deprecated Features) for more information. - -Implicit comparison of different enums was deprecated in 2.075. Starting with this release, implicit comparison of different -enums will cause the compiler to emit an error. - ---- -enum Status -{ - good, - bad -} -enum OtherStatus -{ - ok, - no -} -static assert(Status.good == OtherStatus.ok); // Error: Comparison between different enumeration types `Status` and `OtherStatus`; - // If this behavior is intended consider using `std.conv.asOriginalType` ---- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.081.0/changelog/implicit_string_concatenation_error.dd new/dmd-2.081.2/changelog/implicit_string_concatenation_error.dd --- old/dmd-2.081.0/changelog/implicit_string_concatenation_error.dd 2018-07-03 20:08:37.000000000 +0200 +++ new/dmd-2.081.2/changelog/implicit_string_concatenation_error.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -Implicit string concatenation will now result in an error - -See the $(LINK2 $(ROOT_DIR)deprecate.html#Implicit%20string%20concatenation, Deprecated Features) for more information. - -Implicit string concatenation was deprecated in 2.072. Starting with this release, implicit string concatenation will cause the compiler -to emit an error. - ---- -void main() -{ - string s = "Hello" ", World!"; // Error: Implicit string concatenation is deprecated, use "" ~ "" instead -} ---- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.081.0/changelog/iretq.dd new/dmd-2.081.2/changelog/iretq.dd --- old/dmd-2.081.0/changelog/iretq.dd 2018-07-03 20:08:37.000000000 +0200 +++ new/dmd-2.081.2/changelog/iretq.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,17 +0,0 @@ -`IRETQ` is now supported in inline assembler. - -`IRETQ` is the 64-bit version of the already supported `IRET` instruction. With -its inclusion, it is now possible to write 64-bit interrupt service routines -in pure D. - ---- -void isr() -{ - asm - { - naked; - // ... - iretq; - } -} ---- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.081.0/changelog/min_runtime_classes.dd new/dmd-2.081.2/changelog/min_runtime_classes.dd --- old/dmd-2.081.0/changelog/min_runtime_classes.dd 2018-07-03 20:08:37.000000000 +0200 +++ new/dmd-2.081.2/changelog/min_runtime_classes.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,100 +0,0 @@ -Interfaces and classes can be used without the runtime if only static fields are utilized - -Prior to this release any attempt to use interfaces and/or classes without the runtime would result -in compile-time errors due to the lack of `TypeInfo`. However, as long as classes are not instantiated -there is no need for `TypeInfo`. - -Beginning with this release the compiler will no longer emit errors about missing `TypeInfo` when -using interfaces and/or classes as long as they are not instantiated and only `shared static` members are -utilized. - -$(B Example 1) ---- -module object - -private alias extern(C) int function(char[][] args) MainFunc; -private extern (C) int _d_run_main(int argc, char** argv, MainFunc mainFunc) -{ - return mainFunc(null); // assumes `void main()` for simplicity -} ---- - ---- -interface I -{ - shared static int i; -} - -class A : I -{ - shared static int a; -} - -class B : A -{ - shared static int b; -} - -void main() -{ - B.b = B.a + B.i; -} ---- - -$(CONSOLE -dmd -conf= -defaultlib= main.d object.d -of=main -size main - text data bss dec hex filename - 1867 1208 32 3107 c23 main -) - -Non-shared static members can also be used, but will require a thread-local storage (TLS) implementation. -For example, on Linux the TLS implementation is already supplied by the C runtime and C -standard library, so, since dmd automatically calls gcc to link the final executable, it will automatically -bring in the TLS implementation. - -$(B Example 2) ---- -module object - -private alias extern(C) int function(char[][] args) MainFunc; -private extern (C) int _d_run_main(int argc, char** argv, MainFunc mainFunc) -{ - return mainFunc(null); // assumes `void main()` for simplicity -} ---- - ---- -interface I -{ - static int i; -} - -class A : I -{ - static int a; -} - -class B : A -{ - static int b; -} - -void main() -{ - B.b = B.a + B.i; -} ---- - -$(CONSOLE -dmd -conf= -defaultlib= main.d object.d -of=main -size main - text data bss dec hex filename - 2123 1296 28 3447 d77 main -) - -Some platforms may require some TLS implementation code or some specialized build procedures to link -in a TLS implementation. - -This will hopefully reduce friction for those using D without the runtime, porting D to new platforms, -or using D from other langauges, while enabling more features and idioms of D to be used in those use cases. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.081.0/changelog/redundant_stc_error.dd new/dmd-2.081.2/changelog/redundant_stc_error.dd --- old/dmd-2.081.0/changelog/redundant_stc_error.dd 2018-07-03 20:08:37.000000000 +0200 +++ new/dmd-2.081.2/changelog/redundant_stc_error.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,8 +0,0 @@ -Specifying redundant storage classes will now result in a compiler error - -Specifying redundant storage classes was deprecated long ago and was originally scheduled to emit a compiler error beginning with the 2.068 release. -That promise has been fulfilled with this release. - ---- -@safe void f() @safe {} // Error: redundant attribute `@safe` ---- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.081.0/src/dmd/clone.d new/dmd-2.081.2/src/dmd/clone.d --- old/dmd-2.081.0/src/dmd/clone.d 2018-07-03 20:08:37.000000000 +0200 +++ new/dmd-2.081.2/src/dmd/clone.d 2018-08-12 13:50:48.000000000 +0200 @@ -772,8 +772,8 @@ "size_t h = 0;" ~ "foreach (i, T; typeof(p.tupleof))" ~ // workaround https://issues.dlang.org/show_bug.cgi?id=17968 - " static if(is(T* : const(Object)*)) " ~ - " h = h * 33 + typeid(const(Object)).getHash(cast(const void*)&p.tupleof[i]);" ~ + " static if(is(T* : const(.object.Object)*)) " ~ + " h = h * 33 + typeid(const(.object.Object)).getHash(cast(const void*)&p.tupleof[i]);" ~ " else " ~ " h = h * 33 + typeid(T).getHash(cast(const void*)&p.tupleof[i]);" ~ "return h;"; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.081.0/src/dmd/dinterpret.d new/dmd-2.081.2/src/dmd/dinterpret.d --- old/dmd-2.081.0/src/dmd/dinterpret.d 2018-07-03 20:08:37.000000000 +0200 +++ new/dmd-2.081.2/src/dmd/dinterpret.d 2018-08-12 13:50:48.000000000 +0200 @@ -2906,6 +2906,7 @@ auto sle = cast(StructLiteralExp)pue.exp(); sle.type = e.type; sle.ownedByCtfe = OwnedBy.ctfe; + sle.origin = e.origin; result = sle; } else diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.081.0/src/dmd/expressionsem.d new/dmd-2.081.2/src/dmd/expressionsem.d --- old/dmd-2.081.0/src/dmd/expressionsem.d 2018-07-03 20:08:37.000000000 +0200 +++ new/dmd-2.081.2/src/dmd/expressionsem.d 2018-08-12 13:50:48.000000000 +0200 @@ -8923,7 +8923,7 @@ TypeAArray ta = cast(TypeAArray)t2b; // Special handling for array keys - if (!arrayTypeCompatible(exp.e1.loc, exp.e1.type, ta.index)) + if (!arrayTypeCompatibleWithoutCasting(exp.e1.type, ta.index)) { // Convert key to type of key exp.e1 = exp.e1.implicitCastTo(sc, ta.index); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.081.0/src/dmd/mars.d new/dmd-2.081.2/src/dmd/mars.d --- old/dmd-2.081.0/src/dmd/mars.d 2018-07-03 20:08:37.000000000 +0200 +++ new/dmd-2.081.2/src/dmd/mars.d 2018-08-12 13:50:48.000000000 +0200 @@ -1412,7 +1412,7 @@ buf.writeByte(' '); buf.writestring(str.toChars()); } - stream.fprintf("predefs %s", buf.peekString()); + stream.fprintf("predefs %s\n", buf.peekString()); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.081.0/src/dmd/traits.d new/dmd-2.081.2/src/dmd/traits.d --- old/dmd-2.081.0/src/dmd/traits.d 2018-07-03 20:08:37.000000000 +0200 +++ new/dmd-2.081.2/src/dmd/traits.d 2018-08-12 13:50:48.000000000 +0200 @@ -1009,7 +1009,8 @@ ifd = sym.isInterfaceDeclaration(); // If the symbol passed as a parameter is an // interface that inherits other interfaces - if (ifd && ifd.interfaces) + overloadApply(f, &dg); + if (ifd && ifd.interfaces && f) { // check the overloads of each inherited interface individually foreach (bc; ifd.interfaces) @@ -1018,8 +1019,6 @@ overloadApply(fd, &dg); } } - else - overloadApply(f, &dg); auto tup = new TupleExp(e.loc, exps); return tup.expressionSemantic(scx); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.081.0/test/compilable/interpret3.d new/dmd-2.081.2/test/compilable/interpret3.d --- old/dmd-2.081.0/test/compilable/interpret3.d 2018-07-03 20:08:37.000000000 +0200 +++ new/dmd-2.081.2/test/compilable/interpret3.d 2018-08-12 13:50:48.000000000 +0200 @@ -7742,3 +7742,20 @@ static assert(!__traits(compiles, { alias bug18057 = RBNode!int; })); +/**************************************************/ +// https://issues.dlang.org/show_bug.cgi?id=19074 + +struct S19074a { } + +struct S19074b +{ + S19074a field; + this(S19074a) { } + + static const S19074b* data = new S19074b(S19074a()); +} + +void test19074() +{ + auto var = S19074b.data; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.081.0/test/compilable/test17373.d new/dmd-2.081.2/test/compilable/test17373.d --- old/dmd-2.081.0/test/compilable/test17373.d 1970-01-01 01:00:00.000000000 +0100 +++ new/dmd-2.081.2/test/compilable/test17373.d 2018-08-12 13:50:48.000000000 +0200 @@ -0,0 +1,32 @@ +// https://issues.dlang.org/show_bug.cgi?id=17373 +interface Foo { void visit (int); } +interface Bar { void visit(double); } +interface FooBar : Foo, Bar {} +static assert(__traits(getOverloads, FooBar, "visit").length == 2); + +interface Fbar { void visit(char); void visit(double); } +interface Triple : Foo, Bar, Fbar {} +static assert(__traits(getOverloads, Triple, "visit").length == 3); + +interface InheritanceMadness : FooBar, Triple {} +static assert(__traits(getOverloads, Triple, "visit").length == 3); + +interface Simple +{ + int square(int); + real square(real); +} +static assert(__traits(getOverloads, Simple, "square").length == 2); + +// https://issues.dlang.org/show_bug.cgi?id=19064 +interface InputStream {} +interface OutputStream{} +interface Stream : InputStream, OutputStream{} +interface ConnectionStream : Stream +{ + @property bool connected() const; + void close(); +} + +static assert(__traits(getOverloads, ConnectionStream, "connected").stringof == "tuple(connected)"); +static assert(__traits(getOverloads, ConnectionStream, "close").stringof == "tuple(close)"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.081.0/test/compilable/test19066.d new/dmd-2.081.2/test/compilable/test19066.d --- old/dmd-2.081.0/test/compilable/test19066.d 1970-01-01 01:00:00.000000000 +0100 +++ new/dmd-2.081.2/test/compilable/test19066.d 2018-08-12 13:50:48.000000000 +0200 @@ -0,0 +1,13 @@ +class C {} + +int Object; + +struct S +{ + int object; + C Object; +} + +void main() +{ +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.081.0/test/fail_compilation/fail19076.d new/dmd-2.081.2/test/fail_compilation/fail19076.d --- old/dmd-2.081.0/test/fail_compilation/fail19076.d 1970-01-01 01:00:00.000000000 +0100 +++ new/dmd-2.081.2/test/fail_compilation/fail19076.d 2018-08-12 13:50:48.000000000 +0200 @@ -0,0 +1,11 @@ +/* +TEST_OUTPUT: +--- +fail_compilation/fail19076.d(11): Error: no property `V` for type `fail19076.I` +fail_compilation/fail19076.d(11): Error: `(I).V` cannot be resolved +--- +*/ + +interface P { } +interface I : P { } +auto F = __traits(getVirtualFunctions, I, "V"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.081.0/test/fail_compilation/test19112.d new/dmd-2.081.2/test/fail_compilation/test19112.d --- old/dmd-2.081.0/test/fail_compilation/test19112.d 1970-01-01 01:00:00.000000000 +0100 +++ new/dmd-2.081.2/test/fail_compilation/test19112.d 2018-08-12 13:50:48.000000000 +0200 @@ -0,0 +1,16 @@ +/* TEST_OUTPUT: +--- +fail_compilation/test19112.d(13): Error: cannot implicitly convert expression `[123, 456]` of type `int[]` to `int[1]` +fail_compilation/test19112.d(15): Error: cannot implicitly convert expression `a` of type `int[]` to `int[1]` +--- +*/ + +// https://issues.dlang.org/show_bug.cgi?id=19112 + +void main() +{ + int[int[1]] aa; + int* p = [123, 456] in aa; + int[] a; + p = a in aa; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.081.0/test/runnable/test17373.d new/dmd-2.081.2/test/runnable/test17373.d --- old/dmd-2.081.0/test/runnable/test17373.d 2018-07-03 20:08:37.000000000 +0200 +++ new/dmd-2.081.2/test/runnable/test17373.d 1970-01-01 01:00:00.000000000 +0100 @@ -1,20 +0,0 @@ -interface Foo { void visit (int); } -interface Bar { void visit(double); } -interface FooBar : Foo, Bar {} -static assert(__traits(getOverloads, FooBar, "visit").length == 2); - -interface Fbar { void visit(char); void visit(double); } -interface Triple : Foo, Bar, Fbar {} -static assert(__traits(getOverloads, Triple, "visit").length == 3); - -interface InheritanceMadness : FooBar, Triple {} -static assert(__traits(getOverloads, Triple, "visit").length == 3); - -interface Simple -{ - int square(int); - real square(real); -} -static assert(__traits(getOverloads, Simple, "square").length == 2); - -void main() {} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dmd-2.081.0/test/runnable/testaa.d new/dmd-2.081.2/test/runnable/testaa.d --- old/dmd-2.081.0/test/runnable/testaa.d 2018-07-03 20:08:37.000000000 +0200 +++ new/dmd-2.081.2/test/runnable/testaa.d 2018-08-12 13:50:48.000000000 +0200 @@ -1329,6 +1329,20 @@ } /************************************************/ +// 19112 + +void test19112() +{ + int[int[1]] aa; + aa[[2]] = 1; + assert([2] in aa); + + int[int[]] aa2 = [[1, 2, 3]: 4]; + int[3] k = [1, 2, 3]; + assert(*(k in aa2) == 4); +} + +/************************************************/ int main() { @@ -1379,6 +1393,7 @@ test11730(); test14089(); test14321(); + test19112(); printf("Success\n"); return 0; ++++++ druntime-2.081.0.tar.gz -> druntime-2.081.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/druntime-2.081.0/changelog/backtrace_debug_info_macos.dd new/druntime-2.081.2/changelog/backtrace_debug_info_macos.dd --- old/druntime-2.081.0/changelog/backtrace_debug_info_macos.dd 2018-06-27 13:15:33.000000000 +0200 +++ new/druntime-2.081.2/changelog/backtrace_debug_info_macos.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,38 +0,0 @@ -Filenames and line numbers have been added to stacktraces on macOS - -When an exception is throw and not caught, a stacktrace is printed. On Linux, -FreeBSD and DragonFlyBSD this stacktrace includes the filenames and line numbers, -if the application was built with debug info enabled. This feature has now been -added to macOS. - -This requires support from the compiler since debug info is stripped by the -linker on macOS. - -Example: - ---- -void bar() -{ - throw new Exception("bar"); -} - -void foo() -{ - bar(); -} - -void main() -{ - foo(); -} ---- - -Compiling the above code, with debug info enabled, by running: `dmd -g main.d`. -When running the application it will produce an output similar to: - -$(CONSOLE -object.Exception@main.d(3): bar -main.d:3 void main.bar() [0x71afdfb] -main.d:8 void main.foo() [0x71afe0c] -main.d:13 _Dmain [0x71afd78] -) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/druntime-2.081.0/changelog/cpp_destroy.dd new/druntime-2.081.2/changelog/cpp_destroy.dd --- old/druntime-2.081.0/changelog/cpp_destroy.dd 2018-06-27 13:15:33.000000000 +0200 +++ new/druntime-2.081.2/changelog/cpp_destroy.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,3 +0,0 @@ -`object.destroy()` supports `extern(C++)` classes. - -`object.destroy()` was crashing when called with an `extern(C++)` class. It now correctly destructs and resets the object to `init`. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/druntime-2.081.0/changelog/getsect.dd new/druntime-2.081.2/changelog/getsect.dd --- old/druntime-2.081.0/changelog/getsect.dd 2018-06-27 13:15:33.000000000 +0200 +++ new/druntime-2.081.2/changelog/getsect.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,3 +0,0 @@ -Add missing declarations to `core.sys.darwin.mach.getsect` - -Declarations that were missing from $(LINK2 https://opensource.apple.com/source/cctools/cctools-895/include/mach-o/getsect.h.auto.html, mach-o/getsect.h) has been added to `core.sys.darwin.mach.getsect`. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/druntime-2.081.0/src/core/memory.d new/druntime-2.081.2/src/core/memory.d --- old/druntime-2.081.0/src/core/memory.d 2018-06-27 13:15:33.000000000 +0200 +++ new/druntime-2.081.2/src/core/memory.d 2018-07-18 16:18:49.000000000 +0200 @@ -1019,7 +1019,7 @@ } else static if (is(T : E2[], E2)) { - GC.free(x.ptr); + GC.free(cast(void*) x.ptr); x = null; } } @@ -1167,3 +1167,21 @@ int* pint; __delete(pint); S* ps; __delete(ps); } + +// https://issues.dlang.org/show_bug.cgi?id=19092 +unittest +{ + const(int)[] x = [1, 2, 3]; + assert(GC.addrOf(x.ptr) != null); + __delete(x); + assert(x is null); + assert(GC.addrOf(x.ptr) == null); + + immutable(int)[] y = [1, 2, 3]; + assert(GC.addrOf(y.ptr) != null); + __delete(y); + assert(y is null); + assert(GC.addrOf(y.ptr) == null); +} + + ++++++ phobos-2.081.0.tar.gz -> phobos-2.081.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phobos-2.081.0/changelog/remove_std_c.dd new/phobos-2.081.2/changelog/remove_std_c.dd --- old/phobos-2.081.0/changelog/remove_std_c.dd 2018-07-03 08:08:42.000000000 +0200 +++ new/phobos-2.081.2/changelog/remove_std_c.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,3 +0,0 @@ -The deprecated `std.c` package has been removed. - -Use the `core.stdc` package instead. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phobos-2.081.0/changelog/std-algorithm-iteration-joiner.dd new/phobos-2.081.2/changelog/std-algorithm-iteration-joiner.dd --- old/phobos-2.081.0/changelog/std-algorithm-iteration-joiner.dd 2018-07-03 08:08:42.000000000 +0200 +++ new/phobos-2.081.2/changelog/std-algorithm-iteration-joiner.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,19 +0,0 @@ -The performance of `std.algorithm.iteration.joiner` has been improved - -$(H4 DMD) - -$(CONSOLE -> dmd -O -inline -release ./joiner.d && ./joiner -before.joiner = 57 secs, 834 ms, 289 μs, and 3 hnsecs -new.joiner = 44 secs, 936 ms, 706 μs, and 5 hnsecs -) - -$(H4 LDC) - -$(CONSOLE -> ldmd -O3 -release -inline joiner.d && ./joiner -before.joiner = 5 secs, 180 ms, 193 μs, and 7 hnsecs -new.joiner = 3 secs, 168 ms, 560 μs, and 6 hnsecs -) - -The benchmark code can be found $(LINK2 https://gist.github.com/wilzbach/ffd5d20639766a831fd4b1962572897a, here). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phobos-2.081.0/changelog/std-algorithm-mutation-remove.dd new/phobos-2.081.2/changelog/std-algorithm-mutation-remove.dd --- old/phobos-2.081.0/changelog/std-algorithm-mutation-remove.dd 2018-07-03 08:08:42.000000000 +0200 +++ new/phobos-2.081.2/changelog/std-algorithm-mutation-remove.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,27 +0,0 @@ -`std.algorithm.mutation.remove` now only accepts integral values or pair of integral values as offset - -Previously, without being stated in the documentation, -$(REF remove, std,algorithm) used to accept any values as `offset`. -This behavior was very error-prone: - ---- -import std.algorithm, std.stdio; -[0, 1, 2, 3, 4].remove(1, 3).writeln; // 0, 2, 4 -- correct -[0, 1, 2, 3, 4].remove([1, 3]).writeln; // 0, 3, 4 -- incorrect ---- - -With this release, using arrays as individual elements is no longer valid. -$(REF tuple, std,typecons) can be used to explicitly indicate that a range -from `start` to `stop` (non-enclosing) should be removed: - ---- -import std.algorithm, std.stdio, std.typecons; -[0, 1, 2, 3, 4].remove(tuple(1, 3)).writeln; // 0, 3, 4 ---- - -However, only 2-tuples are allowed to avoid this un-intuitive scenario: - ---- -import std.algorithm, std.stdio, std.typecons; -[0, 1, 2, 3, 4].remove(tuple(1, 3, 4)).writeln; // 0, 4? ---- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phobos-2.081.0/changelog/std-math-fminmax.dd new/phobos-2.081.2/changelog/std-math-fminmax.dd --- old/phobos-2.081.0/changelog/std-math-fminmax.dd 2018-07-03 08:08:42.000000000 +0200 +++ new/phobos-2.081.2/changelog/std-math-fminmax.dd 1970-01-01 01:00:00.000000000 +0100 @@ -1,19 +0,0 @@ -Changed semantics of std.math.{fmin,fmax} wrt. NaNs. - -The semantics of $(REF fmin, std, math) and $(REF fmax, std, math) have been -streamlined with the C functions: if one of the arguments is a NaN, return the -other. This involves an additional $(REF isNaN, std, math) check. Use -$(REF min, std, algorithm, comparison) and $(REF max, std, algorithm, comparison) -for the previous semantics performing a single comparison. - ---- -import std.math; -assert(fmin(real.nan, 2.0L) == 2.0L); -assert(fmin(2.0L, real.nan) == 2.0L); // previously: NaN -assert(isNaN(fmin(real.nan, real.nan))); - -import std.algorithm.comparison; -assert(min(real.nan, 2.0L) == 2.0L); -assert(isNaN(min(2.0L, real.nan))); -assert(isNaN(min(real.nan, real.nan))); ---- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phobos-2.081.0/std/conv.d new/phobos-2.081.2/std/conv.d --- old/phobos-2.081.0/std/conv.d 2018-07-03 08:08:42.000000000 +0200 +++ new/phobos-2.081.2/std/conv.d 2018-08-08 15:44:52.000000000 +0200 @@ -2737,7 +2737,6 @@ if (isInputRange!Source && isSomeChar!(ElementType!Source) && !is(Source == enum) && isFloatingPoint!Target && !is(Target == enum)) { - import core.stdc.math : HUGE_VAL; import std.ascii : isDigit, isAlpha, toLower, toUpper, isHexDigit; import std.exception : enforce; @@ -3240,7 +3239,7 @@ } } L6: // if overflow occurred - enforce(ldval != HUGE_VAL, new ConvException("Range error")); + enforce(ldval != real.infinity, new ConvException("Range error")); L1: static if (isNarrowString!Source) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phobos-2.081.0/std/random.d new/phobos-2.081.2/std/random.d --- old/phobos-2.081.0/std/random.d 2018-07-03 08:08:42.000000000 +0200 +++ new/phobos-2.081.2/std/random.d 2018-08-08 15:44:52.000000000 +0200 @@ -2182,8 +2182,7 @@ immutable T u = (rng.front - rng.min) * factor; rng.popFront(); - import core.stdc.limits : CHAR_BIT; // CHAR_BIT is always 8 - static if (isIntegral!R && T.mant_dig >= (CHAR_BIT * R.sizeof)) + static if (isIntegral!R && T.mant_dig >= (8 * R.sizeof)) { /* If RNG variates are integral and T has enough precision to hold * R without loss, we're guaranteed by the definition of factor diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phobos-2.081.0/std/range/package.d new/phobos-2.081.2/std/range/package.d --- old/phobos-2.081.0/std/range/package.d 2018-07-03 08:08:42.000000000 +0200 +++ new/phobos-2.081.2/std/range/package.d 2018-08-08 15:44:52.000000000 +0200 @@ -8587,13 +8587,11 @@ * gap: (7 - 4) % 2 = 3 % 2 = 1 * end: 7 - 1 = 6 */ - pragma(inline, true); return (source.length - windowSize) % stepSize; } private size_t numberOfFullFrames() { - pragma(inline, true); /** 5.iota.slides(2, 1) => [0, 1], [1, 2], [2, 3], [3, 4] (4) 7.iota.slides(2, 2) => [0, 1], [2, 3], [4, 5], [6] (3) @@ -8610,7 +8608,6 @@ // Whether the last slide frame size is less than windowSize private bool hasPartialElements() { - pragma(inline, true); static if (withPartial) return gap != 0 && source.length > numberOfFullFrames * stepSize; else @@ -9387,6 +9384,14 @@ }} } +// https://issues.dlang.org/show_bug.cgi?id=19082 +@safe unittest +{ + import std.algorithm.comparison : equal; + import std.algorithm.iteration : map; + assert([1].map!(x => x).slide(2).equal!equal([[1]])); +} + private struct OnlyResult(T, size_t arity) { private this(Values...)(auto ref Values values) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phobos-2.081.0/std/uni.d new/phobos-2.081.2/std/uni.d --- old/phobos-2.081.0/std/uni.d 2018-07-03 08:08:42.000000000 +0200 +++ new/phobos-2.081.2/std/uni.d 2018-08-08 15:44:52.000000000 +0200 @@ -7167,7 +7167,7 @@ } /++ - $(P Iterate a string by grapheme.) + $(P Iterate a string by $(LREF Grapheme).) $(P Useful for doing string manipulation that needs to be aware of graphemes.)