summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/g77/20010216-1.f
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/g77/20010216-1.f
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/g77/20010216-1.f')
-rw-r--r--gcc/testsuite/gfortran.dg/g77/20010216-1.f52
1 files changed, 52 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/g77/20010216-1.f b/gcc/testsuite/gfortran.dg/g77/20010216-1.f
new file mode 100644
index 000000000..004d1d383
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/g77/20010216-1.f
@@ -0,0 +1,52 @@
+C Test for bug in reg-stack handling conditional moves.
+C Reported by Tim Prince <tprince@computer.org>
+C
+C { dg-do run { target { { i[6789]86-*-* x86_64-*-* } && ilp32 } } }
+C { dg-options "-ffast-math -march=pentiumpro" }
+
+ double precision function foo(x, y)
+ implicit none
+ double precision x, y
+ double precision a, b, c, d
+ if (x /= y) then
+ if (x * y >= 0) then
+ a = abs(x)
+ b = abs(y)
+ c = max(a, b)
+ d = min(a, b)
+ foo = 1 - d/c
+ else
+ foo = 1
+ end if
+ else
+ foo = 0
+ end if
+ end
+
+ program test
+ implicit none
+
+ integer ntests
+ parameter (ntests=7)
+ double precision tolerance
+ parameter (tolerance=1.0D-6)
+
+C Each column is a pair of values to feed to foo,
+C and its expected return value.
+ double precision a(ntests), b(ntests), x(ntests)
+ data a /1, -23, -1, 1, 9, 10, -9/
+ data b /1, -23, 12, -12, 10, 9, -10/
+ data x /0, 0, 1, 1, 0.1, 0.1, 0.1/
+
+ double precision foo
+ double precision result
+ integer i
+
+ do i = 1, ntests
+ result = foo(a(i), b(i))
+ if (abs(result - x(i)) > tolerance) then
+ print *, i, a(i), b(i), x(i), result
+ call abort
+ end if
+ end do
+ end