[cfe-commits] implicit sign/bitwidth conversions during array indexing?
Ted Kremenek
kremenek at apple.com
Mon Nov 17 10:42:17 PST 2008
On Nov 17, 2008, at 9:54 AM, Eli Friedman wrote:
> On Mon, Nov 17, 2008 at 9:49 AM, Ted Kremenek <kremenek at apple.com>
> wrote:
>> My question is whether or not Sema should insert an implicit cast
>> here from
>> long long to int? It seems strange that there is an implicit cast
>> from
>> short to int but not from long long to int.
>
> Actually, if I recall correctly, there isn't an implicit cast either
> way for the case of array subscripting.
Hi Eli,
I think too much of the original thread got lost. Your right that
there is no implicit cast for array subscripting. We do insert
implicit casts for pointer arithmetic. For example:
void f(int *p) {
short i = 0;
long long k = 0;
int x;
x = *(p + i); // implicit cast for 'i' from short to int
x += *(p + k); // no implicit cast for 'k' from long long to int
return x;
}
The standard says that E1[E2] is the same as *(E1 + E2), so I was
curious why there was no implicit cast from long long to int when
doing pointer arithmetic. I also think that we should probably have
an implicit cast when performing array indexing, but that's a separate
matter from my original question.
>
> The issue with inserting an implicit cast from long long to int is
> that conceptually, it isn't there! The fact that we truncate long
> long to i32 in CodeGen is really just an artifact of the
> implementation on 32-bit machines.
Regardless of Codegen, conceptually the types are changing. Even for
the following code we insert an implicit cast from 'long' to 'int'
even on a 32-bit machine:
long x = 0;
int y = x;
Obviously, in the case of a 64-bit machine the implicit cast becomes
even more valuable since it implies a truncation during CodeGen.
For the array indexing (or rather pointer arithmetic), is it not the
case that the 'long long' is being converted (always) to an integer
with the same width as a pointer? Moreover, the sign of the integer
type is changing. This seems like something that should be
semantically captured in the ASTs.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20081117/e948af5c/attachment.html>
More information about the cfe-commits
mailing list