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