mirror of
https://github.com/cc65/cc65.git
synced 2024-12-23 04:30:10 +00:00
Merge pull request #2397 from colinleroy/bug-2395-test
Add test case for issue #2395
This commit is contained in:
commit
a7ac9b7ef2
51
test/todo/bug2395.c
Normal file
51
test/todo/bug2395.c
Normal file
@ -0,0 +1,51 @@
|
||||
|
||||
/* bug #2395: Bitwise operators with a boolean expression fail when optimized */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
unsigned char a, b;
|
||||
unsigned char c = 199;
|
||||
unsigned char d = 100;
|
||||
|
||||
int main(void) {
|
||||
int fails = 0;
|
||||
|
||||
a = c ^ (d != 0);
|
||||
b = c ^ 1;
|
||||
|
||||
printf("%u ^ (%u != 0) => %u\n", c, d, a);
|
||||
if (a != b) {
|
||||
printf("XOR error: a %d instead of %d\n", a, b);
|
||||
fails++;
|
||||
}
|
||||
|
||||
a = c | (d != 0);
|
||||
b = c | 1;
|
||||
|
||||
printf("%u | (%u != 0) => %u\n", c, d, a);
|
||||
if (a != b) {
|
||||
printf("OR error: a %d instead of %d\n", a, b);
|
||||
fails++;
|
||||
}
|
||||
|
||||
a = c & (d != 0);
|
||||
b = c & 1;
|
||||
|
||||
printf("%u & (%u != 0) => %u\n", c, d, a);
|
||||
if (a != b) {
|
||||
printf("AND error: a %d instead of %d\n", a, b);
|
||||
fails++;
|
||||
}
|
||||
printf("%d errors\n", fails);
|
||||
|
||||
#ifdef __OPT__
|
||||
return fails;
|
||||
#else
|
||||
/* Force exit failure on non-optimised version, which works,
|
||||
* otherwise it breaks the build
|
||||
*/
|
||||
return 1;
|
||||
#endif
|
||||
}
|
Loading…
Reference in New Issue
Block a user