diff options
Diffstat (limited to 'gcc/testsuite/gfortran.dg/character_array_constructor_1.f90')
-rw-r--r-- | gcc/testsuite/gfortran.dg/character_array_constructor_1.f90 | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/character_array_constructor_1.f90 b/gcc/testsuite/gfortran.dg/character_array_constructor_1.f90 new file mode 100644 index 000000000..ac0f7e315 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/character_array_constructor_1.f90 @@ -0,0 +1,47 @@ +! { dg-do run } +! Tests the fix for PR27113, in which character structure +! components would produce the TODO compilation error "complex +! character array constructors". +! +! Test based on part of tonto-2.2; +! Contributed by Paul Thomas <pault@gcc.gnu.org> +! + type BASIS_TYPE + character(len=8) :: label + end type + + type(BASIS_TYPE), dimension(:), pointer :: ptr + character(8), dimension(2) :: carray + + allocate (ptr(2)) + ptr(1)%label = "Label 1" + ptr(2)%label = "Label 2" + +! This is the original bug + call read_library_data_((/ptr%label/)) + + carray(1) = "Label 3" + carray(2) = "Label 4" + +! Mix a character array with the character component of a derived type pointer array. + call read_library_data_((/carray, ptr%label/)) + +! Finally, add a constant (character(8)). + call read_library_data_((/carray, ptr%label, "Label 5 "/)) + +contains + + subroutine read_library_data_ (chr) + character(*), dimension(:) :: chr + character(len = len(chr)) :: tmp + if (size(chr,1) == 2) then + if (any (chr .ne. (/"Label 1", "Label 2"/))) call abort () + elseif (size(chr,1) == 4) then + if (any (chr .ne. (/"Label 3", "Label 4","Label 1", "Label 2"/))) call abort () + elseif (size(chr,1) == 5) then + if (any (chr .ne. (/"Label 3", "Label 4","Label 1", "Label 2", "Label 5"/))) & + call abort () + end if + end subroutine read_library_data_ + +end |