diff --git a/test/todo/bug2395.c b/test/todo/bug2395.c new file mode 100644 index 0000000000..36c196f6d1 --- /dev/null +++ b/test/todo/bug2395.c @@ -0,0 +1,55 @@ + +/* bug #927: format specifiers related to leading zeros do not work as expected */ + +/* expected output: +0023 +0023 +-0023 +-023 +*/ + +#include +#include +#include + +unsigned char a, b; +unsigned char c = 199; +unsigned char d = 100; + +/* Bitwise operators with a boolean expression fail when optimized */ +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); + + /* Force exit failure, otherwise the -g version, which works, + * breaks the build + */ + return 1; +}