3 ! PR 78443: [OOP] Incorrect behavior with non_overridable keyword
5 ! Contributed by federico <perini@wisc.edu>
11 ! Abstract parent class and its child type
14 procedure
:: test
=> test1
15 procedure (square_interface
), deferred
:: square
18 ! Deferred procedure interface
20 function square_interface( this
, x
) result( y
)
24 end function square_interface
27 type, extends(P1
) :: C1
29 procedure
, non_overridable
:: square
=> C1_square
32 ! Non-abstract parent class and its child type
35 procedure
:: test
=> test2
36 procedure
:: square
=> P2_square
39 type, extends(P2
) :: C2
41 procedure
, non_overridable
:: square
=> C2_square
46 real function test1( this
, x
)
49 test1
= this
% square( x
)
52 real function test2( this
, x
)
55 test2
= this
% square( x
)
58 function P2_square( this
, x
) result( y
)
64 function C1_square( this
, x
) result( y
)
70 function C2_square( this
, x
) result( y
)
85 if ( t1
% test( 2. ) /= -100.) STOP 1
86 if ( t2
% test( 2. ) /= 4.) STOP 2
87 if ( t3
% test( 2. ) /= 4.) STOP 3