On Tue, Aug 02, 2005 at 09:39:56AM -0400, Daniel Jacobowitz wrote: > Then the alias analyzer's broken. > Broken? I'm saying that we currently get this right. I don't know what position are you arguing. > This isn't pointer arithmetic in the sense that you mean. It > would be if the line were: > > ptr = &((cons *)(ptr))->cdr; > Yes, I realize this now. And that is not my point. > which is equivalent to some offset plus ptr. But there's an extra > dereference: > > ptr = &((cons *)(*ptr))->cdr; > ^ > This code does builds an address location out of an arbitrary integer: unsigned int D.1142_8 = *ptr_1; struct cons *D.1143_9 = (struct cons *) D.1142_8; ptr_10 = &D.1143_9->cdr; Does the language allow the creation of address locations out of arbitrary integer values? Is the dereference of such an address a defined operation? If so, then it's simply a matter of recognizing this situation when computing points-anywhere attributes.