1/* { dg-do run } */ 2/* { dg-options "-fsanitize=signed-integer-overflow -fno-sanitize-recover=signed-integer-overflow" } */ 3 4#ifndef ASM1 5# define ASM1(a) /* Nothing */ 6#endif 7#ifndef ASM2 8# define ASM2(a, b) /* Nothing */ 9#endif 10 11#define CHECK(A, B) ({ if ((A) != (B)) __builtin_abort (); }) 12 13#define FN1(T1, T2, OP) \ 14 ({ \ 15 T1 a = 14; \ 16 T2 b = 9; \ 17 ASM2 (a, b); \ 18 a OP b; \ 19 }) 20 21#define FN2(T, OP) \ 22 ({ \ 23 T a = 14; \ 24 ASM1 (a); \ 25 a OP 7; \ 26 }) 27 28#define FN3(T1, T2, OP) \ 29 ({ \ 30 T1 a = 4; \ 31 T2 b = 1; \ 32 ASM2 (a, b); \ 33 ~a OP b; \ 34 }) 35 36#define FN4(T1, T2, OP) \ 37 ({ \ 38 T1 a = 4; \ 39 T2 b = 1; \ 40 ASM2 (a, b); \ 41 a OP ~b; \ 42 }) 43 44#define FN5(T) \ 45 ({ \ 46 T a = 77; \ 47 ASM1 (a); \ 48 -a; \ 49 }) 50 51int 52main (void) 53{ 54 CHECK (FN1 (char, char, +), 23); 55 CHECK (FN1 (char, char, -), 5); 56 CHECK (FN1 (char, char, *), 126); 57 CHECK (FN1 (unsigned char, unsigned char, +), 23); 58 CHECK (FN1 (unsigned char, unsigned char, -), 5); 59 CHECK (FN1 (unsigned char, unsigned char, *), 126); 60 CHECK (FN1 (short, short, +), 23); 61 CHECK (FN1 (short, short, -), 5); 62 CHECK (FN1 (short, short, *), 126); 63 CHECK (FN1 (unsigned short, unsigned short, +), 23); 64 CHECK (FN1 (unsigned short, unsigned short, -), 5); 65 CHECK (FN1 (unsigned short, unsigned short, *), 126); 66 CHECK (FN1 (int, int, +), 23); 67 CHECK (FN1 (int, int, -), 5); 68 CHECK (FN1 (int, int, *), 126); 69 CHECK (FN1 (unsigned int, unsigned int, +), 23); 70 CHECK (FN1 (unsigned int, unsigned int, -), 5); 71 CHECK (FN1 (unsigned int, unsigned int, *), 126); 72 CHECK (FN1 (long int, long int, +), 23); 73 CHECK (FN1 (long int, long int, -), 5); 74 CHECK (FN1 (long int, long int, *), 126); 75 CHECK (FN1 (unsigned long int, unsigned long int, +), 23); 76 CHECK (FN1 (unsigned long int, unsigned long int, -), 5); 77 CHECK (FN1 (unsigned long int, unsigned long int, *), 126); 78 CHECK (FN1 (long long int, long int, +), 23); 79 CHECK (FN1 (long long int, long int, -), 5); 80 CHECK (FN1 (long long int, long int, *), 126); 81 CHECK (FN1 (unsigned long long int, unsigned long long int, +), 23); 82 CHECK (FN1 (unsigned long long int, unsigned long long int, -), 5); 83 CHECK (FN1 (unsigned long long int, unsigned long long int, *), 126); 84 CHECK (FN1 (int, unsigned char, +), 23); 85 CHECK (FN1 (int, unsigned char, -), 5); 86 CHECK (FN1 (int, unsigned char, *), 126); 87 CHECK (FN1 (unsigned char, int, +), 23); 88 CHECK (FN1 (unsigned char, int, -), 5); 89 CHECK (FN1 (unsigned char, int, *), 126); 90 CHECK (FN1 (int, long int, +), 23); 91 CHECK (FN1 (int, long int, -), 5); 92 CHECK (FN1 (int, long int, *), 126); 93 CHECK (FN1 (long int, int, +), 23); 94 CHECK (FN1 (long int, int, -), 5); 95 CHECK (FN1 (long int, int, *), 126); 96 CHECK (FN1 (unsigned int, int, +), 23); 97 CHECK (FN1 (unsigned int, int, -), 5); 98 CHECK (FN1 (unsigned int, int, *), 126); 99 CHECK (FN1 (int, unsigned int, +), 23); 100 CHECK (FN1 (int, unsigned int, -), 5); 101 CHECK (FN1 (int, unsigned int, *), 126); 102 CHECK (FN1 (unsigned long int, int, +), 23); 103 CHECK (FN1 (unsigned long int, int, -), 5); 104 CHECK (FN1 (unsigned long int, int, *), 126); 105 CHECK (FN1 (int, unsigned long int, +), 23); 106 CHECK (FN1 (int, unsigned long int, -), 5); 107 CHECK (FN1 (int, unsigned long int, *), 126); 108 109 CHECK (FN2 (char, +), 21); 110 CHECK (FN2 (char, -), 7); 111 CHECK (FN2 (char, *), 98); 112 CHECK (FN2 (unsigned char, +), 21); 113 CHECK (FN2 (unsigned char, -), 7); 114 CHECK (FN2 (unsigned char, *), 98); 115 CHECK (FN2 (short, +), 21); 116 CHECK (FN2 (short, -), 7); 117 CHECK (FN2 (short, *), 98); 118 CHECK (FN2 (unsigned short, +), 21); 119 CHECK (FN2 (unsigned short, -), 7); 120 CHECK (FN2 (unsigned short, *), 98); 121 CHECK (FN2 (int, +), 21); 122 CHECK (FN2 (int, -), 7); 123 CHECK (FN2 (int, *), 98); 124 CHECK (FN2 (unsigned int, +), 21); 125 CHECK (FN2 (unsigned int, -), 7); 126 CHECK (FN2 (unsigned int, *), 98); 127 CHECK (FN2 (long int, +), 21); 128 CHECK (FN2 (long int, -), 7); 129 CHECK (FN2 (long int, *), 98); 130 CHECK (FN2 (unsigned long int, +), 21); 131 CHECK (FN2 (unsigned long int, -), 7); 132 CHECK (FN2 (unsigned long int, *), 98); 133 CHECK (FN2 (long long int, +), 21); 134 CHECK (FN2 (long long int, -), 7); 135 CHECK (FN2 (long long int, *), 98); 136 CHECK (FN2 (unsigned long long int, +), 21); 137 CHECK (FN2 (unsigned long long int, -), 7); 138 CHECK (FN2 (unsigned long long int, *), 98); 139 140 CHECK (FN3 (char, char, +), -4); 141 CHECK (FN3 (char, char, -), -6); 142 CHECK (FN3 (char, char, *), -5); 143 CHECK (FN3 (unsigned char, unsigned char, +), -4); 144 CHECK (FN3 (unsigned char, unsigned char, -), -6); 145 CHECK (FN3 (unsigned char, unsigned char, *), -5); 146 CHECK (FN3 (short, short, +), -4); 147 CHECK (FN3 (short, short, -), -6); 148 CHECK (FN3 (short, short, *), -5); 149 CHECK (FN3 (unsigned short, unsigned short, +), -4); 150 CHECK (FN3 (unsigned short, unsigned short, -), -6); 151 CHECK (FN3 (unsigned short, unsigned short, *), -5); 152 CHECK (FN3 (int, int, +), -4); 153 CHECK (FN3 (int, int, -), -6); 154 CHECK (FN3 (int, int, *), -5); 155 CHECK (FN3 (unsigned int, unsigned int, +), -4); 156 CHECK (FN3 (unsigned int, unsigned int, -), -6); 157 CHECK (FN3 (unsigned int, unsigned int, *), -5); 158 CHECK (FN3 (long int, long int, +), -4); 159 CHECK (FN3 (long int, long int, -), -6); 160 CHECK (FN3 (long int, long int, *), -5); 161 CHECK (FN3 (unsigned long int, unsigned long int, +), -4); 162 CHECK (FN3 (unsigned long int, unsigned long int, -), -6); 163 CHECK (FN3 (unsigned long int, unsigned long int, *), -5); 164 CHECK (FN3 (long long int, long int, +), -4); 165 CHECK (FN3 (long long int, long int, -), -6); 166 CHECK (FN3 (long long int, long int, *), -5); 167 CHECK (FN3 (unsigned long long int, unsigned long long int, +), -4); 168 CHECK (FN3 (unsigned long long int, unsigned long long int, -), -6); 169 CHECK (FN3 (unsigned long long int, unsigned long long int, *), -5); 170 CHECK (FN3 (int, unsigned char, +), -4); 171 CHECK (FN3 (int, unsigned char, -), -6); 172 CHECK (FN3 (int, unsigned char, *), -5); 173 CHECK (FN3 (unsigned char, int, +), -4); 174 CHECK (FN3 (unsigned char, int, -), -6); 175 CHECK (FN3 (unsigned char, int, *), -5); 176 CHECK (FN3 (int, long int, +), -4); 177 CHECK (FN3 (int, long int, -), -6); 178 CHECK (FN3 (int, long int, *), -5); 179 CHECK (FN3 (long int, int, +), -4); 180 CHECK (FN3 (long int, int, -), -6); 181 CHECK (FN3 (long int, int, *), -5); 182 CHECK (FN3 (unsigned int, int, +), -4); 183 CHECK (FN3 (unsigned int, int, -), -6); 184 CHECK (FN3 (unsigned int, int, *), -5); 185 CHECK (FN3 (int, unsigned int, +), -4); 186 CHECK (FN3 (int, unsigned int, -), -6); 187 CHECK (FN3 (int, unsigned int, *), -5); 188 CHECK (FN3 (unsigned long int, int, +), -4); 189 CHECK (FN3 (unsigned long int, int, -), -6); 190 CHECK (FN3 (unsigned long int, int, *), -5); 191 CHECK (FN3 (int, unsigned long int, +), -4); 192 CHECK (FN3 (int, unsigned long int, -), -6); 193 CHECK (FN3 (int, unsigned long int, *), -5); 194 195 CHECK (FN4 (char, char, +), 2); 196 CHECK (FN4 (char, char, -), 6); 197 CHECK (FN4 (char, char, *), -8); 198 CHECK (FN4 (unsigned char, unsigned char, +), 2); 199 CHECK (FN4 (unsigned char, unsigned char, -), 6); 200 CHECK (FN4 (unsigned char, unsigned char, *), -8); 201 CHECK (FN4 (short, short, +), 2); 202 CHECK (FN4 (short, short, -), 6); 203 CHECK (FN4 (short, short, *), -8); 204 CHECK (FN4 (unsigned short, unsigned short, +), 2); 205 CHECK (FN4 (unsigned short, unsigned short, -), 6); 206 CHECK (FN4 (unsigned short, unsigned short, *), -8); 207 CHECK (FN4 (int, int, +), 2); 208 CHECK (FN4 (int, int, -), 6); 209 CHECK (FN4 (int, int, *), -8); 210 CHECK (FN4 (unsigned int, unsigned int, +), 2); 211 CHECK (FN4 (unsigned int, unsigned int, -), 6); 212 CHECK (FN4 (unsigned int, unsigned int, *), -8); 213 CHECK (FN4 (long int, long int, +), 2); 214 CHECK (FN4 (long int, long int, -), 6); 215 CHECK (FN4 (long int, long int, *), -8); 216 CHECK (FN4 (unsigned long int, unsigned long int, +), 2); 217 CHECK (FN4 (unsigned long int, unsigned long int, -), 6); 218 CHECK (FN4 (unsigned long int, unsigned long int, *), -8); 219 CHECK (FN4 (long long int, long int, +), 2); 220 CHECK (FN4 (long long int, long int, -), 6); 221 CHECK (FN4 (long long int, long int, *), -8); 222 CHECK (FN4 (unsigned long long int, unsigned long long int, +), 2); 223 CHECK (FN4 (unsigned long long int, unsigned long long int, -), 6); 224 CHECK (FN4 (unsigned long long int, unsigned long long int, *), -8); 225 CHECK (FN4 (int, unsigned char, +), 2); 226 CHECK (FN4 (int, unsigned char, -), 6); 227 CHECK (FN4 (int, unsigned char, *), -8); 228 CHECK (FN4 (unsigned char, int, +), 2); 229 CHECK (FN4 (unsigned char, int, -), 6); 230 CHECK (FN4 (unsigned char, int, *), -8); 231 CHECK (FN4 (int, long int, +), 2); 232 CHECK (FN4 (int, long int, -), 6); 233 CHECK (FN4 (int, long int, *), -8); 234 CHECK (FN4 (long int, int, +), 2); 235 CHECK (FN4 (long int, int, -), 6); 236 CHECK (FN4 (long int, int, *), -8); 237 CHECK (FN4 (unsigned int, int, +), 2); 238 CHECK (FN4 (unsigned int, int, -), 6); 239 CHECK (FN4 (unsigned int, int, *), -8); 240 CHECK (FN4 (int, unsigned int, +), 2); 241 CHECK (FN4 (int, unsigned int, -), 6); 242 CHECK (FN4 (int, unsigned int, *), -8); 243 CHECK (FN4 (unsigned long int, int, +), 2); 244 CHECK (FN4 (unsigned long int, int, -), 6); 245 CHECK (FN4 (unsigned long int, int, *), -8); 246 CHECK (FN4 (int, unsigned long int, +), 2); 247 CHECK (FN4 (int, unsigned long int, -), 6); 248 CHECK (FN4 (int, unsigned long int, *), -8); 249 250 CHECK (FN5 (char), -77); 251 CHECK (FN5 (unsigned char), -77); 252 CHECK (FN5 (short), -77); 253 CHECK (FN5 (unsigned short), -77); 254 CHECK (FN5 (int), -77); 255 CHECK (FN5 (unsigned int), -77); 256 CHECK (FN5 (long int), -77); 257 CHECK (FN5 (unsigned long int), -77); 258 CHECK (FN5 (long long int), -77); 259 CHECK (FN5 (unsigned long long int), -77); 260 return 0; 261} 262