aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Thomas <pault@gcc.gnu.org>2008-12-22 23:16:44 +0000
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2008-12-22 23:16:44 +0000
commitd797a4ed797b6ba140e7fc9059835b74335cbcf5 (patch)
tree787d00c6258119338307b419aecba69048a61200
parent8a2725318babd06ccbb2a45d9d9cb699c75e4f38 (diff)
downloadgcc-d797a4ed797b6ba140e7fc9059835b74335cbcf5.zip
gcc-d797a4ed797b6ba140e7fc9059835b74335cbcf5.tar.gz
gcc-d797a4ed797b6ba140e7fc9059835b74335cbcf5.tar.bz2
re PR fortran/35780 (internal compiler error for complicated PARAMETER expressions)
2008-12-22 Paul Thomas <pault@gcc.gnu.org> PR fortran/35780 * gfortran.dg/alloc_comp_optional_1.f90: New test. From-SVN: r142890
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/alloc_comp_optional_1.f9031
2 files changed, 36 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7fed67d..f17ce2b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..be1fa42
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/alloc_comp_optional_1.f90
@@ -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
+