Skip to content

Commit

Permalink
Implement latest feature test macro recommendations, P0096R4.
Browse files Browse the repository at this point in the history
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@310694 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
zygoloid committed Aug 11, 2017
1 parent 5fd56ae commit 6a95db8
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 12 deletions.
5 changes: 3 additions & 2 deletions lib/Frontend/InitPreprocessor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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");
Expand All @@ -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");
Expand Down
18 changes: 11 additions & 7 deletions test/Lexer/cxx-features.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -26,11 +26,11 @@
#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

Expand All @@ -48,19 +48,19 @@

// 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

// range_based_for checked below

// 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

Expand All @@ -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

Expand Down Expand Up @@ -163,6 +163,10 @@
#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
Expand Down
11 changes: 8 additions & 3 deletions www/cxx_status.html
Original file line number Diff line number Diff line change
Expand Up @@ -854,9 +854,9 @@ <h2 id="ts">Technical specifications and standing documents</h2>
<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>
Expand All @@ -871,6 +871,11 @@ <h2 id="ts">Technical specifications and standing documents</h2>
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">
Expand Down

0 comments on commit 6a95db8

Please sign in to comment.