1! { dg-do run } 2! Tests the patch that implements F2003 automatic allocation and 3! reallocation of allocatable arrays on assignment. 4! 5! Contributed by Paul Thomas <pault@gcc.gnu.org> 6! 7 integer(4), allocatable :: a(:), b(:), c(:,:) 8 integer(4) :: j 9 integer(4) :: src(2:5) = [11,12,13,14] 10 integer(4) :: mat(2:3,5:6) 11 character(4), allocatable :: chr1(:) 12 character(4) :: chr2(2) = ["abcd", "wxyz"] 13 14 allocate(a(1)) 15 mat = reshape (src, [2,2]) 16 17 a = [4,3,2,1] 18 if (size(a, 1) .ne. 4) call abort 19 if (any (a .ne. [4,3,2,1])) call abort 20 21 a = [((42 - i), i = 1, 10)] 22 if (size(a, 1) .ne. 10) call abort 23 if (any (a .ne. [((42 - i), i = 1, 10)])) call abort 24 25 b = a 26 if (size(b, 1) .ne. 10) call abort 27 if (any (b .ne. a)) call abort 28 29 a = [4,3,2,1] 30 if (size(a, 1) .ne. 4) call abort 31 if (any (a .ne. [4,3,2,1])) call abort 32 33 a = b 34 if (size(a, 1) .ne. 10) call abort 35 if (any (a .ne. [((42 - i), i = 1, 10)])) call abort 36 37 j = 20 38 a = [(i, i = 1, j)] 39 if (size(a, 1) .ne. j) call abort 40 if (any (a .ne. [(i, i = 1, j)])) call abort 41 42 a = foo (15) 43 if (size(a, 1) .ne. 15) call abort 44 if (any (a .ne. [((i + 15), i = 1, 15)])) call abort 45 46 a = src 47 if (lbound(a, 1) .ne. lbound(src, 1)) call abort 48 if (ubound(a, 1) .ne. ubound(src, 1)) call abort 49 if (any (a .ne. [11,12,13,14])) call abort 50 51 k = 7 52 a = b(k:8) 53 if (lbound(a, 1) .ne. lbound (b(k:8), 1)) call abort 54 if (ubound(a, 1) .ne. ubound (b(k:8), 1)) call abort 55 if (any (a .ne. [35,34])) call abort 56 57 c = mat 58 if (any (lbound (c) .ne. lbound (mat))) call abort 59 if (any (ubound (c) .ne. ubound (mat))) call abort 60 if (any (c .ne. mat)) call abort 61 62 deallocate (c) 63 c = mat(2:,:) 64 if (any (lbound (c) .ne. lbound (mat(2:,:)))) call abort 65 66 chr1 = chr2(2:1:-1) 67 if (lbound(chr1, 1) .ne. 1) call abort 68 if (any (chr1 .ne. chr2(2:1:-1))) call abort 69 70 b = c(1, :) + c(2, :) 71 if (lbound(b, 1) .ne. lbound (c(1, :) + c(2, :), 1)) call abort 72 if (any (b .ne. c(1, :) + c(2, :))) call abort 73contains 74 function foo (n) result(res) 75 integer(4), allocatable, dimension(:) :: res 76 integer(4) :: n 77 allocate (res(n)) 78 res = [((i + 15), i = 1, n)] 79 end function foo 80end 81