| /* PR c/21536 */ |
| /* { dg-do run } */ |
| /* { dg-options "-O2 -Wuninitialized" } */ |
| |
| typedef __SIZE_TYPE__ size_t; |
| extern void *malloc (size_t); |
| extern void free (void *); |
| |
| void * |
| foo (int x, int y) |
| { |
| void *d = malloc (x * y * sizeof (double)); |
| double (*e)[x][y] = d; |
| x += 10; |
| y += 10; |
| if (x > 18) |
| (*e)[x - 12][y - 12] = 0.0; |
| else |
| (*e)[x - 11][y - 11] = 1.0; |
| return d; |
| } |
| |
| void * |
| bar (int x, int y) |
| { |
| void *d = malloc (x * y * sizeof (double)); |
| struct S |
| { |
| double (*e)[x][y]; |
| double (*f)[x][y]; |
| } s; |
| s.e = d; |
| s.f = d; |
| x += 10; |
| y += 10; |
| if (x > 18) |
| (*s.e)[x - 12][y - 12] = 0.0; |
| else |
| (*s.e)[x - 11][y - 11] = 1.0; |
| if (x > 16) |
| (*s.f)[x - 13][y - 13] = 0.0; |
| else |
| (*s.f)[x - 14][y - 14] = 1.0; |
| return d; |
| } |
| |
| int |
| main () |
| { |
| void *d1 = foo (10, 10); |
| void *d2 = bar (10, 10); |
| free (d1); |
| free (d2); |
| return 0; |
| } |