[C++ Patch] PR 67160 ("static_assert feature test macro")

Paolo Carlini paolo.carlini@oracle.com
Tue Aug 18 13:01:00 GMT 2015


Hi,

submitter noticed that we have the extended static_assert but the value 
of the feature macro is still unconditionally 200410, whereas, eg, 
http://wg21.link/n4440#recs.cpp17 , has 201411.

Submitter proposes to unconditionally, thus in c++11 and c++14 modes 
too, bump the value, but thinking more about the issue, I guess we want 
that only in c++1z, the only mode which doesn't trigger a pedwarn for 
those extended features, consistently, with eg, __cpp_init_captures 
which is defined only in c++14 and and c++1z but only triggers a pedwarn 
in c++11. Thus a slightly larger patch.

Tested x86_64-linux.

Thanks,
Paolo.

/////////////////////
-------------- next part --------------
c-family/
2015-08-18  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/67160
	* c-cppbuiltin.c (c_cpp_builtins): Fix __cpp_static_assert value
	in c++1z mode.

testsuite/
2015-08-18  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/67160
	* g++.dg/cpp1z/feat-cxx1z.C: New.
-------------- next part --------------
Index: c-family/c-cppbuiltin.c
===================================================================
--- c-family/c-cppbuiltin.c	(revision 226966)
+++ c-family/c-cppbuiltin.c	(working copy)
@@ -832,7 +832,7 @@ c_cpp_builtins (cpp_reader *pfile)
 
       if (cxx_dialect >= cxx11)
 	{
-	  /* Set feature test macros for C++11  */
+	  /* 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");
@@ -841,7 +841,8 @@ c_cpp_builtins (cpp_reader *pfile)
 	  if (cxx_dialect == cxx11)
 	    cpp_define (pfile, "__cpp_constexpr=200704");
 	  cpp_define (pfile, "__cpp_range_based_for=200907");
-	  cpp_define (pfile, "__cpp_static_assert=200410");
+	  if (cxx_dialect <= cxx14)
+	    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");
@@ -855,7 +856,7 @@ c_cpp_builtins (cpp_reader *pfile)
 	}
       if (cxx_dialect > cxx11)
 	{
-	  /* Set feature test macros for C++14  */
+	  /* Set feature test macros for C++14.  */
 	  cpp_define (pfile, "__cpp_return_type_deduction=201304");
 	  cpp_define (pfile, "__cpp_init_captures=201304");
 	  cpp_define (pfile, "__cpp_generic_lambdas=201304");
@@ -865,6 +866,11 @@ c_cpp_builtins (cpp_reader *pfile)
 	  cpp_define (pfile, "__cpp_variable_templates=201304");
 	  cpp_define (pfile, "__cpp_digit_separators=201309");
 	}
+      if (cxx_dialect > cxx14)
+	{
+	  /* Set feature test macros for C++1z.  */
+	  cpp_define (pfile, "__cpp_static_assert=201411");
+	}
       if (flag_concepts)
 	/* Use a value smaller than the 201507 specified in
 	   the TS, since we don't yet support extended auto.  */
Index: testsuite/g++.dg/cpp1z/feat-cxx1z.C
===================================================================
--- testsuite/g++.dg/cpp1z/feat-cxx1z.C	(revision 0)
+++ testsuite/g++.dg/cpp1z/feat-cxx1z.C	(working copy)
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++1z } }
+
+#ifndef __cpp_static_assert
+#  error "__cpp_static_assert"
+#elif __cpp_static_assert != 201411
+#  error "__cpp_static_assert != 201411"
+#endif


More information about the Gcc-patches mailing list