Please pull this onto the 3.3 branch.<br><br><div class="gmail_quote">On Tue, May 7, 2013 at 12:32 PM, Richard Smith <span dir="ltr"><<a href="mailto:richard-llvm@metafoo.co.uk" target="_blank">richard-llvm@metafoo.co.uk</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rsmith<br>
Date: Tue May  7 14:32:56 2013<br>
New Revision: 181342<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=181342&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=181342&view=rev</a><br>
Log:<br>
C++1y: Update __cplusplus to temporary value 201305L to allow detection of provisional C++1y support.<br>
Add __has_feature and __has_extension checks for C++1y features (based on the provisional names from<br>
the C++ features study group), and update documentation to match.<br>
<br>
Modified:<br>
    cfe/trunk/docs/LanguageExtensions.rst<br>
    cfe/trunk/lib/Frontend/InitPreprocessor.cpp<br>
    cfe/trunk/lib/Lex/PPMacroExpansion.cpp<br>
    cfe/trunk/test/Lexer/has_extension_cxx.cpp<br>
    cfe/trunk/test/Lexer/has_feature_cxx0x.cpp<br>
    cfe/trunk/test/Preprocessor/init.c<br>
<br>
Modified: cfe/trunk/docs/LanguageExtensions.rst<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/LanguageExtensions.rst?rev=181342&r1=181341&r2=181342&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/LanguageExtensions.rst?rev=181342&r1=181341&r2=181342&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/docs/LanguageExtensions.rst (original)<br>
+++ cfe/trunk/docs/LanguageExtensions.rst Tue May  7 14:32:56 2013<br>
@@ -779,6 +779,98 @@ Use ``__has_feature(cxx_variadic_templat<br>
 ``__has_extension(cxx_variadic_templates)`` to determine if support for<br>
 variadic templates is enabled.<br>
<br>
+C++1y<br>
+-----<br>
+<br>
+The features listed below are part of the committee draft for the C++1y<br>
+standard.  As a result, all these features are enabled with the ``-std=c++1y``<br>
+or ``-std=gnu++1y`` option when compiling C++ code.<br>
+<br>
+C++1y binary literals<br>
+^^^^^^^^^^^^^^^^^^^^^<br>
+<br>
+Use ``__has_feature(cxx_binary_literals)`` or<br>
+``__has_extension(cxx_binary_literals)`` to determine whether<br>
+binary literals (for instance, ``0b10010``) are recognized. Clang supports this<br>
+feature as an extension in all language modes.<br>
+<br>
+C++1y contextual conversions<br>
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^<br>
+<br>
+Use ``__has_feature(cxx_contextual_conversions)`` or<br>
+``__has_extension(cxx_contextual_conversions)`` to determine if the C++1y rules<br>
+are used when performing an implicit conversion for an array bound in a<br>
+*new-expression*, the operand of a *delete-expression*, an integral constant<br>
+expression, or a condition in a ``switch`` statement. Clang does not yet<br>
+support this feature.<br>
+<br>
+C++1y decltype(auto)<br>
+^^^^^^^^^^^^^^^^^^^^<br>
+<br>
+Use ``__has_feature(cxx_decltype_auto)`` or<br>
+``__has_extension(cxx_decltype_auto)`` to determine if support<br>
+for the ``decltype(auto)`` placeholder type is enabled.<br>
+<br>
+C++1y default initializers for aggregates<br>
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^<br>
+<br>
+Use ``__has_feature(cxx_aggregate_nsdmi)`` or<br>
+``__has_extension(cxx_aggregate_nsdmi)`` to determine if support<br>
+for default initializers in aggregate members is enabled.<br>
+<br>
+C++1y generalized lambda capture<br>
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^<br>
+<br>
+Use ``__has_feature(cxx_generalized_capture)`` or<br>
+``__has_extension(cxx_generalized_capture`` to determine if support for<br>
+generalized lambda captures is enabled<br>
+(for instance, ``[n(0)] { return ++n; }``).<br>
+Clang does not yet support this feature.<br>
+<br>
+C++1y generic lambdas<br>
+^^^^^^^^^^^^^^^^^^^^^<br>
+<br>
+Use ``__has_feature(cxx_generic_lambda)`` or<br>
+``__has_extension(cxx_generic_lambda)`` to determine if support for generic<br>
+(polymorphic) lambdas is enabled<br>
+(for instance, ``[] (auto x) { return x + 1; }``).<br>
+Clang does not yet support this feature.<br>
+<br>
+C++1y relaxed constexpr<br>
+^^^^^^^^^^^^^^^^^^^^^^^<br>
+<br>
+Use ``__has_feature(cxx_relaxed_constexpr)`` or<br>
+``__has_extension(cxx_relaxed_constexpr)`` to determine if variable<br>
+declarations, local variable modification, and control flow constructs<br>
+are permitted in ``constexpr`` functions.<br>
+Clang's implementation of this feature is incomplete.<br>
+<br>
+C++1y return type deduction<br>
+^^^^^^^^^^^^^^^^^^^^^^^^^^^<br>
+<br>
+Use ``__has_feature(cxx_return_type_deduction)`` or<br>
+``__has_extension(cxx_return_type_deduction)`` to determine if support<br>
+for return type deduction for functions (using ``auto`` as a return type)<br>
+is enabled.<br>
+Clang's implementation of this feature is incomplete.<br>
+<br>
+C++1y runtime-sized arrays<br>
+^^^^^^^^^^^^^^^^^^^^^^^^^^<br>
+<br>
+Use ``__has_feature(cxx_runtime_array)`` or<br>
+``__has_extension(cxx_runtime_array)`` to determine if support<br>
+for arrays of runtime bound (a restricted form of variable-length arrays)<br>
+is enabled.<br>
+Clang's implementation of this feature is incomplete.<br>
+<br>
+C++1y variable templates<br>
+^^^^^^^^^^^^^^^^^^^^^^^^<br>
+<br>
+Use ``__has_feature(cxx_variable_templates)`` or<br>
+``__has_extension(cxx_variable_templates)`` to determine if support for<br>
+templated variable declarations is enabled.<br>
+Clang does not yet support this feature.<br>
+<br>
 C11<br>
 ---<br>
<br>
<br>
Modified: cfe/trunk/lib/Frontend/InitPreprocessor.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/InitPreprocessor.cpp?rev=181342&r1=181341&r2=181342&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/InitPreprocessor.cpp?rev=181342&r1=181341&r2=181342&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/lib/Frontend/InitPreprocessor.cpp (original)<br>
+++ cfe/trunk/lib/Frontend/InitPreprocessor.cpp Tue May  7 14:32:56 2013<br>
@@ -302,12 +302,13 @@ static void InitializeStandardPredefined<br>
     else if (!LangOpts.GNUMode && LangOpts.Digraphs)<br>
       Builder.defineMacro("__STDC_VERSION__", "199409L");<br>
   } else {<br>
-    // FIXME: LangOpts.CPlusPlus1y<br>
-<br>
+    // FIXME: Use the right value for __cplusplus for C++1y once one is chosen.<br>
+    if (LangOpts.CPlusPlus1y)<br>
+      Builder.defineMacro("__cplusplus", "201305L");<br>
     // C++11 [cpp.predefined]p1:<br>
     //   The name __cplusplus is defined to the value 201103L when compiling a<br>
     //   C++ translation unit.<br>
-    if (LangOpts.CPlusPlus11)<br>
+    else if (LangOpts.CPlusPlus11)<br>
       Builder.defineMacro("__cplusplus", "201103L");<br>
     // C++03 [cpp.predefined]p1:<br>
     //   The name __cplusplus is defined to the value 199711L when compiling a<br>
<br>
Modified: cfe/trunk/lib/Lex/PPMacroExpansion.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPMacroExpansion.cpp?rev=181342&r1=181341&r2=181342&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPMacroExpansion.cpp?rev=181342&r1=181341&r2=181342&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/lib/Lex/PPMacroExpansion.cpp (original)<br>
+++ cfe/trunk/lib/Lex/PPMacroExpansion.cpp Tue May  7 14:32:56 2013<br>
@@ -792,6 +792,16 @@ static bool HasFeature(const Preprocesso<br>
            .Case("cxx_unrestricted_unions", LangOpts.CPlusPlus11)<br>
            .Case("cxx_user_literals", LangOpts.CPlusPlus11)<br>
            .Case("cxx_variadic_templates", LangOpts.CPlusPlus11)<br>
+           // C++1y features<br>
+           .Case("cxx_binary_literals", LangOpts.CPlusPlus1y)<br>
+           //.Case("cxx_contextual_conversions", LangOpts.CPlusPlus1y)<br>
+           //.Case("cxx_generalized_capture", LangOpts.CPlusPlus1y)<br>
+           //.Case("cxx_generic_lambda", LangOpts.CPlusPlus1y)<br>
+           //.Case("cxx_relaxed_constexpr", LangOpts.CPlusPlus1y)<br>
+           //.Case("cxx_return_type_deduction", LangOpts.CPlusPlus1y)<br>
+           //.Case("cxx_runtime_array", LangOpts.CPlusPlus1y)<br>
+           .Case("cxx_aggregate_nsdmi", LangOpts.CPlusPlus1y)<br>
+           //.Case("cxx_variable_templates", LangOpts.CPlusPlus1y)<br>
            // Type traits<br>
            .Case("has_nothrow_assign", LangOpts.CPlusPlus)<br>
            .Case("has_nothrow_copy", LangOpts.CPlusPlus)<br>
@@ -852,7 +862,7 @@ static bool HasExtension(const Preproces<br>
            .Case("c_atomic", true)<br>
            .Case("c_generic_selections", true)<br>
            .Case("c_static_assert", true)<br>
-           // C++0x features supported by other languages as extensions.<br>
+           // C++11 features supported by other languages as extensions.<br>
            .Case("cxx_atomic", LangOpts.CPlusPlus)<br>
            .Case("cxx_deleted_functions", LangOpts.CPlusPlus)<br>
            .Case("cxx_explicit_conversions", LangOpts.CPlusPlus)<br>
@@ -863,6 +873,8 @@ static bool HasExtension(const Preproces<br>
            .Case("cxx_range_for", LangOpts.CPlusPlus)<br>
            .Case("cxx_reference_qualified_functions", LangOpts.CPlusPlus)<br>
            .Case("cxx_rvalue_references", LangOpts.CPlusPlus)<br>
+           // C++1y features supported by other languages as extensions.<br>
+           .Case("cxx_binary_literals", true)<br>
            .Default(false);<br>
 }<br>
<br>
<br>
Modified: cfe/trunk/test/Lexer/has_extension_cxx.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/has_extension_cxx.cpp?rev=181342&r1=181341&r2=181342&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/has_extension_cxx.cpp?rev=181342&r1=181341&r2=181342&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/test/Lexer/has_extension_cxx.cpp (original)<br>
+++ cfe/trunk/test/Lexer/has_extension_cxx.cpp Tue May  7 14:32:56 2013<br>
@@ -47,3 +47,9 @@ int no_local_type_template_args();<br>
 #endif<br>
<br>
 // CHECK: has_local_type_template_args<br>
+<br>
+#if __has_extension(cxx_binary_literals)<br>
+int has_binary_literals();<br>
+#endif<br>
+<br>
+// CHECK: has_binary_literals<br>
<br>
Modified: cfe/trunk/test/Lexer/has_feature_cxx0x.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/has_feature_cxx0x.cpp?rev=181342&r1=181341&r2=181342&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/has_feature_cxx0x.cpp?rev=181342&r1=181341&r2=181342&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/test/Lexer/has_feature_cxx0x.cpp (original)<br>
+++ cfe/trunk/test/Lexer/has_feature_cxx0x.cpp Tue May  7 14:32:56 2013<br>
@@ -1,6 +1,7 @@<br>
-// RUN: %clang_cc1 -E -triple x86_64-linux-gnu -std=c++11 %s -o - | FileCheck --check-prefix=CHECK-0X %s<br>
+// RUN: %clang_cc1 -E -triple x86_64-linux-gnu -std=c++11 %s -o - | FileCheck --check-prefix=CHECK-11 %s<br>
 // RUN: %clang_cc1 -E -triple armv7-apple-darwin -std=c++11 %s -o - | FileCheck --check-prefix=CHECK-NO-TLS %s<br>
-// RUN: %clang_cc1 -E -triple x86_64-linux-gnu %s -o - | FileCheck --check-prefix=CHECK-NO-0X %s<br>
+// RUN: %clang_cc1 -E -triple x86_64-linux-gnu %s -o - | FileCheck --check-prefix=CHECK-NO-11 %s<br>
+// RUN: %clang_cc1 -E -triple x86_64-linux-gnu -std=c++1y %s -o - | FileCheck --check-prefix=CHECK-1Y %s<br>
<br>
 #if __has_feature(cxx_atomic)<br>
 int has_atomic();<br>
@@ -8,8 +9,9 @@ int has_atomic();<br>
 int no_atomic();<br>
 #endif<br>
<br>
-// CHECK-0X: has_atomic<br>
-// CHECK-NO-0X: no_atomic<br>
+// CHECK-1Y: has_atomic<br>
+// CHECK-11: has_atomic<br>
+// CHECK-NO-11: no_atomic<br>
<br>
 #if __has_feature(cxx_lambdas)<br>
 int has_lambdas();<br>
@@ -17,8 +19,9 @@ int has_lambdas();<br>
 int no_lambdas();<br>
 #endif<br>
<br>
-// CHECK-0X: has_lambdas<br>
-// CHECK-NO-0X: no_lambdas<br>
+// CHECK-1Y: has_lambdas<br>
+// CHECK-11: has_lambdas<br>
+// CHECK-NO-11: no_lambdas<br>
<br>
<br>
 #if __has_feature(cxx_nullptr)<br>
@@ -27,8 +30,9 @@ int has_nullptr();<br>
 int no_nullptr();<br>
 #endif<br>
<br>
-// CHECK-0X: has_nullptr<br>
-// CHECK-NO-0X: no_nullptr<br>
+// CHECK-1Y: has_nullptr<br>
+// CHECK-11: has_nullptr<br>
+// CHECK-NO-11: no_nullptr<br>
<br>
<br>
 #if __has_feature(cxx_decltype)<br>
@@ -37,8 +41,9 @@ int has_decltype();<br>
 int no_decltype();<br>
 #endif<br>
<br>
-// CHECK-0X: has_decltype<br>
-// CHECK-NO-0X: no_decltype<br>
+// CHECK-1Y: has_decltype<br>
+// CHECK-11: has_decltype<br>
+// CHECK-NO-11: no_decltype<br>
<br>
<br>
 #if __has_feature(cxx_decltype_incomplete_return_types)<br>
@@ -47,8 +52,9 @@ int has_decltype_incomplete_return_types<br>
 int no_decltype_incomplete_return_types();<br>
 #endif<br>
<br>
-// CHECK-0X: has_decltype_incomplete_return_types<br>
-// CHECK-NO-0X: no_decltype_incomplete_return_types<br>
+// CHECK-1Y: has_decltype_incomplete_return_types<br>
+// CHECK-11: has_decltype_incomplete_return_types<br>
+// CHECK-NO-11: no_decltype_incomplete_return_types<br>
<br>
<br>
 #if __has_feature(cxx_auto_type)<br>
@@ -57,8 +63,9 @@ int has_auto_type();<br>
 int no_auto_type();<br>
 #endif<br>
<br>
-// CHECK-0X: has_auto_type<br>
-// CHECK-NO-0X: no_auto_type<br>
+// CHECK-1Y: has_auto_type<br>
+// CHECK-11: has_auto_type<br>
+// CHECK-NO-11: no_auto_type<br>
<br>
<br>
 #if __has_feature(cxx_trailing_return)<br>
@@ -67,8 +74,9 @@ int has_trailing_return();<br>
 int no_trailing_return();<br>
 #endif<br>
<br>
-// CHECK-0X: has_trailing_return<br>
-// CHECK-NO-0X: no_trailing_return<br>
+// CHECK-1Y: has_trailing_return<br>
+// CHECK-11: has_trailing_return<br>
+// CHECK-NO-11: no_trailing_return<br>
<br>
<br>
 #if __has_feature(cxx_attributes)<br>
@@ -77,8 +85,9 @@ int has_attributes();<br>
 int no_attributes();<br>
 #endif<br>
<br>
-// CHECK-0X: has_attributes<br>
-// CHECK-NO-0X: no_attributes<br>
+// CHECK-1Y: has_attributes<br>
+// CHECK-11: has_attributes<br>
+// CHECK-NO-11: no_attributes<br>
<br>
<br>
 #if __has_feature(cxx_static_assert)<br>
@@ -87,8 +96,9 @@ int has_static_assert();<br>
 int no_static_assert();<br>
 #endif<br>
<br>
-// CHECK-0X: has_static_assert<br>
-// CHECK-NO-0X: no_static_assert<br>
+// CHECK-1Y: has_static_assert<br>
+// CHECK-11: has_static_assert<br>
+// CHECK-NO-11: no_static_assert<br>
<br>
 #if __has_feature(cxx_deleted_functions)<br>
 int has_deleted_functions();<br>
@@ -96,8 +106,9 @@ int has_deleted_functions();<br>
 int no_deleted_functions();<br>
 #endif<br>
<br>
-// CHECK-0X: has_deleted_functions<br>
-// CHECK-NO-0X: no_deleted_functions<br>
+// CHECK-1Y: has_deleted_functions<br>
+// CHECK-11: has_deleted_functions<br>
+// CHECK-NO-11: no_deleted_functions<br>
<br>
 #if __has_feature(cxx_defaulted_functions)<br>
 int has_defaulted_functions();<br>
@@ -105,8 +116,9 @@ int has_defaulted_functions();<br>
 int no_defaulted_functions();<br>
 #endif<br>
<br>
-// CHECK-0X: has_defaulted_functions<br>
-// CHECK-NO-0X: no_defaulted_functions<br>
+// CHECK-1Y: has_defaulted_functions<br>
+// CHECK-11: has_defaulted_functions<br>
+// CHECK-NO-11: no_defaulted_functions<br>
<br>
 #if __has_feature(cxx_rvalue_references)<br>
 int has_rvalue_references();<br>
@@ -114,8 +126,9 @@ int has_rvalue_references();<br>
 int no_rvalue_references();<br>
 #endif<br>
<br>
-// CHECK-0X: has_rvalue_references<br>
-// CHECK-NO-0X: no_rvalue_references<br>
+// CHECK-1Y: has_rvalue_references<br>
+// CHECK-11: has_rvalue_references<br>
+// CHECK-NO-11: no_rvalue_references<br>
<br>
<br>
 #if __has_feature(cxx_variadic_templates)<br>
@@ -124,8 +137,9 @@ int has_variadic_templates();<br>
 int no_variadic_templates();<br>
 #endif<br>
<br>
-// CHECK-0X: has_variadic_templates<br>
-// CHECK-NO-0X: no_variadic_templates<br>
+// CHECK-1Y: has_variadic_templates<br>
+// CHECK-11: has_variadic_templates<br>
+// CHECK-NO-11: no_variadic_templates<br>
<br>
<br>
 #if __has_feature(cxx_inline_namespaces)<br>
@@ -134,8 +148,9 @@ int has_inline_namespaces();<br>
 int no_inline_namespaces();<br>
 #endif<br>
<br>
-// CHECK-0X: has_inline_namespaces<br>
-// CHECK-NO-0X: no_inline_namespaces<br>
+// CHECK-1Y: has_inline_namespaces<br>
+// CHECK-11: has_inline_namespaces<br>
+// CHECK-NO-11: no_inline_namespaces<br>
<br>
<br>
 #if __has_feature(cxx_range_for)<br>
@@ -144,8 +159,9 @@ int has_range_for();<br>
 int no_range_for();<br>
 #endif<br>
<br>
-// CHECK-0X: has_range_for<br>
-// CHECK-NO-0X: no_range_for<br>
+// CHECK-1Y: has_range_for<br>
+// CHECK-11: has_range_for<br>
+// CHECK-NO-11: no_range_for<br>
<br>
<br>
 #if __has_feature(cxx_reference_qualified_functions)<br>
@@ -154,8 +170,9 @@ int has_reference_qualified_functions();<br>
 int no_reference_qualified_functions();<br>
 #endif<br>
<br>
-// CHECK-0X: has_reference_qualified_functions<br>
-// CHECK-NO-0X: no_reference_qualified_functions<br>
+// CHECK-1Y: has_reference_qualified_functions<br>
+// CHECK-11: has_reference_qualified_functions<br>
+// CHECK-NO-11: no_reference_qualified_functions<br>
<br>
 #if __has_feature(cxx_default_function_template_args)<br>
 int has_default_function_template_args();<br>
@@ -163,8 +180,9 @@ int has_default_function_template_args()<br>
 int no_default_function_template_args();<br>
 #endif<br>
<br>
-// CHECK-0X: has_default_function_template_args<br>
-// CHECK-NO-0X: no_default_function_template_args<br>
+// CHECK-1Y: has_default_function_template_args<br>
+// CHECK-11: has_default_function_template_args<br>
+// CHECK-NO-11: no_default_function_template_args<br>
<br>
 #if __has_feature(cxx_noexcept)<br>
 int has_noexcept();<br>
@@ -172,8 +190,9 @@ int has_noexcept();<br>
 int no_noexcept();<br>
 #endif<br>
<br>
-// CHECK-0X: has_noexcept<br>
-// CHECK-NO-0X: no_noexcept<br>
+// CHECK-1Y: has_noexcept<br>
+// CHECK-11: has_noexcept<br>
+// CHECK-NO-11: no_noexcept<br>
<br>
 #if __has_feature(cxx_override_control)<br>
 int has_override_control();<br>
@@ -181,8 +200,9 @@ int has_override_control();<br>
 int no_override_control();<br>
 #endif<br>
<br>
-// CHECK-0X: has_override_control<br>
-// CHECK-NO-0X: no_override_control<br>
+// CHECK-1Y: has_override_control<br>
+// CHECK-11: has_override_control<br>
+// CHECK-NO-11: no_override_control<br>
<br>
 #if __has_feature(cxx_alias_templates)<br>
 int has_alias_templates();<br>
@@ -190,8 +210,9 @@ int has_alias_templates();<br>
 int no_alias_templates();<br>
 #endif<br>
<br>
-// CHECK-0X: has_alias_templates<br>
-// CHECK-NO-0X: no_alias_templates<br>
+// CHECK-1Y: has_alias_templates<br>
+// CHECK-11: has_alias_templates<br>
+// CHECK-NO-11: no_alias_templates<br>
<br>
 #if __has_feature(cxx_implicit_moves)<br>
 int has_implicit_moves();<br>
@@ -199,8 +220,9 @@ int has_implicit_moves();<br>
 int no_implicit_moves();<br>
 #endif<br>
<br>
-// CHECK-0X: has_implicit_moves<br>
-// CHECK-NO-0X: no_implicit_moves<br>
+// CHECK-1Y: has_implicit_moves<br>
+// CHECK-11: has_implicit_moves<br>
+// CHECK-NO-11: no_implicit_moves<br>
<br>
 #if __has_feature(cxx_alignas)<br>
 int has_alignas();<br>
@@ -208,8 +230,9 @@ int has_alignas();<br>
 int no_alignas();<br>
 #endif<br>
<br>
-// CHECK-0X: has_alignas<br>
-// CHECK-NO-0X: no_alignas<br>
+// CHECK-1Y: has_alignas<br>
+// CHECK-11: has_alignas<br>
+// CHECK-NO-11: no_alignas<br>
<br>
 #if __has_feature(cxx_raw_string_literals)<br>
 int has_raw_string_literals();<br>
@@ -217,8 +240,9 @@ int has_raw_string_literals();<br>
 int no_raw_string_literals();<br>
 #endif<br>
<br>
-// CHECK-0X: has_raw_string_literals<br>
-// CHECK-NO-0X: no_raw_string_literals<br>
+// CHECK-1Y: has_raw_string_literals<br>
+// CHECK-11: has_raw_string_literals<br>
+// CHECK-NO-11: no_raw_string_literals<br>
<br>
 #if __has_feature(cxx_unicode_literals)<br>
 int has_unicode_literals();<br>
@@ -226,8 +250,9 @@ int has_unicode_literals();<br>
 int no_unicode_literals();<br>
 #endif<br>
<br>
-// CHECK-0X: has_unicode_literals<br>
-// CHECK-NO-0X: no_unicode_literals<br>
+// CHECK-1Y: has_unicode_literals<br>
+// CHECK-11: has_unicode_literals<br>
+// CHECK-NO-11: no_unicode_literals<br>
<br>
 #if __has_feature(cxx_constexpr)<br>
 int has_constexpr();<br>
@@ -235,8 +260,9 @@ int has_constexpr();<br>
 int no_constexpr();<br>
 #endif<br>
<br>
-// CHECK-0X: has_constexpr<br>
-// CHECK-NO-0X: no_constexpr<br>
+// CHECK-1Y: has_constexpr<br>
+// CHECK-11: has_constexpr<br>
+// CHECK-NO-11: no_constexpr<br>
<br>
 #if __has_feature(cxx_generalized_initializers)<br>
 int has_generalized_initializers();<br>
@@ -244,8 +270,9 @@ int has_generalized_initializers();<br>
 int no_generalized_initializers();<br>
 #endif<br>
<br>
-// CHECK-0X: has_generalized_initializers<br>
-// CHECK-NO-0X: no_generalized_initializers<br>
+// CHECK-1Y: has_generalized_initializers<br>
+// CHECK-11: has_generalized_initializers<br>
+// CHECK-NO-11: no_generalized_initializers<br>
<br>
 #if __has_feature(cxx_unrestricted_unions)<br>
 int has_unrestricted_unions();<br>
@@ -253,8 +280,9 @@ int has_unrestricted_unions();<br>
 int no_unrestricted_unions();<br>
 #endif<br>
<br>
-// CHECK-0X: has_unrestricted_unions<br>
-// CHECK-NO-0X: no_unrestricted_unions<br>
+// CHECK-1Y: has_unrestricted_unions<br>
+// CHECK-11: has_unrestricted_unions<br>
+// CHECK-NO-11: no_unrestricted_unions<br>
<br>
 #if __has_feature(cxx_user_literals)<br>
 int has_user_literals();<br>
@@ -262,8 +290,9 @@ int has_user_literals();<br>
 int no_user_literals();<br>
 #endif<br>
<br>
-// CHECK-0X: has_user_literals<br>
-// CHECK-NO-0X: no_user_literals<br>
+// CHECK-1Y: has_user_literals<br>
+// CHECK-11: has_user_literals<br>
+// CHECK-NO-11: no_user_literals<br>
<br>
 #if __has_feature(cxx_local_type_template_args)<br>
 int has_local_type_template_args();<br>
@@ -271,8 +300,9 @@ int has_local_type_template_args();<br>
 int no_local_type_template_args();<br>
 #endif<br>
<br>
-// CHECK-0X: has_local_type_template_args<br>
-// CHECK-NO-0X: no_local_type_template_args<br>
+// CHECK-1Y: has_local_type_template_args<br>
+// CHECK-11: has_local_type_template_args<br>
+// CHECK-NO-11: no_local_type_template_args<br>
<br>
 #if __has_feature(cxx_inheriting_constructors)<br>
 int has_inheriting_constructors();<br>
@@ -280,8 +310,9 @@ int has_inheriting_constructors();<br>
 int no_inheriting_constructors();<br>
 #endif<br>
<br>
-// CHECK-0X: has_inheriting_constructors<br>
-// CHECK-NO-0X: no_inheriting_constructors<br>
+// CHECK-1Y: has_inheriting_constructors<br>
+// CHECK-11: has_inheriting_constructors<br>
+// CHECK-NO-11: no_inheriting_constructors<br>
<br>
 #if __has_feature(cxx_thread_local)<br>
 int has_thread_local();<br>
@@ -289,6 +320,29 @@ int has_thread_local();<br>
 int no_thread_local();<br>
 #endif<br>
<br>
-// CHECK-0X: has_thread_local<br>
-// CHECK-NO-0X: no_thread_local<br>
+// CHECK-1Y: has_thread_local<br>
+// CHECK-11: has_thread_local<br>
+// CHECK-NO-11: no_thread_local<br>
 // CHECK-NO-TLS: no_thread_local<br>
+<br>
+// === C++1y features ===<br>
+<br>
+#if __has_feature(cxx_binary_literals)<br>
+int has_binary_literals();<br>
+#else<br>
+int no_binary_literals();<br>
+#endif<br>
+<br>
+// CHECK-1Y: has_binary_literals<br>
+// CHECK-11: no_binary_literals<br>
+// CHECK-NO-11: no_binary_literals<br>
+<br>
+#if __has_feature(cxx_aggregate_nsdmi)<br>
+int has_aggregate_nsdmi();<br>
+#else<br>
+int no_aggregate_nsdmi();<br>
+#endif<br>
+<br>
+// CHECK-1Y: has_aggregate_nsdmi<br>
+// CHECK-11: no_aggregate_nsdmi<br>
+// CHECK-NO-11: no_aggregate_nsdmi<br>
<br>
Modified: cfe/trunk/test/Preprocessor/init.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/init.c?rev=181342&r1=181341&r2=181342&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/init.c?rev=181342&r1=181341&r2=181342&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/test/Preprocessor/init.c (original)<br>
+++ cfe/trunk/test/Preprocessor/init.c Tue May  7 14:32:56 2013<br>
@@ -8,7 +8,17 @@<br>
 // BLOCKS:#define __BLOCKS__ 1<br>
 // BLOCKS:#define __block __attribute__((__blocks__(byref)))<br>
 //<br>
-//<br>
+//<br>
+// RUN: %clang_cc1 -x c++ -std=c++1y -E -dM < /dev/null | FileCheck -check-prefix CXX1Y %s<br>
+//<br>
+// CXX1Y:#define __GNUG__<br>
+// CXX1Y:#define __GXX_EXPERIMENTAL_CXX0X__ 1<br>
+// CXX1Y:#define __GXX_RTTI 1<br>
+// CXX1Y:#define __GXX_WEAK__ 1<br>
+// CXX1Y:#define __cplusplus 201305L<br>
+// CXX1Y:#define __private_extern__ extern<br>
+//<br>
+//<br>
 // RUN: %clang_cc1 -x c++ -std=c++11 -E -dM < /dev/null | FileCheck -check-prefix CXX11 %s<br>
 //<br>
 // CXX11:#define __GNUG__<br>
@@ -67,6 +77,14 @@<br>
 // FREESTANDING:#define __STDC_HOSTED__ 0<br>
 //<br>
 //<br>
+// RUN: %clang_cc1 -x c++ -std=gnu++1y -E -dM < /dev/null | FileCheck -check-prefix GXX1Y %s<br>
+//<br>
+// GXX1Y:#define __GNUG__<br>
+// GXX1Y:#define __GXX_WEAK__ 1<br>
+// GXX1Y:#define __cplusplus 201305L<br>
+// GXX1Y:#define __private_extern__ extern<br>
+//<br>
+//<br>
 // RUN: %clang_cc1 -x c++ -std=gnu++11 -E -dM < /dev/null | FileCheck -check-prefix GXX11 %s<br>
 //<br>
 // GXX11:#define __GNUG__<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br>