From b61148dd4f5b244381b91b86dd7e921698f92687 Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Fri, 20 Aug 1999 21:57:38 +0000 Subject: [PATCH] * c-common.c (c_get_alias_set): Update comment. From-SVN: r28780 --- gcc/ChangeLog | 4 ++++ gcc/c-common.c | 23 ++++++++++++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 98229a4df20..abe37020252 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +Fri Aug 20 15:02:10 1999 Mark Mitchell + + * c-common.c (c_get_alias_set): Update comment. + 1999-08-20 Andreas Jaeger * linux.h (LIB_SPEC): Added. diff --git a/gcc/c-common.c b/gcc/c-common.c index d194be625e4..bcf22109db2 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -3411,11 +3411,24 @@ c_get_alias_set (t) `I *' are different types. So, we have to pick a canonical representative. We do this below. - Note that this approach is actually more conservative that it - needs to be. In particular, `const int *' and `int *' should - be in different alias sets, but this approach puts them in - the same alias set. */ - + Technically, this approach is actually more conservative that + it needs to be. In particular, `const int *' and `int *' + chould 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. + + But, the standard is wrong. In particular, this code is + legal C++: + + int *ip; + int **ipp = &ip; + const int* const* cipp = &ip; + + And, it doesn't make sense for that to be legal unless you + can dereference IPP and CIPP. So, we ignore cv-qualifiers on + the pointed-to types. This issue has been reported to the + C++ committee. */ t = TYPE_MAIN_VARIANT (TREE_TYPE (type)); t = ((TREE_CODE (type) == POINTER_TYPE) ? build_pointer_type (t) : build_reference_type (t)); -- 2.30.2