annotate gcc/testsuite/gfortran.dg/allocate_with_source_23.f03 @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children 84e7813d76e9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 ! { dg-do run }
kono
parents:
diff changeset
2 ! { dg-options "-fcheck=bounds" }
kono
parents:
diff changeset
3 ! { dg-shouldfail "Array bounds mismatch" }
kono
parents:
diff changeset
4 !
kono
parents:
diff changeset
5 ! Test that pr72832 is fixed now.
kono
parents:
diff changeset
6 ! Contributed by Daan van Vugt
kono
parents:
diff changeset
7
kono
parents:
diff changeset
8 program allocate_source
kono
parents:
diff changeset
9 type :: t
kono
parents:
diff changeset
10 integer :: i
kono
parents:
diff changeset
11 end type t
kono
parents:
diff changeset
12 type, extends(t) :: tt
kono
parents:
diff changeset
13 end type tt
kono
parents:
diff changeset
14
kono
parents:
diff changeset
15 call test_type()
kono
parents:
diff changeset
16 call test_class_correct()
kono
parents:
diff changeset
17 call test_class_fail()
kono
parents:
diff changeset
18
kono
parents:
diff changeset
19 contains
kono
parents:
diff changeset
20
kono
parents:
diff changeset
21 subroutine test_class_correct()
kono
parents:
diff changeset
22 class(t), allocatable, dimension(:) :: a, b
kono
parents:
diff changeset
23 allocate(tt::a(1:2))
kono
parents:
diff changeset
24 a(:)%i = [ 1,2 ]
kono
parents:
diff changeset
25 if (size(a) /= 2) call abort()
kono
parents:
diff changeset
26 if (any(a(:)%i /= [ 1,2])) call abort()
kono
parents:
diff changeset
27
kono
parents:
diff changeset
28 allocate(b(1:4), source=a(1))
kono
parents:
diff changeset
29 if (size(b) /= 4) call abort()
kono
parents:
diff changeset
30 if (any(b(:)%i /= [ 1,1,1,1])) call abort()
kono
parents:
diff changeset
31 select type (b(1))
kono
parents:
diff changeset
32 class is (tt)
kono
parents:
diff changeset
33 continue
kono
parents:
diff changeset
34 class default
kono
parents:
diff changeset
35 call abort()
kono
parents:
diff changeset
36 end select
kono
parents:
diff changeset
37 end subroutine
kono
parents:
diff changeset
38
kono
parents:
diff changeset
39 subroutine test_class_fail()
kono
parents:
diff changeset
40 class(t), allocatable, dimension(:) :: a, b
kono
parents:
diff changeset
41 allocate(tt::a(1:2))
kono
parents:
diff changeset
42 a(:)%i = [ 1,2 ]
kono
parents:
diff changeset
43 if (size(a) /= 2) call abort()
kono
parents:
diff changeset
44 if (any(a(:)%i /= [ 1,2])) call abort()
kono
parents:
diff changeset
45
kono
parents:
diff changeset
46 allocate(b(1:4), source=a) ! Fail expected: sizes do not conform
kono
parents:
diff changeset
47 if (size(b) /= 4) call abort()
kono
parents:
diff changeset
48 if (any(b(1:2)%i /= [ 1,2])) call abort()
kono
parents:
diff changeset
49 select type (b(1))
kono
parents:
diff changeset
50 class is (tt)
kono
parents:
diff changeset
51 continue
kono
parents:
diff changeset
52 class default
kono
parents:
diff changeset
53 call abort()
kono
parents:
diff changeset
54 end select
kono
parents:
diff changeset
55 end subroutine
kono
parents:
diff changeset
56
kono
parents:
diff changeset
57 subroutine test_type()
kono
parents:
diff changeset
58 type(t), allocatable, dimension(:) :: a, b
kono
parents:
diff changeset
59 allocate(a(1:2))
kono
parents:
diff changeset
60 if (size(a) /= 2) call abort()
kono
parents:
diff changeset
61
kono
parents:
diff changeset
62 allocate(b(1:4), source=a)
kono
parents:
diff changeset
63 if (size(b) /= 4) call abort()
kono
parents:
diff changeset
64 end subroutine
kono
parents:
diff changeset
65 end program allocate_source
kono
parents:
diff changeset
66
kono
parents:
diff changeset
67