aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2013-09-19 00:19:03 +0200
committerTobias Burnus <burnus@gcc.gnu.org>2013-09-19 00:19:03 +0200
commit57c6def418f116f355d3d5eb71f4dd5003eefb0b (patch)
treeb571bcbf8efd8a5864f7ced156b76cd75d2a81c2 /gcc
parentf4b525e7149244ca192862e93253258fd2cdf890 (diff)
downloadgcc-57c6def418f116f355d3d5eb71f4dd5003eefb0b.zip
gcc-57c6def418f116f355d3d5eb71f4dd5003eefb0b.tar.gz
gcc-57c6def418f116f355d3d5eb71f4dd5003eefb0b.tar.bz2
re PR fortran/57697 ([OOP] Segfault with defined assignment for components during intrinsic assignment)
2013-09-18 Tobias Burnus <burnus@net-b.de> PR fortran/57697 * gfortran.dg/defined_assignment_11.f90: New. From-SVN: r202725
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/defined_assignment_11.f9043
2 files changed, 48 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4ed1d8b..8b6304f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2013-09-18 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/57697
+ * gfortran.dg/defined_assignment_11.f90: New.
+
2013-09-18 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/58438
diff --git a/gcc/testsuite/gfortran.dg/defined_assignment_11.f90 b/gcc/testsuite/gfortran.dg/defined_assignment_11.f90
new file mode 100644
index 0000000..ec297d5
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/defined_assignment_11.f90
@@ -0,0 +1,43 @@
+! { dg-do run }
+!
+! PR fortran/57697
+!
+! Further test of typebound defined assignment
+!
+module m0
+ implicit none
+ type :: component
+ integer :: i = 42
+ integer, allocatable :: b
+ contains
+ procedure :: assign0
+ generic :: assignment(=) => assign0
+ end type
+ type, extends(component) :: comp2
+ real :: aa
+ end type comp2
+ type parent
+ type(component) :: foo
+ real :: cc
+ end type
+ type p2
+ type(parent) :: x
+ end type p2
+contains
+ elemental subroutine assign0(lhs,rhs)
+ class(component), intent(INout) :: lhs
+ class(component), intent(in) :: rhs
+ lhs%i = 20
+ end subroutine
+end module
+
+program main
+ use m0
+ implicit none
+ type(p2), allocatable :: left
+ type(p2) :: right
+! print *, right%x%foo%i
+ left = right
+! print *, left%x%foo%i
+ if (left%x%foo%i /= 20) call abort()
+end