https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116983

--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Plus the useless pointer conversions in GIMPLE can mean that
void *foo (int);
struct counted {
    int counter;
    int array[] __attribute__((counted_by(counter)));
};
struct notcounted {
    int counter;
    int array[];
};
int
bar (int x)
{
  void *p = foo (x);
  if (x & 1)
    {
      struct counted *q = (struct counted *) p;
      use (q);
      return __builtin_dynamic_object_size (q, 0);
    }
  else
    {
      struct notcounted *r = (struct notcounted *) p;
      use2 (r);
      return __builtin_dynamic_object_size (r, 0);
    }
}
with CSE/SCCVN whether one gets actually struct counted * or struct notcounted
* or void * pointer type is a lottery.

Reply via email to