[Issue 17654] New: return value incorrectly considered unique when casting to another pointer type
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Fri Jul 14 22:33:05 PDT 2017
https://issues.dlang.org/show_bug.cgi?id=17654
Issue ID: 17654
Summary: return value incorrectly considered unique when
casting to another pointer type
Product: D
Version: D2
Hardware: x86_64
OS: Linux
Status: NEW
Keywords: accepts-invalid
Severity: normal
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: ag0aep6g at gmail.com
Found by Namal in D.learn:
http://forum.dlang.org/post/eqoejftfcptbiclybwjg@forum.dlang.org
Original code:
----
void main()
{
import std.algorithm;
import std.string;
char[] line;
auto bytes = line.representation.dup;
bytes.sort;
string result = bytes.assumeUTF; /* should be rejected */
}
----
Reduced to show it's a compiler bug:
----
char[] assumeUTF(ubyte[] str) pure { return cast(char[]) str; }
void main()
{
ubyte[] b = ['a', 'b', 'c'];
string s = assumeUTF(b); /* should be rejected */
assert(s == "abc"); /* passes */
b[0] = '!';
assert(s == "abc"); /* fails */
}
----
Another variant to show it's not about arrays or the char type:
----
ubyte* toBytePointer(uint* p) pure { return cast(ubyte*) p; }
void main()
{
uint* i = new uint;
immutable ubyte* b = toBytePointer(i); /* should be rejected */
*i = 0xFF_FF_FF_FF;
assert(*b != 0xFF); /* fails */
}
----
--
More information about the Digitalmars-d-bugs
mailing list