https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105709
--- Comment #7 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Even this reduced testcase works: # include <sys/syscall.h> # include <pthread.h> # include <unistd.h> #include <cstring> #include <cstdlib> namespace Qt { enum Initialization {} Uninitialized; } struct QArrayData { int size; char *d; }; struct QByteArray { [[gnu::noipa]] QByteArray(int a, Qt::Initialization) {d.size = a; d.d = (char*)__builtin_malloc(a); memset(d.d, 0, a);} ~QByteArray(); int size() const; QArrayData d; [[gnu::noipa]] char *data() {return d.d;} }; QByteArray::~QByteArray() {} [[gnu::noipa]] int QByteArray::size() const { return d.size; } int main() { char *path = (char*)malloc(1024); QByteArray buf(256, Qt::Uninitialized); ssize_t len = ::readlink(path, buf.data(), buf.size()); return 0; }