https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85892

            Bug ID: 85892
           Summary: value-initialization failure
           Product: gcc
           Version: 8.0.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: Casey at Carter dot net
  Target Milestone: ---

This test program aborts because `collector`'s base `item` isn't properly
zero-initialized:

    void* operator new(decltype(sizeof(int)), void* ptr) {
        return ptr;
    }

    struct item { int data; };

    struct collector : item {
        collector() = default;
        collector(int) {}
    };

    struct tuple : collector {
        tuple() : collector{} {}
    };

    int main() {
        alignas(tuple) unsigned char space[sizeof(tuple)];
        for (auto& c : space) c = 0xff;

        auto ptr = ::new(&space) tuple;
        int& i = static_cast<item&>(*ptr).data;
        if (i != 0) __builtin_abort();
    }

Default-initialization of `tuple` invokes its constructor, which
value-initializes its `collector` base subobject, which should zero-initialize
`collector`'s `item` base subobject.

Reply via email to