http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52406

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-02-28 
09:54:01 UTC ---
Strangely,
/* PR tree-optimization/52406 */

extern void abort (void);
struct { int f1; } a[2];

int *b, *const k = &a[1].f1;
static int **c = &b;

int e, f, d;

int
main ()
{
  int **l = &b;
  *l = k;
  for (; d <= 0; d++)
    {
      int *j = &e;
      **c = 1;
      *l = k;
      *k ^= 0;
      f = **l;
      *j = f;
    }
  if (e != 1)
    abort ();
  return 0;
}

fails, but with
--- pr52406.c 2012-02-28 10:47:45.663204390 +0100
+++ pr52406.c 2012-02-28 10:47:56.695143490 +0100
@@ -1,9 +1,9 @@
 /* PR tree-optimization/52406 */

 extern void abort (void);
-struct { int f1; } a[2];
+int a[2];

-int *b, *const k = &a[1].f1;
+int *b, *const k = &a[1];
 static int **c = &b;

 int e, f, d;

it works (IL starts to differ during pcom), beyond the &a[1] vs. &a[1].f1
changes.  So even if there isn't a wrong code, there would be at least
missed-optimization.

Reply via email to