diff options
Diffstat (limited to 'gcc/testsuite/gfortran.dg/char_pointer_comp_assign.f90')
-rw-r--r-- | gcc/testsuite/gfortran.dg/char_pointer_comp_assign.f90 | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/char_pointer_comp_assign.f90 b/gcc/testsuite/gfortran.dg/char_pointer_comp_assign.f90 new file mode 100644 index 000000000..4e2d853b1 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/char_pointer_comp_assign.f90 @@ -0,0 +1,31 @@ +! { dg-do run } +! This test the fix of PR18283, where assignments of scalar, +! character pointer components of derived types caused an ICE. +! It also checks that the array counterparts remain operational. +! Contributed by Paul Thomas pault@gcc.gnu.org +! +program char_pointer_comp_assign + implicit none + type :: dt + character (len=4), pointer :: scalar + character (len=4), pointer :: array(:) + end type dt + type (dt) :: a + character (len=4), target :: scalar_t ="abcd" + character (len=4), target :: array_t(2) = (/"abcd","efgh"/) + +! Do assignments first + allocate (a%scalar, a%array(2)) + a%scalar = scalar_t + if (a%scalar /= "abcd") call abort () + a%array = array_t + if (any(a%array /= (/"abcd","efgh"/))) call abort () + deallocate (a%scalar, a%array) + +! Now do pointer assignments. + a%scalar => scalar_t + if (a%scalar /= "abcd") call abort () + a%array => array_t + if (any(a%array /= (/"abcd","efgh"/))) call abort () + +end program char_pointer_comp_assign |