diff mbox

[C++11,C++14,2/4] Support for SD-6: SG10 Feature Test Recommendations: gcc/c-family

Message ID 5395C29F.6000606@verizon.net
State New
Headers show

Commit Message

Ed Smith-Rowland June 9, 2014, 2:20 p.m. UTC
This is the second round of the SD-6 support series.
I believe I have answered everyones concerns.

Built and tested on x86_64-linux.

OK?
2014-06-09  Ed Smith-Rowland  <3dw4rd@verizon.net>

	Implement SD-6: SG10 Feature Test Recommendations
	* c-cppbuiltin.c (c_cpp_builtins()): Define language feature
	macros and the __has_header macro.

Comments

Jason Merrill June 9, 2014, 2:40 p.m. UTC | #1
On 06/09/2014 10:20 AM, Ed Smith-Rowland wrote:
> +      if (cxx_dialect > cxx11)
> +	{
> +	  /* Set feature test macros for C++14  */
> +	  cpp_define (pfile, "__cpp_binary_literals=201304");
> +	  cpp_define (pfile, "__cpp_init_captures=201304");
...
> +	  cpp_define (pfile, "__cpp_runtime_arrays=201304");

Again, these are supported in other cxx_dialect modes, though you 
probably want to control the definition based on the strict conformance 
flags (pedantic/flag_iso).

Jason
diff mbox

Patch

Index: c-cppbuiltin.c
===================================================================
--- c-cppbuiltin.c	(revision 211354)
+++ c-cppbuiltin.c	(working copy)
@@ -794,6 +794,12 @@ 
   /* For stddef.h.  They require macros defined in c-common.c.  */
   c_stddef_cpp_builtins ();
 
+  /* Set feature test macros for all C/C++ (not for just C++11 etc.)
+     the builtins __has_include__ and __has_include_next__ are defined
+     int libcpp.  */
+  cpp_define (pfile, "__has_include(STR)=__has_include__(STR)");
+  cpp_define (pfile, "__has_include_next(STR)=__has_include_next__(STR)");
+
   if (c_dialect_cxx ())
     {
       if (flag_weak && SUPPORTS_ONE_ONLY)
@@ -805,7 +811,40 @@ 
       if (flag_rtti)
 	cpp_define (pfile, "__GXX_RTTI");
       if (cxx_dialect >= cxx11)
-        cpp_define (pfile, "__GXX_EXPERIMENTAL_CXX0X__");
+	{
+          cpp_define (pfile, "__GXX_EXPERIMENTAL_CXX0X__");
+
+	  /* Set feature test macros for C++11  */
+	  cpp_define (pfile, "__cpp_unicode_characters=200704");
+	  cpp_define (pfile, "__cpp_raw_strings=200710");
+	  cpp_define (pfile, "__cpp_unicode_literals=200710");
+	  cpp_define (pfile, "__cpp_user_defined_literals=200809");
+	  cpp_define (pfile, "__cpp_lambdas=200907");
+	  cpp_define (pfile, "__cpp_constexpr=200704");
+	  cpp_define (pfile, "__cpp_static_assert=200410");
+	  cpp_define (pfile, "__cpp_decltype=200707");
+	  cpp_define (pfile, "__cpp_attributes=200809");
+	  cpp_define (pfile, "__cpp_rvalue_reference=200610");
+	  cpp_define (pfile, "__cpp_variadic_templates=200704");
+	  cpp_define (pfile, "__cpp_alias_templates=200704");
+	}
+      if (cxx_dialect > cxx11)
+	{
+	  /* Set feature test macros for C++14  */
+	  cpp_define (pfile, "__cpp_binary_literals=201304");
+	  cpp_define (pfile, "__cpp_init_captures=201304");
+	  cpp_define (pfile, "__cpp_generic_lambdas=201304");
+	  //cpp_undef (pfile, "__cpp_constexpr");
+	  //cpp_define (pfile, "__cpp_constexpr=201304");
+	  cpp_define (pfile, "__cpp_decltype_auto=201304");
+	  cpp_define (pfile, "__cpp_return_type_deduction=201304");
+	  cpp_define (pfile, "__cpp_runtime_arrays=201304");
+	  //cpp_define (pfile, "__cpp_aggregate_nsdmi=201304");
+	  //cpp_define (pfile, "__cpp_variable_templates=201304");
+	  cpp_define (pfile, "__cpp_digit_separators=201309");
+	  cpp_define (pfile, "__cpp_attribute_deprecated=201309");
+	  //cpp_define (pfile, "__cpp_sized_deallocation=201309");
+	}
     }
   /* Note that we define this for C as well, so that we know if
      __attribute__((cleanup)) will interface with EH.  */