| |
| #include <stdlib.h> |
| #include <assert.h> |
| |
| int main ( void ) |
| { |
| long w; |
| int i; |
| char* p; |
| |
| assert(sizeof(long) == sizeof(void*)); |
| |
| /* partial load, which --partial-loads-ok=yes should suppress */ |
| p = calloc( sizeof(long)-1, 1 ); |
| assert(p); |
| w = *(long*)p; |
| free(p); |
| |
| /* partial but misaligned, cannot be suppressed */ |
| p = calloc( sizeof(long), 1 ); |
| assert(p); |
| p++; |
| w += *(long*)p; |
| p--; |
| free(p); |
| |
| /* partial but not word sized, cannot be suppressed */ |
| p = calloc( sizeof(short)-1, 1 ); |
| assert(p); |
| w += (long)( *(short*)p ); |
| free(p); |
| |
| /* aligned, word sized, but completely invalid - cannot be suppressed */ |
| p = calloc( sizeof(long), 1 ); |
| assert(p); |
| free(p); |
| w += *(long*)p; |
| |
| /* dump result in a way gcc can't understand */ |
| for (i = 0; i < 64; i++) |
| w <<= 1; |
| |
| return (int)w; |
| } |
| |