Thread overview | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
June 01, 2020 Postblit segfault. | ||||
---|---|---|---|---|
| ||||
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. |
June 01, 2020 Re: Postblit segfault. | ||||
---|---|---|---|---|
| ||||
Posted in reply to MaoKo | 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. |
June 01, 2020 Re: Postblit segfault. | ||||
---|---|---|---|---|
| ||||
Posted in reply to MaoKo | 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);
}
|
June 01, 2020 Re: Postblit segfault. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Boris Carvajal | 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. |
June 01, 2020 Re: Postblit segfault. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Bastiaan Veelo | 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 |
June 01, 2020 Re: Postblit segfault. | ||||
---|---|---|---|---|
| ||||
Posted in reply to H. S. Teoh | 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 |
June 01, 2020 Re: Postblit segfault. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Basile B. | 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: |
June 01, 2020 Re: Postblit segfault. | ||||
---|---|---|---|---|
| ||||
Posted in reply to H. S. Teoh | 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 |
June 02, 2020 Re: Postblit segfault. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Basile B. | 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 :).
|
June 02, 2020 Re: Postblit segfault. | ||||
---|---|---|---|---|
| ||||
Posted in reply to MaoKo | 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.
|
Copyright © 1999-2021 by the D Language Foundation