import std.algorithm; string foo(){ auto kw=["alias", "align", "asm", "assert", "auto", "body", "bool", "break", "byte", "case", "cast", "catch", "cdouble", "cent", "cfloat", "char", "clas\ s", "const", "continue", "creal", "dchar", "debug", "default", "delegate", "delete", "deprecated"]; sort(kw); return "success!"; } pragma(msg, foo()); void main() {} This fails with dmd: interpret.c:1845: virtual Expression* ArrayLiteralExp::interpret(InterState*, CtfeGoal): Assertion `((IndexExp*)e)->e1 != this' failed.
Reduced test case. Interestingly, the fact that this crashes shows that in the quicksort range, std.sort sometimes swaps elements with themselves! Sounds inefficient, is that behaviour correct? void bug6672(ref string lhs, ref string rhs) { auto tmp = lhs; lhs = rhs; rhs = tmp; } static assert( { auto kw = ["a"]; bug6672(kw[0], kw[0]); return true; }());
https://github.com/D-Programming-Language/dmd/commit/fcdae7c8071584a7729333571fb86354b7db2b85 https://github.com/D-Programming-Language/dmd/commit/e001f94d281eac901825739060aff2718ea2ee18
Now the code gives a different error (this error is not produced if this sorting is done at run time): ...\dmd2\src\phobos\std\algorithm.d(6662): Error: "Failed to sort range of type string[]. Actual result is: [alias, align, asm, assert, auto, body, bool, break]..." test5.d(8): called from here: sort(kw) test5.d(12): called from here: foo() foo()
(In reply to comment #3) > Now the code gives a different error (this error is not produced if this > sorting is done at run time): > > ...\dmd2\src\phobos\std\algorithm.d(6662): Error: "Failed to sort range of type > string[]. Actual result is: [alias, align, asm, assert, auto, body, bool, > break]..." > test5.d(8): called from here: sort(kw) > test5.d(12): called from here: foo() > foo() Aargh, I really fouled that up! Not fixed. Here's a reduced test case. void bug6672b(ref string lhs) { string tmp = lhs; lhs = "b"; assert(tmp == "a"); } static assert( { string q = "m"; bug6672b(q); return true; }());
https://github.com/D-Programming-Language/dmd/commit/e36f124bad9c67fa960adaeb40b7113152453d6e
More fixes: https://github.com/D-Programming-Language/dmd/commit/f680025e30b5423e2d2759e5c2f004cafb53e5ea https://github.com/D-Programming-Language/dmd/commit/36d5b056a318698d392cc84db92282368092a533
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル