[Issue 8830] [CTFE] Incorrect slicing with pointer from sliced array

d-bugmail at puremagic.com d-bugmail at puremagic.com
Tue Oct 16 06:57:02 PDT 2012


http://d.puremagic.com/issues/show_bug.cgi?id=8830



--- Comment #1 from monarchdodra at gmail.com 2012-10-16 06:57:02 PDT ---
(In reply to comment #0)
> Minimal test case:
> 
> //----
> import std.stdio;
> 
> string[] foo(string s)
> {
>   auto ss = s[1..$];
>   auto l = ss.length;
>   string s2 = ss.ptr[0..2];
>   return [ss, s2];
> 
> }
> 
> void main()
> {
>   enum bar = foo("hello");
>   writeln(bar);
> }
> //----
> 
> Creates:
> 
> //----
> [
>   "ello", //Sliced 1..$ of "hello"
>   "hel"   // *should* be "ello"[0..2], but is actually "hello"[0..2]
> ]
> //----
> 
> It would appear that when slicing a pointer extracted from a previously sliced,
> array, it will slice from the first index of that *original* array.


What is strange though, is that ss.ptr *does* point to the right element:
//----
string[] foo(string s)
{
  auto ss = s[1..$];
  auto l = ss.length;
  string s2 = [*ss.ptr];
  return [ss, s2];
}

void main()
{
  enum bar = foo("hello");
  writeln(bar);
}
//----
[
  "ello",
  "e" //extracted pointer points to the right element.
]
//----

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list