tree-eh.c (lower_try_finally_dup_block): Clear location information on stack restore statements.
* tree-eh.c (lower_try_finally_dup_block): Clear location information on stack restore statements. (decide_copy_try_finally): Do not consider a stack restore statement as coming from sources. From-SVN: r227805
This commit is contained in:
parent
10d48e7cd9
commit
cc6fbd8040
|
@ -1,3 +1,10 @@
|
|||
2015-09-15 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* tree-eh.c (lower_try_finally_dup_block): Clear location information
|
||||
on stack restore statements.
|
||||
(decide_copy_try_finally): Do not consider a stack restore statement as
|
||||
coming from sources.
|
||||
|
||||
2015-09-15 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
* config/alpha/alpha.c (alpha_expand_block_clear): Use
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2015-09-15 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gnat.dg/array24.adb: New test.
|
||||
* gnat.dg/blocklocs.adb: Delete.
|
||||
|
||||
2015-09-15 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c/67580
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
-- { dg-do compile }
|
||||
-- { dg-options "-fdump-tree-optimized" }
|
||||
|
||||
procedure Array24 (N : Natural) is
|
||||
S : String (1 .. N);
|
||||
pragma Volatile (S);
|
||||
begin
|
||||
S := (others => '0');
|
||||
end;
|
||||
|
||||
-- { dg-final { scan-tree-dump-not "builtin_unwind_resume" "optimized" } }
|
|
@ -1,26 +0,0 @@
|
|||
-- { dg-do compile { target *-*-linux* } }
|
||||
-- { dg-options "-gdwarf-2" }
|
||||
|
||||
procedure Blocklocs (Choice : Integer; N : in out Integer) is
|
||||
begin
|
||||
if Choice > 0 then
|
||||
declare -- line 7
|
||||
S : String (1 .. N * 2);
|
||||
pragma Volatile (S);
|
||||
begin
|
||||
S := (others => 'B');
|
||||
end; -- line 12
|
||||
else
|
||||
declare -- line 14
|
||||
S : String (1 .. N );
|
||||
pragma Volatile (S);
|
||||
begin
|
||||
S := (others => '1');
|
||||
end; -- line 19
|
||||
end if;
|
||||
end;
|
||||
|
||||
-- { dg-final { scan-assembler "loc 1 7" } }
|
||||
-- { dg-final { scan-assembler "loc 1 12" } }
|
||||
-- { dg-final { scan-assembler "loc 1 14" } }
|
||||
-- { dg-final { scan-assembler "loc 1 19" } }
|
|
@ -915,7 +915,12 @@ lower_try_finally_dup_block (gimple_seq seq, struct leh_state *outer_state,
|
|||
for (gsi = gsi_start (new_seq); !gsi_end_p (gsi); gsi_next (&gsi))
|
||||
{
|
||||
gimple stmt = gsi_stmt (gsi);
|
||||
if (LOCATION_LOCUS (gimple_location (stmt)) == UNKNOWN_LOCATION)
|
||||
/* We duplicate __builtin_stack_restore at -O0 in the hope of eliminating
|
||||
it on the EH paths. When it is not eliminated, make it transparent in
|
||||
the debug info. */
|
||||
if (gimple_call_builtin_p (stmt, BUILT_IN_STACK_RESTORE))
|
||||
gimple_set_location (stmt, UNKNOWN_LOCATION);
|
||||
else if (LOCATION_LOCUS (gimple_location (stmt)) == UNKNOWN_LOCATION)
|
||||
{
|
||||
tree block = gimple_block (stmt);
|
||||
gimple_set_location (stmt, loc);
|
||||
|
@ -1604,8 +1609,12 @@ decide_copy_try_finally (int ndests, bool may_throw, gimple_seq finally)
|
|||
|
||||
for (gsi = gsi_start (finally); !gsi_end_p (gsi); gsi_next (&gsi))
|
||||
{
|
||||
/* Duplicate __builtin_stack_restore in the hope of eliminating it
|
||||
on the EH paths and, consequently, useless cleanups. */
|
||||
gimple stmt = gsi_stmt (gsi);
|
||||
if (!is_gimple_debug (stmt) && !gimple_clobber_p (stmt))
|
||||
if (!is_gimple_debug (stmt)
|
||||
&& !gimple_clobber_p (stmt)
|
||||
&& !gimple_call_builtin_p (stmt, BUILT_IN_STACK_RESTORE))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
|
Loading…
Reference in New Issue