https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98130
Bug ID: 98130
Summary: [11 regression] placement new fails on
webkit-gtk-2.28.4
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: slyfox at gcc dot gnu.org
Target Milestone: ---
Initial problem is observed on liferea crash at startup against
webkit-gtk-2.28.4 built with gcc-11.
If I reduced original source correctly here is minimized version of the crash:
//$ cat a.cc
/*
$ g++-10.2.0 -O1 -fno-strict-aliasing a.cc -o a-10 && ./a-10
&a=0x7ffc83475894
$ g++-11.0.0 -O1 -fno-strict-aliasing a.cc -o a-11 && ./a-11
Illegal instruction (core dumped) ./a-11
*/
#if 0
# include <memory>
#else
inline void* operator new(unsigned long, void* __p) { return __p; }
#endif
#include <stdio.h>
typedef int* T;
static T storage;
static T* p = &storage;
// '__attribute__((__always_inline__))' seems to be the trigger
static inline __attribute__((__always_inline__)) void append(T value)
{
new (p) T(value);
}
int main() {
int a;
append(&a);
if (!*p)
__builtin_trap();
fprintf(stderr, "&a=%p\n", *p);
}