https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109262

            Bug ID: 109262
           Summary: [13 Regression] ICE: verify_gimple failed (error:
                    statement marked for throw in middle of block)
           Product: gcc
           Version: 13.0
            Status: UNCONFIRMED
          Keywords: ice-on-valid-code
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: asolokha at gmx dot com
  Target Milestone: ---

gcc 13.0.1 20230319 snapshot (g:5426ab34643d9e6502f3ee572891a03471fa33ed) ICEs
when compiling the following testcase, reduced from
gcc/testsuite/g++.dg/torture/pr88149.C, w/ -O1 -fnon-call-exceptions:

template < typename > struct au;
template < typename b > au< b > operator*(au< b >, au< b > &p2) {
  au< b > ax;
  ax *= p2;
  return p2;
}
template <> struct au< double > {
  double p() { return __real__ az; }
  double q() { return __imag__ az; }
  void operator*=(au &o) {
    _Complex bd = o.p();
    __imag__ bd = o.q();
    az *= bd;
  }
  _Complex az;
};
long bm, m;
au< double > h;
void bn() {
  for (long k; ;) {
    au< double > br;
    for (long j = 0; 0 < bm; ++j)
      au n = br * h;
  }
}

% g++-13 -O1 -fnon-call-exceptions -c a7nq8mzi.C
a7nq8mzi.C: In function 'void operator*(au<b>, au<b>&) [with b = double]':
a7nq8mzi.C:20:1: error: statement marked for throw in middle of block
   20 | }
      | ^
# VUSE <.MEM_1(D)>
_6 = REALPART_EXPR <p2_2(D)->az>;
during GIMPLE pass: forwprop
a7nq8mzi.C:20:1: internal compiler error: verify_gimple failed
0x123bd51 verify_gimple_in_cfg(function*, bool, bool)
       
/var/tmp/portage/sys-devel/gcc-13.0.1_p20230319/work/gcc-13-20230319/gcc/tree-cfg.cc:5648
0x1104820 execute_function_todo
       
/var/tmp/portage/sys-devel/gcc-13.0.1_p20230319/work/gcc-13-20230319/gcc/passes.cc:2098
0x1104d8e execute_todo
       
/var/tmp/portage/sys-devel/gcc-13.0.1_p20230319/work/gcc-13-20230319/gcc/passes.cc:2152

Reply via email to