diff options
| author | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-08-11 03:39:40 +0000 |
|---|---|---|
| committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-08-11 03:39:40 +0000 |
| commit | 9d07ae77e756111537e9e7bdcc0ed0cfbe42927e (patch) | |
| tree | 2f6f9050431a072e115ee64e3a0cb7824d239e93 /clang | |
| parent | b9e5af2123fb1d2cbee7684e3cb37e6fbc5dc3d0 (diff) | |
| download | bcm5719-llvm-9d07ae77e756111537e9e7bdcc0ed0cfbe42927e.tar.gz bcm5719-llvm-9d07ae77e756111537e9e7bdcc0ed0cfbe42927e.zip | |
Implement latest feature test macro recommendations, P0096R4.
llvm-svn: 310694
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/Frontend/InitPreprocessor.cpp | 5 | ||||
| -rw-r--r-- | clang/test/Lexer/cxx-features.cpp | 18 | ||||
| -rw-r--r-- | clang/www/cxx_status.html | 11 |
3 files changed, 22 insertions, 12 deletions
diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp index 493144fb953..28656667399 100644 --- a/clang/lib/Frontend/InitPreprocessor.cpp +++ b/clang/lib/Frontend/InitPreprocessor.cpp @@ -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"); diff --git a/clang/test/Lexer/cxx-features.cpp b/clang/test/Lexer/cxx-features.cpp index e9a514db758..04821bdb227 100644 --- a/clang/test/Lexer/cxx-features.cpp +++ b/clang/test/Lexer/cxx-features.cpp @@ -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 @@ -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 @@ -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 @@ -56,11 +56,11 @@ // 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 @@ -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 diff --git a/clang/www/cxx_status.html b/clang/www/cxx_status.html index 8e7b35920e9..539af819e0b 100644 --- a/clang/www/cxx_status.html +++ b/clang/www/cxx_status.html @@ -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"> |

