<div dir="ltr">I think for X86, clang's stdint.h is ignored due to this part of stdint.h. You'll get different sizes if you pass -ffreestanding.<div><br></div><div>/* If we're hosted, fall back to the system's stdint.h, which might have<br> * additional definitions.<br> */<br>#if __STDC_HOSTED__ && __has_include_next(<stdint.h>)<br></div><div><br clear="all"><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature">~Craig</div></div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Jun 1, 2020 at 5:09 PM Sam Elliott via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi cfe-dev!<br>
<br>
I am currently investigating an ABI incompatibility for RISC-V between Clang and GCC.<br>
<br>
GCC defines `{u}int_fast8_t` and `{u}int_fast16_t` to be the same sizes as `{u}int32_t` or `{u}int64_t`, depending on the underlying hardware register length (RISC-V has a 32-bit architecture and a 64-bit architecture). This, to me, makes sense, as there are no sub-registers in the architecture. The `{u}int_least8_t` and `{u}int_least16_t` match their bitwidths.<br>
<br>
However, in Clang, I believe we cannot have `{u}int_fastN_t` different from the equivalent `{u}int_leastN_t`, as the codebase currently stands, due to both `DefineFastIntType` and the definitions in `clang/lib/Headers/stdint.h`.<br>
<br>
Point one is while investigating this, Luis discovered that on x86 these types *do* differ in size: <a href="https://godbolt.org/z/rrNGPa" rel="noreferrer" target="_blank">https://godbolt.org/z/rrNGPa</a><br>
I cannot work out how x86 manages this, because my reading of stdint.h and the clang codebase do not show any codepaths where this would work. Any help to shed light on how this is done would be useful.<br>
<br>
Point two is that I have started a patch to add a `getFastIntTypeByWidth` hook for Clang, which by default defers to `getLeastIntTypeByWidth`, to match the current behaviour. The comment in `DefineFastIntType` points to me having to update `stdint.h` to ensure these match, and any guidance about doing so would be appreciated. The patch is here: <a href="https://reviews.llvm.org/D80963" rel="noreferrer" target="_blank">https://reviews.llvm.org/D80963</a> <br>
<br>
I know psABIs are a minefield (to say nothing of preprocessors ;) ), so I'm keen to see if we can add this functionality for RISC-V without breaking any other architectures. psABIs are hard enough to verify at the best of times.<br>
<br>
Thanks In Advance,<br>
<br>
Sam<br>
<br>
--<br>
Sam Elliott<br>
Software Team Lead<br>
Senior Software Developer - LLVM and OpenTitan<br>
lowRISC CIC<br>
<br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
</blockquote></div>