https://bugs.kde.org/show_bug.cgi?id=473677

--- Comment #2 from Paul Floyd <pjfl...@wanadoo.fr> ---
I think that the testcase should be

#include <cstdlib>
#include <new>
#include <iostream>

class alignas(64) MyClass {
public:
    int i;
};

class OrdinaryClass {
public:
    int i;
};

int main() {
    // unsized versions
    MyClass* myClass = new MyClass;
    operator delete(myClass, std::align_val_t(64U));

    MyClass* myClass5 = new MyClass[5];
    operator delete [](myClass5, std::align_val_t(64U));

    // sized versions
    myClass = new MyClass();
    operator delete(myClass, 64U, std::align_val_t(64U));

    myClass5 = new MyClass[5];
    operator delete [](myClass5, 320U, std::align_val_t(64U));

    MyClass* myClassNt = new (std::nothrow) MyClass;
    operator delete(myClassNt, std::align_val_t(64U));

    MyClass* myClass5Nt = new (std::nothrow) MyClass[5];
    operator delete [](myClass5Nt, std::align_val_t(64U));

    myClassNt = new (std::nothrow) MyClass;
    operator delete(myClassNt, sizeof(MyClass), std::align_val_t(64U));

    myClass5Nt = new (std::nothrow) MyClass[5];
    operator delete [](myClass5Nt, sizeof(MyClass)*5, std::align_val_t(64U));

    OrdinaryClass* oClass = new OrdinaryClass;
    // this is a limitation, VG does not use enough bits
    // to tell apart aligned and unaligned allocations
    // so new/aligned delete is not a mismatch
    operator delete(oClass, std::align_val_t(64U));
    oClass = new (std::nothrow) OrdinaryClass;
    //delete oClass;
    // changed the above delete because GCC generates
    // a sized delete (???) whilst clang generates an ordinary delete
    operator delete(oClass);
    oClass = new OrdinaryClass[5];
    delete [] oClass;
    oClass = new (std::nothrow) OrdinaryClass[5];
    delete [] oClass;
}

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to