]> granicus.if.org Git - clang/commitdiff
Implement latest feature test macro recommendations, P0096R4.
authorRichard Smith <richard-llvm@metafoo.co.uk>
Fri, 11 Aug 2017 03:39:40 +0000 (03:39 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Fri, 11 Aug 2017 03:39:40 +0000 (03:39 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@310694 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Frontend/InitPreprocessor.cpp
test/Lexer/cxx-features.cpp
www/cxx_status.html

index 493144fb953a55c0782ee5702f504ca2ed5e3a8a..286566673991247b704fd4cb62a5f79e3f1a7b8d 100644 (file)
@@ -498,6 +498,8 @@ static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts,
     Builder.defineMacro("__cpp_ref_qualifiers", "200710");
     Builder.defineMacro("__cpp_alias_templates", "200704");
   }
+  if (LangOpts.ThreadsafeStatics)
+    Builder.defineMacro("__cpp_threadsafe_static_init", "200806");
 
   // C++14 features.
   if (LangOpts.CPlusPlus14) {
@@ -520,6 +522,7 @@ static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts,
     Builder.defineMacro("__cpp_noexcept_function_type", "201510");
     Builder.defineMacro("__cpp_capture_star_this", "201603");
     Builder.defineMacro("__cpp_if_constexpr", "201606");
+    Builder.defineMacro("__cpp_deduction_guides", "201611");
     Builder.defineMacro("__cpp_template_auto", "201606");
     Builder.defineMacro("__cpp_namespace_attributes", "201411");
     Builder.defineMacro("__cpp_enumerator_attributes", "201411");
@@ -529,8 +532,6 @@ static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts,
     Builder.defineMacro("__cpp_structured_bindings", "201606");
     Builder.defineMacro("__cpp_nontype_template_args", "201411");
     Builder.defineMacro("__cpp_fold_expressions", "201603");
-    // FIXME: This is not yet listed in SD-6.
-    Builder.defineMacro("__cpp_deduction_guides", "201611");
   }
   if (LangOpts.AlignedAllocation)
     Builder.defineMacro("__cpp_aligned_new", "201606");
index e9a514db758b173017cbbf1d006a69cb5a03fd07..04821bdb2277597d141999bcb0fc4f6602646a36 100644 (file)
@@ -4,7 +4,7 @@
 // RUN: %clang_cc1 -std=c++14 -fcxx-exceptions -fsized-deallocation -verify %s
 // RUN: %clang_cc1 -std=c++1z -fcxx-exceptions -fsized-deallocation -verify %s
 // RUN: %clang_cc1 -std=c++1z -fcxx-exceptions -fsized-deallocation -fconcepts-ts -DCONCEPTS_TS=1 -verify %s
-// RUN: %clang_cc1 -fno-rtti -verify %s -DNO_EXCEPTIONS -DNO_RTTI
+// RUN: %clang_cc1 -fno-rtti -fno-threadsafe-statics -verify %s -DNO_EXCEPTIONS -DNO_RTTI -DNO_THREADSAFE_STATICS
 // RUN: %clang_cc1 -fcoroutines-ts -DNO_EXCEPTIONS -DCOROUTINES -verify %s
 
 // expected-no-diagnostics
 #error "wrong value for __cpp_hex_float"
 #endif
 
-#if check(inline_variables, 0, 0, 0, 201606) // FIXME: provisional name
+#if check(inline_variables, 0, 0, 0, 201606)
 #error "wrong value for __cpp_inline_variables"
 #endif
 
-#if check(aligned_new, 0, 0, 0, 201606) // FIXME: provisional name
+#if check(aligned_new, 0, 0, 0, 201606)
 #error "wrong value for __cpp_aligned_new"
 #endif
 
@@ -48,7 +48,7 @@
 
 // constexpr checked below
 
-#if check(if_constexpr, 0, 0, 0, 201606) // FIXME: provisional name
+#if check(if_constexpr, 0, 0, 0, 201606)
 #error "wrong value for __cpp_if_constexpr"
 #endif
 
 
 // static_assert checked below
 
-#if check(deduction_guides, 0, 0, 0, 201611) // FIXME: provisional name
+#if check(deduction_guides, 0, 0, 0, 201611)
 #error "wrong value for __cpp_deduction_guides"
 #endif
 
-#if check(template_auto, 0, 0, 0, 201606) // FIXME: provisional name
+#if check(template_auto, 0, 0, 0, 201606)
 #error "wrong value for __cpp_template_auto"
 #endif
 
@@ -80,7 +80,7 @@
 
 // inheriting_constructors checked below
 
-#if check(variadic_using, 0, 0, 0, 201611) // FIXME: provisional name
+#if check(variadic_using, 0, 0, 0, 201611)
 #error "wrong value for __cpp_variadic_using"
 #endif
 
 #error "wrong value for __cpp_user_defined_literals"
 #endif
 
+#if defined(NO_THREADSAFE_STATICS) ? check(threadsafe_static_init, 0, 0, 0, 0) : check(threadsafe_static_init, 200806, 200806, 200806, 200806)
+#error "wrong value for __cpp_threadsafe_static_init"
+#endif
+
 #if check(lambdas, 0, 200907, 200907, 200907)
 #error "wrong value for __cpp_lambdas"
 #endif
index 8e7b35920e9bd9bfdc724bad0257a9e88671f1c4..539af819e0bd89de282975d6582aeb0a7166190a 100644 (file)
@@ -854,9 +854,9 @@ and library features that are not part of standard C++.</p>
     <th>Available in Clang?</th>
  </tr>
     <tr>
-      <td rowspan="3">SD-6: SG10 feature test recommendations</td>
-      <td rowspan="3"><a href="http://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations">SD-6</a></td>
-      <td rowspan="3">N/A</td>
+      <td rowspan="4">SD-6: SG10 feature test recommendations</td>
+      <td rowspan="4"><a href="http://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations">SD-6</a></td>
+      <td rowspan="4">N/A</td>
       <td class="full" align="center">
         Clang 3.4 (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3745">N3745</a>)</br>
       </td>
@@ -871,6 +871,11 @@ and library features that are not part of standard C++.</p>
         Clang 4 (<a href="http://wg21.link/p0096r3">P0096R3</a>)</a>
       </td>
     </tr>
+    <tr>
+      <td class="svn" align="center">
+        Clang 5 (<a href="http://wg21.link/p0096r4">P0096R4</a>)</a>
+      </td>
+    </tr>
     <!-- FIXME: Implement latest recommendations.
     <tr>
       <td class="svn" align="center">