--- Comment #5 from Tobias Burnus <burnus at gcc dot> 2010-09-25 
14:30:55 UTC ---
The issue seems to be how alias checking is implemented in trans-array.c:

gfc_could_be_alias (gfc_ss * lss, gfc_ss * rss)
  for (rref = rss->expr->ref; rref != rss->; rref = rref->next)
      if (gfc_symbols_could_alias (rref->u.c.sym, lsym))
        return 1;

While "rss->expr->symtree->n.sym" (= "rsym") has the pointer and target
attribute, the element "rref->u.c.sym" usually has not.

Thus, the gfc_symbols_could_alias check succeeds (first argument is neither a
pointer nor a target thus it cannot alias with the second argument, unless both
symbol are the same); cf. symbol.c's

gfc_symbols_could_alias (gfc_symbol *lsym, gfc_symbol *rsym)
  if (lsym->attr.pointer
      && (rsym->attr.pointer || rsym->attr.allocatable || rsym->
    return 1;
  if (lsym-> && rsym->attr.pointer)
    return 1;
  if (lsym->attr.allocatable && rsym->attr.pointer)
    return 1;
  return 0;

Configure bugmail:
------- You are receiving this mail because: -------
You are on the CC list for the bug.

Reply via email to