aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/f2c_6.f9084
2 files changed, 89 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 321c87a..98b3d23 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2005-06-18 Tobias Schl"uter <tobias.schlueter@physik.uni-muenchen.de>
+
+ PR tree-opt/22035
+ * gfortran.dg/f2c_6.f90: New test.
+
2005-06-17 Geoffrey Keating <geoffk@apple.com>
PR c++/17413
diff --git a/gcc/testsuite/gfortran.dg/f2c_6.f90 b/gcc/testsuite/gfortran.dg/f2c_6.f90
new file mode 100644
index 0000000..b276b3d
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/f2c_6.f90
@@ -0,0 +1,84 @@
+! { dg-do run }
+! { dg-options "-ff2c" }
+! Verifies that complex pointer results work with -ff2c
+! try all permutations of result clause in function yes/no
+! and result clause in interface yes/no
+! this is not possible in Fortran 77, but this exercises a previously
+! buggy codepath
+function c() result (r)
+ common // z
+ complex, pointer :: r
+ complex, target :: z
+
+ r=>z
+end function c
+
+function d()
+ common // z
+ complex, pointer :: d
+ complex, target :: z
+
+ d=>z
+end function d
+
+function e()
+ common // z
+ complex, pointer :: e
+ complex, target :: z
+
+ e=>z
+end function e
+
+function f() result(r)
+ common // z
+ complex, pointer :: r
+ complex, target :: z
+
+ r=>z
+end function f
+
+interface
+ function c
+ complex, pointer :: c
+ end function c
+end interface
+interface
+ function d
+ complex, pointer :: d
+ end function d
+end interface
+interface
+ function e result(r)
+ complex, pointer :: r
+ end function e
+end interface
+interface
+ function f result(r)
+ complex, pointer :: r
+ end function f
+end interface
+
+common // z
+complex, target :: z
+complex, pointer :: p
+
+z = (1.,0.)
+p => c()
+z = (2.,0.)
+if (p /= z) call abort ()
+
+NULLIFY(p)
+p => d()
+z = (3.,0.)
+if (p /= z) call abort ()
+
+NULLIFY(p)
+p => e()
+z = (4.,0.)
+if (p /= z) call abort ()
+
+NULLIFY(p)
+p => f()
+z = (5.,0.)
+if (p /= z) call abort ()
+end