[Issue 18814] Segmentation Fault in GC From writeln Call

d-bugmail at puremagic.com d-bugmail at puremagic.com
Mon Apr 30 19:43:56 UTC 2018


https://issues.dlang.org/show_bug.cgi?id=18814

--- Comment #3 from Jack Stouffer <jack at jackstouffer.com> ---
(In reply to Marco Leise from comment #2)
> First thing that came to my mind ... there is suddenly an obvious GC bug
> exposed by writeln?! Probably more likely some custom stuff that overwrites
> internal data structures or something, let's look at the provided test
> case...
> 
>      GC.malloc(GC.BlkAttr.NO_SCAN);
> 
> That does not look like the correct first argument to:
> https://dlang.org/phobos/core_memory.html#.GC.malloc
> 
> Could you please give the amount of bytes you want to allocate and then post
> the corrected test case? ;)

==========
import std.traits;
import std.stdio;

struct String
{
    ref opOpAssign(string op, R)(R r)
    {
        convertToBig();
        large.ptr[large.len .. r.length] = r;
    }

    ubyte isBig()
    {
        return small.slen;
    }

    void convertToBig()
    {
        import core.memory;
        char* p = cast(char*) GC.malloc(10, GC.BlkAttr.NO_SCAN);

        large.ptr = p;
    }

    struct Small
    {
        ubyte slen;
    }

    struct Large
    {
        size_t len;
        char* ptr;
    }

    Small small;
    Large large;
}

unittest
{
    auto a = String();
    a ~= " test test test test test";
    writeln(a);
}
==========

--


More information about the Digitalmars-d-bugs mailing list