as 'char' is unsigned on some architectures, so the tests weren't testing what they were supposed to.
Unified · Split
| @@ -1216,7 +1216,7 @@ static void *_csf = __csf; · 1215 unmodified lines | ||
| 1216 | 1216 | void char_short_test() |
| 1217 | 1217 | { |
| 1218 | 1218 | int var1, var2; |
| 1219 | − char var3; | |
| 1219 | + signed char var3; | |
| 1220 | 1220 | long long var4; |
| 1221 | 1221 | |
| 1222 | 1222 | printf("char_short:\n"); |
| @@ -1224,7 +1224,7 @@ void char_short_test() · 1 unmodified line | ||
| 1224 | 1224 | var1 = 0x01020304; |
| 1225 | 1225 | var2 = 0xfffefdfc; |
| 1226 | 1226 | printf("s8=%d %d\n", |
| 1227 | − *(char *)&var1, *(char *)&var2); | |
| 1227 | + *(signed char *)&var1, *(signed char *)&var2); | |
| 1228 | 1228 | printf("u8=%d %d\n", |
| 1229 | 1229 | *(unsigned char *)&var1, *(unsigned char *)&var2); |
| 1230 | 1230 | printf("s16=%d %d\n", |
| @@ -1235,7 +1235,7 @@ void char_short_test() · 4 unmodified lines | ||
| 1235 | 1235 | *(int *)&var1, *(int *)&var2); |
| 1236 | 1236 | printf("u32=%d %d\n", |
| 1237 | 1237 | *(unsigned int *)&var1, *(unsigned int *)&var2); |
| 1238 | − *(char *)&var1 = 0x08; | |
| 1238 | + *(signed char *)&var1 = 0x08; | |
| 1239 | 1239 | printf("var1=%x\n", var1); |
| 1240 | 1240 | *(short *)&var1 = 0x0809; |
| 1241 | 1241 | printf("var1=%x\n", var1); |
| @@ -1250,7 +1250,7 @@ void char_short_test() · 8 unmodified lines | ||
| 1250 | 1250 | var1 = 0x778899aa; |
| 1251 | 1251 | var4 = 0x11223344aa998877ULL; |
| 1252 | 1252 | printf("promote char/short assign VA %d %d\n", var3 = var1 + 1, var3 = var4 + 1); |
| 1253 | − printf("promote char/short cast VA %d %d\n", (char)(var1 + 1), (char)(var4 + 1)); | |
| 1253 | + printf("promote char/short cast VA %d %d\n", (signed char)(var1 + 1), (signed char)(var4 + 1)); | |
| 1254 | 1254 | #if !defined(__arm__) |
| 1255 | 1255 | /* We can't really express GCC behaviour of return type promotion in |
| 1256 | 1256 | the presence of undefined behaviour (like __csf is). */ |
| @@ -1264,14 +1264,14 @@ void char_short_test() · 7 unmodified lines | ||
| 1264 | 1264 | csf(_Bool,0x33221101)); |
| 1265 | 1265 | #endif |
| 1266 | 1266 | var3 = -10; |
| 1267 | − var1 = (char)(unsigned char)(var3 + 1); | |
| 1268 | − var4 = (char)(unsigned char)(var3 + 1); | |
| 1267 | + var1 = (signed char)(unsigned char)(var3 + 1); | |
| 1268 | + var4 = (signed char)(unsigned char)(var3 + 1); | |
| 1269 | 1269 | printf("promote multicast (char)(unsigned char) %d "LONG_LONG_FORMAT"\n", var1, var4); |
| 1270 | 1270 | var4 = 0x11223344aa998877ULL; |
| 1271 | 1271 | var4 = (unsigned)(int)(var4 + 1); |
| 1272 | 1272 | printf("promote multicast (unsigned)(int) "LONG_LONG_FORMAT"\n", var4); |
| 1273 | 1273 | var4 = 0x11223344bbaa9988ULL; |
| 1274 | − var4 = (unsigned)(char)(var4 + 1); | |
| 1274 | + var4 = (unsigned)(signed char)(var4 + 1); | |
| 1275 | 1275 | printf("promote multicast (unsigned)(char) "LONG_LONG_FORMAT"\n", var4); |
| 1276 | 1276 | } |
| 1277 | 1277 | |