https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83293
Bug ID: 83293 Summary: [8 regression] ICE: in gsi_insert_seq_nodes_after, at gimple-iterator.c:278 Product: gcc Version: 8.0 Status: UNCONFIRMED Keywords: needs-bisection Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: trippels at gcc dot gnu.org Target Milestone: --- trippels@gcc67 ~ % cat XMPMeta-Serialize.ii typedef long unsigned size_t; template <typename _Iterator, typename> struct A { _Iterator _M_current; A(_Iterator p1) : _M_current(p1) {} _Iterator m_fn1() { return _M_current; } }; template <typename _IteratorL, typename _IteratorR, typename _Container> int operator==(A<_IteratorL, _Container> p1, A<_IteratorR, _Container> p2) { return p1.m_fn1() == p2.m_fn1(); } struct B { struct { int *_M_start; int *_M_finish; } _M_impl; }; struct C : B { A<int *, int> m_fn2() { return _M_impl._M_start; } A<int *, int> m_fn3() { return _M_impl._M_finish; } size_t m_fn4() { return _M_impl._M_finish - _M_impl._M_start; } int m_fn5() { return m_fn2() == m_fn3(); } }; struct XMP_Node { C qualifiers; } a; size_t b; size_t EstimateRDFSize(int p1) { size_t c(p1 * b); if (!a.qualifiers.m_fn5()) { p1 += 2; for (size_t d = 0, e = a.qualifiers.m_fn4(); d < e; ++d) c += EstimateRDFSize(0); } c += (p1 - 1) * b; return c; } trippels@gcc67 ~ % g++ -O2 -c XMPMeta-Serialize.ii during GIMPLE pass: slsr XMPMeta-Serialize.ii: In function ‘size_t EstimateRDFSize(int)’: XMPMeta-Serialize.ii:27:8: internal compiler error: in gsi_insert_seq_nodes_after, at gimple-iterator.c:278 size_t EstimateRDFSize(int p1) { ^~~~~~~~~~~~~~~ 0xada0d3 gsi_insert_seq_nodes_after ../../gcc/gcc/gimple-iterator.c:278 0x154254f insert_initializers ../../gcc/gcc/gimple-ssa-strength-reduction.c:3421 0x154254f analyze_candidates_and_replace ../../gcc/gcc/gimple-ssa-strength-reduction.c:3896 0x154254f execute ../../gcc/gcc/gimple-ssa-strength-reduction.c:3978