The PR https://github.com/D-Programming-Language/dmd/pull/4788 fixing issue https://issues.dlang.org/show_bug.cgi?id=9383 introduced a regression that can be reproduced with the following test: --- import std.algorithm; import std.array; class A { B foo(C c, D[] ds, bool f) in { assert(c !is null); } body { D[] ds2 = ds.filter!(a => c).array; return new B(ds2, f); } } class B { this(D[], bool) { } } class C { } struct D { } unittest { auto a = new A; C c = new C; a.foo(c, null, false); } --- It runs successfully when it is compiled with: dmd -unittest -main But the contract throws AssertError when compiled with: dmd -unittest -main -O
Issue doesn't happen in Windows platform -m32 and -m64, with git-master: 90becf651dddf4b17c1775c7c0d6ba879fb10090
https://github.com/dlang/dmd/pull/5803
This passes on all platforms in the autotester. Marking it as worksforme for now.
Commits pushed to master at https://github.com/dlang/dmd https://github.com/dlang/dmd/commit/585ab7d14146ec6bc45b41e2b0b344e06dbbe1ee test Issue 15568 - Wrong contracts generated when compiled with -O https://github.com/dlang/dmd/commit/05a0edff93b611e2d67d5c77237092dd220afe75 Merge pull request #5803 from WalterBright/test15568 test Issue 15568 - Wrong contracts generated when compiled with -O
Commits pushed to stable at https://github.com/dlang/dmd https://github.com/dlang/dmd/commit/585ab7d14146ec6bc45b41e2b0b344e06dbbe1ee test Issue 15568 - Wrong contracts generated when compiled with -O https://github.com/dlang/dmd/commit/05a0edff93b611e2d67d5c77237092dd220afe75 Merge pull request #5803 from WalterBright/test15568