PR inline-asm/84742
[official-gcc.git] / gcc / testsuite / gfortran.dg / typebound_operator_6.f03
blob3360a0d89d54dabcd1e9aa26cfb9195339db06b5
1 ! { dg-do run }
3 ! PR 45961: [4.6 Regression] [OOP] Problem with polymorphic type-bound operators
5 ! Contributed by Mark Rashid <mmrashid@ucdavis.edu>
7 MODULE DAT_MOD
9   TYPE :: DAT
10     INTEGER :: NN
11   CONTAINS
12     PROCEDURE :: LESS_THAN
13     GENERIC :: OPERATOR (.LT.) => LESS_THAN
14   END TYPE DAT
16 CONTAINS
18   LOGICAL FUNCTION LESS_THAN(A, B)
19     CLASS (DAT), INTENT (IN) :: A, B
20     LESS_THAN = (A%NN .LT. B%NN)
21   END FUNCTION LESS_THAN
23 END MODULE DAT_MOD
26 MODULE NODE_MOD
27   USE DAT_MOD
29   TYPE NODE
30     INTEGER :: KEY
31     CLASS (DAT), POINTER :: PT
32   CONTAINS
33     PROCEDURE :: LST
34     GENERIC :: OPERATOR (.LT.) => LST
35   END TYPE NODE
37 CONTAINS
39   LOGICAL FUNCTION LST(A, B)
40     CLASS (NODE), INTENT (IN) :: A, B
41     IF (A%KEY .GT. 0 .AND. B%KEY .GT. 0) THEN
42       LST = (A%KEY .LT. B%KEY)
43     ELSE
44       LST = (A%PT .LT. B%PT)
45     END IF
46   END FUNCTION LST
48 END MODULE NODE_MOD
51 PROGRAM TEST
52   USE NODE_MOD
53   IMPLICIT NONE
55   CLASS (DAT), POINTER :: POINTA => NULL(), POINTB => NULL()
56   CLASS (NODE), POINTER :: NDA => NULL(), NDB => NULL()
58   ALLOCATE (DAT :: POINTA)
59   ALLOCATE (DAT :: POINTB)
60   ALLOCATE (NODE :: NDA)
61   ALLOCATE (NODE :: NDB)
63   POINTA%NN = 5
64   NDA%PT => POINTA
65   NDA%KEY = 2
66   POINTB%NN = 10
67   NDB%PT => POINTB
68   NDB%KEY = 3
70   if (.NOT. NDA .LT. NDB) STOP 1
71 END