From: Eric Botcazou Date: Mon, 23 Sep 2013 16:16:41 +0000 (+0000) Subject: tree-ssa-ccp.c (insert_clobber_before_stack_restore): Recurse on copy assignment... X-Git-Tag: releases/gcc-4.7.4~476 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9e1a7bf1fa7c4c94d2df3a7bf256cda011b7c323;p=thirdparty%2Fgcc.git tree-ssa-ccp.c (insert_clobber_before_stack_restore): Recurse on copy assignment statements. * tree-ssa-ccp.c (insert_clobber_before_stack_restore): Recurse on copy assignment statements. From-SVN: r202835 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9be4478ea196..a5a897b7f9b1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-09-23 Eric Botcazou + + * tree-ssa-ccp.c (insert_clobber_before_stack_restore): Recurse on copy + assignment statements. + 2013-09-20 John David Anglin * config/pa/pa.md: In "scc" insn patterns, change output template to diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9a44623db7c1..9861f9106e2d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-09-23 Eric Botcazou + + * gnat.dg/opt28.ad[sb]: New test. + * gnat.dg/opt28_pkg.ads: New helper. + 2013-09-18 Eric Botcazou * gnat.dg/in_out_parameter4.adb: New test. diff --git a/gcc/testsuite/gnat.dg/opt28.adb b/gcc/testsuite/gnat.dg/opt28.adb new file mode 100644 index 000000000000..74a4c5c3be91 --- /dev/null +++ b/gcc/testsuite/gnat.dg/opt28.adb @@ -0,0 +1,31 @@ +with Opt28_Pkg; use Opt28_Pkg; + +package body Opt28 is + + function Full_Filename (Filename : String) return String is + Path : constant String := "PATH"; + Posix_Path : constant Posix_String := To_Posix (Path); + begin + + declare + M : constant Posix_String := Value_Of (Posix_Path); + N : constant Posix_String (1 .. M'Length) := M; + Var : constant String := To_String (Str => N); + Start_Pos : Natural := 1; + End_Pos : Natural := 1; + begin + while Start_Pos <= Var'Length loop + End_Pos := Position (Var (Start_Pos .. Var'Length)); + + if Is_File (To_Posix (Var (Start_Pos .. End_Pos - 1) & Filename)) then + return Var (Start_Pos .. End_Pos - 1) & Filename; + else + Start_Pos := End_Pos + 1; + end if; + end loop; + end; + + return ""; + end; + +end Opt28; diff --git a/gcc/testsuite/gnat.dg/opt28.ads b/gcc/testsuite/gnat.dg/opt28.ads new file mode 100644 index 000000000000..4887c2148459 --- /dev/null +++ b/gcc/testsuite/gnat.dg/opt28.ads @@ -0,0 +1,8 @@ +-- { dg-do compile } +-- { dg-options "-O2" } + +package Opt28 is + + function Full_Filename (Filename : String) return String; + +end Opt28; diff --git a/gcc/testsuite/gnat.dg/opt28_pkg.ads b/gcc/testsuite/gnat.dg/opt28_pkg.ads new file mode 100644 index 000000000000..c3c32fe1c347 --- /dev/null +++ b/gcc/testsuite/gnat.dg/opt28_pkg.ads @@ -0,0 +1,11 @@ +package Opt28_Pkg is + + type Posix_String is array (Positive range <>) of aliased Character; + + function To_Posix (Str : String) return Posix_String; + function To_String (Str : Posix_String) return String; + function Is_File (Str : Posix_String) return Boolean; + function Value_Of (Name : Posix_String) return Posix_String; + function Position (In_Line : String) return Natural; + +end Opt28_Pkg; diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index 105c36038e59..ac544d3e2bea 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -1744,6 +1744,9 @@ insert_clobber_before_stack_restore (tree saved_val, tree var, htab_t *visited) insert_clobber_before_stack_restore (gimple_phi_result (stmt), var, visited); } + else if (gimple_assign_ssa_name_copy_p (stmt)) + insert_clobber_before_stack_restore (gimple_assign_lhs (stmt), var, + visited); else gcc_assert (is_gimple_debug (stmt)); }