/* 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" } */ 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() { if (trunc (0.0) != 0.0) link_error (); if (floor (0.0) != 0.0) link_error (); if (ceil (0.0) != 0.0) link_error (); if (trunc (6.0) != 6.0) link_error (); if (floor (6.0) != 6.0) link_error (); if (ceil (6.0) != 6.0) link_error (); if (trunc (-8.0) != -8.0) link_error (); if (floor (-8.0) != -8.0) link_error (); if (ceil (-8.0) != -8.0) link_error (); if (trunc (3.2) != 3.0) link_error (); if (floor (3.2) != 3.0) link_error (); if (ceil (3.2) != 4.0) link_error (); if (trunc (-2.8) != -2.0) link_error (); if (floor (-2.8) != -3.0) link_error (); if (ceil (-2.8) != -2.0) link_error (); if (trunc (0.01) != 0.0) link_error (); if (floor (0.01) != 0.0) link_error (); if (ceil (0.01) != 1.0) link_error (); if (trunc (-0.7) != 0.0) link_error (); if (floor (-0.7) != -1.0) link_error (); if (ceil (-0.7) != 0.0) link_error (); } void testf() { if (truncf (0.0f) != 0.0f) link_error (); if (floorf (0.0f) != 0.0f) link_error (); if (ceilf (0.0f) != 0.0f) link_error (); if (truncf (6.0f) != 6.0f) link_error (); if (floorf (6.0f) != 6.0f) link_error (); if (ceilf (6.0f) != 6.0f) link_error (); if (truncf (-8.0f) != -8.0f) link_error (); if (floorf (-8.0f) != -8.0f) link_error (); if (ceilf (-8.0f) != -8.0f) link_error (); if (truncf (3.2f) != 3.0f) link_error (); if (floorf (3.2f) != 3.0f) link_error (); if (ceilf (3.2f) != 4.0f) link_error (); if (truncf (-2.8f) != -2.0f) link_error (); if (floorf (-2.8f) != -3.0f) link_error (); if (ceilf (-2.8f) != -2.0f) link_error (); if (truncf (0.01f) != 0.0f) link_error (); if (floorf (0.01f) != 0.0f) link_error (); if (ceilf (0.01f) != 1.0f) link_error (); if (truncf (-0.7f) != 0.0f) link_error (); if (floorf (-0.7f) != -1.0f) link_error (); if (ceilf (-0.7f) != 0.0f) link_error (); } void testl() { if (truncl (0.0l) != 0.0l) link_error (); if (floorl (0.0l) != 0.0l) link_error (); if (ceill (0.0l) != 0.0l) link_error (); if (truncl (6.0l) != 6.0l) link_error (); if (floorl (6.0l) != 6.0l) link_error (); if (ceill (6.0l) != 6.0l) link_error (); if (truncl (-8.0l) != -8.0l) link_error (); if (floorl (-8.0l) != -8.0l) link_error (); if (ceill (-8.0l) != -8.0l) link_error (); if (truncl (3.2l) != 3.0l) link_error (); if (floorl (3.2l) != 3.0l) link_error (); if (ceill (3.2l) != 4.0l) link_error (); if (truncl (-2.8l) != -2.0l) link_error (); if (floorl (-2.8l) != -3.0l) link_error (); if (ceill (-2.8l) != -2.0l) link_error (); if (truncl (0.01l) != 0.0l) link_error (); if (floorl (0.01l) != 0.0l) link_error (); if (ceill (0.01l) != 1.0l) link_error (); if (truncl (-0.7l) != 0.0l) link_error (); if (floorl (-0.7l) != -1.0l) link_error (); if (ceill (-0.7l) != 0.0l) link_error (); } int main() { test (); testf (); testl (); return 0; }