<div dir="ltr">On Thu, May 2, 2013 at 1:00 AM, Jean-Daniel Dupas <span dir="ltr"><<a href="mailto:devlists@shadowlab.org" target="_blank">devlists@shadowlab.org</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Is it OK to use the same condition for both while they don't require the same Target support ?<br>
<br>
AFAK, C++ TLS require __cxa_thread_atexit support, and so the target should support thread_atexit, while C TLS doesn't need it.<br></blockquote><div><br></div><div style>This is tricky, because it's a property of the C++ library, not of the target; a conforming implementation can implement __cxa_thread_atexit entirely within its std::thread implementation if the underlying threading library doesn't provide thread_atexit support -- although that would clearly be suboptimal because it wouldn't interoperate well with threads not created by std::thread.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Actually, I think darwin has support for C thread local, but no C++ thread local.<br>
<br>
Le 2 mai 2013 à 07:28, Douglas Gregor <<a href="mailto:dgregor@apple.com">dgregor@apple.com</a>> a écrit :<br>
<div class="HOEnZb"><div class="h5"><br>
> Author: dgregor<br>
> Date: Thu May  2 00:28:32 2013<br>
> New Revision: 180909<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=180909&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=180909&view=rev</a><br>
> Log:<br>
> Only evaluate __has_feature(c_thread_local) and __has_feature(cxx_thread_local) true when the target supports thread-local storage.<br>
><br>
> Modified:<br>
>    cfe/trunk/lib/Lex/PPMacroExpansion.cpp<br>
>    cfe/trunk/test/Lexer/has_feature_cxx0x.cpp<br>
><br>
> Modified: cfe/trunk/lib/Lex/PPMacroExpansion.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPMacroExpansion.cpp?rev=180909&r1=180908&r2=180909&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPMacroExpansion.cpp?rev=180909&r1=180908&r2=180909&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/lib/Lex/PPMacroExpansion.cpp (original)<br>
> +++ cfe/trunk/lib/Lex/PPMacroExpansion.cpp Thu May  2 00:28:32 2013<br>
> @@ -751,7 +751,8 @@ static bool HasFeature(const Preprocesso<br>
>            .Case("c_atomic", LangOpts.C11)<br>
>            .Case("c_generic_selections", LangOpts.C11)<br>
>            .Case("c_static_assert", LangOpts.C11)<br>
> -           .Case("c_thread_local", LangOpts.C11)<br>
> +           .Case("c_thread_local",<br>
> +                 LangOpts.C11 && PP.getTargetInfo().isTLSSupported())<br>
>            // C++11 features<br>
>            .Case("cxx_access_control_sfinae", LangOpts.CPlusPlus11)<br>
>            .Case("cxx_alias_templates", LangOpts.CPlusPlus11)<br>
> @@ -783,7 +784,8 @@ static bool HasFeature(const Preprocesso<br>
>            .Case("cxx_rvalue_references", LangOpts.CPlusPlus11)<br>
>            .Case("cxx_strong_enums", LangOpts.CPlusPlus11)<br>
>            .Case("cxx_static_assert", LangOpts.CPlusPlus11)<br>
> -           .Case("cxx_thread_local", LangOpts.CPlusPlus11)<br>
> +           .Case("cxx_thread_local",<br>
> +                 LangOpts.CPlusPlus11 && PP.getTargetInfo().isTLSSupported())<br>
>            .Case("cxx_trailing_return", LangOpts.CPlusPlus11)<br>
>            .Case("cxx_unicode_literals", LangOpts.CPlusPlus11)<br>
>            .Case("cxx_unrestricted_unions", LangOpts.CPlusPlus11)<br>
><br>
> Modified: cfe/trunk/test/Lexer/has_feature_cxx0x.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/has_feature_cxx0x.cpp?rev=180909&r1=180908&r2=180909&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/has_feature_cxx0x.cpp?rev=180909&r1=180908&r2=180909&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/test/Lexer/has_feature_cxx0x.cpp (original)<br>
> +++ cfe/trunk/test/Lexer/has_feature_cxx0x.cpp Thu May  2 00:28:32 2013<br>
> @@ -1,5 +1,6 @@<br>
> -// RUN: %clang_cc1 -E -std=c++11 %s -o - | FileCheck --check-prefix=CHECK-0X %s<br>
> -// RUN: %clang_cc1 -E %s -o - | FileCheck --check-prefix=CHECK-NO-0X %s<br>
> +// RUN: %clang_cc1 -E -triple x86_64-linux-gnu -std=c++11 %s -o - | FileCheck --check-prefix=CHECK-0X %s<br>
> +// RUN: %clang_cc1 -E -triple armv7-apple-darwin -std=c++11 %s -o - | FileCheck --check-prefix=CHECK-NO-TLS %s<br>
> +// RUN: %clang_cc1 -E -triple x86_64-linux-gnu %s -o - | FileCheck --check-prefix=CHECK-NO-0X %s<br>
><br>
> #if __has_feature(cxx_atomic)<br>
> int has_atomic();<br>
> @@ -290,3 +291,4 @@ int no_thread_local();<br>
><br>
> // CHECK-0X: has_thread_local<br>
> // CHECK-NO-0X: no_thread_local<br>
> +// CHECK-NO-TLS: no_thread_local<br>
><br>
><br>
> _______________________________________________<br>
> cfe-commits mailing list<br>
> <a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
<br>
</div></div><span class="HOEnZb"><font color="#888888">-- Jean-Daniel<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</div></div></blockquote></div><br></div></div>