annotate gcc/testsuite/gfortran.dg/dependency_25.f90 @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +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 ! Test the fix for PR42736, in which an excessively rigorous dependency
kono
parents:
diff changeset
3 ! checking for the assignment generated an unnecessary temporary, whose
kono
parents:
diff changeset
4 ! rank was wrong. When accessed by the scalarizer, a segfault ensued.
kono
parents:
diff changeset
5 !
kono
parents:
diff changeset
6 ! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
kono
parents:
diff changeset
7 ! Reported by Armelius Cameron <armeliusc@gmail.com>
kono
parents:
diff changeset
8 !
kono
parents:
diff changeset
9 module UnitValue_Module
kono
parents:
diff changeset
10
kono
parents:
diff changeset
11 implicit none
kono
parents:
diff changeset
12 private
kono
parents:
diff changeset
13
kono
parents:
diff changeset
14 public :: &
kono
parents:
diff changeset
15 operator(*), &
kono
parents:
diff changeset
16 assignment(=)
kono
parents:
diff changeset
17
kono
parents:
diff changeset
18 type, public :: UnitValue
kono
parents:
diff changeset
19 real :: &
kono
parents:
diff changeset
20 Value = 1.0
kono
parents:
diff changeset
21 character(31) :: &
kono
parents:
diff changeset
22 Label
kono
parents:
diff changeset
23 end type UnitValue
kono
parents:
diff changeset
24
kono
parents:
diff changeset
25 interface operator(*)
kono
parents:
diff changeset
26 module procedure ProductReal_LV
kono
parents:
diff changeset
27 end interface operator(*)
kono
parents:
diff changeset
28
kono
parents:
diff changeset
29 interface assignment(=)
kono
parents:
diff changeset
30 module procedure Assign_LV_Real
kono
parents:
diff changeset
31 end interface assignment(=)
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 contains
kono
parents:
diff changeset
34
kono
parents:
diff changeset
35 elemental function ProductReal_LV(Multiplier, Multiplicand) result(P_R_LV)
kono
parents:
diff changeset
36
kono
parents:
diff changeset
37 real, intent(in) :: &
kono
parents:
diff changeset
38 Multiplier
kono
parents:
diff changeset
39 type(UnitValue), intent(in) :: &
kono
parents:
diff changeset
40 Multiplicand
kono
parents:
diff changeset
41 type(UnitValue) :: &
kono
parents:
diff changeset
42 P_R_LV
kono
parents:
diff changeset
43
kono
parents:
diff changeset
44 P_R_LV%Value = Multiplier * Multiplicand%Value
kono
parents:
diff changeset
45 P_R_LV%Label = Multiplicand%Label
kono
parents:
diff changeset
46
kono
parents:
diff changeset
47 end function ProductReal_LV
kono
parents:
diff changeset
48
kono
parents:
diff changeset
49
kono
parents:
diff changeset
50 elemental subroutine Assign_LV_Real(LeftHandSide, RightHandSide)
kono
parents:
diff changeset
51
kono
parents:
diff changeset
52 real, intent(inout) :: &
kono
parents:
diff changeset
53 LeftHandSide
kono
parents:
diff changeset
54 type(UnitValue), intent(in) :: &
kono
parents:
diff changeset
55 RightHandSide
kono
parents:
diff changeset
56
kono
parents:
diff changeset
57 LeftHandSide = RightHandSide%Value
kono
parents:
diff changeset
58
kono
parents:
diff changeset
59 end subroutine Assign_LV_Real
kono
parents:
diff changeset
60
kono
parents:
diff changeset
61 end module UnitValue_Module
kono
parents:
diff changeset
62
kono
parents:
diff changeset
63 program TestProgram
kono
parents:
diff changeset
64
kono
parents:
diff changeset
65 use UnitValue_Module
kono
parents:
diff changeset
66
kono
parents:
diff changeset
67 implicit none
kono
parents:
diff changeset
68
kono
parents:
diff changeset
69 type :: TableForm
kono
parents:
diff changeset
70 real, dimension(:,:), allocatable :: &
kono
parents:
diff changeset
71 RealData
kono
parents:
diff changeset
72 end type TableForm
kono
parents:
diff changeset
73
kono
parents:
diff changeset
74 type(UnitValue) :: &
kono
parents:
diff changeset
75 CENTIMETER
kono
parents:
diff changeset
76
kono
parents:
diff changeset
77 type(TableForm), pointer :: &
kono
parents:
diff changeset
78 Table
kono
parents:
diff changeset
79
kono
parents:
diff changeset
80 allocate(Table)
kono
parents:
diff changeset
81 allocate(Table%RealData(10,5))
kono
parents:
diff changeset
82
kono
parents:
diff changeset
83 CENTIMETER%value = 42
kono
parents:
diff changeset
84 Table%RealData = 1
kono
parents:
diff changeset
85 Table%RealData(:,1) = Table%RealData(:,1) * CENTIMETER
kono
parents:
diff changeset
86 Table%RealData(:,2) = Table%RealData(:,2) * CENTIMETER
kono
parents:
diff changeset
87 Table%RealData(:,3) = Table%RealData(:,3) * CENTIMETER
kono
parents:
diff changeset
88 Table%RealData(:,5) = Table%RealData(:,5) * CENTIMETER
kono
parents:
diff changeset
89
kono
parents:
diff changeset
90 ! print *, Table%RealData
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
91 if (any (abs(Table%RealData(:,4) - 1) > epsilon(1.0))) STOP 1
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
92 if (any (abs(Table%RealData(:,[1,2,3,5]) - 42) > epsilon(1.0))) STOP 2
111
kono
parents:
diff changeset
93 end program TestProgram