Hello. I've been watching the sources of aliasing in gcc and found one comment, that seemed to me a bit strange. In file `gcc/alias.c' in function `get_alias_set':
> /* From the former common C and C++ langhook implementation: > > Unfortunately, there is no canonical form of a pointer type. > In particular, if we have `typedef int I', then `int *', and > `I *' are different types. So, we have to pick a canonical > representative. We do this below. > > Technically, this approach is actually more conservative that > it needs to be. In particular, `const int *' and `int *' > should be in different alias sets, according to the C and C++ > standard, since their types are not the same, and so, > technically, an `int **' and `const int **' cannot point at > the same thing. Please, can you explain the following: According to the standard > A typedef declaration does not introduce a new type, only a synonym for the > type so specified. So, as I understand in this case `I *' and `int *' should be equal types? Also, according to the issue 6.5 (7), we cat access to an object value with expression that has > a qualified version of a type compatible with the effective type of the object So, `const int *' can legally point to the `int *' but not in reverse order, and that's why `const int *' and `int *' should be in different alias sets? Alex.