From 554fd8c5195424bdbcabf5de30fdc183aba391bd Mon Sep 17 00:00:00 2001 From: upstream source tree Date: Sun, 15 Mar 2015 20:14:05 -0400 Subject: obtained gcc-4.6.4.tar.bz2 from upstream website; verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository. --- gcc/testsuite/gfortran.dg/typebound_call_1.f03 | 98 ++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/typebound_call_1.f03 (limited to 'gcc/testsuite/gfortran.dg/typebound_call_1.f03') diff --git a/gcc/testsuite/gfortran.dg/typebound_call_1.f03 b/gcc/testsuite/gfortran.dg/typebound_call_1.f03 new file mode 100644 index 000000000..d0da0ecd9 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/typebound_call_1.f03 @@ -0,0 +1,98 @@ +! { dg-do run } + +! Type-bound procedures +! Check basic calls to NOPASS type-bound procedures. + +MODULE m + IMPLICIT NONE + + TYPE add + CONTAINS + PROCEDURE, NOPASS :: func => func_add + PROCEDURE, NOPASS :: sub => sub_add + PROCEDURE, NOPASS :: echo => echo_add + END TYPE add + + TYPE mul + CONTAINS + PROCEDURE, NOPASS :: func => func_mul + PROCEDURE, NOPASS :: sub => sub_mul + PROCEDURE, NOPASS :: echo => echo_mul + END TYPE mul + +CONTAINS + + INTEGER FUNCTION func_add (a, b) + IMPLICIT NONE + INTEGER :: a, b + func_add = a + b + END FUNCTION func_add + + INTEGER FUNCTION func_mul (a, b) + IMPLICIT NONE + INTEGER :: a, b + func_mul = a * b + END FUNCTION func_mul + + SUBROUTINE sub_add (a, b, c) + IMPLICIT NONE + INTEGER, INTENT(IN) :: a, b + INTEGER, INTENT(OUT) :: c + c = a + b + END SUBROUTINE sub_add + + SUBROUTINE sub_mul (a, b, c) + IMPLICIT NONE + INTEGER, INTENT(IN) :: a, b + INTEGER, INTENT(OUT) :: c + c = a * b + END SUBROUTINE sub_mul + + SUBROUTINE echo_add () + IMPLICIT NONE + WRITE (*,*) "Hi from adder!" + END SUBROUTINE echo_add + + INTEGER FUNCTION echo_mul () + IMPLICIT NONE + echo_mul = 5 + WRITE (*,*) "Hi from muler!" + END FUNCTION echo_mul + + ! Do the testing here, in the same module as the type is. + SUBROUTINE test () + IMPLICIT NONE + + TYPE(add) :: adder + TYPE(mul) :: muler + + INTEGER :: x + + IF (adder%func (2, 3) /= 5 .OR. muler%func (2, 3) /= 6) THEN + CALL abort () + END IF + + CALL adder%sub (2, 3, x) + IF (x /= 5) THEN + CALL abort () + END IF + + CALL muler%sub (2, 3, x) + IF (x /= 6) THEN + CALL abort () + END IF + + ! Check procedures without arguments. + CALL adder%echo () + x = muler%echo () + CALL adder%echo + END SUBROUTINE test + +END MODULE m + +PROGRAM main + USE m, ONLY: test + CALL test () +END PROGRAM main + +! { dg-final { cleanup-modules "m" } } -- cgit v1.2.3