From fe7079e8a47c902eb33e032f922631f29d97cdb3 Mon Sep 17 00:00:00 2001 From: Martin Date: Sat, 22 Apr 2017 16:06:48 +0200 Subject: [PATCH] Fix __cmp(void[], void[]) --- src/object.d | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/object.d b/src/object.d index ba00985e1e..3f4e449a4c 100644 --- a/src/object.d +++ b/src/object.d @@ -3375,7 +3375,10 @@ if (!__traits(isScalar, T1)) alias U2 = Unqual!T2; static assert(is(U1 == U2), "Internal error."); - static @trusted ref R at(R)(R[] r, size_t i) { return r.ptr[i]; } + static if (is(U1 == void)) + static @trusted ref inout(ubyte) at(inout(void)[] r, size_t i) { return (cast(inout(ubyte)*) r.ptr)[i]; } + else + static @trusted ref R at(R)(R[] r, size_t i) { return r.ptr[i]; } // All unsigned byte-wide types = > dstrcmp immutable len = s1.length <= s2.length ? s1.length : s2.length; @@ -3483,6 +3486,22 @@ if (!__traits(isScalar, T1)) compareMinMax!(immutable real); } +// void[] +@safe unittest +{ + void[] a; + const(void)[] b; + + (() @trusted + { + a = cast(void[]) "bb"; + b = cast(const(void)[]) "aa"; + })(); + + assert(__cmp(a, b) > 0); + assert(__cmp(b, a) < 0); +} + // objects @safe unittest {