www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Postblit segfault.

reply MaoKo <maoko riseup.net> writes:
Hello, I don't understand why this code segfault on Linux/FreeBSD:

import std.stdio;
struct _Poc {
   this(this) { writeln("_Poc.this(this)"); }
}
void main() {
   _Poc[1] valueArray = [ _Poc() ];
   writeln(valueArray);
}

I've just defined the postblit function in _Poc to see how much 
it's invoked.
In my system, it's invoked 3 time after the segfault.
When the array is allocated on the heap, nothing happen.
So I guess it's because it's located on the stack but why?

regard.
May 31 2020
next sibling parent Ferhat =?UTF-8?B?S3VydHVsbXXFnw==?= <aferust gmail.com> writes:
On Monday, 1 June 2020 at 06:35:36 UTC, MaoKo wrote:
 Hello, I don't understand why this code segfault on 
 Linux/FreeBSD:

 import std.stdio;
 struct _Poc {
   this(this) { writeln("_Poc.this(this)"); }
 }
 void main() {
   _Poc[1] valueArray = [ _Poc() ];
   writeln(valueArray);
 }

 I've just defined the postblit function in _Poc to see how much 
 it's invoked.
 In my system, it's invoked 3 time after the segfault.
 When the array is allocated on the heap, nothing happen.
 So I guess it's because it's located on the stack but why?

 regard.
I cannot help much, but I can say that problem is not about postblit. I tried running the code on https://run.dlang.io/. It works with LDC but not with DMD. Even though postblit is removed, it crashes because there may be a bug with DMD's writeln or there is something more that I missed too.
Jun 01 2020
prev sibling parent reply Boris Carvajal <boris2.9 gmail.com> writes:
On Monday, 1 June 2020 at 06:35:36 UTC, MaoKo wrote:
 Hello, I don't understand why this code segfault on
Reduced to: import std.stdio; struct S {} void main() { S[1] s; writeln(s); }
Jun 01 2020
parent reply Bastiaan Veelo <Bastiaan Veelo.net> writes:
On Monday, 1 June 2020 at 09:42:44 UTC, Boris Carvajal wrote:
 On Monday, 1 June 2020 at 06:35:36 UTC, MaoKo wrote:
 Hello, I don't understand why this code segfault on
Reduced to: import std.stdio; struct S {} void main() { S[1] s; writeln(s); }
This used to work up to dmd 2.084.1. It fails since 2.085.1. Please file a regression report at https://issues.dlang.org/enter_bug.cgi?product=D — Bastiaan.
Jun 01 2020
parent reply "H. S. Teoh" <hsteoh quickfur.ath.cx> writes:
On Mon, Jun 01, 2020 at 01:53:09PM +0000, Bastiaan Veelo via
Digitalmars-d-learn wrote:
 On Monday, 1 June 2020 at 09:42:44 UTC, Boris Carvajal wrote:
 On Monday, 1 June 2020 at 06:35:36 UTC, MaoKo wrote:
 Hello, I don't understand why this code segfault on
Reduced to: import std.stdio; struct S {} void main() { S[1] s; writeln(s); }
This used to work up to dmd 2.084.1. It fails since 2.085.1. Please file a regression report at https://issues.dlang.org/enter_bug.cgi?product=D
[...] Tracked the segfault to Phobos, writeUpToNextSpec(): 1216 if (trailing[i] != '%') continue; Apparently `trailing` has an invalid pointer. T -- They pretend to pay us, and we pretend to work. -- Russian saying
Jun 01 2020
parent reply Basile B. <b2.temp gmx.com> writes:
On Monday, 1 June 2020 at 14:53:43 UTC, H. S. Teoh wrote:
 On Mon, Jun 01, 2020 at 01:53:09PM +0000, Bastiaan Veelo via 
 Digitalmars-d-learn wrote:
 On Monday, 1 June 2020 at 09:42:44 UTC, Boris Carvajal wrote:
 On Monday, 1 June 2020 at 06:35:36 UTC, MaoKo wrote:
 Hello, I don't understand why this code segfault on
Reduced to: import std.stdio; struct S {} void main() { S[1] s; writeln(s); }
This used to work up to dmd 2.084.1. It fails since 2.085.1. Please file a regression report at https://issues.dlang.org/enter_bug.cgi?product=D
[...] Tracked the segfault to Phobos, writeUpToNextSpec(): 1216 if (trailing[i] != '%') continue; Apparently `trailing` has an invalid pointer. T
Possibly a backend bug (keyword "wrong code"), caused by either of [1] or [2] [1] https://github.com/dlang/dmd/pull/9357 [2] https://github.com/dlang/dmd/pull/9623/files
Jun 01 2020
parent reply "H. S. Teoh" <hsteoh quickfur.ath.cx> writes:
On Mon, Jun 01, 2020 at 03:27:11PM +0000, Basile B. via Digitalmars-d-learn
wrote:
[...]
 Possibly a backend bug (keyword "wrong code"), caused by either of [1] or
 [2]
 
 [1] https://github.com/dlang/dmd/pull/9357
 [2] https://github.com/dlang/dmd/pull/9623/files
Yeah, it looks like a backend bug. The struct address was somehow either not loaded correctly, or not passed correctly (didn't look into more detail which case). A regression should be filed for this, if not already. T -- It's amazing how careful choice of punctuation can leave you hanging:
Jun 01 2020
parent reply Basile B. <b2.temp gmx.com> writes:
On Monday, 1 June 2020 at 15:55:45 UTC, H. S. Teoh wrote:
 On Mon, Jun 01, 2020 at 03:27:11PM +0000, Basile B. via 
 Digitalmars-d-learn wrote: [...]
 Possibly a backend bug (keyword "wrong code"), caused by 
 either of [1] or
 [2]
 
 [1] https://github.com/dlang/dmd/pull/9357
 [2] https://github.com/dlang/dmd/pull/9623/files
Yeah, it looks like a backend bug. The struct address was somehow either not loaded correctly, or not passed correctly (didn't look into more detail which case). A regression should be filed for this, if not already. T
yeah done. culprit commit confirmed and reduced w/o phobos: https://issues.dlang.org/show_bug.cgi?id=20890
Jun 01 2020
parent reply MaoKo <maoko riseup.net> writes:
On Monday, 1 June 2020 at 19:52:39 UTC, Basile B. wrote:
 On Monday, 1 June 2020 at 15:55:45 UTC, H. S. Teoh wrote:
 On Mon, Jun 01, 2020 at 03:27:11PM +0000, Basile B. via 
 Digitalmars-d-learn wrote: [...]
 Possibly a backend bug (keyword "wrong code"), caused by 
 either of [1] or
 [2]
 
 [1] https://github.com/dlang/dmd/pull/9357
 [2] https://github.com/dlang/dmd/pull/9623/files
Yeah, it looks like a backend bug. The struct address was somehow either not loaded correctly, or not passed correctly (didn't look into more detail which case). A regression should be filed for this, if not already. T
yeah done. culprit commit confirmed and reduced w/o phobos: https://issues.dlang.org/show_bug.cgi?id=20890
Ok cool. I hesitate to report an issue because the bug was too "simple". This is a proof that dmd user use the GC a lot :).
Jun 01 2020
parent reply Basile B. <b2.temp gmx.com> writes:
On Tuesday, 2 June 2020 at 06:34:14 UTC, MaoKo wrote:
 On Monday, 1 June 2020 at 19:52:39 UTC, Basile B. wrote:
 On Monday, 1 June 2020 at 15:55:45 UTC, H. S. Teoh wrote:
 On Mon, Jun 01, 2020 at 03:27:11PM +0000, Basile B. via 
 Digitalmars-d-learn wrote: [...]
 Possibly a backend bug (keyword "wrong code"), caused by 
 either of [1] or
 [2]
 
 [1] https://github.com/dlang/dmd/pull/9357
 [2] https://github.com/dlang/dmd/pull/9623/files
Yeah, it looks like a backend bug. The struct address was somehow either not loaded correctly, or not passed correctly (didn't look into more detail which case). A regression should be filed for this, if not already. T
yeah done. culprit commit confirmed and reduced w/o phobos: https://issues.dlang.org/show_bug.cgi?id=20890
Ok cool. I hesitate to report an issue because the bug was too "simple". This is a proof that dmd user use the GC a lot :).
Mmmmh I don't follow you, this has nothing to do with the GC. It's rather a problem with the backend (i.e the translation to an IR andthe generation of byte code) Anyway someone already pushed a fix so next point release (~1 or 2 weeks) will not produce invalid code for the case you've found.
Jun 01 2020
parent MaoKo <maoko riseup.net> writes:
On Tuesday, 2 June 2020 at 06:53:47 UTC, Basile B. wrote:
 Ok cool. I hesitate to report an issue because the bug was too 
 "simple".
 This is a proof that dmd user use the GC a lot :).
Mmmmh I don't follow you, this has nothing to do with the GC. It's rather a problem with the backend (i.e the translation to an IR andthe generation of byte code) Anyway someone already pushed a fix so next point release (~1 or 2 weeks) will not produce invalid code for the case you've found.
Yes, ok I see. But anyway, thank for you help :D.
Jun 02 2020