https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83148
--- Comment #6 from Thomas Koenig <tkoenig at gcc dot gnu.org> --- The problem seems to be that gfc_conv_initalizer does not look through (gdb) p *expr $1 = {expr_type = EXPR_STRUCTURE, ts = {type = BT_DERIVED, kind = 0, to (gdb) p *(expr->ts.u.derived->components->ts->u.derived) $22 = {name = 0x7ffff7487080 "c_ptr", module = 0x7ffff7483410 "__iso_c_binding", declared_at = {nextc = 0x25672b8, lb = 0x2567280}, ts = { type = BT_INTEGER, kind = 8, u = {derived = 0x256fc00, cl = 0x256fc00, pad = 39255040}, interface = 0x0, is_c_interop = 1, is_iso_c = 1 It is, of course, open if it should need to... without adding the vtab, gfc_conv_initializer does not even appear to be called.