summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/pointer_init_7.f90
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gfortran.dg/pointer_init_7.f90')
-rw-r--r--gcc/testsuite/gfortran.dg/pointer_init_7.f9056
1 files changed, 56 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/pointer_init_7.f90 b/gcc/testsuite/gfortran.dg/pointer_init_7.f90
new file mode 100644
index 00000000000..dfde6156e66
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pointer_init_7.f90
@@ -0,0 +1,56 @@
+! { dg-do compile }
+!
+! PR fortran/55763
+!
+
+subroutine sub()
+ type t
+ integer :: i
+ end type t
+
+ type(t), target :: tgt
+ type(t), target, save :: tgt2(2)
+
+ type t2a
+ type(t), pointer :: cmp1 => tgt ! { dg-error "Pointer initialization target at .1. must have the SAVE attribute" }
+ end type t2a
+
+ type t2b
+ class(t), pointer :: cmp2 => tgt ! { dg-error "Pointer initialization target at .1. must have the SAVE attribute" }
+ end type t2b
+
+ type t2c
+ class(t), pointer :: cmp3 => tgt ! { dg-error "Pointer initialization target at .1. must have the SAVE attribute" }
+ end type t2c
+
+ type t2d
+ integer, pointer :: cmp4 => tgt%i ! { dg-error "Pointer initialization target at .1. must have the SAVE attribute" }
+ end type t2d
+
+ type(t), pointer :: w => tgt ! { dg-error "Pointer initialization target at .1. must have the SAVE attribute" }
+ class(t), pointer :: x => tgt ! { dg-error "Pointer initialization target at .1. must have the SAVE attribute" }
+ class(*), pointer :: y => tgt ! { dg-error "Pointer initialization target at .1. must have the SAVE attribute" }
+ integer, pointer :: z => tgt%i ! { dg-error "Pointer initialization target at .1. must have the SAVE attribute" }
+end subroutine
+
+program main
+ type t3
+ integer :: j
+ end type t3
+
+ type(t3), target :: tgt
+
+ type t4
+ type(t3), pointer :: cmp1 => tgt ! OK
+ class(t3), pointer :: cmp2 => tgt ! OK
+ class(t3), pointer :: cmp3 => tgt ! OK
+ integer, pointer :: cmp4 => tgt%j ! OK
+ end type t4
+
+ type(t3), target :: mytarget
+
+ type(t3), pointer :: a => mytarget ! OK
+ class(t3), pointer :: b => mytarget ! OK
+ class(*), pointer :: c => mytarget ! OK
+ integer, pointer :: d => mytarget%j ! OK
+end program main