<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/56443>56443</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Behaviour of converting pointers to larger signed integers differs between GCC and Clang.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          CharlesLoveman
      </td>
    </tr>
</table>

<pre>
    Compiling the following program produces different outputs between GCC 11 and Clang 14.
```
#include <stdint.h>
#include <stdio.h>

int main() {
    int32_t *p = (int32_t *) 0xFFFFFFFFFFFFFFFF;
    __int128_t z = (__int128_t) p;
    char *zp = &z;
    for (int i = 0; i < sizeof(__int128_t); ++i) {
        printf("%02hhx", zp[i]);
    }
    return 0;
}
```
GCC output:
```
ffffffffffffffffffffffffffffffff
```
Clang output:
```
ffffffffffffffff0000000000000000
```
GCC will sign extend a 64 bit pointer when converted to an __int128_t, whereas Clang zeroes out the additional space.
Is this difference in implementation-defined behaviour intentional?
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyVU8GO2yAQ_Rp8QRthbMfJwYddp6kq9R9W2IxtKmIswMk2X98BJ5tsuquqCNnAm3nMMG8aI39XtTlMSquxp34A2hmtzSnsJmt6Kw7hL-cWHJWq68DC6KmZ_TR7RxvwJ4CRfq9rmqZUjJLWWqBvmq8I2xH2TNbsMpctz9TY6lkCJVntvFSjXw0k-_YVbO7R-EUPehBqJHxD-JaS8mU5pzgQy_irp4Q_T8iww8Xm7izYs7f9wyDZHcPrK9qnfIMO5yvD7SwQTB_s20HYQH2-3rc-f8A7Yy9BUBUtGMJxWVOnzmC6xwsCTvgLTvVXfmFMFo27mD0nvGB8GN7isqbniRToVewWmpsfKXe3jQU_2zEGcnnXK_pQrFDVpdIke_7UovvH-NRpUcj_EbOH8WW8J6U1Pmw_UnjzgHoUdJ3TRnk6GXw3sPQ0oGBbMx7BepDUG5Qtva9AHUwsCHfR8hmsQfVjwLFBhJTKKzMKvGcSLVyE_sMhqm5N0gKqkarDpOGALSOCy5OETo14aQODOCoz26BYRCMdyfaJrDK5zbYi8cprqF7e7Ux3jTm25pKLC9FrYXtMK-SMzOG8D8gSx8cWfe_PVTJbXQ3eTy5UgO9x9soPc7NqzQE3Wh-vvyfs_1_Q4sPslXMzOFwU6zzPkqHKy61gWcnZhq3zYgMSRCf5Ns1lytaNaBItGtCuQlmiREc40UgR5FrsElVxxjkr2SZl-bbYrErZNu1WNEXbdm1RpiRngK2uVyGOlbF9YqsYUjP3DkGtnHc3ULj4CBCvQ34x-8HYqsYW1eB-miOSjUmMoIoZ_AGx9oCu">