libcpp, c, middle-end: Optimize initializers using #embed in C
[official-gcc.git] / gcc / testsuite / gcc.dg / torture / builtin-sqrt-cmp-1.c
blob3f4a708405616abd836c843693683e3c86a34830
1 /* { dg-do link } */
2 /* { dg-options "-ffast-math" } */
3 /* { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
5 extern double sqrt (double);
6 extern float sqrtf (float);
7 extern long double sqrtl (long double);
9 /* All references to link_error should go away at compile-time. */
10 extern void link_error (void);
12 #define TEST_ONE(SUFFIX, TYPE) \
13 void __attribute__ ((noinline, noclone)) \
14 test##SUFFIX (TYPE f, int *res) \
15 { \
16 TYPE sqrt_res = sqrt##SUFFIX (f); \
17 res[0] = sqrt_res < 0; \
18 if (res[0]) \
19 link_error (); \
20 res[1] = sqrt_res <= 0; \
21 if (res[1] != (f == 0)) \
22 link_error (); \
23 res[2] = (sqrt_res == 0); \
24 if (res[2] != (f == 0)) \
25 link_error (); \
26 res[3] = (sqrt_res != 0); \
27 if (res[3] != (f != 0)) \
28 link_error (); \
29 res[4] = (sqrt_res > 0); \
30 if (res[4] != (f > 0)) \
31 link_error (); \
32 res[5] = (sqrt_res >= 0); \
33 if (!res[5]) \
34 link_error (); \
37 volatile float f;
38 volatile double d;
39 volatile long double ld;
41 TEST_ONE (f, float)
42 TEST_ONE (, double)
43 TEST_ONE (l, long double)
45 int
46 main ()
48 int res[6];
49 testf (f, res);
50 test (d, res);
51 testl (ld, res);
52 return 0;