<div dir="auto"><div><div class="gmail_extra"><div class="gmail_quote">On 22 Dec 2016 10:15 pm, "Pavel A. Lebedev via cfe-dev" <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="quoted-text">On Wed, Nov 30, 2016 3:25 AM, Richard Smith via <mailto:<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a><wbr>> wrote:<br>
> Sorry for the delay, that should be fixed in r288220.<br>
<br>
</div>I've found a reverse case for this, one where glibc's throw() version tries to redeclare<br>
the previous one given without it. It happens as a side effect of libcxx r288575 adding a<br>
new include and manifests in building Intel TBB. The reduced test case is:<br>
<br>
$ cat tbb-fail.cpp<br>
<br>
#include <cstddef><br>
extern "C" void *aligned_alloc(size_t alignment, size_t size);<br>
#include <cstdlib><br>
<br>
$ clang++ -fsyntax-only tbb-fail.cpp<br>
In file included from tbb-fail.cpp:3:<br>
In file included from /usr/bin/../include/c++/v1/<wbr>cstdlib:86:<br>
In file included from /usr/bin/../include/c++/v1/<wbr>stdlib.h:94:<br>
/usr/include/stdlib.h:509:14: error: exception specification in declaration does not match previous declaration<br>
extern void *aligned_alloc (size_t __alignment, size_t __size)<br>
             ^<br>
tbb.cpp:3:18: note: previous declaration is here<br>
extern "C" void *aligned_alloc(size_t alignment, size_t size);<br>
                 ^<br>
1 error generated.<br>
<br>
This time it happens regardless of language standard used.<br>
<br>
The original code in TBB (src/tbbmalloc/proxy.cpp) declares aligned_alloc itself,<br>
AFAIU, for the sake of adding __attribute__ ((alias("memalign"))), and manages<br>
to do it before including any system-provided declaration.<br></blockquote></div></div></div><div dir="auto"><br></div><div dir="auto">This one seems like a bug in tbb. cstdlib is allowed to declare this function with a non-throwing exception specification, and if it does, that conflicts with tbb's declaration.</div><div dir="auto"><br></div><div dir="auto">We could probably make this work too, but generally I don't think it's reasonable for an implementation of part of the C standard library to include C standard library headers from a different standard library of unknown provenance... so in the first instance we should ask Intel to change tbb.</div><div dir="auto"><br></div><div dir="auto"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="elided-text"><br>
---<br>
Pavel A. Lebedev<br>
<br>
______________________________<wbr>_________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a><br>
</div></blockquote></div><br></div></div></div>