The optimization was almost immediately disabled accidentally by:
https://gcc.gnu.org/ml/gcc-cvs/2012-06/msg00577.html
Of course I should have added a testcase in the first place...
Tested on x86_64-suse-linux, applied on all active branches as obvious (this
only affects the Ada compiler).
2014-07-10 Eric Botcazou <ebotca...@adacore.com>
PR middle-end/53590
* function.c (allocate_struct_function): Revert r188667 change.
2014-07-10 Eric Botcazou <ebotca...@adacore.com>
* gnat.dg/opt39.adb: New test.
--
Eric Botcazou
Index: function.c
===================================================================
--- function.c (revision 212420)
+++ function.c (working copy)
@@ -4549,6 +4549,7 @@ allocate_struct_function (tree fndecl, b
/* ??? This could be set on a per-function basis by the front-end
but is this worth the hassle? */
cfun->can_throw_non_call_exceptions = flag_non_call_exceptions;
+ cfun->can_delete_dead_exceptions = flag_delete_dead_exceptions;
}
}
-- { dg-do compile }
-- { dg-options "-O2 -fno-inline -fdump-tree-optimized" }
procedure Opt39 (I : Integer) is
type Rec is record
I1 : Integer;
I2 : Integer;
I3 : Integer;
I4 : Integer;
I5 : Integer;
end record;
procedure Set (A : access Rec; I : Integer) is
Tmp : Rec := A.all;
begin
Tmp.I1 := I;
A.all := Tmp;
end;
R : aliased Rec;
begin
Set (R'Access, I);
if R.I1 /= I then
raise Program_Error;
end if;
end;
-- { dg-final { scan-tree-dump-times "MEM" 1 "optimized" } }
-- { dg-final { cleanup-tree-dump "optimized" } }