From 554fd8c5195424bdbcabf5de30fdc183aba391bd Mon Sep 17 00:00:00 2001 From: upstream source tree Date: Sun, 15 Mar 2015 20:14:05 -0400 Subject: obtained gcc-4.6.4.tar.bz2 from upstream website; 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. --- gcc/testsuite/gcc.dg/builtins-26.c | 105 +++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/builtins-26.c (limited to 'gcc/testsuite/gcc.dg/builtins-26.c') diff --git a/gcc/testsuite/gcc.dg/builtins-26.c b/gcc/testsuite/gcc.dg/builtins-26.c new file mode 100644 index 000000000..c4d03cd7d --- /dev/null +++ b/gcc/testsuite/gcc.dg/builtins-26.c @@ -0,0 +1,105 @@ +/* Copyright (C) 2003 Free Software Foundation. + + Check that constant folding of built-in math functions doesn't + break anything and produces the expected results. + + Written by Roger Sayle, 28th June 2003. */ + +/* { dg-do link } */ +/* { dg-options "-O2 -ffast-math" } */ + +extern void link_error(void); + +extern double trunc(double); +extern double floor(double); +extern double ceil(double); + +extern float truncf(float); +extern float floorf(float); +extern float ceilf(float); + +extern long double truncl(long double); +extern long double floorl(long double); +extern long double ceill(long double); + +void test(double x) +{ + if (trunc (trunc (x)) != trunc (x)) + link_error (); + if (trunc (floor (x)) != floor (x)) + link_error (); + if (trunc (ceil (x)) != ceil (x)) + link_error (); + + if (floor (trunc (x)) != trunc (x)) + link_error (); + if (floor (floor (x)) != floor (x)) + link_error (); + if (floor (ceil (x)) != ceil (x)) + link_error (); + + if (ceil (trunc (x)) != trunc (x)) + link_error (); + if (ceil (floor (x)) != floor (x)) + link_error (); + if (ceil (ceil (x)) != ceil (x)) + link_error (); +} + +void testf(float x) +{ + if (truncf (truncf (x)) != truncf (x)) + link_error (); + if (truncf (floorf (x)) != floorf (x)) + link_error (); + if (truncf (ceilf (x)) != ceilf (x)) + link_error (); + + if (floorf (truncf (x)) != truncf (x)) + link_error (); + if (floorf (floorf (x)) != floorf (x)) + link_error (); + if (floorf (ceilf (x)) != ceilf (x)) + link_error (); + + if (ceilf (truncf (x)) != truncf (x)) + link_error (); + if (ceilf (floorf (x)) != floorf (x)) + link_error (); + if (ceilf (ceilf (x)) != ceilf (x)) + link_error (); +} + +void testl(long double x) +{ + if (truncl (truncl (x)) != truncl (x)) + link_error (); + if (truncl (floorl (x)) != floorl (x)) + link_error (); + if (truncl (ceill (x)) != ceill (x)) + link_error (); + + if (floorl (truncl (x)) != truncl (x)) + link_error (); + if (floorl (floorl (x)) != floorl (x)) + link_error (); + if (floorl (ceill (x)) != ceill (x)) + link_error (); + + if (ceill (truncl (x)) != truncl (x)) + link_error (); + if (ceill (floorl (x)) != floorl (x)) + link_error (); + if (ceill (ceill (x)) != ceill (x)) + link_error (); +} + + +int main() +{ + test (3.2); + testf (3.2f); + testl (3.2l); + return 0; +} + -- cgit v1.2.3