/* { dg-do run } */ /* { dg-options "-std=gnu99" } */ /* C99 Logical AND operator. C99 Logical OR operator. Test with fixed-point operands. Based on the test from ../dfp/. */ extern void abort (void); #define OPERATE(OPRD1,OPRT,OPRD2,RLT) \ do \ { \ if (( (OPRD1) OPRT (OPRD2) )!= RLT) \ abort (); \ } while (0) #define FIXED_POINT_LOGICAL(OPRD) \ do \ { \ OPRD = 0.1; \ OPERATE(1,||,OPRD,1); \ OPERATE(0,||,OPRD,1); \ OPERATE(OPRD,||,1,1); \ OPERATE(OPRD,||,0,1); \ OPRD = 0; \ OPERATE(1,||,OPRD,1); \ OPERATE(0,||,OPRD,0); \ OPERATE(OPRD,||,1,1); \ OPERATE(OPRD,||,0,0); \ OPRD = 0.1; \ OPERATE(1,&&,OPRD,1); \ OPERATE(0,&&,OPRD,0); \ OPERATE(OPRD,&&,1,1); \ OPERATE(OPRD,&&,0,0); \ OPRD = 0; \ OPERATE(1,&&,OPRD,0); \ OPERATE(0,&&,OPRD,0); \ OPERATE(OPRD,&&,1,0); \ OPERATE(OPRD,&&,0,0); \ } while (0) int main () { short _Fract sf; _Fract f; long _Fract lf; long long _Fract llf; unsigned short _Fract usf; unsigned _Fract uf; unsigned long _Fract ulf; unsigned long long _Fract ullf; _Sat short _Fract Ssf; _Sat _Fract Sf; _Sat long _Fract Slf; _Sat long long _Fract Sllf; _Sat unsigned short _Fract Susf; _Sat unsigned _Fract Suf; _Sat unsigned long _Fract Sulf; _Sat unsigned long long _Fract Sullf; short _Accum sa; _Accum a; long _Accum la; long long _Accum lla; unsigned short _Accum usa; unsigned _Accum ua; unsigned long _Accum ula; unsigned long long _Accum ulla; _Sat short _Accum Ssa; _Sat _Accum Sa; _Sat long _Accum Sla; _Sat long long _Accum Slla; _Sat unsigned short _Accum Susa; _Sat unsigned _Accum Sua; _Sat unsigned long _Accum Sula; _Sat unsigned long long _Accum Sulla; /* C99 Section 6.5.{13,14} Logical operator. Constraints Each of the operands shall have scalar type. Fixed-point types would obey this. */ FIXED_POINT_LOGICAL (sf); FIXED_POINT_LOGICAL (f); FIXED_POINT_LOGICAL (lf); FIXED_POINT_LOGICAL (llf); FIXED_POINT_LOGICAL (usf); FIXED_POINT_LOGICAL (uf); FIXED_POINT_LOGICAL (ulf); FIXED_POINT_LOGICAL (ullf); FIXED_POINT_LOGICAL (Ssf); FIXED_POINT_LOGICAL (Sf); FIXED_POINT_LOGICAL (Slf); FIXED_POINT_LOGICAL (Sllf); FIXED_POINT_LOGICAL (Susf); FIXED_POINT_LOGICAL (Suf); FIXED_POINT_LOGICAL (Sulf); FIXED_POINT_LOGICAL (Sullf); FIXED_POINT_LOGICAL (sa); FIXED_POINT_LOGICAL (a); FIXED_POINT_LOGICAL (la); FIXED_POINT_LOGICAL (lla); FIXED_POINT_LOGICAL (usa); FIXED_POINT_LOGICAL (ua); FIXED_POINT_LOGICAL (ula); FIXED_POINT_LOGICAL (ulla); FIXED_POINT_LOGICAL (Ssa); FIXED_POINT_LOGICAL (Sa); FIXED_POINT_LOGICAL (Sla); FIXED_POINT_LOGICAL (Slla); FIXED_POINT_LOGICAL (Susa); FIXED_POINT_LOGICAL (Sua); FIXED_POINT_LOGICAL (Sula); FIXED_POINT_LOGICAL (Sulla); return 0; }