This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Fix PR middle-end/53590 again


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  <ebotcazou@adacore.com>

	PR middle-end/53590
	* function.c (allocate_struct_function): Revert r188667 change.


2014-07-10  Eric Botcazou  <ebotcazou@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" } }

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]