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
```

Reply via email to