annotate gcc/testsuite/gfortran.dg/short_circuiting.f90 @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 84e7813d76e9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 ! { dg-do compile }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 ! { dg-additional-options "-Wextra" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 !
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 ! PR 85599: warn about short-circuiting of logical expressions for non-pure functions
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 !
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 ! Contributed by Janus Weil <janus@gcc.gnu.org>
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 module a
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 interface impl_pure_a
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 module procedure impl_pure_a1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 end interface
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 contains
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 logical function impl_pure_a1()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 impl_pure_a1 = .true.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 end function
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 end module
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 program short_circuit
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 use a
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 logical :: flag
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 flag = .false.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 flag = check() .and. flag
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 flag = flag .and. check() ! { dg-warning "might not be evaluated" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 flag = flag .and. pure_check()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 flag = flag .and. impl_pure_1()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 flag = flag .and. impl_pure_2()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 flag = flag .and. impl_pure_a1()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 flag = flag .and. impl_pure_a()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 contains
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 logical function check()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 integer, save :: i = 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 print *, "check", i
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 i = i + 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 check = .true.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 end function
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 logical pure function pure_check()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 pure_check = .true.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 end function
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 logical function impl_pure_1()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 impl_pure_1 = .true.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52 end function
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54 logical function impl_pure_2()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 impl_pure_2 = impl_pure_1()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 end function
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59 end