------- Comment #3 from ebotcazou at gcc dot gnu dot org  2007-07-03 13:10 
-------
Reduced testcase:

package P is

   Name_Buffer : String (1 .. 100);
   Name_Len : Natural;

   procedure Proc (S : String);

end P;

package body P is

   procedure Proc (S : String) is
      N : constant Integer := S'Length;
   begin
      Name_Buffer (1 + N .. Name_Len + N) := Name_Buffer (1 .. Name_Len);
      Name_Buffer (1 .. N) := S;
      Name_Len := Name_Len + N;
   end;

end P;


Fallout of:

2007-06-30  Daniel Berlin  <[EMAIL PROTECTED]>

        Fix PR tree-optimization/32540
        Fix PR tree-optimization/31651

        * tree-ssa-sccvn.c: New file.

        * tree-ssa-sccvn.h: Ditto.


Value numbering D.759_64 stmt = D.759_64 = &p__name_buffer[1]{lb: 1 sz: 1} +
n_32;
RHS &p__name_buffer[1]{lb: 1 sz: 1} + n_32 simplified to
&p__name_buffer[(<unnamed-signed:32>) MAX_EXPR <D.738_31, 0> + 1]{lb: 1 sz: 1}
has constants 0

The replacement expression is is_gimple_min_invariant because TREE_INVARIANT
so simplify_binary_expression accepts it:

  /* Make sure result is not a complex expression consiting
     of operators of operators (IE (a + b) + (a + c))
     Otherwise, we will end up with unbounded expressions if
     fold does anything at all.  */
  if (result)
    {
      if (is_gimple_min_invariant (result))
        return result;
      else if (SSA_VAR_P (result))
        return result;


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32589

Reply via email to