diff mbox

RFA: v3 PATCH to add on_quick_exit/quick_exit to std

Message ID 51198242.6060003@oracle.com
State New
Headers show

Commit Message

Paolo Carlini Feb. 11, 2013, 11:44 p.m. UTC
... this is what I committed.

Thanks,
Paolo.

/////////////////////
2013-02-11  Paolo Carlini  <paolo.carlini@oracle.com>

	* include/c_std/cstdlib (at_quick_exit, quick_exit): Do not declare.
	* include/c_global/cstdlib (at_quick_exit, quick_exit): Declare only
	in C++11 mode and if available in the underlying C library.
	* testsuite/18_support/quick_exit/quick_exit.cc: Compile with
	-std=gnu++11; check _GLIBCXX_HAVE_AT_QUICK_EXIT and
	_GLIBCXX_HAVE_QUICK_EXIT.
diff mbox

Patch

Index: include/c_global/cstdlib
===================================================================
--- include/c_global/cstdlib	(revision 195952)
+++ include/c_global/cstdlib	(working copy)
@@ -57,8 +57,14 @@ 
   extern "C" void abort(void) throw () _GLIBCXX_NORETURN;
   extern "C" int atexit(void (*)()) throw ();
   extern "C" void exit(int) throw () _GLIBCXX_NORETURN;
+#if __cplusplus >= 201103L
+# ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT
   extern "C" int at_quick_exit(void (*)()) throw ();
+# endif
+# ifdef _GLIBCXX_HAVE_QUICK_EXIT
   extern "C" void quick_exit(int) throw() _GLIBCXX_NORETURN;
+# endif
+#endif
 } // namespace std
 
 #else
@@ -69,7 +75,11 @@ 
 #undef abort
 #undef abs
 #undef atexit
-#undef at_quick_exit
+#if __cplusplus >= 201103L
+# ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT
+#  undef at_quick_exit
+# endif
+#endif
 #undef atof
 #undef atoi
 #undef atol
@@ -86,7 +96,11 @@ 
 #undef mbstowcs
 #undef mbtowc
 #undef qsort
-#undef quick_exit
+#if __cplusplus >= 201103L
+# ifdef _GLIBCXX_HAVE_QUICK_EXIT
+#  undef quick_exit
+# endif
+#endif
 #undef rand
 #undef realloc
 #undef srand
@@ -107,8 +121,10 @@ 
   using ::abort;
   using ::abs;
   using ::atexit;
-#ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT
+#if __cplusplus >= 201103L
+# ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT
   using ::at_quick_exit;
+# endif
 #endif
   using ::atof;
   using ::atoi;
@@ -128,8 +144,10 @@ 
   using ::mbtowc;
 #endif // _GLIBCXX_HAVE_MBSTATE_T
   using ::qsort;
-#ifdef _GLIBCXX_HAVE_QUICK_EXIT
+#if __cplusplus >= 201103L
+# ifdef _GLIBCXX_HAVE_QUICK_EXIT
   using ::quick_exit;
+# endif
 #endif
   using ::rand;
   using ::realloc;
Index: include/c_std/cstdlib
===================================================================
--- include/c_std/cstdlib	(revision 195952)
+++ include/c_std/cstdlib	(working copy)
@@ -57,8 +57,6 @@ 
   extern "C" void abort(void) throw () _GLIBCXX_NORETURN;
   extern "C" int atexit(void (*)()) throw ();
   extern "C" void exit(int) throw () _GLIBCXX_NORETURN;
-  extern "C" int at_quick_exit(void (*)()) throw ();
-  extern "C" void quick_exit(int) throw() _GLIBCXX_NORETURN;
 } // namespace
 
 #else
@@ -69,7 +67,6 @@ 
 #undef abort
 #undef abs
 #undef atexit
-#undef at_quick_exit
 #undef atof
 #undef atoi
 #undef atol
@@ -86,7 +83,6 @@ 
 #undef mbstowcs
 #undef mbtowc
 #undef qsort
-#undef quick_exit
 #undef rand
 #undef realloc
 #undef srand
@@ -107,9 +103,6 @@ 
   using ::abort;
   using ::abs;
   using ::atexit;
-#ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT
-  using ::at_quick_exit;
-#endif
   using ::atof;
   using ::atoi;
   using ::atol;
@@ -128,9 +121,6 @@ 
   using ::mbtowc;
 #endif // _GLIBCXX_HAVE_MBSTATE_T
   using ::qsort;
-#ifdef _GLIBCXX_HAVE_QUICK_EXIT
-  using ::quick_exit;
-#endif
   using ::rand;
   using ::realloc;
   using ::srand;
Index: testsuite/18_support/quick_exit/quick_exit.cc
===================================================================
--- testsuite/18_support/quick_exit/quick_exit.cc	(revision 195952)
+++ testsuite/18_support/quick_exit/quick_exit.cc	(working copy)
@@ -1,5 +1,7 @@ 
-// 2013-02-11 Jason Merrill
-
+// { dg-options "-std=gnu++11" }
+//
+// 2013-02-11  Jason  Merrill
+//
 // Copyright (C) 2013 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
@@ -33,7 +35,9 @@ 
 
 int main()
 {
+#if defined(_GLIBCXX_HAVE_AT_QUICK_EXIT) && defined(_GLIBCXX_HAVE_QUICK_EXIT)
   std::at_quick_exit (handler);
   std::atexit (wrong_handler);
   std::quick_exit (1);
+#endif
 }