summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/typebound_proc_5.f03
diff options
context:
space:
mode:
authorupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
committerupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
commit554fd8c5195424bdbcabf5de30fdc183aba391bd (patch)
tree976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/gfortran.dg/typebound_proc_5.f03
downloadcbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2
cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
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.
Diffstat (limited to 'gcc/testsuite/gfortran.dg/typebound_proc_5.f03')
-rw-r--r--gcc/testsuite/gfortran.dg/typebound_proc_5.f03119
1 files changed, 119 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/typebound_proc_5.f03 b/gcc/testsuite/gfortran.dg/typebound_proc_5.f03
new file mode 100644
index 000000000..fdd15b388
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/typebound_proc_5.f03
@@ -0,0 +1,119 @@
+! { dg-do compile }
+
+! Type-bound procedures
+! Test for errors in specific bindings, during resolution.
+
+MODULE othermod
+ IMPLICIT NONE
+CONTAINS
+
+ REAL FUNCTION proc_noarg ()
+ IMPLICIT NONE
+ END FUNCTION proc_noarg
+
+END MODULE othermod
+
+MODULE testmod
+ USE othermod
+ IMPLICIT NONE
+
+ INTEGER :: noproc
+
+ PROCEDURE() :: proc_nointf
+
+ INTERFACE
+ SUBROUTINE proc_intf ()
+ END SUBROUTINE proc_intf
+ END INTERFACE
+
+ ABSTRACT INTERFACE
+ SUBROUTINE proc_abstract_intf ()
+ END SUBROUTINE proc_abstract_intf
+ END INTERFACE
+
+ TYPE supert
+ CONTAINS
+ PROCEDURE, NOPASS :: super_overrid => proc_sub_noarg
+ PROCEDURE, NOPASS, NON_OVERRIDABLE :: super_nonoverrid => proc_sub_noarg
+ END TYPE supert
+
+ TYPE, EXTENDS(supert) :: t
+ CONTAINS
+
+ ! Bindings that should succeed
+ PROCEDURE, NOPASS :: p0 => proc_noarg
+ PROCEDURE, PASS :: p1 => proc_arg_first
+ PROCEDURE proc_arg_first
+ PROCEDURE, PASS(me) :: p2 => proc_arg_middle
+ PROCEDURE, PASS(me), NON_OVERRIDABLE :: p3 => proc_arg_last
+ PROCEDURE, NOPASS :: p4 => proc_nome
+ PROCEDURE, NOPASS :: p5 => proc_intf
+ PROCEDURE, NOPASS :: super_overrid => proc_sub_noarg
+
+ ! Bindings that should not succeed
+ PROCEDURE :: e0 => undefined ! { dg-error "has no IMPLICIT|module procedure" }
+ PROCEDURE, PASS :: e1 => proc_noarg ! { dg-error "at least one argument" }
+ PROCEDURE :: e2 => proc_noarg ! { dg-error "at least one argument" }
+ PROCEDURE, PASS(me) :: e3 => proc_nome ! { dg-error "no argument 'me'" }
+ PROCEDURE, PASS(me) :: e4 => proc_mewrong ! { dg-error "Non-polymorphic passed-object dummy argument" }
+ PROCEDURE, PASS :: e5 => proc_mewrong ! { dg-error "Non-polymorphic passed-object dummy argument" }
+ PROCEDURE :: e6 => noproc ! { dg-error "module procedure" }
+ PROCEDURE :: e7 => proc_nointf ! { dg-error "explicit interface" }
+ PROCEDURE, NOPASS :: e8 => proc_abstract_intf ! { dg-error "explicit interface" }
+ PROCEDURE :: super_nonoverrid => proc_arg_first ! { dg-error "NON_OVERRIDABLE" }
+
+ END TYPE t
+
+CONTAINS
+
+ SUBROUTINE proc_arg_first (me, x)
+ IMPLICIT NONE
+ CLASS(t) :: me
+ REAL :: x
+ END SUBROUTINE proc_arg_first
+
+ INTEGER FUNCTION proc_arg_middle (x, me, y)
+ IMPLICIT NONE
+ REAL :: x, y
+ CLASS(t) :: me
+ END FUNCTION proc_arg_middle
+
+ SUBROUTINE proc_arg_last (x, me)
+ IMPLICIT NONE
+ CLASS(t) :: me
+ REAL :: x
+ END SUBROUTINE proc_arg_last
+
+ SUBROUTINE proc_nome (arg, x, y)
+ IMPLICIT NONE
+ TYPE(t) :: arg
+ REAL :: x, y
+ END SUBROUTINE proc_nome
+
+ SUBROUTINE proc_mewrong (me, x)
+ IMPLICIT NONE
+ REAL :: x
+ INTEGER :: me
+ END SUBROUTINE proc_mewrong
+
+ SUBROUTINE proc_sub_noarg ()
+ END SUBROUTINE proc_sub_noarg
+
+END MODULE testmod
+
+PROGRAM main
+ IMPLICIT NONE
+
+ TYPE t
+ CONTAINS
+ PROCEDURE, NOPASS :: proc_no_module ! { dg-error "module procedure" }
+ END TYPE t
+
+CONTAINS
+
+ SUBROUTINE proc_no_module ()
+ END SUBROUTINE proc_no_module
+
+END PROGRAM main
+
+! { dg-final { cleanup-modules "othermod testmod" } }