diff options
Diffstat (limited to 'gcc-4.9/gcc/testsuite/c-c++-common/ubsan/shift-6.c')
-rw-r--r-- | gcc-4.9/gcc/testsuite/c-c++-common/ubsan/shift-6.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/c-c++-common/ubsan/shift-6.c b/gcc-4.9/gcc/testsuite/c-c++-common/ubsan/shift-6.c new file mode 100644 index 000000000..d88a42910 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/c-c++-common/ubsan/shift-6.c @@ -0,0 +1,38 @@ +/* PR sanitizer/58413 */ +/* { dg-do run { target int32plus } } */ +/* { dg-options "-fsanitize=shift -w" } */ + +#include <stdio.h> + +int x = 7; +int +main (void) +{ + fputs ("UBSAN TEST START\n", stderr); + + /* All of the following should pass. */ + int A[128 >> 5] = {}; + int B[128 << 5] = {}; + + static int e = + ((int) + (0x00000000 | ((31 & ((1 << (4)) - 1)) << (((15) + 6) + 4)) | + ((0) << ((15) + 6)) | ((0) << (15)))); + + if (e != 503316480) + __builtin_abort (); + + switch (x) + { + case 1 >> 4: + case 1 << 4: + case 128 << (4 + 1): + case 128 >> (4 + 1): + return 1; + } + + fputs ("UBSAN TEST END\n", stderr); + return 0; +} + +/* { dg-output "UBSAN TEST START(\n|\r\n|\r)UBSAN TEST END" } */ |