1 /* PR c/21536 */ 2 /* { dg-do run } */ 3 /* { dg-options "-O2 -Wuninitialized" } */ 4 5 typedef __SIZE_TYPE__ size_t; 6 extern void *malloc (size_t); 7 extern void free (void *); 8 9 void * foo(int x,int y)10foo (int x, int y) 11 { 12 void *d = malloc (x * y * sizeof (double)); 13 double (*e)[x][y] = d; 14 x += 10; 15 y += 10; 16 if (x > 18) 17 (*e)[x - 12][y - 12] = 0.0; 18 else 19 (*e)[x - 11][y - 11] = 1.0; 20 return d; 21 } 22 23 void * bar(int x,int y)24bar (int x, int y) 25 { 26 void *d = malloc (x * y * sizeof (double)); 27 struct S 28 { 29 double (*e)[x][y]; 30 double (*f)[x][y]; 31 } s; 32 s.e = d; 33 s.f = d; 34 x += 10; 35 y += 10; 36 if (x > 18) 37 (*s.e)[x - 12][y - 12] = 0.0; 38 else 39 (*s.e)[x - 11][y - 11] = 1.0; 40 if (x > 16) 41 (*s.f)[x - 13][y - 13] = 0.0; 42 else 43 (*s.f)[x - 14][y - 14] = 1.0; 44 return d; 45 } 46 47 int main()48main () 49 { 50 void *d1 = foo (10, 10); 51 void *d2 = bar (10, 10); 52 free (d1); 53 free (d2); 54 return 0; 55 } 56