1 /* { dg-do compile } */ 2 /* { dg-options "-std=gnu99" } */ 3 4 /* N1169 6.5.7 - Bitwise shift operands. 5 C99 6.5.3 Unary operators. 6 C99 6.5.5 Multiplicative operators. 7 C99 6.5.6 Additive operators. 8 C99 6.5.7 Bitwise shift operators. 9 C99 6.5.8 Relational operators. 10 C99 6.5.9 Equality operators. 11 C99 6.5.16 Assignment operators. 12 13 Check if all operations are ok. */ 14 15 void true(); 16 void false(); 17 18 #define ALLOP(TYPE,NAME) \ 19 TYPE test1 ## NAME (TYPE a) { return +a; } \ 20 TYPE test2 ## NAME (TYPE a) { return -a; } \ 21 int test3 ## NAME (TYPE a) { return !a; } \ 22 TYPE test4 ## NAME (TYPE a, TYPE b) { return a + b; } \ 23 TYPE test5 ## NAME (TYPE a, TYPE b) { return a - b; } \ 24 TYPE test6 ## NAME (TYPE a, TYPE b) { return a * b; } \ 25 TYPE test7 ## NAME (TYPE a, TYPE b) { return a / b; } \ 26 TYPE test8 ## NAME (TYPE a, TYPE b) { a += b; return a; } \ 27 TYPE test9 ## NAME (TYPE a, TYPE b) { a -= b; return a; } \ 28 TYPE test10 ## NAME (TYPE a, TYPE b) { a *= b; return a; } \ 29 TYPE test11 ## NAME (TYPE a, TYPE b) { a /= b; return a; } \ 30 TYPE test12 ## NAME (TYPE a, int b) { return a << b; } \ 31 TYPE test13 ## NAME (TYPE a, int b) { return a >> b; } \ 32 TYPE test14 ## NAME (TYPE a, int b) { a <<= b; return a; } \ 33 TYPE test15 ## NAME (TYPE a, int b) { a >>= b; return a; } \ 34 int test16 ## NAME (TYPE a, TYPE b) { return a == b; } \ 35 int test17 ## NAME (TYPE a, TYPE b) { return a != b; } \ 36 int test18 ## NAME (TYPE a, TYPE b) { return a < b; } \ 37 int test19 ## NAME (TYPE a, TYPE b) { return a <= b; } \ 38 int test20 ## NAME (TYPE a, TYPE b) { return a >= b; } \ 39 int test21 ## NAME (TYPE a, TYPE b) { return a > b; } \ 40 void test22 ## NAME (TYPE a, TYPE b) { if(a == b)true(); else false(); } \ 41 void test23 ## NAME (TYPE a, TYPE b) { if(a != b)true(); else false(); } \ 42 void test24 ## NAME (TYPE a, TYPE b) { if(a < b)true(); else false(); } \ 43 void test25 ## NAME (TYPE a, TYPE b) { if(a <= b)true(); else false(); } \ 44 void test26 ## NAME (TYPE a, TYPE b) { if(a >= b)true(); else false(); } \ 45 void test27 ## NAME (TYPE a, TYPE b) { if(a > b)true(); else false(); } \ 46 TYPE test28 ## NAME (TYPE a) { return ++a; } \ 47 TYPE test29 ## NAME (TYPE a) { return --a; } \ 48 TYPE test30 ## NAME (TYPE *a) { return ++(*a); } \ 49 TYPE test31 ## NAME (TYPE *a) { return (*a)++; } \ 50 TYPE test32 ## NAME (TYPE *a) { return --(*a); } \ 51 TYPE test33 ## NAME (TYPE *a) { return (*a)--; } 52 53 ALLOP(short _Fract, sf); 54 ALLOP(_Fract, f); 55 ALLOP(long _Fract, lf); 56 ALLOP(long long _Fract, llf); 57 ALLOP(short _Accum, sa); 58 ALLOP(_Accum, a); 59 ALLOP(long _Accum, la); 60 ALLOP(long long _Accum, lla); 61 62 ALLOP(unsigned short _Fract, usf); 63 ALLOP(unsigned _Fract, uf); 64 ALLOP(unsigned long _Fract, ulf); 65 ALLOP(unsigned long long _Fract, ullf); 66 ALLOP(unsigned short _Accum, usa); 67 ALLOP(unsigned _Accum, ua); 68 ALLOP(unsigned long _Accum, ula); 69 ALLOP(unsigned long long _Accum, ulla); 70 71 ALLOP(_Sat short _Fract, Ssf); 72 ALLOP(_Sat _Fract, Sf); 73 ALLOP(_Sat long _Fract, Slf); 74 ALLOP(_Sat long long _Fract, Sllf); 75 ALLOP(_Sat short _Accum, Ssa); 76 ALLOP(_Sat _Accum, Sa); 77 ALLOP(_Sat long _Accum, Sla); 78 ALLOP(_Sat long long _Accum, Slla); 79 80 ALLOP(_Sat unsigned short _Fract, Susf); 81 ALLOP(_Sat unsigned _Fract, Suf); 82 ALLOP(_Sat unsigned long _Fract, Sulf); 83 ALLOP(_Sat unsigned long long _Fract, Sullf); 84 ALLOP(_Sat unsigned short _Accum, Susa); 85 ALLOP(_Sat unsigned _Accum, Sua); 86 ALLOP(_Sat unsigned long _Accum, Sula); 87 ALLOP(_Sat unsigned long long _Accum, Sulla); 88