| ! { dg-do run } |
| ! |
| ! Tests the fix for pr49954, in which concatenation to deferred length character |
| ! arrays, at best, did not work correctly. |
| ! |
| ! |
| ! |
| implicit none |
| character(len=:), allocatable :: a1(:) |
| character(len=:), allocatable :: a2(:), a3(:) |
| character(len=:), allocatable :: b1 |
| character(len=:), allocatable :: b2 |
| character(8) :: chr = "IJKLMNOP" |
| character(48) :: buffer |
| |
| a1 = ["ABCDEFGH","abcdefgh"] |
| a2 = "_"//a1//chr//"_" |
| if (any (a2 .ne. ["_ABCDEFGHIJKLMNOP_","_abcdefghIJKLMNOP_"])) STOP 1 |
| |
| ! Check that the descriptor dtype is OK - the array write needs it. |
| write (buffer, "(2a18)") a2 |
| if (trim (buffer) .ne. "_ABCDEFGHIJKLMNOP__abcdefghIJKLMNOP_") STOP 2 |
| |
| ! Make sure scalars survived the fix! |
| b1 = "ABCDEFGH" |
| b2 = "_"//b1//chr//"_" |
| if (b2 .ne. "_ABCDEFGHIJKLMNOP_") STOP 3 |
| |
| ! Check the dependency is detected and dealt with by generation of a temporary. |
| a1 = "?"//a1//"?" |
| if (any (a1 .ne. ["?ABCDEFGH?","?abcdefgh?"])) STOP 4 |
| ! With an array reference... |
| a1 = "?"//a1(1:2)//"?" |
| if (any (a1 .ne. ["??ABCDEFGH??","??abcdefgh??"])) STOP 5 |
| !... together with a substring. |
| a1 = "?"//a1(1:1)(2:4)//"?" |
| if (any (a1 .ne. ["??AB?"])) STOP 6 |
| contains |
| end |