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

--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
I don't know what the problem is, the code should be roughly equivalent to:

#include <new>

namespace x __attribute__((visibility("default")))
{
template<typename T>
struct buffer
{
  alignas(__alignof__(T)) unsigned char buf[sizeof(T)];

  void* addr() { return static_cast<void*>(buf); }

  T* ptr() { return static_cast<T*>(addr()); }
};
}

struct IReporterFactory {
    virtual ~IReporterFactory() = default;
};

class ReporterFactory : public IReporterFactory {};

int main()
{
  auto p = new x::buffer<ReporterFactory>;
  ::new(p->addr()) ReporterFactory;
  p->ptr()->~ReporterFactory();
  delete p;
}

And clang has no problem with that (as expected).

Is it normal for cfi-unrelated-cast to just trap on a UD2 instruction, rather
than giving a UBsan diagnostic?

Reply via email to