Jump to page: 1 2
Thread overview
Postblit segfault.
Jun 01, 2020
MaoKo
Jun 01, 2020
Ferhat Kurtulmuş
Jun 01, 2020
Boris Carvajal
Jun 01, 2020
Bastiaan Veelo
Jun 01, 2020
H. S. Teoh
Jun 01, 2020
Basile B.
Jun 01, 2020
H. S. Teoh
Jun 01, 2020
Basile B.
Jun 02, 2020
MaoKo
Jun 02, 2020
Basile B.
Jun 02, 2020
MaoKo
June 01, 2020
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
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
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
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
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
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
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
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
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
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.
« First   ‹ Prev
1 2