1/* PR middle-end/30262 */ 2/* { dg-skip-if "asm statements do not work as expected" { rl78-*-* } "*" "" } */ 3extern void abort (void); 4 5int 6foo (void) 7{ 8 unsigned int x = 0; 9 10 void nested (void) 11 { 12 x = 254; 13 } 14 15 nested (); 16 asm volatile ("" :: "r" (x)); 17 asm volatile ("" :: "m" (x)); 18 asm volatile ("" :: "mr" (x)); 19 asm volatile ("" : "=r" (x) : "0" (x)); 20 asm volatile ("" : "=m" (x) : "m" (x)); 21 return x; 22} 23 24int 25bar (void) 26{ 27 unsigned int x = 0; 28 29 void nested (void) 30 { 31 asm volatile ("" :: "r" (x)); 32 asm volatile ("" :: "m" (x)); 33 asm volatile ("" :: "mr" (x)); 34 x += 4; 35 asm volatile ("" : "=r" (x) : "0" (x)); 36 asm volatile ("" : "=m" (x) : "m" (x)); 37 } 38 39 nested (); 40 return x; 41} 42 43int 44baz (void) 45{ 46 unsigned int x = 0; 47 48 void nested (void) 49 { 50 void nested2 (void) 51 { 52 asm volatile ("" :: "r" (x)); 53 asm volatile ("" :: "m" (x)); 54 asm volatile ("" :: "mr" (x)); 55 x += 4; 56 asm volatile ("" : "=r" (x) : "0" (x)); 57 asm volatile ("" : "=m" (x) : "m" (x)); 58 } 59 nested2 (); 60 nested2 (); 61 } 62 63 nested (); 64 return x; 65} 66 67int 68main (void) 69{ 70 if (foo () != 254 || bar () != 4 || baz () != 8) 71 abort (); 72 return 0; 73} 74