Commit 85da11a6 by Eric Botcazou Committed by Eric Botcazou

re PR middle-end/55321 (Ada bootstrap failure on armv5tel-linux-gnueabi)

	PR middle-end/55321
	* calls.c (emit_library_call_value_1): Mark as no-nonlocal if no-throw.

From-SVN: r193973
parent 74df1ad0
2012-11-29 Eric Botcazou <ebotcazou@adacore.com>
PR middle-end/55321
* calls.c (emit_library_call_value_1): Mark as no-nonlocal if no-throw.
2012-11-29 Vladimir Makarov <vmakarov@redhat.com>
PR middle-end/55456
......@@ -4196,13 +4196,11 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
that it should complain if nonvolatile values are live. For
functions that cannot return, inform flow that control does not
fall through. */
if (flags & ECF_NORETURN)
{
/* The barrier note must be emitted
immediately after the CALL_INSN. Some ports emit more than
just a CALL_INSN above, so we must search for it here. */
rtx last = get_last_insn ();
while (!CALL_P (last))
{
......@@ -4214,6 +4212,21 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
emit_barrier_after (last);
}
/* Consider that "regular" libcalls, i.e. all of them except for LCT_THROW
and LCT_RETURNS_TWICE, cannot perform non-local gotos. */
if (flags & ECF_NOTHROW)
{
rtx last = get_last_insn ();
while (!CALL_P (last))
{
last = PREV_INSN (last);
/* There was no CALL_INSN? */
gcc_assert (last != before_call);
}
make_reg_eh_region_note_nothrow_nononlocal (last);
}
/* Now restore inhibit_defer_pop to its actual original value. */
OK_DEFER_POP;
......
2012-11-29 Eric Botcazou <ebotcazou@adacore.com>
* loop_optimization14.ad[sb]: New test.
* loop_optimization14_pkg.ads: New helper.
2012-11-29 Richard Earnshaw <rearnsha@arm.com>
PR target/55073
......
-- PR middle-end/55321
-- { dg-do compile }
-- { dg-options "-O" }
with Loop_Optimization14_Pkg; use Loop_Optimization14_Pkg;
package body Loop_Optimization14 is
procedure Finalize_Pool (Pool : in out Rec) is
Raised : Boolean := False;
begin
Pool.A := True;
while not Pool.B loop
begin
Proc (Pool.B);
exception
when others =>
if not Raised then
Raised := True;
end if;
end;
end loop;
end;
end Loop_Optimization14;
package Loop_Optimization14 is
type Rec is record
A : Boolean;
pragma Atomic (A);
B : Boolean;
end record;
procedure Finalize_Pool (Pool : in out Rec);
end Loop_Optimization14;
package Loop_Optimization14_Pkg is
procedure Proc (B : in out Boolean);
end Loop_Optimization14_Pkg;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment