Summary: std.conv.emplace: enforcement is too weak
           Product: D
           Version: D2
          Platform: Other
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Phobos

--- Comment #0 from 2011-09-08 15:35:28 PDT ---
T emplace(T, Args...)(void[] chunk, Args args) if (is(T == class))
    enforce(chunk.length >= __traits(classInstanceSize, T),
           new ConvException("emplace: chunk size too small"));
    auto a = cast(size_t) chunk.ptr;

    enforce(a % T.alignof == 0, text(a, " vs. ", T.alignof));

T.alignof is the alignment of the class reference, not the class instance.
Classes have to be 16-byte aligned, but the enforcement checks only for 4 byte
alignment. This results in segmentation faults in user code, even though the
function performs checks.

Configure issuemail:
------- You are receiving this mail because: -------

Reply via email to