Merge from mainline
[official-gcc.git] / gcc / testsuite / gcc.dg / dfp / operator-unary.c
blobbcf50683c0ce9f543e0b4905b616190e7d2b442b
1 /* { dg-options "-std=gnu99" } */
3 /* C99 6.5.3 Unary operators. */
5 extern void abort (void);
7 #define AUTO_INCREASE_DECREASE(TYPE,SUFFIX) \
8 do \
9 { \
10 _Decimal##TYPE in_de_d##TYPE = 0.0##SUFFIX; \
11 if (in_de_d##TYPE++) abort (); \
12 if (--in_de_d##TYPE) abort (); \
13 if (++in_de_d##TYPE == 0.0##SUFFIX) abort (); \
14 if (in_de_d##TYPE-- == 0.0##SUFFIX) abort (); \
15 } while(0)
17 #define UNARY_OPERATOR(TYPE,SUFFIX) \
18 do \
19 { \
20 _Decimal##TYPE unary_d##TYPE = 1.0##SUFFIX; \
21 _Decimal##TYPE* unary_dp##TYPE; \
22 /* & operator. */ \
23 unary_dp##TYPE = &(unary_d##TYPE); \
24 /* * operator. */ \
25 unary_d##TYPE = *(unary_dp##TYPE); \
26 /* - operator. */ \
27 unary_d##TYPE = -unary_d##TYPE; \
28 if (unary_d##TYPE != -1.0##SUFFIX) abort (); \
29 /* + operator. */ \
30 unary_d##TYPE = +unary_d##TYPE; \
31 if (unary_d##TYPE != -1.0##SUFFIX) abort (); \
32 if (!unary_d##TYPE) abort (); /*! operator. */ \
33 } while (0)
35 int
36 main ()
38 /* C99 6.5.3.1 Prefix increment and decrement operators. */
39 AUTO_INCREASE_DECREASE(32, DF);
40 AUTO_INCREASE_DECREASE(64, DD);
41 AUTO_INCREASE_DECREASE(128, DL);
43 /* C99 6.5.3 Unary operators. */
44 UNARY_OPERATOR(32, DF);
45 UNARY_OPERATOR(64, DD);
46 UNARY_OPERATOR(128, DL);
48 /* C99 6.5.3 Unary operators for zero values. */
49 if (- +0.df != -0.df) abort ();
50 if (+ -0.df != -0.df) abort ();
51 if (- -0.df != +0.df) abort ();
53 return 0;