This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Warning for different pointer signedness
Joe Buck <Joe.Buck@synopsys.com> writes:
| On Mon, Dec 20, 2004 at 10:21:38PM +0100, Gabriel Dos Reis wrote:
| > Pointers-to-object comparaison make sense (from the relevant standards
| > point of view) only if they
| >
| > (i) point into the same object; or
| > (ii) are (or one of them is) one-past-the-end of the same object; or
| > (iii) are (or one of them is) null.
| >
| > You then realize that if the pointers are not of the same type or cannot be
| > implicitly converted to each other, then the comparison become
| > invalid.
|
| But there is the interesting fact that pointers that differ only in
| the signed-ness of the pointed-to object can alias each other. That
| seems to imply that testing for equality makes sense, even without casting.
Are you advocating that we should be accepting this?
typedef struct S S;
int cmp(S* p, double* q) { return p == q; }
struct S {
double m;
};
If not why? The provision that supports the aliasing rule you're
alluding to is also the rule that would support the above.
I think the bottom line is that aliasing is very different from pointer
comparison, and aliasing is better tested when both pointers are
casted either to void* or char*.
-- Gaby