https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67529
--- Comment #3 from Eric <ericns1 at spirilis dot net> --- Further clarifying, creating a whole new function "void check2(void)" inside MyTemplate which did *not* exist as a virtual function inside MyTemplateParent produces correct code when begin(uint8_t) tries to call it: ;(call_insn 12 11 15 (parallel [ ; (call (mem:QI (symbol_ref/i:SI ("_ZN10MyTemplate6check2Ev") [flags 0x3] <function_decl 0x7fa8b79c45e8 check2>) [0 check2 S1 A8]) ; (const_int 0 [0])) ; (clobber (reg:CC 16 cc)) ; ]) my_template.h:34 18 {call_internal} ; (expr_list:REG_EH_REGION (const_int 0 [0]) ; (nil)) ; (expr_list:SI (use (reg:SI 1 r1)) ; (nil))) bsr __ZN10MyTemplate6check2Ev ; 12 call_internal/2 [length = 4]