mirror of git://gcc.gnu.org/git/gcc.git
re PR fortran/70673 (ICE with module containing functions with allocatable character scalars)
2016-06-27 Paul Thomas <pault@gcc.gnu.org> PR fortran/70673 * frontend-passes.c (realloc_string_callback): Add a call to gfc_dep_compare_expr. 2016-06-27 Paul Thomas <pault@gcc.gnu.org> PR fortran/70673 * gfortran.dg/pr70673.f90: New test. From-SVN: r237804
This commit is contained in:
parent
c39f4ac558
commit
ae2c036774
|
|
@ -156,6 +156,13 @@ realloc_string_callback (gfc_code **c, int *walk_subtrees,
|
||||||
if (!gfc_check_dependency (expr1, expr2, true))
|
if (!gfc_check_dependency (expr1, expr2, true))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
/* gfc_check_dependency doesn't always pick up identical expressions.
|
||||||
|
However, eliminating the above sends the compiler into an infinite
|
||||||
|
loop on valid expressions. Without this check, the gimplifier emits
|
||||||
|
an ICE for a = a, where a is deferred character length. */
|
||||||
|
if (!gfc_dep_compare_expr (expr1, expr2))
|
||||||
|
return 0;
|
||||||
|
|
||||||
current_code = c;
|
current_code = c;
|
||||||
inserted_block = NULL;
|
inserted_block = NULL;
|
||||||
changed_statement = NULL;
|
changed_statement = NULL;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
! { dg-do run }
|
||||||
|
!
|
||||||
|
! Test the fix for PR70673
|
||||||
|
!
|
||||||
|
! Contributed by David Kinniburgh <davidgkinniburgh@yahoo.co.uk>
|
||||||
|
!
|
||||||
|
module m
|
||||||
|
contains
|
||||||
|
subroutine s(inp)
|
||||||
|
character(*), intent(in) :: inp
|
||||||
|
character(:), allocatable :: a
|
||||||
|
a = a ! This used to ICE.
|
||||||
|
a = inp
|
||||||
|
a = a ! This used to ICE too
|
||||||
|
if ((len (a) .ne. 5) .or. (a .ne. "hello")) call abort
|
||||||
|
a = a(2:3) ! Make sure that temporary creation is not broken.
|
||||||
|
if ((len (a) .ne. 2) .or. (a .ne. "el")) call abort
|
||||||
|
deallocate (a)
|
||||||
|
a = a ! This would ICE too.
|
||||||
|
end subroutine s
|
||||||
|
end module m
|
||||||
|
|
||||||
|
use m
|
||||||
|
call s("hello")
|
||||||
|
end
|
||||||
Loading…
Reference in New Issue