annotate gcc/testsuite/gfortran.dg/associate_32.f03 @ 152:2b5abeee2509

update gcc11
author anatofuz
date Mon, 25 May 2020 07:50:57 +0900
parents 84e7813d76e9
children
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 !
kono
parents:
diff changeset
3 ! Tests fix for PR77296 and other bugs found on the way.
kono
parents:
diff changeset
4 !
kono
parents:
diff changeset
5 ! Contributed by Matt Thompson <matthew.thompson@nasa.gov>
kono
parents:
diff changeset
6 !
kono
parents:
diff changeset
7 program test
kono
parents:
diff changeset
8
kono
parents:
diff changeset
9 implicit none
kono
parents:
diff changeset
10 type :: str_type
kono
parents:
diff changeset
11 character(len=:), allocatable :: str
kono
parents:
diff changeset
12 end type
kono
parents:
diff changeset
13
kono
parents:
diff changeset
14 character(len=:), allocatable :: s, sd(:)
kono
parents:
diff changeset
15 character(len=2), allocatable :: sf, sfd(:)
kono
parents:
diff changeset
16 character(len=6) :: str
kono
parents:
diff changeset
17 type(str_type) :: string
kono
parents:
diff changeset
18
kono
parents:
diff changeset
19 s = 'ab'
kono
parents:
diff changeset
20 associate(ss => s)
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
21 if (ss .ne. 'ab') STOP 1! This is the original bug.
111
kono
parents:
diff changeset
22 ss = 'c'
kono
parents:
diff changeset
23 end associate
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
24 if (s .ne. 'c ') STOP 2! No reallocation within ASSOCIATE block!
111
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 sf = 'c'
kono
parents:
diff changeset
27 associate(ss => sf)
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
28 if (ss .ne. 'c ') STOP 3! This the bug in comment #2 of the PR.
111
kono
parents:
diff changeset
29 ss = 'cd'
kono
parents:
diff changeset
30 end associate
kono
parents:
diff changeset
31
kono
parents:
diff changeset
32 sd = [s, sf]
kono
parents:
diff changeset
33 associate(ss => sd)
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
34 if (any (ss .ne. ['c ','cd'])) STOP 4
111
kono
parents:
diff changeset
35 end associate
kono
parents:
diff changeset
36
kono
parents:
diff changeset
37 sfd = [sd,'ef']
kono
parents:
diff changeset
38 associate(ss => sfd)
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
39 if (any (ss .ne. ['c ','cd','ef'])) STOP 5
111
kono
parents:
diff changeset
40 ss = ['gh']
kono
parents:
diff changeset
41 end associate
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
42 if (any (sfd .ne. ['gh','cd','ef'])) STOP 6! No reallocation!
111
kono
parents:
diff changeset
43
kono
parents:
diff changeset
44 string%str = 'xyz'
kono
parents:
diff changeset
45 associate(ss => string%str)
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
46 if (ss .ne. 'xyz') STOP 7
111
kono
parents:
diff changeset
47 ss = 'c'
kono
parents:
diff changeset
48 end associate
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
49 if (string%str .ne. 'c ') STOP 8! No reallocation!
111
kono
parents:
diff changeset
50
kono
parents:
diff changeset
51 str = "foobar"
kono
parents:
diff changeset
52 call test_char (5 , str)
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
53 IF (str /= "abcder") STOP 9
111
kono
parents:
diff changeset
54
kono
parents:
diff changeset
55 associate(ss => foo())
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
56 if (ss .ne. 'pqrst') STOP 10
111
kono
parents:
diff changeset
57 end associate
kono
parents:
diff changeset
58
kono
parents:
diff changeset
59 associate(ss => bar())
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
60 if (ss(2) .ne. 'uvwxy') STOP 11
111
kono
parents:
diff changeset
61 end associate
kono
parents:
diff changeset
62
kono
parents:
diff changeset
63 ! The deallocation is not strictly necessary but it does allow
kono
parents:
diff changeset
64 ! other memory leakage to be tested for.
kono
parents:
diff changeset
65 deallocate (s, sd, sf, sfd, string%str)
kono
parents:
diff changeset
66 contains
kono
parents:
diff changeset
67
kono
parents:
diff changeset
68 ! This is a modified version of the subroutine in associate_1.f03.
kono
parents:
diff changeset
69 ! 'str' is now a dummy.
kono
parents:
diff changeset
70 SUBROUTINE test_char (n, str)
kono
parents:
diff changeset
71 INTEGER, INTENT(IN) :: n
kono
parents:
diff changeset
72
kono
parents:
diff changeset
73 CHARACTER(LEN=n) :: str
kono
parents:
diff changeset
74
kono
parents:
diff changeset
75 ASSOCIATE (my => str)
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
76 IF (LEN (my) /= n) STOP 12
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
77 IF (my /= "fooba") STOP 13
111
kono
parents:
diff changeset
78 my = "abcde"
kono
parents:
diff changeset
79 END ASSOCIATE
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
80 IF (str /= "abcde") STOP 14
111
kono
parents:
diff changeset
81 END SUBROUTINE test_char
kono
parents:
diff changeset
82
kono
parents:
diff changeset
83 function foo() result(res)
kono
parents:
diff changeset
84 character (len=:), pointer :: res
kono
parents:
diff changeset
85 allocate (res, source = 'pqrst')
kono
parents:
diff changeset
86 end function
kono
parents:
diff changeset
87
kono
parents:
diff changeset
88 function bar() result(res)
kono
parents:
diff changeset
89 character (len=:), allocatable :: res(:)
kono
parents:
diff changeset
90 allocate (res, source = ['pqrst','uvwxy'])
kono
parents:
diff changeset
91 end function
kono
parents:
diff changeset
92
kono
parents:
diff changeset
93 end program test