From b438e62aba80a3beb76f62bc3cb421191d018173 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Sat, 28 Sep 2013 04:37:56 +0000 Subject: [PATCH] Mark lambda init-captures as complete. llvm-svn: 191607 --- clang/lib/Lex/PPMacroExpansion.cpp | 9 +++++---- clang/test/Lexer/has_extension_cxx.cpp | 9 ++++++++- clang/test/Lexer/has_feature_cxx0x.cpp | 10 ++++++++++ clang/www/cxx_status.html | 4 +++- 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/clang/lib/Lex/PPMacroExpansion.cpp b/clang/lib/Lex/PPMacroExpansion.cpp index 2b6f33951b19..2717846c58b8 100644 --- a/clang/lib/Lex/PPMacroExpansion.cpp +++ b/clang/lib/Lex/PPMacroExpansion.cpp @@ -945,7 +945,7 @@ static bool HasFeature(const Preprocessor &PP, const IdentifierInfo *II) { .Case("cxx_rvalue_references", LangOpts.CPlusPlus11) .Case("cxx_strong_enums", LangOpts.CPlusPlus11) .Case("cxx_static_assert", LangOpts.CPlusPlus11) - .Case("cxx_thread_local", + .Case("cxx_thread_local", LangOpts.CPlusPlus11 && PP.getTargetInfo().isTLSSupported()) .Case("cxx_trailing_return", LangOpts.CPlusPlus11) .Case("cxx_unicode_literals", LangOpts.CPlusPlus11) @@ -956,11 +956,11 @@ static bool HasFeature(const Preprocessor &PP, const IdentifierInfo *II) { .Case("cxx_aggregate_nsdmi", LangOpts.CPlusPlus1y) .Case("cxx_binary_literals", LangOpts.CPlusPlus1y) .Case("cxx_contextual_conversions", LangOpts.CPlusPlus1y) - //.Case("cxx_generic_lambda", LangOpts.CPlusPlus1y) - //.Case("cxx_init_capture", LangOpts.CPlusPlus1y) + //.Case("cxx_generic_lambdas", LangOpts.CPlusPlus1y) + .Case("cxx_init_captures", LangOpts.CPlusPlus1y) .Case("cxx_relaxed_constexpr", LangOpts.CPlusPlus1y) .Case("cxx_return_type_deduction", LangOpts.CPlusPlus1y) - //.Case("cxx_runtime_array", LangOpts.CPlusPlus1y) + //.Case("cxx_runtime_arrays", LangOpts.CPlusPlus1y) .Case("cxx_variable_templates", LangOpts.CPlusPlus1y) // Type traits .Case("has_nothrow_assign", LangOpts.CPlusPlus) @@ -1036,6 +1036,7 @@ static bool HasExtension(const Preprocessor &PP, const IdentifierInfo *II) { .Case("cxx_rvalue_references", LangOpts.CPlusPlus) // C++1y features supported by other languages as extensions. .Case("cxx_binary_literals", true) + .Case("cxx_init_captures", LangOpts.CPlusPlus11) .Case("cxx_variable_templates", true) .Default(false); } diff --git a/clang/test/Lexer/has_extension_cxx.cpp b/clang/test/Lexer/has_extension_cxx.cpp index 6646a5ab5817..d3483df94c5a 100644 --- a/clang/test/Lexer/has_extension_cxx.cpp +++ b/clang/test/Lexer/has_extension_cxx.cpp @@ -1,4 +1,5 @@ -// RUN: %clang_cc1 -E %s -o - | FileCheck %s +// RUN: %clang_cc1 -std=c++98 -E %s -o - | FileCheck %s +// RUN: %clang_cc1 -std=c++11 -E %s -o - | FileCheck %s --check-prefix=CHECK11 // CHECK: c_static_assert #if __has_extension(c_static_assert) @@ -54,3 +55,9 @@ int has_binary_literals(); #if __has_extension(cxx_variable_templates) int has_variable_templates(); #endif + +// CHECK-NOT: has_init_captures +// CHECK11: has_init_captures +#if __has_extension(cxx_init_captures) +int has_init_captures(); +#endif diff --git a/clang/test/Lexer/has_feature_cxx0x.cpp b/clang/test/Lexer/has_feature_cxx0x.cpp index 821b5b5f5704..b2fe842bd678 100644 --- a/clang/test/Lexer/has_feature_cxx0x.cpp +++ b/clang/test/Lexer/has_feature_cxx0x.cpp @@ -386,3 +386,13 @@ int no_variable_templates(); // CHECK-1Y: has_variable_templates // CHECK-11: no_variable_templates // CHECK-NO-11: no_variable_templates + +#if __has_feature(cxx_init_captures) +int has_init_captures(); +#else +int no_init_captures(); +#endif + +// CHECK-1Y: has_init_captures +// CHECK-11: no_init_captures +// CHECK-NO-11: no_init_captures diff --git a/clang/www/cxx_status.html b/clang/www/cxx_status.html index d1aa45d88c31..33430b9129f6 100644 --- a/clang/www/cxx_status.html +++ b/clang/www/cxx_status.html @@ -433,15 +433,17 @@ available.

Return type deduction for normal functions SVN + Initialized lambda captures N3648 - No + SVN Generic lambdas