| ! { dg-do run } |
| ! { dg-additional-options "-fdump-tree-original" } |
| ! |
| ! PR fortran/107508 |
| ! |
| use iso_c_binding |
| implicit none |
| character(len=:,kind=4), allocatable, target :: a4str(:), a4str2 |
| type(c_ptr) :: cptr, cptr2 |
| |
| allocate(character(len=7,kind=4) :: a4str(-2:3)) |
| allocate(character(len=9,kind=4) :: a4str2) |
| |
| cptr = c_loc(a4str) |
| cptr2 = c_loc(a4str2) |
| |
| if (len(a4str) /= 7) error stop |
| if (lbound(a4str,1) /= -2) error stop |
| if (ubound(a4str,1) /= 3) error stop |
| if (len(a4str2) /= 9) error stop |
| |
| a4str = [4_"sf456aq", 4_"3dtzu24", 4_"_4fh7sm", 4_"=ff85s7", 4_"j=8af4d", 4_".,A%Fsz"] |
| a4str2 = 4_"4f5g5f8a9" |
| |
| !print *, lbound(a4str), ubound(a4str) ! expected (-2:3) - actually: (1:6) |
| |
| if (len(a4str) /= 7) error stop |
| if (lbound(a4str,1) /= -2) error stop |
| if (ubound(a4str,1) /= 3) error stop |
| if (len(a4str2) /= 9) error stop |
| if (.not. c_associated (cptr, c_loc(a4str))) error stop |
| if (.not. c_associated (cptr2, c_loc(a4str2))) error stop |
| end |
| |
| ! { dg-final { scan-tree-dump-times "__builtin_malloc" 4 "original" } } |
| ! { dg-final { scan-tree-dump-times "__builtin_realloc" 2 "original" } } |
| |
| ! { dg-final { scan-tree-dump-times "a4str.data = __builtin_malloc \\(168\\);" 2 "original" } } |
| ! { dg-final { scan-tree-dump-times "a4str.data = __builtin_realloc \\(a4str.data, 168\\);" 1 "original" } } |
| ! { dg-final { scan-tree-dump-times "a4str2 = \\(character\\(kind=4\\)\\\[1:.a4str2\\\] \\*\\) __builtin_malloc \\(36\\);" 2 "original" } } |
| ! { dg-final { scan-tree-dump-times "a4str2 = \\(character\\(kind=4\\)\\\[1:.a4str2\\\] \\*\\) __builtin_realloc \\(\\(void \\*\\) a4str2, 36\\);" 1 "original" } } |
| |
| ! Array: Assert, realloc-check assign string length (alloc + (realloc'ed) assignment): |
| ! { dg-final { scan-tree-dump-times "if \\(\[^\\n\\r\]*\\.a4str != 7\\)" 2 "original" } } |
| ! { dg-final { scan-tree-dump-times "if \\(D\\.\[0-9\]+ != 28\\) goto L\\." 1 "original" } } |
| ! { dg-final { scan-tree-dump-times "\\.a4str = 7;" 2 "original" } } |
| |
| ! Scalar: Assert, realloc-check assign string length (alloc + (realloc'ed) assignment): |
| ! { dg-final { scan-tree-dump-times "if \\(\[^\\n\\r\]*\\.a4str2 != 9\\)" 2 "original" } } |
| ! { dg-final { scan-tree-dump-times "if \\(\\.a4str2 == 9\\) goto L\\." 1 "original" } } |
| ! { dg-final { scan-tree-dump-times "\\.a4str2 = 9;" 2 "original" } } |