summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/intent_out_2.f90
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gfortran.dg/intent_out_2.f90')
-rw-r--r--gcc/testsuite/gfortran.dg/intent_out_2.f9047
1 files changed, 47 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/intent_out_2.f90 b/gcc/testsuite/gfortran.dg/intent_out_2.f90
new file mode 100644
index 000000000..4dc5191e9
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/intent_out_2.f90
@@ -0,0 +1,47 @@
+! { dg-do run }
+! Tests the fix for PR33554, in which the default initialization
+! of temp, in construct_temp, caused a segfault because it was
+! being done before the array offset and lower bound were
+! available.
+!
+! Contributed by Harald Anlauf <anlauf@gmx.de>
+!
+module gfcbug72
+ implicit none
+
+ type t_datum
+ character(len=8) :: mn = 'abcdefgh'
+ end type t_datum
+
+ type t_temp
+ type(t_datum) :: p
+ end type t_temp
+
+contains
+
+ subroutine setup ()
+ integer :: i
+ type (t_temp), pointer :: temp(:) => NULL ()
+
+ do i=1,2
+ allocate (temp (2))
+ call construct_temp (temp)
+ if (any (temp % p% mn .ne. 'ijklmnop')) call abort ()
+ deallocate (temp)
+ end do
+ end subroutine setup
+ !--
+ subroutine construct_temp (temp)
+ type (t_temp), intent(out) :: temp (:)
+ if (any (temp % p% mn .ne. 'abcdefgh')) call abort ()
+ temp(:)% p% mn = 'ijklmnop'
+ end subroutine construct_temp
+end module gfcbug72
+
+program test
+ use gfcbug72
+ implicit none
+ call setup ()
+end program test
+! { dg-final { cleanup-modules "gfcbug72" } }
+