Hello world, my recent patch introduced a regression with deferred-length characters. I have committed the attached patch as obvious to fix this.
Regards Thomas 2012-06-07 Thomas König <tkoe...@gcc.gnu.org> PR fortran/52861 * frontend-passes.c (optimize_assignment): Don't set the length of an empty string for deferred-length character variables. 2012-06-07 Thomas König <tkoe...@gcc.gnu.org> PR fortran/52861 * gfortran.dg/string_assign_2.f90: New test case.
Index: frontend-passes.c =================================================================== --- frontend-passes.c (Revision 188300) +++ frontend-passes.c (Arbeitskopie) @@ -740,8 +740,10 @@ optimize_assignment (gfc_code * c) /* Optimize away a = trim(b), where a is a character variable. */ remove_trim (rhs); - /* Replace a = ' ' by a = '' to optimize away a memcpy. */ - if (empty_string(rhs)) + /* Replace a = ' ' by a = '' to optimize away a memcpy, but only + for strings with non-deferred length (otherwise we would + reallocate the length. */ + if (empty_string(rhs) && ! lhs->ts.deferred) rhs->value.character.length = 0; }
! { dg-do run } ! { dg-options "-ffrontend-optimize" } program main character (len=:), allocatable :: a a = 'a' if (len(a) /= 1) call abort a = ' ' if (len(a) /= 2) call abort end program main