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

--- Comment #16 from Richard Biener <rguenth at gcc dot gnu.org> ---
So for the cp-demangle.c testcase we do not fininsh on function
d_count_templates_scopes

#5  (anonymous namespace)::analyze_function (ipa=<optimized out>)
    at ../../gcc/gcc/ipa-modref.cc:3231
--Type <RET> for more, q to quit, c to continue without paging--
#6  0x0000000000f8f760 in (anonymous namespace)::pass_modref::execute (
    this=<optimized out>) at ../../gcc/gcc/ipa-modref.cc:4199
#7  0x0000000000cc7edc in execute_one_pass (pass=0x1f94e00)
    at ../../gcc/gcc/passes.cc:2651
#8  0x0000000000d637b4 in execute_pass_list_1 (pass=0x1f94e00)
    at ../../gcc/gcc/passes.cc:2760
#9  0x0000000000d625c8 in execute_pass_list_1 (pass=<optimized out>)
    at ../../gcc/gcc/passes.cc:2761
#10 execute_pass_list (fn=0x400000d327e8, pass=<optimized out>)
    at ../../gcc/gcc/passes.cc:2771
#11 0x0000000000cf2f18 in do_per_function_toporder (
    callback=0xd62544 <execute_pass_list(function*, opt_pass*)>, 
    data=0x1f94410) at ../../gcc/gcc/passes.cc:1780
#12 0x00000000012afdd4 in execute_ipa_pass_list (pass=0x1f943b0)

in particular we seem to endlessly loop in

void
modref_access_analysis::propagate ()
{
  if (m_ipa && m_summary)
    return;

  bool changed = true;
  bool first = true;
  cgraph_node *fnode = cgraph_node::get (current_function_decl);

  m_always_executed = false;
  while (changed && m_summary->useful_p (m_ecf_flags, false))
    {    
      changed = false;
      for (unsigned i = 0; i < m_recursive_calls.length (); i++)
        {
          changed |= merge_call_side_effects (m_recursive_calls[i], m_summary,
                                              fnode, !first);
        }
      first = false;
    } 

since we miscompile cc1 there's not much to say here - all, stage1, prev,
stagetrain cc1 binaries compile the file successfully.

Reply via email to