<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sat, Sep 6, 2014 at 3:27 AM, Abramo Bagnara <span dir="ltr"><<a href="mailto:abramo.bagnara@bugseng.com" target="_blank">abramo.bagnara@bugseng.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Ping<br>
<span class="im HOEnZb"><br>
Il 04/09/2014 15:13, Abramo Bagnara ha scritto:<br>
><br>
</span><div class="HOEnZb"><div class="h5">> For the following source<br>
><br>
> void f() {<br>
>   char *p;<br>
>   const char *cp;<br>
>   p == cp;<br>
>   p != cp;<br>
>   p < cp;<br>
>   p <= cp;<br>
>   p > cp;<br>
>   p >= cp;<br>
>   p - cp;<br>
> }<br>
><br>
> clang (unexpectedly for me) emits an implicit cast from const char * to<br>
> char * (i.e. it remove a qualifier) for all the relational and equality<br>
> operator, but it (expectedly) does not emit one for the subtraction.<br>
><br>
> AFAIK the C standard does not require any conversion for relational and<br>
> equality operator (just like for subtraction).<br>
><br>
> Do we have a reason to add the implicit casts or it is a bug?</div></div></blockquote><div><br></div><div>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.</div></div></div></div>