#include <stdio.h> | |
#include <stdlib.h> | |
typedef struct { | |
unsigned short a; | |
unsigned short b; | |
} foo_t; | |
void a1 (unsigned long offset) {} | |
volatile foo_t * | |
f () | |
{ | |
volatile foo_t *foo_p = (volatile foo_t *)malloc (sizeof (foo_t)); | |
a1((unsigned long)foo_p-30); | |
if (foo_p->a & 0xf000) | |
printf("%d\n", foo_p->a); | |
foo_p->b = 0x0100; | |
a1 ((unsigned long)foo_p + 2); | |
a1 ((unsigned long)foo_p - 30); | |
return foo_p; | |
} | |
main () | |
{ | |
volatile foo_t *foo_p; | |
foo_p = f (); | |
if (foo_p->b != 0x0100) | |
abort (); | |
exit (0); | |
} |