https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118396
--- Comment #10 from Marek Polacek <mpolacek at gcc dot gnu.org> --- We have: TARGET_EXPR <D.2996, (void) (D.2996 = {.status=0, .data={._vptr.Foo=&_ZTV3Foo + 16}})> so object=D.2996 whose type is Data, so we do not go down the VOID_TYPE_P path in cxx_eval_outermost_constant_expr, and evaluate the whole init to VOID_CST. Obviously, that should not happen. I'm not sure why we create TARGET_EXPRs that look like this.