1 /* { dg-do compile } */
2 
3 /* C99 6.5.10: Bitwise AND operator.
4    C99 6.5.11: Bitwise exclusive OR operator.
5    C99 6.5.12: Bitwise inclusive OR operator.
6 
7    Test that these operators do not accept decimal float operands.  */
8 
9 #define OPERATE(OPRD1,OPRT,OPRD2)		\
10 do						\
11 {						\
12   OPRD1 OPRT OPRD2;				\
13 } while (0)
14 
15 
16 
17 #define DECIMAL_BITWISE_OPERATOR(OPRT,OPRD)	\
18 do						\
19 {						\
20 OPERATE(OPRD,OPRT,1);				\
21 OPERATE(OPRD,OPRT,0);				\
22 OPERATE(OPRD,OPRT,0x15);			\
23 OPERATE(0,OPRT,OPRD);				\
24 OPERATE(1,OPRT,OPRD);				\
25 OPERATE(0x15,OPRT,OPRD);			\
26 } while (0)
27 
operator_notfor_decimal()28 void operator_notfor_decimal()
29 {
30   _Decimal32 d32;
31   _Decimal64 d64;
32   _Decimal128 d128;
33 
34   /* C99 Section 6.5.7 Bitwise shift operators.  Operands must have
35      integer type (which the decimal float types are not).  */
36 
37   d32 << 1;   /* { dg-error "invalid operands to binary" } */
38   d32 >> 1;   /* { dg-error "invalid operands to binary" } */
39   d64 << 1;   /* { dg-error "invalid operands to binary" } */
40   d64 >> 1;   /* { dg-error "invalid operands to binary" } */
41   d128 << 1;  /* { dg-error "invalid operands to binary" } */
42   d128 >> 1;  /* { dg-error "invalid operands to binary" } */
43 
44   DECIMAL_BITWISE_OPERATOR(&,d32); /* { dg-error "invalid operands to binary" } */
45   DECIMAL_BITWISE_OPERATOR(&,d64); /* { dg-error "invalid operands to binary" } */
46   DECIMAL_BITWISE_OPERATOR(&,d128); /* { dg-error "invalid operands to binary" } */
47 
48   /* C99 Section 6.5.{10,11,12} Bitwise operator.  Constraints: Each of
49    the operands shall have integer type.  DFP type is reject by compiler
50    when bitwise operation is performed.  */
51 
52   DECIMAL_BITWISE_OPERATOR(&,d32); /* { dg-error "invalid operands to binary" } */
53   DECIMAL_BITWISE_OPERATOR(&,d64); /* { dg-error "invalid operands to binary" } */
54   DECIMAL_BITWISE_OPERATOR(&,d128); /* { dg-error "invalid operands to binary" } */
55 
56   DECIMAL_BITWISE_OPERATOR(|,d32); /* { dg-error "invalid operands to binary" } */
57   DECIMAL_BITWISE_OPERATOR(|,d64); /* { dg-error "invalid operands to binary" } */
58   DECIMAL_BITWISE_OPERATOR(|,d128); /* { dg-error "invalid operands to binary" } */
59 
60   DECIMAL_BITWISE_OPERATOR(^,d32); /* { dg-error "invalid operands to binary" } */
61   DECIMAL_BITWISE_OPERATOR(^,d64); /* { dg-error "invalid operands to binary" } */
62   DECIMAL_BITWISE_OPERATOR(^,d128); /* { dg-error "invalid operands to binary" } */
63 }
64