1 /* Preprocessor arithmetic semantic tests. */ 2 3 /* Copyright (C) 2002 Free Software Foundation, Inc. */ 4 /* Source: Neil Booth, 25 May 2002. */ 5 6 /* The file tests all aspects of preprocessor arithmetic that are 7 independent of target precision. */ 8 9 /* { dg-do preprocess } */ 10 /* { dg-options "" } */ 11 12 /* Test || operator and its short circuiting. */ 13 #if 0 || 0 14 # error /* { dg-bogus "error" } */ 15 #endif 16 17 #if 5 || 0 18 #else 19 # error /* { dg-bogus "error" } */ 20 #endif 21 22 #if 0 || 1 23 #else 24 # error /* { dg-bogus "error" } */ 25 #endif 26 27 #if 1 || 4 28 #else 29 # error /* { dg-bogus "error" } */ 30 #endif 31 32 #if 1 || (8 / 0) /* { dg-bogus "division by zero" } */ 33 #else 34 # error /* { dg-bogus "error" } */ 35 #endif 36 37 #if 1 || (1 << 256) /* { dg-bogus "overflow" } */ 38 #endif 39 40 /* Test && operator and its short circuiting. */ 41 #if (0 && 0) || (0 && 1) || (1 && 0) 42 # error /* { dg-bogus "error" } */ 43 #endif 44 45 #if 1 && 2 46 #else 47 # error /* { dg-bogus "error" } */ 48 #endif 49 50 #if 0 && (8 / 0)/* { dg-bogus "division by zero" } */ 51 # error /* { dg-bogus "error" } */ 52 #endif 53 54 #if 0 && (1 << 256) /* { dg-bogus "overflow" } */ 55 #endif 56 57 /* Test == and != operators, and their signedness. */ 58 #if 1 == 0 || 0 == 1 || 20 != 0x014 || 142 != 0216 59 # error /* { dg-bogus "error" } */ 60 #endif 61 62 #if (1 == 1) - 2 > 0 || (1U != 1U) - 2 > 0 63 # error /* { dg-bogus "error" } */ 64 #endif 65 66 /* Test ? : operator, its short circuiting, and its signedness. */ 67 #if (1 ? 3: 5) != 3 || (0 ? 3: 5) != 5 68 # error /* { dg-bogus "error" } */ 69 #endif 70 71 #if 1 ? 0: 1 / 0 /* { dg-bogus "division by zero" } */ 72 # error /* { dg-bogus "error" } */ 73 #endif 74 75 #if 0 ? 1 / 0: 0 /* { dg-bogus "division by zero" } */ 76 # error /* { dg-bogus "error" } */ 77 #endif 78 79 #if 0 ? (1 << 256): 0 /* { dg-bogus "overflow" } */ 80 #endif 81 82 #if 1 ? 0: (1 << 256) /* { dg-bogus "overflow" } */ 83 #endif 84 85 /* Test unary + and its signedness. */ 86 87 #if 23 != +23 || 23 != + +23 88 # error /* { dg-bogus "error" } */ 89 #endif 90 91 #if (+1 - 2) > 0 || (+1U - 2) < 0 92 # error /* { dg-bogus "error" } */ 93 #endif 94 95 /* Test unary - and its signedness. */ 96 97 #if -1 + 1 != 0 98 # error /* { dg-bogus "error" } */ 99 #endif 100 101 #if -1 >= 0 || -1U <= 0 102 # error /* { dg-bogus "error" } */ 103 #endif 104 105 /* Test unary ! and its signedness. */ 106 #if !5 != 0 || !1 != 0 || !0 != 1 107 # error /* { dg-bogus "error" } */ 108 #endif 109 110 #if !5 - 1 > 0 || !5U - 1 > 0 111 # error /* { dg-bogus "error" } */ 112 #endif 113 114 /* Test unary ~ and its signedness. */ 115 #if ~0 != -1 || ~~5 != 5 || ~-2 != 1 116 # error /* { dg-bogus "error" } */ 117 #endif 118 119 #if ~5 > 0 || ~5U < 0 120 # error /* { dg-bogus "error" } */ 121 #endif 122 123 /* Test comparison operators and their signedness. */ 124 #if 1 >= 1 && 2 >= 1 && -1 >= -1 && -1 >= -2 && 1 >= -1 && 1 >= -2 \ 125 && !(-2 >= -1) && !(2 >= 3) && -1U >= 2 && !(-1 >= 1) 126 #else 127 # error /* { dg-bogus "error" } */ 128 #endif 129 130 #if ((1 > 0) - 2) > 0 || ((1U > 0) - 2) > 0 131 # error /* { dg-bogus "error" } */ 132 #endif 133 134 #if !(1 > 1) && 2 > 1 && !(-1 > -1) && -1 > -2 && 1 > -1 && 1 > -2 \ 135 && !(-2 > -1) && !(2 > 3) && -1U > 2 && !(-1 > 1) 136 #else 137 # error /* { dg-bogus "error" } */ 138 #endif 139 140 #if ((1 >= 0) - 2) > 0 || ((1U >= 0) - 2) > 0 141 # error /* { dg-bogus "error" } */ 142 #endif 143 144 #if 1 <= 1 && !(2 <= 1) && -1 <= -1 && !(-1 <= -2) && !(1 <= -1) && !(1 <= -2) \ 145 && -2 <= -1 && 2 <= 3 && !(-1U <= 2) && -1 <= 1 146 #else 147 # error /* { dg-bogus "error" } */ 148 #endif 149 150 #if ((1 <= 0) - 2) > 0 || ((1U <= 0) - 2) > 0 151 # error /* { dg-bogus "error" } */ 152 #endif 153 154 #if !(1 < 1) && !(2 < 1) && !(-1 < -1) && !(-1 < -2) && !(1 < -1) && !(1 < -2) \ 155 && -2 < -1 && 2 < 3 && !(-1U < 2) && -1 < 1 156 #else 157 # error /* { dg-bogus "error" } */ 158 #endif 159 160 #if ((1 < 0) - 2) > 0 || ((1U < 0) - 2) > 0 161 # error /* { dg-bogus "error" } */ 162 #endif 163 164 /* Test bitwise operators and their signedness. */ 165 #if (3 & 7) != 3 || (-1 & 34) != 34 166 # error /* { dg-bogus "error" } */ 167 #endif 168 169 #if (3 & 7) - 20 > 0 || (3 & 7U) - 20 < 0 170 # error /* { dg-bogus "error" } */ 171 #endif 172 173 #if (3 | 5) != 7 || (-1 | 34) != -1 174 # error /* { dg-bogus "error" } */ 175 #endif 176 177 #if (3 | 7) - 20 > 0 || (3 | 7U) - 20 < 0 178 # error /* { dg-bogus "error" } */ 179 #endif 180 181 #if (7 ^ 5) != 2 || (-1 ^ 34) != ~34 182 # error /* { dg-bogus "error" } */ 183 #endif 184 185 #if (3 ^ 7) - 20 > 0 || (3 ^ 7U) - 20 < 0 186 # error /* { dg-bogus "error" } */ 187 #endif 188 189 /* Test shifts and their signedness. */ 190 #if 3 << 2 != 12 || 3 << -2 != 0 || -1 << 1 != -2 191 # error /* { dg-bogus "error" } */ 192 #endif 193 194 #if 5 >> 1 != 2 || 5 >> -2 != 20 || -5 >> 1 != -3 195 # error /* { dg-bogus "error" } */ 196 #endif 197 198 #if (5 >> 2) - 2 >= 0 || (5U >> 2) - 2 <= 0 199 # error /* { dg-bogus "error" } */ 200 #endif 201 202 #if (5 << 1) - 20 >= 0 || (5U << 1) - 20 <= 0 203 # error /* { dg-bogus "error" } */ 204 #endif 205 206 #if 0 207 /* Test min / max and their signedness. */ 208 #if (3 >? 2) != 3 || (-3 >? -2) != -2 209 # error /* { dg-bogus "error" } */ 210 #endif 211 212 #if (3 <? 2) != 2 || (-3 <? -2) != -3 213 # error /* { dg-bogus "error" } */ 214 #endif 215 216 #if (3 >? 2) - 4 >= 0 || (3 >? 2U) - 4 <= 0 217 # error /* { dg-bogus "error" } */ 218 #endif 219 220 #if (3 <? 2) - 4 >= 0 || (3 <? 2U) - 4 <= 0 221 # error /* { dg-bogus "error" } */ 222 #endif 223 #endif 224 225 /* Test *, / and % and their signedness. */ 226 #if 3 * 2 != 6 || 3 * -2 != -6 || -2 * 3 != -6 || -2 * -3 != 6 227 # error /* { dg-bogus "error" } */ 228 #endif 229 230 #if 3 * 2 - 7 >= 0 || 3 * 2U - 7 < 0 231 # error /* { dg-bogus "error" } */ 232 #endif 233 234 #if 5 / 2 != 2 || -325 / 50 != -6 || 53 / -4 != -13 || -55 / -12 != 4 235 # error /* { dg-bogus "error" } */ 236 #endif 237 238 #if 3 / 2 - 7 >= 0 || 3 / 2U - 7 < 0 239 # error /* { dg-bogus "error" } */ 240 #endif 241 242 #if 5 % 2 != 1 || -325 % 50 != -25 || 53 % -4 != 1 || -55 % -12 != -7 243 # error /* { dg-bogus "error" } */ 244 #endif 245 246 #if 3 % 2 - 7 >= 0 || 3U % 2 - 7 < 0 247 # error /* { dg-bogus "error" } */ 248 #endif 249 250 /* Test , and its signedness. */ 251 #if (1, 2) != 2 || (2, 1) != 1 252 # error /* { dg-bogus "error" } */ 253 #endif 254 255 #if (1, 2) - 3 >= 0 || (1, 2U) - 3 <= 0 || (1U, 2) - 3 >= 0 256 # error /* { dg-bogus "error" } */ 257 #endif 258