1#include <stdio.h> 2#include <stdlib.h> 3 4typedef struct { 5 unsigned short a; 6 unsigned short b; 7} foo_t; 8 9void a1 (unsigned long offset) {} 10 11volatile foo_t * 12f () 13{ 14 volatile foo_t *foo_p = (volatile foo_t *)malloc (sizeof (foo_t)); 15 16 a1((unsigned long)foo_p-30); 17 if (foo_p->a & 0xf000) 18 printf("%d\n", foo_p->a); 19 foo_p->b = 0x0100; 20 a1 ((unsigned long)foo_p + 2); 21 a1 ((unsigned long)foo_p - 30); 22 return foo_p; 23} 24 25main () 26{ 27 volatile foo_t *foo_p; 28 29 foo_p = f (); 30 if (foo_p->b != 0x0100) 31 abort (); 32 exit (0); 33} 34