From 0ec05c678aa9082367c66b88f20cdc7e48ff9b83 Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Tue, 10 Jan 2012 00:23:26 +0100 Subject: [PATCH] re PR fortran/46328 ([OOP] type-bound operator call with non-trivial polymorphic operand) 2012-01-09 Tobias Burnus PR fortran/46328 * gfortran.dg/typebound_operator_11.f90: New. From-SVN: r183039 --- gcc/testsuite/ChangeLog | 7 +++- .../gfortran.dg/typebound_operator_11.f90 | 42 +++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/typebound_operator_11.f90 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e9976b90e7fe..d360a7ffcd7e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-01-09 Tobias Burnus + + PR fortran/46328 + * gfortran.dg/typebound_operator_11.f90: New. + 2012-01-09 Eric Botcazou * gnat.dg/array18.adb: New test. @@ -12,7 +17,7 @@ 2012-01-09 Martin Jambor - PR tree-optimization/51759 + PR tree-optimization/51759 * g++.dg/ipa/pr51759.C: New test. 2012-01-09 Tobias Burnus diff --git a/gcc/testsuite/gfortran.dg/typebound_operator_11.f90 b/gcc/testsuite/gfortran.dg/typebound_operator_11.f90 new file mode 100644 index 000000000000..1f5c19530d84 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/typebound_operator_11.f90 @@ -0,0 +1,42 @@ +! { dg-do compile } +! +! PR fortran/46328 +! +! Contributed by Damian Rouson +! +module foo_module + type ,abstract :: foo + contains + procedure(t_interface) ,deferred :: t + procedure(assign_interface) ,deferred :: assign + procedure(multiply_interface) ,deferred :: multiply + generic :: operator(*) => multiply + generic :: assignment(=) => assign + end type + abstract interface + function t_interface(this) + import :: foo + class(foo) :: this + class(foo), allocatable ::t_interface + end function + function multiply_interface(lhs,rhs) + import :: foo + class(foo), allocatable :: multiply_interface + class(foo), intent(in) :: lhs + real, intent(in) :: rhs + end function + subroutine assign_interface(lhs,rhs) + import :: foo + class(foo), intent(in) :: rhs + class(foo), intent(inout) :: lhs + end subroutine + end interface +contains + subroutine bar(x,dt) + class(foo) :: x + real, intent(in) :: dt + x = x%t()*dt + end subroutine +end module + +! { dg-final { cleanup-modules "foo_module" } }