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 <[email protected]>
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 <[email protected]>
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