<div dir="ltr">Hi Richard,<div>After this patch check-all fails for me with:</div><div><div>  llvm-project/libcxx/utils/libcxx/test/config.py", line 467, in configure_features</div><div>    int(macros['__cpp_deduction_guides']) < 201611:</div><div>ValueError: invalid literal for int() with base 10: '201703L'</div></div></div><br><div class="gmail_quote"><div dir="ltr">On Wed, Jun 13, 2018 at 5:44 PM Richard Smith via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rsmith<br>
Date: Wed Jun 13 17:40:20 2018<br>
New Revision: 334677<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=334677&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=334677&view=rev</a><br>
Log:<br>
P0096R5, P0941R2: Update to match latest feature test macro specification.<br>
<br>
Modified:<br>
    cfe/trunk/lib/Frontend/InitPreprocessor.cpp<br>
    cfe/trunk/test/Lexer/cxx-features.cpp<br>
    cfe/trunk/www/cxx_status.html<br>
<br>
Modified: cfe/trunk/lib/Frontend/InitPreprocessor.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/InitPreprocessor.cpp?rev=334677&r1=334676&r2=334677&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/InitPreprocessor.cpp?rev=334677&r1=334676&r2=334677&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Frontend/InitPreprocessor.cpp (original)<br>
+++ cfe/trunk/lib/Frontend/InitPreprocessor.cpp Wed Jun 13 17:40:20 2018<br>
@@ -487,82 +487,86 @@ static void InitializeCPlusPlusFeatureTe<br>
                                                  MacroBuilder &Builder) {<br>
   // C++98 features.<br>
   if (LangOpts.RTTI)<br>
-    Builder.defineMacro("__cpp_rtti", "199711");<br>
+    Builder.defineMacro("__cpp_rtti", "199711L");<br>
   if (LangOpts.CXXExceptions)<br>
-    Builder.defineMacro("__cpp_exceptions", "199711");<br>
+    Builder.defineMacro("__cpp_exceptions", "199711L");<br>
<br>
   // C++11 features.<br>
   if (LangOpts.CPlusPlus11) {<br>
-    Builder.defineMacro("__cpp_unicode_characters", "200704");<br>
-    Builder.defineMacro("__cpp_raw_strings", "200710");<br>
-    Builder.defineMacro("__cpp_unicode_literals", "200710");<br>
-    Builder.defineMacro("__cpp_user_defined_literals", "200809");<br>
-    Builder.defineMacro("__cpp_lambdas", "200907");<br>
+    Builder.defineMacro("__cpp_unicode_characters", "200704L");<br>
+    Builder.defineMacro("__cpp_raw_strings", "200710L");<br>
+    Builder.defineMacro("__cpp_unicode_literals", "200710L");<br>
+    Builder.defineMacro("__cpp_user_defined_literals", "200809L");<br>
+    Builder.defineMacro("__cpp_lambdas", "200907L");<br>
     Builder.defineMacro("__cpp_constexpr",<br>
-                        LangOpts.CPlusPlus17 ? "201603" :<br>
-                        LangOpts.CPlusPlus14 ? "201304" : "200704");<br>
+                        LangOpts.CPlusPlus17 ? "201603L" :<br>
+                        LangOpts.CPlusPlus14 ? "201304L" : "200704");<br>
     Builder.defineMacro("__cpp_range_based_for",<br>
-                        LangOpts.CPlusPlus17 ? "201603" : "200907");<br>
+                        LangOpts.CPlusPlus17 ? "201603L" : "200907");<br>
     Builder.defineMacro("__cpp_static_assert",<br>
-                        LangOpts.CPlusPlus17 ? "201411" : "200410");<br>
-    Builder.defineMacro("__cpp_decltype", "200707");<br>
-    Builder.defineMacro("__cpp_attributes", "200809");<br>
-    Builder.defineMacro("__cpp_rvalue_references", "200610");<br>
-    Builder.defineMacro("__cpp_variadic_templates", "200704");<br>
-    Builder.defineMacro("__cpp_initializer_lists", "200806");<br>
-    Builder.defineMacro("__cpp_delegating_constructors", "200604");<br>
-    Builder.defineMacro("__cpp_nsdmi", "200809");<br>
-    Builder.defineMacro("__cpp_inheriting_constructors", "201511");<br>
-    Builder.defineMacro("__cpp_ref_qualifiers", "200710");<br>
-    Builder.defineMacro("__cpp_alias_templates", "200704");<br>
+                        LangOpts.CPlusPlus17 ? "201411L" : "200410");<br>
+    Builder.defineMacro("__cpp_decltype", "200707L");<br>
+    Builder.defineMacro("__cpp_attributes", "200809L");<br>
+    Builder.defineMacro("__cpp_rvalue_references", "200610L");<br>
+    Builder.defineMacro("__cpp_variadic_templates", "200704L");<br>
+    Builder.defineMacro("__cpp_initializer_lists", "200806L");<br>
+    Builder.defineMacro("__cpp_delegating_constructors", "200604L");<br>
+    Builder.defineMacro("__cpp_nsdmi", "200809L");<br>
+    Builder.defineMacro("__cpp_inheriting_constructors", "201511L");<br>
+    Builder.defineMacro("__cpp_ref_qualifiers", "200710L");<br>
+    Builder.defineMacro("__cpp_alias_templates", "200704L");<br>
   }<br>
   if (LangOpts.ThreadsafeStatics)<br>
-    Builder.defineMacro("__cpp_threadsafe_static_init", "200806");<br>
+    Builder.defineMacro("__cpp_threadsafe_static_init", "200806L");<br>
<br>
   // C++14 features.<br>
   if (LangOpts.CPlusPlus14) {<br>
-    Builder.defineMacro("__cpp_binary_literals", "201304");<br>
-    Builder.defineMacro("__cpp_digit_separators", "201309");<br>
-    Builder.defineMacro("__cpp_init_captures", "201304");<br>
-    Builder.defineMacro("__cpp_generic_lambdas", "201304");<br>
-    Builder.defineMacro("__cpp_decltype_auto", "201304");<br>
-    Builder.defineMacro("__cpp_return_type_deduction", "201304");<br>
-    Builder.defineMacro("__cpp_aggregate_nsdmi", "201304");<br>
-    Builder.defineMacro("__cpp_variable_templates", "201304");<br>
+    Builder.defineMacro("__cpp_binary_literals", "201304L");<br>
+    Builder.defineMacro("__cpp_digit_separators", "201309L");<br>
+    Builder.defineMacro("__cpp_init_captures", "201304L");<br>
+    Builder.defineMacro("__cpp_generic_lambdas", "201304L");<br>
+    Builder.defineMacro("__cpp_decltype_auto", "201304L");<br>
+    Builder.defineMacro("__cpp_return_type_deduction", "201304L");<br>
+    Builder.defineMacro("__cpp_aggregate_nsdmi", "201304L");<br>
+    Builder.defineMacro("__cpp_variable_templates", "201304L");<br>
   }<br>
   if (LangOpts.SizedDeallocation)<br>
-    Builder.defineMacro("__cpp_sized_deallocation", "201309");<br>
+    Builder.defineMacro("__cpp_sized_deallocation", "201309L");<br>
<br>
   // C++17 features.<br>
   if (LangOpts.CPlusPlus17) {<br>
-    Builder.defineMacro("__cpp_hex_float", "201603");<br>
-    Builder.defineMacro("__cpp_inline_variables", "201606");<br>
-    Builder.defineMacro("__cpp_noexcept_function_type", "201510");<br>
-    Builder.defineMacro("__cpp_capture_star_this", "201603");<br>
-    Builder.defineMacro("__cpp_if_constexpr", "201606");<br>
-    Builder.defineMacro("__cpp_deduction_guides", "201703");<br>
-    Builder.defineMacro("__cpp_template_auto", "201606");<br>
-    Builder.defineMacro("__cpp_namespace_attributes", "201411");<br>
-    Builder.defineMacro("__cpp_enumerator_attributes", "201411");<br>
-    Builder.defineMacro("__cpp_nested_namespace_definitions", "201411");<br>
-    Builder.defineMacro("__cpp_variadic_using", "201611");<br>
-    Builder.defineMacro("__cpp_aggregate_bases", "201603");<br>
-    Builder.defineMacro("__cpp_structured_bindings", "201606");<br>
-    Builder.defineMacro("__cpp_nontype_template_args", "201411");<br>
-    Builder.defineMacro("__cpp_fold_expressions", "201603");<br>
+    Builder.defineMacro("__cpp_hex_float", "201603L");<br>
+    Builder.defineMacro("__cpp_inline_variables", "201606L");<br>
+    Builder.defineMacro("__cpp_noexcept_function_type", "201510L");<br>
+    Builder.defineMacro("__cpp_capture_star_this", "201603L");<br>
+    Builder.defineMacro("__cpp_if_constexpr", "201606L");<br>
+    Builder.defineMacro("__cpp_deduction_guides", "201703L");<br>
+    Builder.defineMacro("__cpp_template_auto", "201606L"); // (old name)<br>
+    Builder.defineMacro("__cpp_namespace_attributes", "201411L");<br>
+    Builder.defineMacro("__cpp_enumerator_attributes", "201411L");<br>
+    Builder.defineMacro("__cpp_nested_namespace_definitions", "201411L");<br>
+    Builder.defineMacro("__cpp_variadic_using", "201611L");<br>
+    Builder.defineMacro("__cpp_aggregate_bases", "201603L");<br>
+    Builder.defineMacro("__cpp_structured_bindings", "201606L");<br>
+    Builder.defineMacro("__cpp_nontype_template_args", "201411L");<br>
+    Builder.defineMacro("__cpp_fold_expressions", "201603L");<br>
+    Builder.defineMacro("__cpp_guaranteed_copy_elision", "201606L");<br>
+    Builder.defineMacro("__cpp_nontype_template_parameter_auto", "201606L");<br>
   }<br>
   if (LangOpts.AlignedAllocation)<br>
-    Builder.defineMacro("__cpp_aligned_new", "201606");<br>
+    Builder.defineMacro("__cpp_aligned_new", "201606L");<br>
+  if (LangOpts.RelaxedTemplateTemplateArgs)<br>
+    Builder.defineMacro("__cpp_template_template_args", "201611L");<br>
<br>
   // TS features.<br>
   if (LangOpts.ConceptsTS)<br>
-    Builder.defineMacro("__cpp_experimental_concepts", "1");<br>
+    Builder.defineMacro("__cpp_experimental_concepts", "1L");<br>
   if (LangOpts.CoroutinesTS)<br>
     Builder.defineMacro("__cpp_coroutines", "201703L");<br>
<br>
   // Potential future breaking changes.<br>
   if (LangOpts.Char8)<br>
-    Builder.defineMacro("__cpp_char8_t", "201803");<br>
+    Builder.defineMacro("__cpp_char8_t", "201803L");<br>
 }<br>
<br>
 static void InitializePredefinedMacros(const TargetInfo &TI,<br>
<br>
Modified: cfe/trunk/test/Lexer/cxx-features.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/cxx-features.cpp?rev=334677&r1=334676&r2=334677&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/cxx-features.cpp?rev=334677&r1=334676&r2=334677&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/Lexer/cxx-features.cpp (original)<br>
+++ cfe/trunk/test/Lexer/cxx-features.cpp Wed Jun 13 17:40:20 2018<br>
@@ -1,9 +1,11 @@<br>
 // RUN: %clang_cc1 -std=c++98 -fcxx-exceptions -verify %s<br>
 // RUN: %clang_cc1 -std=c++11 -fcxx-exceptions -verify %s<br>
-// RUN: %clang_cc1 -std=c++1y -fcxx-exceptions -fsized-deallocation -verify %s<br>
 // RUN: %clang_cc1 -std=c++14 -fcxx-exceptions -fsized-deallocation -verify %s<br>
-// RUN: %clang_cc1 -std=c++1z -fcxx-exceptions -fsized-deallocation -verify %s<br>
-// RUN: %clang_cc1 -std=c++1z -fcxx-exceptions -fsized-deallocation -fconcepts-ts -DCONCEPTS_TS=1 -verify %s<br>
+// RUN: %clang_cc1 -std=c++17 -fcxx-exceptions -fsized-deallocation -verify %s<br>
+// RUN: %clang_cc1 -std=c++2a -fcxx-exceptions -fsized-deallocation -verify %s<br>
+//<br>
+// RUN: %clang_cc1 -std=c++17 -fcxx-exceptions -fsized-deallocation -frelaxed-template-template-args -DRELAXED_TEMPLATE_TEMPLATE_ARGS=1 -verify %s<br>
+// RUN: %clang_cc1 -std=c++17 -fcxx-exceptions -fsized-deallocation -fconcepts-ts -DCONCEPTS_TS=1 -verify %s<br>
 // RUN: %clang_cc1 -fno-rtti -fno-threadsafe-statics -verify %s -DNO_EXCEPTIONS -DNO_RTTI -DNO_THREADSAFE_STATICS -fsized-deallocation<br>
 // RUN: %clang_cc1 -fcoroutines-ts -DNO_EXCEPTIONS -DCOROUTINES -verify -fsized-deallocation %s<br>
 // RUN: %clang_cc1 -fchar8_t -DNO_EXCEPTIONS -DCHAR8_T -verify -fsized-deallocation %s<br>
@@ -12,13 +14,13 @@<br>
<br>
 // FIXME using `defined` in a macro has undefined behavior.<br>
 #if __cplusplus < 201103L<br>
-#define check(macro, cxx98, cxx11, cxx14, cxx1z) cxx98 == 0 ? defined(__cpp_##macro) : __cpp_##macro != cxx98<br>
+#define check(macro, cxx98, cxx11, cxx14, cxx17) cxx98 == 0 ? defined(__cpp_##macro) : __cpp_##macro != cxx98<br>
 #elif __cplusplus < 201402L<br>
-#define check(macro, cxx98, cxx11, cxx14, cxx1z) cxx11 == 0 ? defined(__cpp_##macro) : __cpp_##macro != cxx11<br>
+#define check(macro, cxx98, cxx11, cxx14, cxx17) cxx11 == 0 ? defined(__cpp_##macro) : __cpp_##macro != cxx11<br>
 #elif __cplusplus < 201406L<br>
-#define check(macro, cxx98, cxx11, cxx14, cxx1z) cxx14 == 0 ? defined(__cpp_##macro) : __cpp_##macro != cxx14<br>
+#define check(macro, cxx98, cxx11, cxx14, cxx17) cxx14 == 0 ? defined(__cpp_##macro) : __cpp_##macro != cxx14<br>
 #else<br>
-#define check(macro, cxx98, cxx11, cxx14, cxx1z) cxx1z == 0 ? defined(__cpp_##macro) : __cpp_##macro != cxx1z<br>
+#define check(macro, cxx98, cxx11, cxx14, cxx17) cxx17 == 0 ? defined(__cpp_##macro) : __cpp_##macro != cxx17<br>
 #endif<br>
<br>
 // --- C++17 features ---<br>
@@ -35,6 +37,10 @@<br>
 #error "wrong value for __cpp_aligned_new"<br>
 #endif<br>
<br>
+#if check(guaranteed_copy_elision, 0, 0, 0, 201606)<br>
+#error "wrong value for __cpp_guaranteed_copy_elision"<br>
+#endif<br>
+<br>
 #if check(noexcept_function_type, 0, 0, 0, 201510)<br>
 #error "wrong value for __cpp_noexcept_function_type"<br>
 #endif<br>
@@ -61,6 +67,12 @@<br>
 #error "wrong value for __cpp_deduction_guides"<br>
 #endif<br>
<br>
+#if check(nontype_template_parameter_auto, 0, 0, 0, 201606)<br>
+#error "wrong value for __cpp_nontype_template_parameter_auto"<br>
+#endif<br>
+<br>
+// This is the old name (from P0096R4) for<br>
+// __cpp_nontype_template_parameter_auto<br>
 #if check(template_auto, 0, 0, 0, 201606)<br>
 #error "wrong value for __cpp_template_auto"<br>
 #endif<br>
@@ -75,6 +87,7 @@<br>
 #error "wrong value for __cpp_enumerator_attributes"<br>
 #endif<br>
<br>
+// This is an old name (from P0096R4), now removed from SD-6.<br>
 #if check(nested_namespace_definitions, 0, 0, 0, 201411)<br>
 #error "wrong value for __cpp_nested_namespace_definitions"<br>
 #endif<br>
@@ -97,7 +110,9 @@<br>
 #error "wrong value for __cpp_nontype_template_args"<br>
 #endif<br>
<br>
-#if check(template_template_args, 0, 0, 0, 0) // FIXME: should be 201611 when feature is enabled<br>
+#if defined(RELAXED_TEMPLATE_TEMPLATE_ARGS) \<br>
+    ? check(template_template_args, 0, 0, 0, 201611) \<br>
+    : check(template_template_args, 0, 0, 0, 0)<br>
 #error "wrong value for __cpp_template_template_args"<br>
 #endif<br>
<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=334677&r1=334676&r2=334677&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/www/cxx_status.html?rev=334677&r1=334676&r2=334677&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/www/cxx_status.html (original)<br>
+++ cfe/trunk/www/cxx_status.html Wed Jun 13 17:40:20 2018<br>
@@ -962,7 +962,7 @@ as the draft C++2a standard evolves.<br>
     <tr><br>
       <td>Feature test macros</td><br>
       <td><a href="<a href="http://wg21.link/p0941r2" rel="noreferrer" target="_blank">http://wg21.link/p0941r2</a>">P0941R2</a></td><br>
-      <td class="na" align="center"><a href="#sd6">(see below)</a></td><br>
+      <td class="full" align="center"><a href="#sd6">(see below)</a></td><br>
     </tr><br>
     <tr><br>
       <td><tt>explicit(bool)</tt></td><br>
@@ -1002,9 +1002,9 @@ and library features that are not part o<br>
     <th>Available in Clang?</th><br>
  </tr><br>
     <tr id="sd6"><br>
-      <td rowspan="4">SD-6: SG10 feature test recommendations</td><br>
-      <td rowspan="4"><a href="<a href="http://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations" rel="noreferrer" target="_blank">http://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations</a>">SD-6</a></td><br>
-      <td rowspan="4">N/A</td><br>
+      <td rowspan="5">SD-6: SG10 feature test recommendations</td><br>
+      <td rowspan="5"><a href="<a href="http://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations" rel="noreferrer" target="_blank">http://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations</a>">SD-6</a></td><br>
+      <td rowspan="5">N/A</td><br>
       <td class="full" align="center"><br>
         Clang 3.4 (<a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3745" rel="noreferrer" target="_blank">http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3745</a>">N3745</a>)</br><br>
       </td><br>
@@ -1024,6 +1024,11 @@ and library features that are not part o<br>
         Clang 5 (<a href="<a href="http://wg21.link/p0096r4" rel="noreferrer" target="_blank">http://wg21.link/p0096r4</a>">P0096R4</a>)</a><br>
       </td><br>
     </tr><br>
+    <tr><br>
+      <td class="svn" align="center"><br>
+        SVN (<a href="<a href="http://wg21.link/p0096r5" rel="noreferrer" target="_blank">http://wg21.link/p0096r5</a>">P0096R5</a>)</a><br>
+      </td><br>
+    </tr><br>
     <!-- FIXME: Implement latest recommendations.<br>
     <tr><br>
       <td class="svn" align="center"><br>
@@ -1033,7 +1038,7 @@ and library features that are not part o<br>
     --><br>
     <!-- No compiler support is known to be needed for:<br>
            * Concurrency TS<br>
-           * Parallelism TS<br>
+           * Parallelism TS (v1, v2)<br>
            * Ranges TS<br>
            * Networking TS<br>
            * File System TS<br>
@@ -1058,20 +1063,20 @@ and library features that are not part o<br>
       <td class="none" align="center">No</td><br>
     </tr><br>
     <tr><br>
-      <td>[DRAFT TS] Library Fundamentals, Version 2 (<tt>source_location</tt>)</td><br>
-     <td><a href="<a href="http://wg21.link/n4600" rel="noreferrer" target="_blank">http://wg21.link/n4600</a>">N4600</a></td><br>
+      <td>[TS] Library Fundamentals, Version 2 (<tt>source_location</tt>)</td><br>
+     <td><a href="<a href="http://wg21.link/n4617" rel="noreferrer" target="_blank">http://wg21.link/n4617</a>">N4617</a></td><br>
       <td>N/A</td><br>
       <td class="none" align="center">No</td><br>
     </tr><br>
     <tr><br>
-      <td>[DRAFT TS] Modules</td><br>
-      <td><a href="<a href="http://wg21.link/n4667" rel="noreferrer" target="_blank">http://wg21.link/n4667</a>">N4667</a></td><br>
+      <td>[TS] Modules</td><br>
+      <td><a href="<a href="http://wg21.link/n4720" rel="noreferrer" target="_blank">http://wg21.link/n4720</a>">N4720</a></td><br>
       <td><tt>-fmodules-ts</tt></td><br>
       <td class="none" align="center">WIP</td><br>
     </tr><br>
     <tr><br>
       <td>[DRAFT TS] Reflection</td><br>
-      <td><a href="<a href="http://wg21.link/p0194r6" rel="noreferrer" target="_blank">http://wg21.link/p0194r6</a>">P0194R6</a></td><br>
+      <td><a href="<a href="http://wg21.link/n4746" rel="noreferrer" target="_blank">http://wg21.link/n4746</a>">N4746</a></td><br>
       <td></td><br>
       <td class="none" align="center">No</td><br>
     </tr><br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div>