Improper implicit pointer cast in AST

Abramo Bagnara abramo.bagnara at bugseng.com
Mon Sep 15 07:24:37 PDT 2014


Ping.

Il 07/09/2014 14:44, Abramo Bagnara ha scritto:
> Il 07/09/2014 13:05, Abramo Bagnara ha scritto:
>> Il 07/09/2014 05:25, Richard Smith ha scritto:
>>> On Sat, Sep 6, 2014 at 3:27 AM, Abramo Bagnara
>>> <abramo.bagnara at bugseng.com <mailto:abramo.bagnara at bugseng.com>> wrote:
>>>
>>>     Ping
>>>
>>>     Il 04/09/2014 15:13, Abramo Bagnara ha scritto:
>>>     >
>>>     > For the following source
>>>     >
>>>     > void f() {
>>>     >   char *p;
>>>     >   const char *cp;
>>>     >   p == cp;
>>>     >   p != cp;
>>>     >   p < cp;
>>>     >   p <= cp;
>>>     >   p > cp;
>>>     >   p >= cp;
>>>     >   p - cp;
>>>     > }
>>>     >
>>>     > clang (unexpectedly for me) emits an implicit cast from const char
>>>     * to
>>>     > char * (i.e. it remove a qualifier) for all the relational and
>>>     equality
>>>     > operator, but it (expectedly) does not emit one for the subtraction.
>>>     >
>>>     > AFAIK the C standard does not require any conversion for
>>>     relational and
>>>     > equality operator (just like for subtraction).
>>>     >
>>>     > Do we have a reason to add the implicit casts or it is a bug?
>>>
>>>
>>> It seems like a minor convenience to have an AST invariant that both
>>> operands are of the same type here, but I expect we could remove these
>>> implicit casts without any significant repercussions; I'd be mildly in
>>> favor of doing that since it improves AST fidelity.
>>
>> I've attached a patch doing that.
>>
>> Ok to commit?
> 
> I've attached a patch that follows better what standard requires and
> that previously was not done. I've also weakened an assertion to avoid
> to have an exceedingly complex condition.
> 
> 


-- 
Abramo Bagnara

BUGSENG srl - http://bugseng.com
mailto:abramo.bagnara at bugseng.com



More information about the cfe-commits mailing list