summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/transfer_simplify_8.f90
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gfortran.dg/transfer_simplify_8.f90')
-rw-r--r--gcc/testsuite/gfortran.dg/transfer_simplify_8.f9021
1 files changed, 21 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/transfer_simplify_8.f90 b/gcc/testsuite/gfortran.dg/transfer_simplify_8.f90
new file mode 100644
index 000000000..75b084670
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/transfer_simplify_8.f90
@@ -0,0 +1,21 @@
+! { dg-do run }
+! { dg-options "-O0" }
+! PR fortran/34537
+! simplify_transfer used to ICE on divide by zero for cases like this,
+! where the mold expression is a non-constant character expression.
+!
+! Testcase contributed by Tobias Burnus <burnus@gcc.gnu.org >
+!
+ character, pointer :: ptr(:)
+ character(8) :: a
+ allocate(ptr(9))
+ ptr = transfer('Sample#0'//achar(0),ptr) ! Causes ICE
+ if (any (ptr .ne. ['S','a','m','p','l','e','#','0',achar(0)])) call abort
+ call test(a)
+ if (a .ne. 'Sample#2') call abort
+contains
+ subroutine test(a)
+ character(len=*) :: a
+ a = transfer('Sample#2',a)
+ end subroutine test
+end