<div dir="ltr">This is cause for a celebration! ;)<div><br></div><div style>cheers,</div><div style>--renato</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On 19 April 2013 18:00, Richard Smith <span dir="ltr"><<a href="mailto:richard-llvm@metafoo.co.uk" target="_blank">richard-llvm@metafoo.co.uk</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rsmith<br>
Date: Fri Apr 19 12:00:31 2013<br>
New Revision: 179861<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=179861&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=179861&view=rev</a><br>
Log:<br>
C++11 support is now feature-complete.<br>
<br>
Modified:<br>
    cfe/trunk/docs/LanguageExtensions.rst<br>
    cfe/trunk/lib/Lex/PPMacroExpansion.cpp<br>
    cfe/trunk/test/Lexer/has_feature_c1x.c<br>
    cfe/trunk/test/Lexer/has_feature_cxx0x.cpp<br>
    cfe/trunk/www/cxx_status.html<br>
    cfe/trunk/www/index.html<br>
<br>
Modified: cfe/trunk/docs/LanguageExtensions.rst<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/LanguageExtensions.rst?rev=179861&r1=179860&r2=179861&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/LanguageExtensions.rst?rev=179861&r1=179860&r2=179861&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/docs/LanguageExtensions.rst (original)<br>
+++ cfe/trunk/docs/LanguageExtensions.rst Fri Apr 19 12:00:31 2013<br>
@@ -645,8 +645,7 @@ C++11 inheriting constructors<br>
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^<br>
<br>
 Use ``__has_feature(cxx_inheriting_constructors)`` to determine if support for<br>
-inheriting constructors is enabled.  Clang does not currently implement this<br>
-feature.<br>
+inheriting constructors is enabled.<br>
<br>
 C++11 inline namespaces<br>
 ^^^^^^^^^^^^^^^^^^^^^^^<br>
@@ -727,6 +726,12 @@ Use ``__has_feature(cxx_static_assert)``<br>
 ``__has_extension(cxx_static_assert)`` to determine if support for compile-time<br>
 assertions using ``static_assert`` is enabled.<br>
<br>
+C++11 ``thread_local``<br>
+^^^^^^^^^^^^^^^^^^^^^^<br>
+<br>
+Use ``__has_feature(cxx_thread_local)`` to determine if support for<br>
+``thread_local`` variables is enabled.<br>
+<br>
 C++11 type inference<br>
 ^^^^^^^^^^^^^^^^^^^^<br>
<br>
@@ -818,6 +823,12 @@ Use ``__has_feature(c_static_assert)`` o<br>
 to determine if support for compile-time assertions using ``_Static_assert`` is<br>
 enabled.<br>
<br>
+C11 ``_Thread_local``<br>
+^^^^^^^^^^^^^^^^^^^^^<br>
+<br>
+Use ``__has_feature(c_thread_local)`` to determine if support for<br>
+``_Thread_local`` variables is enabled.<br>
+<br>
 Checks for Type Traits<br>
 ======================<br>
<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=179861&r1=179860&r2=179861&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPMacroExpansion.cpp?rev=179861&r1=179860&r2=179861&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/lib/Lex/PPMacroExpansion.cpp (original)<br>
+++ cfe/trunk/lib/Lex/PPMacroExpansion.cpp Fri Apr 19 12:00:31 2013<br>
@@ -751,6 +751,7 @@ 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>
            // C++11 features<br>
            .Case("cxx_access_control_sfinae", LangOpts.CPlusPlus11)<br>
            .Case("cxx_alias_templates", LangOpts.CPlusPlus11)<br>
@@ -768,7 +769,7 @@ static bool HasFeature(const Preprocesso<br>
            .Case("cxx_explicit_conversions", LangOpts.CPlusPlus11)<br>
            .Case("cxx_generalized_initializers", LangOpts.CPlusPlus11)<br>
            .Case("cxx_implicit_moves", LangOpts.CPlusPlus11)<br>
-         //.Case("cxx_inheriting_constructors", false)<br>
+           .Case("cxx_inheriting_constructors", LangOpts.CPlusPlus11)<br>
            .Case("cxx_inline_namespaces", LangOpts.CPlusPlus11)<br>
            .Case("cxx_lambdas", LangOpts.CPlusPlus11)<br>
            .Case("cxx_local_type_template_args", LangOpts.CPlusPlus11)<br>
@@ -782,6 +783,7 @@ 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_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_c1x.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/has_feature_c1x.c?rev=179861&r1=179860&r2=179861&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/has_feature_c1x.c?rev=179861&r1=179860&r2=179861&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/test/Lexer/has_feature_c1x.c (original)<br>
+++ cfe/trunk/test/Lexer/has_feature_c1x.c Fri Apr 19 12:00:31 2013<br>
@@ -37,6 +37,15 @@ int no_alignas();<br>
 // CHECK-1X: has_alignas<br>
 // CHECK-NO-1X: no_alignas<br>
<br>
+#if __has_feature(c_thread_local)<br>
+int has_thread_local();<br>
+#else<br>
+int no_thread_local();<br>
+#endif<br>
+<br>
+// CHECK-1X: has_thread_local<br>
+// CHECK-NO-1X: no_thread_local<br>
+<br>
 #if __STDC_VERSION__ > 199901L<br>
 int is_c1x();<br>
 #else<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=179861&r1=179860&r2=179861&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/has_feature_cxx0x.cpp?rev=179861&r1=179860&r2=179861&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/test/Lexer/has_feature_cxx0x.cpp (original)<br>
+++ cfe/trunk/test/Lexer/has_feature_cxx0x.cpp Fri Apr 19 12:00:31 2013<br>
@@ -272,3 +272,21 @@ int no_local_type_template_args();<br>
<br>
 // CHECK-0X: has_local_type_template_args<br>
 // CHECK-NO-0X: no_local_type_template_args<br>
+<br>
+#if __has_feature(cxx_inheriting_constructors)<br>
+int has_inheriting_constructors();<br>
+#else<br>
+int no_inheriting_constructors();<br>
+#endif<br>
+<br>
+// CHECK-0X: has_inheriting_constructors<br>
+// CHECK-NO-0X: no_inheriting_constructors<br>
+<br>
+#if __has_feature(cxx_thread_local)<br>
+int has_thread_local();<br>
+#else<br>
+int no_thread_local();<br>
+#endif<br>
+<br>
+// CHECK-0X: has_thread_local<br>
+// CHECK-NO-0X: no_thread_local<br>
<br>
Modified: cfe/trunk/www/cxx_status.html<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/www/cxx_status.html?rev=179861&r1=179860&r2=179861&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/www/cxx_status.html?rev=179861&r1=179860&r2=179861&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/www/cxx_status.html (original)<br>
+++ cfe/trunk/www/cxx_status.html Fri Apr 19 12:00:31 2013<br>
@@ -37,7 +37,10 @@<br>
<br>
 <h2 id="cxx11">C++11 implementation status</h2><br>
<br>
-  <p>Clang provides support for a number of features included in the new <a href="<a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=50372" target="_blank">http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=50372</a>">ISO C++ Standard, ISO/IEC 14882:2011</a>. The following table describes which C++11 features have been implemented in Clang and in which Clang versions they became available.</p><br>

+  <p>Clang implements all of the <a<br>
+    href="<a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=50372" target="_blank">http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=50372</a>">ISO<br>

+    C++ 2011 standard</a>. The following table describes the Clang version<br>
+  in which each feature became available.</p><br>
<br>
 <p>By default, Clang builds C++ code according to the C++98 standard, with many<br>
 C++11 features accepted as extensions. You can use Clang in C++11 mode with the<br>
@@ -47,7 +50,8 @@ patches are needed to make <a href="libs<br>
 work with Clang in C++11 mode. Patches are also needed to make<br>
 <a href="libstdc++4.6-clang11.patch">libstdc++-4.6</a>,<br>
 and <a href="libstdc++4.7-clang11.patch">libstdc++-4.7</a> work with Clang<br>
-releases prior to version 3.2 in C++11 mode.</p><br>
+releases prior to version 3.2 in C++11 mode. <tt>thread_local</tt> support<br>
+currently requires g++-4.8's C++ runtime library.</p><br>
<br>
 <table width="689" border="1" cellspacing="0"><br>
  <tr><br>
@@ -349,7 +353,7 @@ releases prior to version 3.2 in C++11 m<br>
     <tr><br>
       <td>Thread-local storage</td><br>
       <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm" target="_blank">http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm</a>">N2659</a></td><br>

-      <td class="none" align="center">No</td><br>
+      <td class="svn" align="center">SVN</td><br>
     </tr><br>
     <tr><br>
       <td>Dynamic initialization and destruction with concurrency</td><br>
<br>
Modified: cfe/trunk/www/index.html<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/www/index.html?rev=179861&r1=179860&r2=179861&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/www/index.html?rev=179861&r1=179860&r2=179861&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/www/index.html (original)<br>
+++ cfe/trunk/www/index.html Fri Apr 19 12:00:31 2013<br>
@@ -94,7 +94,7 @@<br>
    targeting X86-32, X86-64, and ARM (other targets may have caveats, but are<br>
    usually easy to fix).  If you are looking for source analysis or<br>
    source-to-source transformation tools, clang is probably a great<br>
-   solution for you.  Clang supports most of C++11, please see the <a<br>
+   solution for you.  Clang supports C++11, please see the <a<br>
     href="cxx_status.html">C++ status</a> page for more<br>
    information.</p><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>
</blockquote></div><br></div>