/* { dg-do run } */ | |
/* { dg-options "-g" } */ | |
#include "../nop.h" | |
struct A { int x; unsigned short y; char z[64]; }; | |
void __attribute__((noinline)) | |
foo (struct A *p, char *q) | |
{ | |
int f = &p->z[p->y] - q; | |
asm volatile (NOP); | |
asm volatile (NOP : : "g" (f)); /* { dg-final { gdb-test .+1 "f" "14" } } */ | |
asm volatile ("" : : "g" (p), "g" (q)); | |
} | |
int | |
main () | |
{ | |
struct A a; | |
__builtin_memset (&a, 0, sizeof a); | |
a.y = 26; | |
a.x = 12; | |
asm volatile ("" : : "r" (&a) : "memory"); | |
foo (&a, &a.z[a.x]); | |
return 0; | |
} |