r181342 - C++1y: Update __cplusplus to temporary value 201305L to allow detection of provisional C++1y support.

Richard Smith richard at metafoo.co.uk
Tue May 7 12:37:00 PDT 2013


Please pull this onto the 3.3 branch.

On Tue, May 7, 2013 at 12:32 PM, Richard Smith
<richard-llvm at metafoo.co.uk>wrote:

> Author: rsmith
> Date: Tue May  7 14:32:56 2013
> New Revision: 181342
>
> URL: http://llvm.org/viewvc/llvm-project?rev=181342&view=rev
> Log:
> C++1y: Update __cplusplus to temporary value 201305L to allow detection of
> provisional C++1y support.
> Add __has_feature and __has_extension checks for C++1y features (based on
> the provisional names from
> the C++ features study group), and update documentation to match.
>
> Modified:
>     cfe/trunk/docs/LanguageExtensions.rst
>     cfe/trunk/lib/Frontend/InitPreprocessor.cpp
>     cfe/trunk/lib/Lex/PPMacroExpansion.cpp
>     cfe/trunk/test/Lexer/has_extension_cxx.cpp
>     cfe/trunk/test/Lexer/has_feature_cxx0x.cpp
>     cfe/trunk/test/Preprocessor/init.c
>
> Modified: cfe/trunk/docs/LanguageExtensions.rst
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/LanguageExtensions.rst?rev=181342&r1=181341&r2=181342&view=diff
>
> ==============================================================================
> --- cfe/trunk/docs/LanguageExtensions.rst (original)
> +++ cfe/trunk/docs/LanguageExtensions.rst Tue May  7 14:32:56 2013
> @@ -779,6 +779,98 @@ Use ``__has_feature(cxx_variadic_templat
>  ``__has_extension(cxx_variadic_templates)`` to determine if support for
>  variadic templates is enabled.
>
> +C++1y
> +-----
> +
> +The features listed below are part of the committee draft for the C++1y
> +standard.  As a result, all these features are enabled with the
> ``-std=c++1y``
> +or ``-std=gnu++1y`` option when compiling C++ code.
> +
> +C++1y binary literals
> +^^^^^^^^^^^^^^^^^^^^^
> +
> +Use ``__has_feature(cxx_binary_literals)`` or
> +``__has_extension(cxx_binary_literals)`` to determine whether
> +binary literals (for instance, ``0b10010``) are recognized. Clang
> supports this
> +feature as an extension in all language modes.
> +
> +C++1y contextual conversions
> +^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> +
> +Use ``__has_feature(cxx_contextual_conversions)`` or
> +``__has_extension(cxx_contextual_conversions)`` to determine if the C++1y
> rules
> +are used when performing an implicit conversion for an array bound in a
> +*new-expression*, the operand of a *delete-expression*, an integral
> constant
> +expression, or a condition in a ``switch`` statement. Clang does not yet
> +support this feature.
> +
> +C++1y decltype(auto)
> +^^^^^^^^^^^^^^^^^^^^
> +
> +Use ``__has_feature(cxx_decltype_auto)`` or
> +``__has_extension(cxx_decltype_auto)`` to determine if support
> +for the ``decltype(auto)`` placeholder type is enabled.
> +
> +C++1y default initializers for aggregates
> +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> +
> +Use ``__has_feature(cxx_aggregate_nsdmi)`` or
> +``__has_extension(cxx_aggregate_nsdmi)`` to determine if support
> +for default initializers in aggregate members is enabled.
> +
> +C++1y generalized lambda capture
> +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> +
> +Use ``__has_feature(cxx_generalized_capture)`` or
> +``__has_extension(cxx_generalized_capture`` to determine if support for
> +generalized lambda captures is enabled
> +(for instance, ``[n(0)] { return ++n; }``).
> +Clang does not yet support this feature.
> +
> +C++1y generic lambdas
> +^^^^^^^^^^^^^^^^^^^^^
> +
> +Use ``__has_feature(cxx_generic_lambda)`` or
> +``__has_extension(cxx_generic_lambda)`` to determine if support for
> generic
> +(polymorphic) lambdas is enabled
> +(for instance, ``[] (auto x) { return x + 1; }``).
> +Clang does not yet support this feature.
> +
> +C++1y relaxed constexpr
> +^^^^^^^^^^^^^^^^^^^^^^^
> +
> +Use ``__has_feature(cxx_relaxed_constexpr)`` or
> +``__has_extension(cxx_relaxed_constexpr)`` to determine if variable
> +declarations, local variable modification, and control flow constructs
> +are permitted in ``constexpr`` functions.
> +Clang's implementation of this feature is incomplete.
> +
> +C++1y return type deduction
> +^^^^^^^^^^^^^^^^^^^^^^^^^^^
> +
> +Use ``__has_feature(cxx_return_type_deduction)`` or
> +``__has_extension(cxx_return_type_deduction)`` to determine if support
> +for return type deduction for functions (using ``auto`` as a return type)
> +is enabled.
> +Clang's implementation of this feature is incomplete.
> +
> +C++1y runtime-sized arrays
> +^^^^^^^^^^^^^^^^^^^^^^^^^^
> +
> +Use ``__has_feature(cxx_runtime_array)`` or
> +``__has_extension(cxx_runtime_array)`` to determine if support
> +for arrays of runtime bound (a restricted form of variable-length arrays)
> +is enabled.
> +Clang's implementation of this feature is incomplete.
> +
> +C++1y variable templates
> +^^^^^^^^^^^^^^^^^^^^^^^^
> +
> +Use ``__has_feature(cxx_variable_templates)`` or
> +``__has_extension(cxx_variable_templates)`` to determine if support for
> +templated variable declarations is enabled.
> +Clang does not yet support this feature.
> +
>  C11
>  ---
>
>
> Modified: cfe/trunk/lib/Frontend/InitPreprocessor.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/InitPreprocessor.cpp?rev=181342&r1=181341&r2=181342&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Frontend/InitPreprocessor.cpp (original)
> +++ cfe/trunk/lib/Frontend/InitPreprocessor.cpp Tue May  7 14:32:56 2013
> @@ -302,12 +302,13 @@ static void InitializeStandardPredefined
>      else if (!LangOpts.GNUMode && LangOpts.Digraphs)
>        Builder.defineMacro("__STDC_VERSION__", "199409L");
>    } else {
> -    // FIXME: LangOpts.CPlusPlus1y
> -
> +    // FIXME: Use the right value for __cplusplus for C++1y once one is
> chosen.
> +    if (LangOpts.CPlusPlus1y)
> +      Builder.defineMacro("__cplusplus", "201305L");
>      // C++11 [cpp.predefined]p1:
>      //   The name __cplusplus is defined to the value 201103L when
> compiling a
>      //   C++ translation unit.
> -    if (LangOpts.CPlusPlus11)
> +    else if (LangOpts.CPlusPlus11)
>        Builder.defineMacro("__cplusplus", "201103L");
>      // C++03 [cpp.predefined]p1:
>      //   The name __cplusplus is defined to the value 199711L when
> compiling a
>
> Modified: cfe/trunk/lib/Lex/PPMacroExpansion.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPMacroExpansion.cpp?rev=181342&r1=181341&r2=181342&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Lex/PPMacroExpansion.cpp (original)
> +++ cfe/trunk/lib/Lex/PPMacroExpansion.cpp Tue May  7 14:32:56 2013
> @@ -792,6 +792,16 @@ static bool HasFeature(const Preprocesso
>             .Case("cxx_unrestricted_unions", LangOpts.CPlusPlus11)
>             .Case("cxx_user_literals", LangOpts.CPlusPlus11)
>             .Case("cxx_variadic_templates", LangOpts.CPlusPlus11)
> +           // C++1y features
> +           .Case("cxx_binary_literals", LangOpts.CPlusPlus1y)
> +           //.Case("cxx_contextual_conversions", LangOpts.CPlusPlus1y)
> +           //.Case("cxx_generalized_capture", LangOpts.CPlusPlus1y)
> +           //.Case("cxx_generic_lambda", LangOpts.CPlusPlus1y)
> +           //.Case("cxx_relaxed_constexpr", LangOpts.CPlusPlus1y)
> +           //.Case("cxx_return_type_deduction", LangOpts.CPlusPlus1y)
> +           //.Case("cxx_runtime_array", LangOpts.CPlusPlus1y)
> +           .Case("cxx_aggregate_nsdmi", LangOpts.CPlusPlus1y)
> +           //.Case("cxx_variable_templates", LangOpts.CPlusPlus1y)
>             // Type traits
>             .Case("has_nothrow_assign", LangOpts.CPlusPlus)
>             .Case("has_nothrow_copy", LangOpts.CPlusPlus)
> @@ -852,7 +862,7 @@ static bool HasExtension(const Preproces
>             .Case("c_atomic", true)
>             .Case("c_generic_selections", true)
>             .Case("c_static_assert", true)
> -           // C++0x features supported by other languages as extensions.
> +           // C++11 features supported by other languages as extensions.
>             .Case("cxx_atomic", LangOpts.CPlusPlus)
>             .Case("cxx_deleted_functions", LangOpts.CPlusPlus)
>             .Case("cxx_explicit_conversions", LangOpts.CPlusPlus)
> @@ -863,6 +873,8 @@ static bool HasExtension(const Preproces
>             .Case("cxx_range_for", LangOpts.CPlusPlus)
>             .Case("cxx_reference_qualified_functions", LangOpts.CPlusPlus)
>             .Case("cxx_rvalue_references", LangOpts.CPlusPlus)
> +           // C++1y features supported by other languages as extensions.
> +           .Case("cxx_binary_literals", true)
>             .Default(false);
>  }
>
>
> Modified: cfe/trunk/test/Lexer/has_extension_cxx.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/has_extension_cxx.cpp?rev=181342&r1=181341&r2=181342&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/Lexer/has_extension_cxx.cpp (original)
> +++ cfe/trunk/test/Lexer/has_extension_cxx.cpp Tue May  7 14:32:56 2013
> @@ -47,3 +47,9 @@ int no_local_type_template_args();
>  #endif
>
>  // CHECK: has_local_type_template_args
> +
> +#if __has_extension(cxx_binary_literals)
> +int has_binary_literals();
> +#endif
> +
> +// CHECK: has_binary_literals
>
> Modified: cfe/trunk/test/Lexer/has_feature_cxx0x.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/has_feature_cxx0x.cpp?rev=181342&r1=181341&r2=181342&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/Lexer/has_feature_cxx0x.cpp (original)
> +++ cfe/trunk/test/Lexer/has_feature_cxx0x.cpp Tue May  7 14:32:56 2013
> @@ -1,6 +1,7 @@
> -// RUN: %clang_cc1 -E -triple x86_64-linux-gnu -std=c++11 %s -o - |
> FileCheck --check-prefix=CHECK-0X %s
> +// RUN: %clang_cc1 -E -triple x86_64-linux-gnu -std=c++11 %s -o - |
> FileCheck --check-prefix=CHECK-11 %s
>  // RUN: %clang_cc1 -E -triple armv7-apple-darwin -std=c++11 %s -o - |
> FileCheck --check-prefix=CHECK-NO-TLS %s
> -// RUN: %clang_cc1 -E -triple x86_64-linux-gnu %s -o - | FileCheck
> --check-prefix=CHECK-NO-0X %s
> +// RUN: %clang_cc1 -E -triple x86_64-linux-gnu %s -o - | FileCheck
> --check-prefix=CHECK-NO-11 %s
> +// RUN: %clang_cc1 -E -triple x86_64-linux-gnu -std=c++1y %s -o - |
> FileCheck --check-prefix=CHECK-1Y %s
>
>  #if __has_feature(cxx_atomic)
>  int has_atomic();
> @@ -8,8 +9,9 @@ int has_atomic();
>  int no_atomic();
>  #endif
>
> -// CHECK-0X: has_atomic
> -// CHECK-NO-0X: no_atomic
> +// CHECK-1Y: has_atomic
> +// CHECK-11: has_atomic
> +// CHECK-NO-11: no_atomic
>
>  #if __has_feature(cxx_lambdas)
>  int has_lambdas();
> @@ -17,8 +19,9 @@ int has_lambdas();
>  int no_lambdas();
>  #endif
>
> -// CHECK-0X: has_lambdas
> -// CHECK-NO-0X: no_lambdas
> +// CHECK-1Y: has_lambdas
> +// CHECK-11: has_lambdas
> +// CHECK-NO-11: no_lambdas
>
>
>  #if __has_feature(cxx_nullptr)
> @@ -27,8 +30,9 @@ int has_nullptr();
>  int no_nullptr();
>  #endif
>
> -// CHECK-0X: has_nullptr
> -// CHECK-NO-0X: no_nullptr
> +// CHECK-1Y: has_nullptr
> +// CHECK-11: has_nullptr
> +// CHECK-NO-11: no_nullptr
>
>
>  #if __has_feature(cxx_decltype)
> @@ -37,8 +41,9 @@ int has_decltype();
>  int no_decltype();
>  #endif
>
> -// CHECK-0X: has_decltype
> -// CHECK-NO-0X: no_decltype
> +// CHECK-1Y: has_decltype
> +// CHECK-11: has_decltype
> +// CHECK-NO-11: no_decltype
>
>
>  #if __has_feature(cxx_decltype_incomplete_return_types)
> @@ -47,8 +52,9 @@ int has_decltype_incomplete_return_types
>  int no_decltype_incomplete_return_types();
>  #endif
>
> -// CHECK-0X: has_decltype_incomplete_return_types
> -// CHECK-NO-0X: no_decltype_incomplete_return_types
> +// CHECK-1Y: has_decltype_incomplete_return_types
> +// CHECK-11: has_decltype_incomplete_return_types
> +// CHECK-NO-11: no_decltype_incomplete_return_types
>
>
>  #if __has_feature(cxx_auto_type)
> @@ -57,8 +63,9 @@ int has_auto_type();
>  int no_auto_type();
>  #endif
>
> -// CHECK-0X: has_auto_type
> -// CHECK-NO-0X: no_auto_type
> +// CHECK-1Y: has_auto_type
> +// CHECK-11: has_auto_type
> +// CHECK-NO-11: no_auto_type
>
>
>  #if __has_feature(cxx_trailing_return)
> @@ -67,8 +74,9 @@ int has_trailing_return();
>  int no_trailing_return();
>  #endif
>
> -// CHECK-0X: has_trailing_return
> -// CHECK-NO-0X: no_trailing_return
> +// CHECK-1Y: has_trailing_return
> +// CHECK-11: has_trailing_return
> +// CHECK-NO-11: no_trailing_return
>
>
>  #if __has_feature(cxx_attributes)
> @@ -77,8 +85,9 @@ int has_attributes();
>  int no_attributes();
>  #endif
>
> -// CHECK-0X: has_attributes
> -// CHECK-NO-0X: no_attributes
> +// CHECK-1Y: has_attributes
> +// CHECK-11: has_attributes
> +// CHECK-NO-11: no_attributes
>
>
>  #if __has_feature(cxx_static_assert)
> @@ -87,8 +96,9 @@ int has_static_assert();
>  int no_static_assert();
>  #endif
>
> -// CHECK-0X: has_static_assert
> -// CHECK-NO-0X: no_static_assert
> +// CHECK-1Y: has_static_assert
> +// CHECK-11: has_static_assert
> +// CHECK-NO-11: no_static_assert
>
>  #if __has_feature(cxx_deleted_functions)
>  int has_deleted_functions();
> @@ -96,8 +106,9 @@ int has_deleted_functions();
>  int no_deleted_functions();
>  #endif
>
> -// CHECK-0X: has_deleted_functions
> -// CHECK-NO-0X: no_deleted_functions
> +// CHECK-1Y: has_deleted_functions
> +// CHECK-11: has_deleted_functions
> +// CHECK-NO-11: no_deleted_functions
>
>  #if __has_feature(cxx_defaulted_functions)
>  int has_defaulted_functions();
> @@ -105,8 +116,9 @@ int has_defaulted_functions();
>  int no_defaulted_functions();
>  #endif
>
> -// CHECK-0X: has_defaulted_functions
> -// CHECK-NO-0X: no_defaulted_functions
> +// CHECK-1Y: has_defaulted_functions
> +// CHECK-11: has_defaulted_functions
> +// CHECK-NO-11: no_defaulted_functions
>
>  #if __has_feature(cxx_rvalue_references)
>  int has_rvalue_references();
> @@ -114,8 +126,9 @@ int has_rvalue_references();
>  int no_rvalue_references();
>  #endif
>
> -// CHECK-0X: has_rvalue_references
> -// CHECK-NO-0X: no_rvalue_references
> +// CHECK-1Y: has_rvalue_references
> +// CHECK-11: has_rvalue_references
> +// CHECK-NO-11: no_rvalue_references
>
>
>  #if __has_feature(cxx_variadic_templates)
> @@ -124,8 +137,9 @@ int has_variadic_templates();
>  int no_variadic_templates();
>  #endif
>
> -// CHECK-0X: has_variadic_templates
> -// CHECK-NO-0X: no_variadic_templates
> +// CHECK-1Y: has_variadic_templates
> +// CHECK-11: has_variadic_templates
> +// CHECK-NO-11: no_variadic_templates
>
>
>  #if __has_feature(cxx_inline_namespaces)
> @@ -134,8 +148,9 @@ int has_inline_namespaces();
>  int no_inline_namespaces();
>  #endif
>
> -// CHECK-0X: has_inline_namespaces
> -// CHECK-NO-0X: no_inline_namespaces
> +// CHECK-1Y: has_inline_namespaces
> +// CHECK-11: has_inline_namespaces
> +// CHECK-NO-11: no_inline_namespaces
>
>
>  #if __has_feature(cxx_range_for)
> @@ -144,8 +159,9 @@ int has_range_for();
>  int no_range_for();
>  #endif
>
> -// CHECK-0X: has_range_for
> -// CHECK-NO-0X: no_range_for
> +// CHECK-1Y: has_range_for
> +// CHECK-11: has_range_for
> +// CHECK-NO-11: no_range_for
>
>
>  #if __has_feature(cxx_reference_qualified_functions)
> @@ -154,8 +170,9 @@ int has_reference_qualified_functions();
>  int no_reference_qualified_functions();
>  #endif
>
> -// CHECK-0X: has_reference_qualified_functions
> -// CHECK-NO-0X: no_reference_qualified_functions
> +// CHECK-1Y: has_reference_qualified_functions
> +// CHECK-11: has_reference_qualified_functions
> +// CHECK-NO-11: no_reference_qualified_functions
>
>  #if __has_feature(cxx_default_function_template_args)
>  int has_default_function_template_args();
> @@ -163,8 +180,9 @@ int has_default_function_template_args()
>  int no_default_function_template_args();
>  #endif
>
> -// CHECK-0X: has_default_function_template_args
> -// CHECK-NO-0X: no_default_function_template_args
> +// CHECK-1Y: has_default_function_template_args
> +// CHECK-11: has_default_function_template_args
> +// CHECK-NO-11: no_default_function_template_args
>
>  #if __has_feature(cxx_noexcept)
>  int has_noexcept();
> @@ -172,8 +190,9 @@ int has_noexcept();
>  int no_noexcept();
>  #endif
>
> -// CHECK-0X: has_noexcept
> -// CHECK-NO-0X: no_noexcept
> +// CHECK-1Y: has_noexcept
> +// CHECK-11: has_noexcept
> +// CHECK-NO-11: no_noexcept
>
>  #if __has_feature(cxx_override_control)
>  int has_override_control();
> @@ -181,8 +200,9 @@ int has_override_control();
>  int no_override_control();
>  #endif
>
> -// CHECK-0X: has_override_control
> -// CHECK-NO-0X: no_override_control
> +// CHECK-1Y: has_override_control
> +// CHECK-11: has_override_control
> +// CHECK-NO-11: no_override_control
>
>  #if __has_feature(cxx_alias_templates)
>  int has_alias_templates();
> @@ -190,8 +210,9 @@ int has_alias_templates();
>  int no_alias_templates();
>  #endif
>
> -// CHECK-0X: has_alias_templates
> -// CHECK-NO-0X: no_alias_templates
> +// CHECK-1Y: has_alias_templates
> +// CHECK-11: has_alias_templates
> +// CHECK-NO-11: no_alias_templates
>
>  #if __has_feature(cxx_implicit_moves)
>  int has_implicit_moves();
> @@ -199,8 +220,9 @@ int has_implicit_moves();
>  int no_implicit_moves();
>  #endif
>
> -// CHECK-0X: has_implicit_moves
> -// CHECK-NO-0X: no_implicit_moves
> +// CHECK-1Y: has_implicit_moves
> +// CHECK-11: has_implicit_moves
> +// CHECK-NO-11: no_implicit_moves
>
>  #if __has_feature(cxx_alignas)
>  int has_alignas();
> @@ -208,8 +230,9 @@ int has_alignas();
>  int no_alignas();
>  #endif
>
> -// CHECK-0X: has_alignas
> -// CHECK-NO-0X: no_alignas
> +// CHECK-1Y: has_alignas
> +// CHECK-11: has_alignas
> +// CHECK-NO-11: no_alignas
>
>  #if __has_feature(cxx_raw_string_literals)
>  int has_raw_string_literals();
> @@ -217,8 +240,9 @@ int has_raw_string_literals();
>  int no_raw_string_literals();
>  #endif
>
> -// CHECK-0X: has_raw_string_literals
> -// CHECK-NO-0X: no_raw_string_literals
> +// CHECK-1Y: has_raw_string_literals
> +// CHECK-11: has_raw_string_literals
> +// CHECK-NO-11: no_raw_string_literals
>
>  #if __has_feature(cxx_unicode_literals)
>  int has_unicode_literals();
> @@ -226,8 +250,9 @@ int has_unicode_literals();
>  int no_unicode_literals();
>  #endif
>
> -// CHECK-0X: has_unicode_literals
> -// CHECK-NO-0X: no_unicode_literals
> +// CHECK-1Y: has_unicode_literals
> +// CHECK-11: has_unicode_literals
> +// CHECK-NO-11: no_unicode_literals
>
>  #if __has_feature(cxx_constexpr)
>  int has_constexpr();
> @@ -235,8 +260,9 @@ int has_constexpr();
>  int no_constexpr();
>  #endif
>
> -// CHECK-0X: has_constexpr
> -// CHECK-NO-0X: no_constexpr
> +// CHECK-1Y: has_constexpr
> +// CHECK-11: has_constexpr
> +// CHECK-NO-11: no_constexpr
>
>  #if __has_feature(cxx_generalized_initializers)
>  int has_generalized_initializers();
> @@ -244,8 +270,9 @@ int has_generalized_initializers();
>  int no_generalized_initializers();
>  #endif
>
> -// CHECK-0X: has_generalized_initializers
> -// CHECK-NO-0X: no_generalized_initializers
> +// CHECK-1Y: has_generalized_initializers
> +// CHECK-11: has_generalized_initializers
> +// CHECK-NO-11: no_generalized_initializers
>
>  #if __has_feature(cxx_unrestricted_unions)
>  int has_unrestricted_unions();
> @@ -253,8 +280,9 @@ int has_unrestricted_unions();
>  int no_unrestricted_unions();
>  #endif
>
> -// CHECK-0X: has_unrestricted_unions
> -// CHECK-NO-0X: no_unrestricted_unions
> +// CHECK-1Y: has_unrestricted_unions
> +// CHECK-11: has_unrestricted_unions
> +// CHECK-NO-11: no_unrestricted_unions
>
>  #if __has_feature(cxx_user_literals)
>  int has_user_literals();
> @@ -262,8 +290,9 @@ int has_user_literals();
>  int no_user_literals();
>  #endif
>
> -// CHECK-0X: has_user_literals
> -// CHECK-NO-0X: no_user_literals
> +// CHECK-1Y: has_user_literals
> +// CHECK-11: has_user_literals
> +// CHECK-NO-11: no_user_literals
>
>  #if __has_feature(cxx_local_type_template_args)
>  int has_local_type_template_args();
> @@ -271,8 +300,9 @@ int has_local_type_template_args();
>  int no_local_type_template_args();
>  #endif
>
> -// CHECK-0X: has_local_type_template_args
> -// CHECK-NO-0X: no_local_type_template_args
> +// CHECK-1Y: has_local_type_template_args
> +// CHECK-11: has_local_type_template_args
> +// CHECK-NO-11: no_local_type_template_args
>
>  #if __has_feature(cxx_inheriting_constructors)
>  int has_inheriting_constructors();
> @@ -280,8 +310,9 @@ int has_inheriting_constructors();
>  int no_inheriting_constructors();
>  #endif
>
> -// CHECK-0X: has_inheriting_constructors
> -// CHECK-NO-0X: no_inheriting_constructors
> +// CHECK-1Y: has_inheriting_constructors
> +// CHECK-11: has_inheriting_constructors
> +// CHECK-NO-11: no_inheriting_constructors
>
>  #if __has_feature(cxx_thread_local)
>  int has_thread_local();
> @@ -289,6 +320,29 @@ int has_thread_local();
>  int no_thread_local();
>  #endif
>
> -// CHECK-0X: has_thread_local
> -// CHECK-NO-0X: no_thread_local
> +// CHECK-1Y: has_thread_local
> +// CHECK-11: has_thread_local
> +// CHECK-NO-11: no_thread_local
>  // CHECK-NO-TLS: no_thread_local
> +
> +// === C++1y features ===
> +
> +#if __has_feature(cxx_binary_literals)
> +int has_binary_literals();
> +#else
> +int no_binary_literals();
> +#endif
> +
> +// CHECK-1Y: has_binary_literals
> +// CHECK-11: no_binary_literals
> +// CHECK-NO-11: no_binary_literals
> +
> +#if __has_feature(cxx_aggregate_nsdmi)
> +int has_aggregate_nsdmi();
> +#else
> +int no_aggregate_nsdmi();
> +#endif
> +
> +// CHECK-1Y: has_aggregate_nsdmi
> +// CHECK-11: no_aggregate_nsdmi
> +// CHECK-NO-11: no_aggregate_nsdmi
>
> Modified: cfe/trunk/test/Preprocessor/init.c
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/init.c?rev=181342&r1=181341&r2=181342&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/Preprocessor/init.c (original)
> +++ cfe/trunk/test/Preprocessor/init.c Tue May  7 14:32:56 2013
> @@ -8,7 +8,17 @@
>  // BLOCKS:#define __BLOCKS__ 1
>  // BLOCKS:#define __block __attribute__((__blocks__(byref)))
>  //
> -//
> +//
> +// RUN: %clang_cc1 -x c++ -std=c++1y -E -dM < /dev/null | FileCheck
> -check-prefix CXX1Y %s
> +//
> +// CXX1Y:#define __GNUG__
> +// CXX1Y:#define __GXX_EXPERIMENTAL_CXX0X__ 1
> +// CXX1Y:#define __GXX_RTTI 1
> +// CXX1Y:#define __GXX_WEAK__ 1
> +// CXX1Y:#define __cplusplus 201305L
> +// CXX1Y:#define __private_extern__ extern
> +//
> +//
>  // RUN: %clang_cc1 -x c++ -std=c++11 -E -dM < /dev/null | FileCheck
> -check-prefix CXX11 %s
>  //
>  // CXX11:#define __GNUG__
> @@ -67,6 +77,14 @@
>  // FREESTANDING:#define __STDC_HOSTED__ 0
>  //
>  //
> +// RUN: %clang_cc1 -x c++ -std=gnu++1y -E -dM < /dev/null | FileCheck
> -check-prefix GXX1Y %s
> +//
> +// GXX1Y:#define __GNUG__
> +// GXX1Y:#define __GXX_WEAK__ 1
> +// GXX1Y:#define __cplusplus 201305L
> +// GXX1Y:#define __private_extern__ extern
> +//
> +//
>  // RUN: %clang_cc1 -x c++ -std=gnu++11 -E -dM < /dev/null | FileCheck
> -check-prefix GXX11 %s
>  //
>  // GXX11:#define __GNUG__
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130507/70977f27/attachment.html>


More information about the cfe-commits mailing list