https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106876
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Known to fail| |8.1.0 Summary|[13 Regression] ICE in |ICE in extract_insn with |extract_insn, at |-mforce-indirect-call -fPIC |recog.cc:2791 since |-fprofile-generate |r13-465-g4df735e01e319997 | --- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- A simple change like this (changing everything to struct causing everything to be public) shows the problem has been there since GCC 8 (when -mforce-indirect-call support was added). ``` template <class Derived> struct base { friend void bar(Derived& d) { d.bar(); } }; struct derived : base<derived> { friend class base<derived>; void bar() {} }; int main() { derived d; bar(d); } ``` -mforce-indirect-call -fPIC -fprofile-generate -g0 ``` <source>: In member function 'void derived::bar()': <source>:11:15: error: unrecognizable insn: void bar() {} ^ (call_insn/u 6 3 7 2 (parallel [ (set (reg:DI 0 ax) (call:DI (mem:QI (symbol_ref:DI ("__tls_get_addr")) [0 S1 A8]) (const_int 0 [0]))) (unspec:DI [ (symbol_ref:DI ("__gcov_indirect_call_callee") [flags 0x50] <var_decl 0x7f58d6ae95a0 __gcov_indirect_call_callee>) (reg/f:DI 7 sp) ] UNSPEC_TLS_GD) ]) -1 (expr_list:REG_EH_REGION (const_int -2147483648 [0xffffffff80000000]) (nil)) (nil)) during RTL pass: vregs dump file: <source>.235r.vregs <source>:11:15: internal compiler error: in extract_insn, at recog.c:2304 ```