Internal compiler error in expand_end_loop, at stmt.c:2563

Jan Hubicka jh@suse.cz
Fri Oct 5 08:11:00 GMT 2001


> On Thu, 20 Sep 2001, Jan Hubicka wrote:
> >> Jan, my gutt and the ChangeLog indicate that this is "yours":
> >>
> >>   % gccvs check.ii -O3
> >>   check.C: In constructor `SIMPLE_SAT::SIMPLE_SAT(const std::vector<MC_RULE,
> >>      std::allocator<MC_RULE> >&, const GATOMSET&)':
> >>   check.C:473: Internal compiler error in expand_end_loop, at stmt.c:2563
> >>
> >> Seen on i386-unknown-freebsd4.3 since two, three days; check.ii.bz2 is
> >> attached.
> > I've finally got to reproduce the problem.  There appears to be problem with
> > inlining function that already has inpaired notes.
> > I am not quite sure how that can happen and if my insn emitting changes had
> > introduced it.
> 
> I'm rather sure this was triggered (even if not necessarily directly
> caused) by your patches, and the bug is still here. If have attached a
> preprocessed source file generated using today's CVS sources on a Debian
> GNU/Linux i686 box.
Hi,
I've spent about another 4 hours hunting this bug.  It appears to be in
the C++ frontend, so I am CCing everyone who made changes to the frontend
around the date.

I've tracked down the problem to be in exception region too early closed,
so it's REGION_END note appears in the middle of loop.
This is caused by CTOR_STMT expanding (with BEGIN set to 0), that is
aparently inpaired with CTOR_STMT with BEGIN set to 1.  This appears
to come from the code:
  if (DECL_CONSTRUCTOR_P (current_function_decl))
    {
      if (processing_template_decl)
        add_stmt (build_min_nt
                  (CTOR_INITIALIZER,
                   member_init_list, base_init_list));
      else
        {
          tree ctor_stmt;

          /* Mark the beginning of the constructor.  */
          ctor_stmt = build_stmt (CTOR_STMT);
          CTOR_BEGIN_P (ctor_stmt) = 1;
          add_stmt (ctor_stmt);

          /* And actually initialize the base-classes and members.  */
          emit_base_init (member_init_list, base_init_list);
        }
    }
  else if (DECL_DESTRUCTOR_P (current_function_decl)

that does not generate the CTOR_STMT when processing_template_decl is set
(and this is the case).  If I hack the corresponding finish_constructor_body
to not emit CTOR_STMT if the flag is set, the crash goes away, but it is
most probably not proper fix.

I have no cluse what is CTOR_INITIALIZER used for (there is no documentation
eighter in tree.def now c-tree.texi), so probably someone with more 
C++ frontend knowledge needs to help me.
Please!

Honza



More information about the Gcc-bugs mailing list