diff options
Diffstat (limited to 'gcc/testsuite/gfortran.dg/impure_assignment_3.f90')
-rw-r--r-- | gcc/testsuite/gfortran.dg/impure_assignment_3.f90 | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/impure_assignment_3.f90 b/gcc/testsuite/gfortran.dg/impure_assignment_3.f90 new file mode 100644 index 000000000..8be19896e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/impure_assignment_3.f90 @@ -0,0 +1,44 @@ +! { dg-do compile } +! +! PR 43169: [OOP] gfortran rejects PURE procedure with SELECT TYPE construct +! +! Original test case by Todd Hay <haymaker@mail.utexas.edu> +! Modified by Janus Weil <janus@gcc.gnu.org> + + implicit none + real :: g + +contains + + pure subroutine sub1(x) + type :: myType + real :: a + end type myType + class(myType), intent(inout) :: x + real :: r3 + select type(x) + class is (myType) + x%a = 42. + r3 = 43. + g = 44. ! { dg-error "variable definition context" } + end select + end subroutine + + pure subroutine sub2 + real :: r1 + block + real :: r2 + r1 = 45. + r2 = 46. + g = 47. ! { dg-error "variable definition context" } + end block + end subroutine + + pure subroutine sub3 + block + integer, save :: i ! { dg-error "cannot be specified in a PURE procedure" } + integer :: j = 5 ! { dg-error "is not allowed in a PURE procedure" } + end block + end subroutine + +end |