! { dg-do run }
|
! { dg-do run }
|
! Tests the fix for PR27113, in which character structure
|
! Tests the fix for PR27113, in which character structure
|
! components would produce the TODO compilation error "complex
|
! components would produce the TODO compilation error "complex
|
! character array constructors".
|
! character array constructors".
|
!
|
!
|
! Test based on part of tonto-2.2;
|
! Test based on part of tonto-2.2;
|
! Contributed by Paul Thomas
|
! Contributed by Paul Thomas
|
!
|
!
|
type BASIS_TYPE
|
type BASIS_TYPE
|
character(len=8) :: label
|
character(len=8) :: label
|
end type
|
end type
|
|
|
type(BASIS_TYPE), dimension(:), pointer :: ptr
|
type(BASIS_TYPE), dimension(:), pointer :: ptr
|
character(8), dimension(2) :: carray
|
character(8), dimension(2) :: carray
|
|
|
allocate (ptr(2))
|
allocate (ptr(2))
|
ptr(1)%label = "Label 1"
|
ptr(1)%label = "Label 1"
|
ptr(2)%label = "Label 2"
|
ptr(2)%label = "Label 2"
|
|
|
! This is the original bug
|
! This is the original bug
|
call read_library_data_((/ptr%label/))
|
call read_library_data_((/ptr%label/))
|
|
|
carray(1) = "Label 3"
|
carray(1) = "Label 3"
|
carray(2) = "Label 4"
|
carray(2) = "Label 4"
|
|
|
! Mix a character array with the character component of a derived type pointer array.
|
! Mix a character array with the character component of a derived type pointer array.
|
call read_library_data_((/carray, ptr%label/))
|
call read_library_data_((/carray, ptr%label/))
|
|
|
! Finally, add a constant (character(8)).
|
! Finally, add a constant (character(8)).
|
call read_library_data_((/carray, ptr%label, "Label 5 "/))
|
call read_library_data_((/carray, ptr%label, "Label 5 "/))
|
|
|
contains
|
contains
|
|
|
subroutine read_library_data_ (chr)
|
subroutine read_library_data_ (chr)
|
character(*), dimension(:) :: chr
|
character(*), dimension(:) :: chr
|
character(len = len(chr)) :: tmp
|
character(len = len(chr)) :: tmp
|
if (size(chr,1) == 2) then
|
if (size(chr,1) == 2) then
|
if (any (chr .ne. (/"Label 1", "Label 2"/))) call abort ()
|
if (any (chr .ne. (/"Label 1", "Label 2"/))) call abort ()
|
elseif (size(chr,1) == 4) then
|
elseif (size(chr,1) == 4) then
|
if (any (chr .ne. (/"Label 3", "Label 4","Label 1", "Label 2"/))) call abort ()
|
if (any (chr .ne. (/"Label 3", "Label 4","Label 1", "Label 2"/))) call abort ()
|
elseif (size(chr,1) == 5) then
|
elseif (size(chr,1) == 5) then
|
if (any (chr .ne. (/"Label 3", "Label 4","Label 1", "Label 2", "Label 5"/))) &
|
if (any (chr .ne. (/"Label 3", "Label 4","Label 1", "Label 2", "Label 5"/))) &
|
call abort ()
|
call abort ()
|
end if
|
end if
|
end subroutine read_library_data_
|
end subroutine read_library_data_
|
|
|
end
|
end
|
|
|