1/* PR middle-end/51782 */ 2/* { dg-do run } */ 3/* { dg-options { "-std=gnu99" } } */ 4 5#include <stdlib.h> 6 7struct R { char r; }; 8struct RGB { char r,g,b; }; 9 10__flash const struct R r1 = { 12 }; 11__flash const struct RGB r3 = { 23, 56, 78 }; 12 13char __attribute__((noinline,noclone)) 14read1_bug (const __flash struct R *s) 15{ 16 struct R t = *s; 17 return t.r; 18} 19 20char __attribute__((noinline,noclone)) 21read1_ok (const __flash struct R *s) 22{ 23 return s->r; 24} 25 26char __attribute__((noinline,noclone)) 27read3_bug (const __flash struct RGB *s) 28{ 29 struct RGB t = *s; 30 return t.r + t.g + t.b; 31} 32 33char __attribute__((noinline,noclone)) 34read3_ok (const __flash struct RGB *s) 35{ 36 return s->r + s->g + s->b; 37} 38 39__flash const struct R * volatile p1 = &r1; 40__flash const struct RGB * volatile p3 = &r3; 41 42int main (void) 43{ 44 if (read1_bug (p1) != read1_ok (p1)) 45 abort(); 46 47 if (read3_bug (p3) != read3_ok (p3)) 48 abort(); 49 50 exit (0); 51} 52