From 189ed82c09bb8bfc5243bd0f60f6bdca4b4daf9a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tobias=20Schl=C3=BCter?= Date: Sat, 18 Jun 2005 13:51:47 +0200 Subject: [PATCH] re PR tree-optimization/22035 (complex float comparison broken) PR tree-opt/22035 * gfortran.dg/f2c_6.f90: New test. From-SVN: r101152 --- gcc/testsuite/ChangeLog | 5 ++ gcc/testsuite/gfortran.dg/f2c_6.f90 | 84 +++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/f2c_6.f90 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 321c87a7348..98b3d23b967 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-06-18 Tobias Schl"uter + + PR tree-opt/22035 + * gfortran.dg/f2c_6.f90: New test. + 2005-06-17 Geoffrey Keating 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 00000000000..b276b3df372 --- /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 -- 2.30.2