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

--- Comment #2 from Paul Floyd <pa...@free.fr> ---
Testcase to reproduce this behaviour:

# Makefile
.PHONY: clean
# GCC and Valgrind built from SVN/git head
CXX=${HOME}/tools/gcc/bin/g++
VG=${HOME}/tools/valgrind/bin/valgrind

test32: test.cpp
        ${CXX} -o $@ $< -m32 -Wl,-rpath,${HOME}/tools/gcc/lib -faligned-new
-std=c++17

test64: test.cpp
        ${CXX} -o $@ $< -m64 -Wl,-rpath,${HOME}/tools/gcc/lib64 -faligned-new
-std=c++17

vg32: test32
        ${VG} --trace-malloc=yes --show-mismatched-frees=yes ./$<

vg64: test64
        ${VG} --trace-malloc=yes --show-mismatched-frees=yes ./$<

clean:
        rm -f test32 test64 test32_clang test64_clang

Source code:
#include <cstdlib>
#include <new>


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

int main() {
    MyClass* myClass = new MyClass();
    delete myClass;

    MyClass* myClassNt = new (std::nothrow) MyClass();
    delete myClassNt;

    MyClass* myClass5 = new MyClass[5];
    delete [] myClass5;

    MyClass* myClass5Nt = new (std::nothrow) MyClass[5];
    delete [] myClass5Nt;
}

There are no mismatches but the output is

--4614-- memalign(al 64, size 64) = 0x4425AC0
--4614-- free(0x4425AC0)
--4614-- memalign(al 64, size 64) = 0x4425B80
--4614-- free(0x4425B80)
--4614-- memalign(al 64, size 320) = 0x4425C80
--4614-- free(0x4425C80)
--4614-- memalign(al 64, size 320) = 0x4425E40
--4614-- free(0x4425E40)

Since Valgrind does not pick up the aligned new/deletes but it does pick up the
underlying memaligns and frees.


Here are the mangled function signatures
Linux 32bit
         U _ZdaPvSt11align_val_t@@CXXABI_1.3.11
         U _ZdlPvjSt11align_val_t@@CXXABI_1.3.11
         U _ZnajSt11align_val_t@@CXXABI_1.3.11
         U _ZnajSt11align_val_tRKSt9nothrow_t@@CXXABI_1.3.11
         U _ZnwjSt11align_val_t@@CXXABI_1.3.11
         U _ZnwjSt11align_val_tRKSt9nothrow_t@@CXXABI_1.3.11

Unmangled
         U operator delete[](void*, std::align_val_t)@@CXXABI_1.3.11
         U operator delete(void*, unsigned int,
std::align_val_t)@@CXXABI_1.3.11
         U operator new[](unsigned int, std::align_val_t)@@CXXABI_1.3.11
         U operator new[](unsigned int, std::align_val_t, std::nothrow_t
const&)@@CXXABI_1.3.11
         U operator new(unsigned int, std::align_val_t)@@CXXABI_1.3.11
         U operator new(unsigned int, std::align_val_t, std::nothrow_t
const&)@@CXXABI_1.3.11

Linux 64bit
                U _ZdaPvSt11align_val_t@@CXXABI_1.3.11
                 U _ZdlPvmSt11align_val_t@@CXXABI_1.3.11
                 U _ZnamSt11align_val_t@@CXXABI_1.3.11
                 U _ZnamSt11align_val_tRKSt9nothrow_t@@CXXABI_1.3.11
                 U _ZnwmSt11align_val_t@@CXXABI_1.3.11
                 U _ZnwmSt11align_val_tRKSt9nothrow_t@@CXXABI_1.3.11

Unmangled
                 U operator delete[](void*, std::align_val_t)@@CXXABI_1.3.11
                 U operator delete(void*, unsigned long,
std::align_val_t)@@CXXABI_1.3.11
                 U operator new[](unsigned long,
std::align_val_t)@@CXXABI_1.3.11
                 U operator new[](unsigned long, std::align_val_t,
std::nothrow_t const&)@@CXXABI_1.3.11
                 U operator new(unsigned long, std::align_val_t)@@CXXABI_1.3.11
                 U operator new(unsigned long, std::align_val_t, std::nothrow_t
const&)@@CXXABI_1.3.11

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

Reply via email to