[clang] df2e2ab - Implement latest C++ feature test macro recommendations.
Richard Smith via cfe-commits
cfe-commits at lists.llvm.org
Thu Dec 19 12:59:29 PST 2019
Author: Richard Smith
Date: 2019-12-19T12:59:13-08:00
New Revision: df2e2ab07b48b81fb440e3522c6e639e8ef8f2e9
URL: https://github.com/llvm/llvm-project/commit/df2e2ab07b48b81fb440e3522c6e639e8ef8f2e9
DIFF: https://github.com/llvm/llvm-project/commit/df2e2ab07b48b81fb440e3522c6e639e8ef8f2e9.diff
LOG: Implement latest C++ feature test macro recommendations.
We don't yet advertise init capture packs, because I found some bugs
while testing it. We reject-valid and then crash on both of these:
template<int ...a> auto x = [...y = a] {};
template<int ...a> auto x = [y = a...] {};
Added:
Modified:
clang/lib/Frontend/InitPreprocessor.cpp
clang/test/Lexer/cxx-features.cpp
clang/www/cxx_status.html
Removed:
################################################################################
diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp
index 79360f89fc82..14c9ccd8a663 100644
--- a/clang/lib/Frontend/InitPreprocessor.cpp
+++ b/clang/lib/Frontend/InitPreprocessor.cpp
@@ -484,6 +484,7 @@ static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts,
LangOpts.CPlusPlus2a ? "201907L" :
LangOpts.CPlusPlus17 ? "201603L" :
LangOpts.CPlusPlus14 ? "201304L" : "200704");
+ Builder.defineMacro("__cpp_constexpr_in_decltype", "201711L");
Builder.defineMacro("__cpp_range_based_for",
LangOpts.CPlusPlus17 ? "201603L" : "200907");
Builder.defineMacro("__cpp_static_assert",
@@ -506,8 +507,9 @@ static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts,
if (LangOpts.CPlusPlus14) {
Builder.defineMacro("__cpp_binary_literals", "201304L");
Builder.defineMacro("__cpp_digit_separators", "201309L");
- Builder.defineMacro("__cpp_init_captures", "201304L");
- Builder.defineMacro("__cpp_generic_lambdas", "201304L");
+ Builder.defineMacro("__cpp_init_captures", "201304L"); // (not latest)
+ Builder.defineMacro("__cpp_generic_lambdas",
+ LangOpts.CPlusPlus2a ? "201707L" : "201304L");
Builder.defineMacro("__cpp_decltype_auto", "201304L");
Builder.defineMacro("__cpp_return_type_deduction", "201304L");
Builder.defineMacro("__cpp_aggregate_nsdmi", "201304L");
@@ -523,7 +525,7 @@ static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts,
Builder.defineMacro("__cpp_noexcept_function_type", "201510L");
Builder.defineMacro("__cpp_capture_star_this", "201603L");
Builder.defineMacro("__cpp_if_constexpr", "201606L");
- Builder.defineMacro("__cpp_deduction_guides", "201703L");
+ Builder.defineMacro("__cpp_deduction_guides", "201703L"); // (not latest)
Builder.defineMacro("__cpp_template_auto", "201606L"); // (old name)
Builder.defineMacro("__cpp_namespace_attributes", "201411L");
Builder.defineMacro("__cpp_enumerator_attributes", "201411L");
@@ -531,7 +533,8 @@ static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts,
Builder.defineMacro("__cpp_variadic_using", "201611L");
Builder.defineMacro("__cpp_aggregate_bases", "201603L");
Builder.defineMacro("__cpp_structured_bindings", "201606L");
- Builder.defineMacro("__cpp_nontype_template_args", "201411L");
+ Builder.defineMacro("__cpp_nontype_template_args",
+ "201411L"); // (not latest)
Builder.defineMacro("__cpp_fold_expressions", "201603L");
Builder.defineMacro("__cpp_guaranteed_copy_elision", "201606L");
Builder.defineMacro("__cpp_nontype_template_parameter_auto", "201606L");
@@ -543,10 +546,17 @@ static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts,
// C++20 features.
if (LangOpts.CPlusPlus2a) {
+ //Builder.defineMacro("__cpp_aggregate_paren_init", "201902L");
+ //Builder.defineMacro("__cpp_concepts", "201907L");
Builder.defineMacro("__cpp_conditional_explicit", "201806L");
+ //Builder.defineMacro("__cpp_consteval", "201811L");
Builder.defineMacro("__cpp_constexpr_dynamic_alloc", "201907L");
Builder.defineMacro("__cpp_constinit", "201907L");
+ //Builder.defineMacro("__cpp_coroutines", "201902L");
+ Builder.defineMacro("__cpp_designated_initializers", "201707L");
Builder.defineMacro("__cpp_impl_three_way_comparison", "201907L");
+ //Builder.defineMacro("__cpp_modules", "201907L");
+ //Builder.defineMacro("__cpp_using_enum", "201907L");
}
if (LangOpts.Char8)
Builder.defineMacro("__cpp_char8_t", "201811L");
diff --git a/clang/test/Lexer/cxx-features.cpp b/clang/test/Lexer/cxx-features.cpp
index 077f3155fee9..e771d891a14b 100644
--- a/clang/test/Lexer/cxx-features.cpp
+++ b/clang/test/Lexer/cxx-features.cpp
@@ -34,14 +34,30 @@
#error "wrong value for __cpp_char8_t"
#endif
+#if check(conditional_explicit, 0, 0, 0, 0, 201806)
+#error "wrong value for __cpp_conditional_explicit"
+#endif
+
+// constexpr checked below
+
#if check(constexpr_dynamic_alloc, 0, 0, 0, 0, 201907)
#error "wrong value for __cpp_constexpr_dynamic_alloc"
#endif
+#if check(constexpr_in_decltype, 0, 201711, 201711, 201711, 201711)
+#error "wrong value for __cpp_constexpr_in_decltype"
+#endif
+
#if check(constinit, 0, 0, 0, 0, 201907)
#error "wrong value for __cpp_constinit"
#endif
+#if check(designated_initializers, 0, 0, 0, 0, 201707)
+#error "wrong value for __cpp_designated_initializers"
+#endif
+
+// generic_lambdas checked below
+
#if check(impl_destroying_delete, 201806, 201806, 201806, 201806, 201806)
#error "wrong value for __cpp_impl_destroying_delete"
#endif
@@ -158,7 +174,7 @@
#error "wrong value for __cpp_init_captures"
#endif
-#if check(generic_lambdas, 0, 0, 201304, 201304, 201304)
+#if check(generic_lambdas, 0, 0, 201304, 201304, 201707)
#error "wrong value for __cpp_generic_lambdas"
#endif
diff --git a/clang/www/cxx_status.html b/clang/www/cxx_status.html
index f46733e27a0f..6b181e7f8dbb 100755
--- a/clang/www/cxx_status.html
+++ b/clang/www/cxx_status.html
@@ -1227,22 +1227,15 @@ <h2 id="ts">Technical specifications and standing documents</h2>
</td>
</tr>
<tr>
- <td class="partial" align="center">
- WIP (<a href="https://wg21.link/p1353r0">P1353R0</a>)
- </td>
- </tr>
- <tr>
- <td class="none" align="center">
- No (<a href="https://wg21.link/p1902r1">P1902R1</a>)</a>
+ <td class="full" align="center">
+ Clang 9 (<a href="https://wg21.link/p1353r0">P1353R0</a>)
</td>
</tr>
- <!-- FIXME: Implement latest recommendations.
<tr>
<td class="svn" align="center">
- SVN (<a href="https://wg21.link/p0096r3">P0096R3</a>)</a>
+ SVN (<a href="https://wg21.link/p1902r1">P1902R1</a>)</a>
</td>
</tr>
- -->
<!-- No compiler support is known to be needed for:
* Concurrency TS
* Parallelism TS (v1, v2)
More information about the cfe-commits
mailing list