OSDN Git Service

2008-12-22 Paul Thomas <pault@gcc.gnu.org>
authorjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 22 Dec 2008 23:16:44 +0000 (23:16 +0000)
committerjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 22 Dec 2008 23:16:44 +0000 (23:16 +0000)
PR fortran/35780
* gfortran.dg/alloc_comp_optional_1.f90: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@142890 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/alloc_comp_optional_1.f90 [new file with mode: 0644]

index 7fed67d..f17ce2b 100644 (file)
@@ -1,3 +1,8 @@
+2008-12-22  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/35780
+       * gfortran.dg/alloc_comp_optional_1.f90: New test.
+
 2008-12-22  Ben Elliston  <bje@au.ibm.com>
 
        PR c++/38362
diff --git a/gcc/testsuite/gfortran.dg/alloc_comp_optional_1.f90 b/gcc/testsuite/gfortran.dg/alloc_comp_optional_1.f90
new file mode 100644 (file)
index 0000000..be1fa42
--- /dev/null
@@ -0,0 +1,31 @@
+! { dg-do run }
+! Tests the fix for PR38602, a regression caused by a modification
+! to the nulling of INTENT_OUT dummies with allocatable components
+! that caused a segfault with optional arguments.
+!
+! Contributed by David Kinniburgh <davidkinniburgh@yahoo.co.uk>
+!
+program test_iso
+  type ivs
+     character(LEN=1), dimension(:), allocatable :: chars
+  end type ivs
+  type(ivs) :: v_str
+  integer :: i
+  call foo(v_str, i)
+  if (v_str%chars(1) .ne. "a") call abort
+  if (i .ne. 0) call abort
+  call foo(flag = i)
+  if (i .ne. 1) call abort
+contains
+  subroutine foo (arg, flag)
+    type(ivs), optional, intent(out) :: arg
+    integer :: flag
+    if (present(arg)) then
+      arg = ivs([(char(i+96), i = 1,10)])
+      flag = 0
+    else
+      flag = 1
+    end if
+  end subroutine
+end
+