This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Fix sibcall related failure in g++.old-deja/g++.other/eh1.C
- To: Mark Mitchell <mark at codesourcery dot com>
- Subject: Re: [PATCH] Fix sibcall related failure in g++.old-deja/g++.other/eh1.C
- From: Jakub Jelinek <jakub at redhat dot com>
- Date: Fri, 16 Jun 2000 17:37:55 +0200
- Cc: rth at cygnus dot com, gcc-patches at gcc dot gnu dot org
- References: <20000616170111.R474@sunsite.ms.mff.cuni.cz> <20000616081744O.mitchell@codesourcery.com>
- Reply-To: Jakub Jelinek <jakub at redhat dot com>
On Fri, Jun 16, 2000 at 08:17:44AM -0700, Mark Mitchell wrote:
>
> If thisblock->data.block.last_unconditional_cleanup points to last_insn
> before we start_sequence for the normal or tail call sequence and
> expand_decl_cleanup appends code to it, then last_insn is not up-to-date
> at the point we want to emit the CALL_PLACEHOLDER or normal_insns chain and
> thus emit_insns/emit_insn throws away all the cleanup stuff.
>
> Ugh.
>
> I'm not sure exactly what that code is doing, so I'll let RTH approve
> it. But there's definitely a bug in your code:
>
> + while (NEXT_INSN (insn));
>
> That's a loop that's going to take either 0, or an infinite, number of
> trips, unless I'm losing it. :-)
??
It is a do insn=NEXT_INSN(insn); while(NEXT_INSN(insn)); construct.
Maybe I should add {} around it to make it more obvious.
Jakub