<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On 5 December 2016 at 11:34, Mehdi AMINI via Phabricator <span dir="ltr"><<a href="mailto:reviews@reviews.llvm.org" target="_blank">reviews@reviews.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">mehdi_amini added a comment.<br>
<span class=""><br>
In <a href="https://reviews.llvm.org/D26376#597614" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D26376#597614</a>, @mclow.lists wrote:<br>
<br>
> More info - The following code:<br>
><br>
>   #include <stdatomic.h><br>
>   int main () {}<br>
><br>
><br>
> fails to compile on either gcc 6.2 (locally), gcc 7 head (online compiler) or MSVC (online compiler).<br>
<br>
<br>
</span>Interesting, that lead me to <a href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60932" rel="noreferrer" target="_blank">https://gcc.gnu.org/bugzilla/<wbr>show_bug.cgi?id=60932</a> which describes the issue I believe.<br>
<br>
One of the example is that we should guarantee ABI compatibility between C and C++ for such code:<br>
<br>
  #ifdef __cplusplus<br>
  #include <atomic><br>
  using namespace std;<br>
  #else<br>
  #include <stdatomic.h><br>
  #endif<br>
<br>
  struct s {<br>
    atomic_int i;<br>
  };<br>
<br>
Do you know if we're providing this guarantee today?</blockquote><div><br></div><div>If by "we" you mean libc++, then yes, it does everything it can to provide this guarantee -- its atomic<T> is a wrapper around an _Atomic(T).</div><div><br></div><div>If by "we" you also include Clang, and you include the case where <atomic> is the libstdc++ version, then results are more mixed -- GCC and libstdc++ made some very poor decisions early on regarding the size and alignment of atomic<T> for some types T (such as char[3]), and Clang's _Atomic(T) / <stdatomic.h> does not replicate those poor choices. If I remember correctly, this is fixed in more recent versions of libstdc++.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">In <a href="https://reviews.llvm.org/D26376#613186" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D26376#613186</a>, @EricWF wrote:<br>
<br>
> Yeah this seems like a configuration that simply can't be supported. I'm not sure if this patch is a great idea.<br>
<br>
<br>
</span>OK, let's abandon this then!<br>
<br>
<br>
<a href="https://reviews.llvm.org/D26376" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D26376</a><br>
<br>
<br>
<br>
</blockquote></div><br></div></div>