g++ and aliasing bools
Robert Dewar
dewar@gnat.com
Fri Jan 25 08:32:00 GMT 2002
<<> The problem before us is to narrow down the may-alias relationship as far
> as possible statically. There is no issue of undecidability here.
Of course there is, which is why you conservatively assume that everything
aliases everything else until you prove otherwise.
I've been told i need to come up with a formal proof that given certain
relationships between C++ types, that may-alias is always determinable
statically correctly, or that we always correctly determine that we can't
determine it (IE never claim wrong that things may not alias).
I've said before, and i'll say again, that i'm not going to do that.
>>
Nope, this is plain confused. It is undecidable in general whether two
objects will be aliased at run time (that's so trivial to prove that it
is a silly and useless observation).
But it is not a problem, it merely says that the alias sets we create are
simply conservative estimates. And we need to prove that they are indeed
conservative estimates. We need to be able to prove that elements of
separate sets are indeed never aliased. The fact that we can't prove that
elements of the *same* set *are* aliased is obvioulsy and trivially true,
but quite irrelevant.
<<But claiming that undecidability doesn't enter anyway is simply wrong.
I'm claiming that undecidability enters the picture in another way as
well. The C++ language specification does not give you enough information
in our case to determine that we can determine it or not. We can't always
say whether or not we can say whether two pieces of two types alias.
>>
You are still hung up on the idea that the problem we are trying to solve
is to determine whether two items are aliased. That's NOT the problem here.
THe problem is to determine sets of items that are provably not aliased. These
are quite different problems, and you are getting confused between them.
More information about the Gcc
mailing list