https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119692
--- Comment #2 from Thomas Schwinge <tschwinge at gcc dot gnu.org> ---
When still 'map'ping C++ 'typeinfo', 'vtable' at the OpenACC compute, OpenMP
'target' construct (as 'firstprivate', or 'map(to)'), there's an additional
issue. With attachment 61052 altered as follows:
{
C1 c1;
- bool a = false;
- asm volatile ("" : : "r" (&a) : "memory");
- if (a)
- {
- [[maybe_unused]]
- C2 &c2 = dynamic_cast<C2 &>(c1);
- }
+ C1 *c1p = &c1;
+ asm volatile ("" : : "r" (&c1p) : "memory");
+ C2 *c2 = dynamic_cast<C2 *>(c1p);
+ if (c2)
+ __builtin_abort();
}
..., this should execute and terminate normally -- and it does, for host as
well as GCN, nvptx target execution. But for GCN, nvptx offloading execution,
we get device-side SIGSEGV.
I suppose we have to properly (deep-)initialize the device-side data
structures? Will this go away once we're no longer 'map'ping C++ 'typeinfo',
'vtable' at the OpenACC compute, OpenMP 'target' construct, or is additional
effort necessary?