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