public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* Re: RFA: v3 PATCH to add on_quick_exit/quick_exit to std
@ 2013-02-12 11:26 Dominique Dhumieres
  2013-02-12 11:32 ` Paolo Carlini
  0 siblings, 1 reply; 20+ messages in thread
From: Dominique Dhumieres @ 2013-02-12 11:26 UTC (permalink / raw)
  To: gcc-patches; +Cc: libstdc++, bkoz, jason, paolo.carlini

The test fails on x86_64-apple-darwin10 with

FAIL: 18_support/quick_exit/quick_exit.cc (test for excess errors)
Excess errors:
/opt/gcc/work/libstdc++-v3/testsuite/18_support/quick_exit/quick_exit.cc:36:3: error: 'at_quick_exit' is not a member of 'std'
/opt/gcc/work/libstdc++-v3/testsuite/18_support/quick_exit/quick_exit.cc:38:3: error: 'quick_exit' is not a member of 'std'

UNRESOLVED: 18_support/quick_exit/quick_exit.cc compilation failed to produce executable

TIA

Dominique

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: RFA: v3 PATCH to add on_quick_exit/quick_exit to std
  2013-02-12 11:26 RFA: v3 PATCH to add on_quick_exit/quick_exit to std Dominique Dhumieres
@ 2013-02-12 11:32 ` Paolo Carlini
  2013-02-12 11:40   ` Paolo Carlini
  2013-02-12 11:40   ` Dominique Dhumieres
  0 siblings, 2 replies; 20+ messages in thread
From: Paolo Carlini @ 2013-02-12 11:32 UTC (permalink / raw)
  To: dominiq; +Cc: gcc-patches, libstdc++, bkoz, jason

On 02/12/2013 12:26 PM, dominiq@lps.ens.fr wrote:
> The test fails on x86_64-apple-darwin10 with
>
> FAIL: 18_support/quick_exit/quick_exit.cc (test for excess errors)
> Excess errors:
> /opt/gcc/work/libstdc++-v3/testsuite/18_support/quick_exit/quick_exit.cc:36:3: error: 'at_quick_exit' is not a member of 'std'
> /opt/gcc/work/libstdc++-v3/testsuite/18_support/quick_exit/quick_exit.cc:38:3: error: 'quick_exit' is not a member of 'std'
>
> UNRESOLVED: 18_support/quick_exit/quick_exit.cc compilation failed to produce executable
Looks like the configure test isn't strict enough and ends up defining 
the macros when the darwin libc actually doesn't provide the functions. 
Jason may want to review it...

Paolo.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: RFA: v3 PATCH to add on_quick_exit/quick_exit to std
  2013-02-12 11:32 ` Paolo Carlini
  2013-02-12 11:40   ` Paolo Carlini
@ 2013-02-12 11:40   ` Dominique Dhumieres
  2013-02-12 11:58     ` Paolo Carlini
  1 sibling, 1 reply; 20+ messages in thread
From: Dominique Dhumieres @ 2013-02-12 11:40 UTC (permalink / raw)
  To: paolo.carlini, dominiq; +Cc: libstdc++, jason, gcc-patches, bkoz

IIRC I have already asked a similar question about atan2, erf, ...
which don't appear in the std namespace on darwin.

Dominique

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: RFA: v3 PATCH to add on_quick_exit/quick_exit to std
  2013-02-12 11:32 ` Paolo Carlini
@ 2013-02-12 11:40   ` Paolo Carlini
  2013-02-12 11:40   ` Dominique Dhumieres
  1 sibling, 0 replies; 20+ messages in thread
From: Paolo Carlini @ 2013-02-12 11:40 UTC (permalink / raw)
  To: dominiq; +Cc: gcc-patches, libstdc++, bkoz, jason

On 02/12/2013 12:32 PM, Paolo Carlini wrote:
> On 02/12/2013 12:26 PM, dominiq@lps.ens.fr wrote:
>> The test fails on x86_64-apple-darwin10 with
>>
>> FAIL: 18_support/quick_exit/quick_exit.cc (test for excess errors)
>> Excess errors:
>> /opt/gcc/work/libstdc++-v3/testsuite/18_support/quick_exit/quick_exit.cc:36:3: 
>> error: 'at_quick_exit' is not a member of 'std'
>> /opt/gcc/work/libstdc++-v3/testsuite/18_support/quick_exit/quick_exit.cc:38:3: 
>> error: 'quick_exit' is not a member of 'std'
>>
>> UNRESOLVED: 18_support/quick_exit/quick_exit.cc compilation failed to 
>> produce executable
> Looks like the configure test isn't strict enough and ends up defining 
> the macros when the darwin libc actually doesn't provide the 
> functions. Jason may want to review it...
An alternate explanation would be that darwin provides the functions but 
uses c_std instead of c_global. I can add back the functions to 
c_std/cstdlib too, but that seems wrong, because, as I said, normally we 
don't provide C++11 facilities in c_std.

Paolo.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: RFA: v3 PATCH to add on_quick_exit/quick_exit to std
  2013-02-12 11:40   ` Dominique Dhumieres
@ 2013-02-12 11:58     ` Paolo Carlini
  2013-02-12 12:47       ` Dominique Dhumieres
  0 siblings, 1 reply; 20+ messages in thread
From: Paolo Carlini @ 2013-02-12 11:58 UTC (permalink / raw)
  To: dominiq; +Cc: libstdc++, jason, gcc-patches, bkoz

[-- Attachment #1: Type: text/plain, Size: 925 bytes --]

On 02/12/2013 12:40 PM, dominiq@lps.ens.fr wrote:
> IIRC I have already asked a similar question about atan2, erf, ...
> which don't appear in the std namespace on darwin.
You should check whether darwin by chance uses by default c_std instead 
of c_global. The former doesn't provide C++11 facilities. If, on the 
other hand, it uses c_global, it means _GLIBCXX_USE_C99_MATH_TR1 is 
undefined because a configure test fails on that specific darwin release 
you are using. But the last time I checked, modern darwin defined 
_GLIBCXX_USE_C99_MATH_TR1, no problems.

Anyway, about the cstdlib issue the below makes available the new 
functions in c_std/cstdlib too, and I'm going to commit it, it's close 
to what Jason originally committed. But, as I said already we don't 
normally provide C++11 functions in c_std, Benjamin may want to review 
what we are doing in c_std vs c_global, he designed the split.

Paolo.

//////

[-- Attachment #2: patchlet --]
[-- Type: text/plain, Size: 1526 bytes --]

Index: include/c_std/cstdlib
===================================================================
--- include/c_std/cstdlib	(revision 195968)
+++ include/c_std/cstdlib	(working copy)
@@ -57,6 +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
 
 #else
@@ -67,6 +75,11 @@
 #undef abort
 #undef abs
 #undef atexit
+#if __cplusplus >= 201103L
+# ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT
+#  undef at_quick_exit
+# endif
+#endif
 #undef atof
 #undef atoi
 #undef atol
@@ -83,6 +96,11 @@
 #undef mbstowcs
 #undef mbtowc
 #undef qsort
+#if __cplusplus >= 201103L
+# ifdef _GLIBCXX_HAVE_QUICK_EXIT
+#  undef quick_exit
+# endif
+#endif
 #undef rand
 #undef realloc
 #undef srand
@@ -103,6 +121,11 @@
   using ::abort;
   using ::abs;
   using ::atexit;
+#if __cplusplus >= 201103L
+# ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT
+  using ::at_quick_exit;
+# endif
+#endif
   using ::atof;
   using ::atoi;
   using ::atol;
@@ -121,6 +144,11 @@
   using ::mbtowc;
 #endif // _GLIBCXX_HAVE_MBSTATE_T
   using ::qsort;
+#if __cplusplus >= 201103L
+# ifdef _GLIBCXX_HAVE_QUICK_EXIT
+  using ::quick_exit;
+# endif
+#endif
   using ::rand;
   using ::realloc;
   using ::srand;

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: RFA: v3 PATCH to add on_quick_exit/quick_exit to std
  2013-02-12 11:58     ` Paolo Carlini
@ 2013-02-12 12:47       ` Dominique Dhumieres
  2013-02-12 12:56         ` Paolo Carlini
  0 siblings, 1 reply; 20+ messages in thread
From: Dominique Dhumieres @ 2013-02-12 12:47 UTC (permalink / raw)
  To: paolo.carlini, dominiq; +Cc: libstdc++, jason, gcc-patches, bkoz

> But the last time I checked, modern darwin defined
> _GLIBCXX_USE_C99_MATH_TR1, no problems.

AFAICT this is true, but I think darwin10 was released in 2011
so I doubt it has any support for c++11.

> Anyway, about the cstdlib issue the below makes available the new 
> functions in c_std/cstdlib too, and I'm going to commit it, it's close
> to what Jason originally committed. ...

It works, thanks,

Dominique

PS any chance to use this machinery for other missing items:
hypot, erf, ..., i.e., the c++11 additions?

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: RFA: v3 PATCH to add on_quick_exit/quick_exit to std
  2013-02-12 12:47       ` Dominique Dhumieres
@ 2013-02-12 12:56         ` Paolo Carlini
  2013-02-13 14:38           ` Jason Merrill
  0 siblings, 1 reply; 20+ messages in thread
From: Paolo Carlini @ 2013-02-12 12:56 UTC (permalink / raw)
  To: dominiq; +Cc: libstdc++, jason, gcc-patches, bkoz

On 02/12/2013 01:47 PM, dominiq@lps.ens.fr wrote:
>> But the last time I checked, modern darwin defined
>> _GLIBCXX_USE_C99_MATH_TR1, no problems.
> AFAICT this is true, but I think darwin10 was released in 2011
> so I doubt it has any support for c++11.
>
>> Anyway, about the cstdlib issue the below makes available the new
>> functions in c_std/cstdlib too, and I'm going to commit it, it's close
>> to what Jason originally committed. ...
> It works, thanks,
Good, thus looks like you are using c_std on your machine?!? Because I 
just tried, and on a Darwin 12.2.0 machine the build uses c_global by 
default and everything was fine even before my last patchlet 
(_GLIBCXX_USE_C99_MATH_TR1 defined of course).

I think current Darwin is already fine, in general, in these areas.

Again, the current status is in a sense good because when the
_GLIBCXX_HAVE_AT_QUICK_EXIT and _GLIBCXX_HAVE_QUICK_EXIT are defined, 
thus the system has the functions in its c library, including <cstdlib> 
makes available the functions in namespace std irrespective of the 
configury. But then why having c_std in the first place? I'll leave this 
to Benjamin...

Paolo.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: RFA: v3 PATCH to add on_quick_exit/quick_exit to std
  2013-02-12 12:56         ` Paolo Carlini
@ 2013-02-13 14:38           ` Jason Merrill
  2013-02-13 15:08             ` Paolo Carlini
  0 siblings, 1 reply; 20+ messages in thread
From: Jason Merrill @ 2013-02-13 14:38 UTC (permalink / raw)
  To: Paolo Carlini, dominiq; +Cc: libstdc++, gcc-patches, bkoz

On 02/12/2013 07:55 AM, Paolo Carlini wrote:
> Again, the current status is in a sense good because when the
> _GLIBCXX_HAVE_AT_QUICK_EXIT and _GLIBCXX_HAVE_QUICK_EXIT are defined,
> thus the system has the functions in its c library, including <cstdlib>
> makes available the functions in namespace std irrespective of the
> configury. But then why having c_std in the first place? I'll leave this
> to Benjamin...

As I understand it, the difference between c_std and c_global is 
supposed to be that c_std keeps the C library in std, whereas c_global 
has it in both std and the global namespace.  All the other differences 
that have arisen between them seem unintended and wrong.

There is, however, a question whether we need c_std at all now that the 
standard allows the C library to be in the global namespace as well.

Jason

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: RFA: v3 PATCH to add on_quick_exit/quick_exit to std
  2013-02-13 14:38           ` Jason Merrill
@ 2013-02-13 15:08             ` Paolo Carlini
  0 siblings, 0 replies; 20+ messages in thread
From: Paolo Carlini @ 2013-02-13 15:08 UTC (permalink / raw)
  To: Jason Merrill; +Cc: dominiq, libstdc++, gcc-patches, bkoz

Hi,

On 02/13/2013 03:38 PM, Jason Merrill wrote:
> On 02/12/2013 07:55 AM, Paolo Carlini wrote:
>> Again, the current status is in a sense good because when the
>> _GLIBCXX_HAVE_AT_QUICK_EXIT and _GLIBCXX_HAVE_QUICK_EXIT are defined,
>> thus the system has the functions in its c library, including <cstdlib>
>> makes available the functions in namespace std irrespective of the
>> configury. But then why having c_std in the first place? I'll leave this
>> to Benjamin...
> As I understand it, the difference between c_std and c_global is 
> supposed to be that c_std keeps the C library in std, whereas c_global 
> has it in both std and the global namespace.  All the other 
> differences that have arisen between them seem unintended and wrong.
The fact is, for many, many years we didn't even try to keep the C 
library in std only. On the other hand the split c_std / c_global is 
relatively recent (was born in 4.3). Yes, I'm quite confused ;)
> There is, however, a question whether we need c_std at all now that 
> the standard allows the C library to be in the global namespace as well.
Indeed. We could maybe imagine do away with c_std in 4.9...

Paolo.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: RFA: v3 PATCH to add on_quick_exit/quick_exit to std
  2013-02-14 19:17     ` Paolo Carlini
@ 2013-02-15  1:26       ` Jason Merrill
  0 siblings, 0 replies; 20+ messages in thread
From: Jason Merrill @ 2013-02-15  1:26 UTC (permalink / raw)
  To: Paolo Carlini, Rainer Orth; +Cc: gcc-patches List, libstdc++

[-- Attachment #1: Type: text/plain, Size: 375 bytes --]

On 02/14/2013 02:16 PM, Paolo Carlini wrote:
> ... or the below, just in case an interesting system provides the
> *quick_exit functions but doesn't define _GLIBCXX_USE_C99.

It seems rather unlikely that the system would provide some C11 
functions without the corresponding C99 ones.  I'm just going to #if out 
the whole test if the relevant functions aren't available:



[-- Attachment #2: quick_exit2.patch --]
[-- Type: text/x-patch, Size: 954 bytes --]

commit e203f2dcdf077fcf61b4d6b3f8e399c25cc44dfb
Author: Jason Merrill <jason@redhat.com>
Date:   Thu Feb 14 11:15:28 2013 -0500

    	* testsuite/18_support/quick_exit/quick_exit.cc: #if out the whole
    	test if unsupported.

diff --git a/libstdc++-v3/testsuite/18_support/quick_exit/quick_exit.cc b/libstdc++-v3/testsuite/18_support/quick_exit/quick_exit.cc
index 8e55890..b91cbe2 100644
--- a/libstdc++-v3/testsuite/18_support/quick_exit/quick_exit.cc
+++ b/libstdc++-v3/testsuite/18_support/quick_exit/quick_exit.cc
@@ -21,6 +21,7 @@
 
 // 18.5 - Start and termination
 
+#if defined(_GLIBCXX_HAVE_AT_QUICK_EXIT) && defined(_GLIBCXX_HAVE_QUICK_EXIT)
 #include <cstdlib>
 
 void handler()
@@ -35,9 +36,10 @@ void wrong_handler()
 
 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);
+}
+#else
+int main() {}
 #endif
-}

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: RFA: v3 PATCH to add on_quick_exit/quick_exit to std
  2013-02-14 17:46   ` Paolo Carlini
@ 2013-02-14 19:17     ` Paolo Carlini
  2013-02-15  1:26       ` Jason Merrill
  0 siblings, 1 reply; 20+ messages in thread
From: Paolo Carlini @ 2013-02-14 19:17 UTC (permalink / raw)
  To: Rainer Orth; +Cc: Jason Merrill, gcc-patches List, libstdc++

[-- Attachment #1: Type: text/plain, Size: 159 bytes --]

... or the below, just in case an interesting system provides the 
*quick_exit functions but doesn't define _GLIBCXX_USE_C99.

Paolo.

///////////////////////

[-- Attachment #2: patchlet2 --]
[-- Type: text/plain, Size: 613 bytes --]

Index: testsuite/18_support/quick_exit/quick_exit.cc
===================================================================
--- testsuite/18_support/quick_exit/quick_exit.cc	(revision 196056)
+++ testsuite/18_support/quick_exit/quick_exit.cc	(working copy)
@@ -25,7 +25,9 @@
 
 void handler()
 {
+#if _GLIBCXX_USE_C99
   std::_Exit(0);
+#endif
 }
 
 void wrong_handler()
@@ -35,9 +37,11 @@
 
 int main()
 {
+#if _GLIBCXX_USE_C99
 #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
+#endif
 }

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: RFA: v3 PATCH to add on_quick_exit/quick_exit to std
  2013-02-14 15:46 ` Rainer Orth
@ 2013-02-14 17:46   ` Paolo Carlini
  2013-02-14 19:17     ` Paolo Carlini
  0 siblings, 1 reply; 20+ messages in thread
From: Paolo Carlini @ 2013-02-14 17:46 UTC (permalink / raw)
  To: Rainer Orth; +Cc: Jason Merrill, gcc-patches List, libstdc++

[-- Attachment #1: Type: text/plain, Size: 968 bytes --]

Hi Rainer,

On 02/14/2013 04:45 PM, Rainer Orth wrote:
> Jason Merrill <jason@redhat.com> writes:
>
>> While I was going over the C++11 status page, I noticed that quick_exit is
>> implemented by glibc, it just needed to be added to the libstdc++ cstdlib
>> header.
> The test fails on Solaris 9:
>
> FAIL: 18_support/quick_exit/quick_exit.cc (test for excess errors)
> Excess errors:
> /vol/gcc/src/hg/trunk/local/libstdc++-v3/testsuite/18_support/quick_exit/quick_e
> xit.cc:28:3: error: '_Exit' is not a member of 'std'
>
> WARNING: 18_support/quick_exit/quick_exit.cc compilation failed to produce execu
> table
> extra_tool_flags are:
>   -std=gnu++11
>
> _Exit seems to be a C99 addition, only present since Solaris 10.
Indeed. Given the very simple nature of the testcase, I think something 
like the below can do, at least for 4.8.0, if Jason has no objections. 
Can you double check it on Solaris and in case commit it?

Thanks,
Paolo.

/////////////////////

[-- Attachment #2: patchlet --]
[-- Type: text/plain, Size: 368 bytes --]

Index: testsuite/18_support/quick_exit/quick_exit.cc
===================================================================
--- testsuite/18_support/quick_exit/quick_exit.cc	(revision 196056)
+++ testsuite/18_support/quick_exit/quick_exit.cc	(working copy)
@@ -25,7 +25,9 @@
 
 void handler()
 {
+#if _GLIBCXX_USE_C99
   std::_Exit(0);
+#endif
 }
 
 void wrong_handler()

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: RFA: v3 PATCH to add on_quick_exit/quick_exit to std
  2013-02-11 17:33 Jason Merrill
  2013-02-11 17:46 ` Benjamin De Kosnik
  2013-02-11 17:57 ` Paolo Carlini
@ 2013-02-14 15:46 ` Rainer Orth
  2013-02-14 17:46   ` Paolo Carlini
  2 siblings, 1 reply; 20+ messages in thread
From: Rainer Orth @ 2013-02-14 15:46 UTC (permalink / raw)
  To: Jason Merrill; +Cc: gcc-patches List, libstdc++

Jason Merrill <jason@redhat.com> writes:

> While I was going over the C++11 status page, I noticed that quick_exit is
> implemented by glibc, it just needed to be added to the libstdc++ cstdlib
> header.

The test fails on Solaris 9:

FAIL: 18_support/quick_exit/quick_exit.cc (test for excess errors)
Excess errors:
/vol/gcc/src/hg/trunk/local/libstdc++-v3/testsuite/18_support/quick_exit/quick_e
xit.cc:28:3: error: '_Exit' is not a member of 'std'

WARNING: 18_support/quick_exit/quick_exit.cc compilation failed to produce execu
table
extra_tool_flags are:
 -std=gnu++11

_Exit seems to be a C99 addition, only present since Solaris 10.

	Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: RFA: v3 PATCH to add on_quick_exit/quick_exit to std
  2013-02-11 19:01       ` Paolo Carlini
@ 2013-02-11 23:44         ` Paolo Carlini
  0 siblings, 0 replies; 20+ messages in thread
From: Paolo Carlini @ 2013-02-11 23:44 UTC (permalink / raw)
  To: Benjamin De Kosnik; +Cc: Jason Merrill, gcc-patches List, libstdc++

[-- Attachment #1: Type: text/plain, Size: 69 bytes --]

... this is what I committed.

Thanks,
Paolo.

/////////////////////

[-- Attachment #2: CL --]
[-- Type: text/plain, Size: 399 bytes --]

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.

[-- Attachment #3: patchlet --]
[-- Type: text/plain, Size: 3487 bytes --]

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
 }

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: RFA: v3 PATCH to add on_quick_exit/quick_exit to std
  2013-02-11 18:54     ` Benjamin De Kosnik
@ 2013-02-11 19:01       ` Paolo Carlini
  2013-02-11 23:44         ` Paolo Carlini
  0 siblings, 1 reply; 20+ messages in thread
From: Paolo Carlini @ 2013-02-11 19:01 UTC (permalink / raw)
  To: Benjamin De Kosnik; +Cc: Jason Merrill, gcc-patches List, libstdc++

On 02/11/2013 07:54 PM, Benjamin De Kosnik wrote:
>> I can tweak things for the two issues I noticed.
> Thanks.
>
> It seems like this is still 4.8 material to me.
Great. I'll take care of that later today. I'm also going to make sure 
the new testcase doesn't spuriously fail if the functions aren't 
actually available.

Paolo.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: RFA: v3 PATCH to add on_quick_exit/quick_exit to std
  2013-02-11 18:35   ` Paolo Carlini
@ 2013-02-11 18:54     ` Benjamin De Kosnik
  2013-02-11 19:01       ` Paolo Carlini
  0 siblings, 1 reply; 20+ messages in thread
From: Benjamin De Kosnik @ 2013-02-11 18:54 UTC (permalink / raw)
  To: Paolo Carlini; +Cc: Jason Merrill, gcc-patches List, libstdc++


> .. also, I think we should have #if __cplusplus >= 201103L protecting 
> these functions too, exactly like all the other C++11 bits. Eg, I
> don't think we should unconditionally, ie in C++03 mode too, declare 
> at_quick_exit and quick_exit in namespace std.

Yeah.
 
> I can tweak things for the two issues I noticed.

Thanks. 

It seems like this is still 4.8 material to me.

-benjamin

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: RFA: v3 PATCH to add on_quick_exit/quick_exit to std
  2013-02-11 17:57 ` Paolo Carlini
@ 2013-02-11 18:35   ` Paolo Carlini
  2013-02-11 18:54     ` Benjamin De Kosnik
  0 siblings, 1 reply; 20+ messages in thread
From: Paolo Carlini @ 2013-02-11 18:35 UTC (permalink / raw)
  To: Jason Merrill; +Cc: gcc-patches List, libstdc++, Benjamin Kosnik

.. also, I think we should have #if __cplusplus >= 201103L protecting 
these functions too, exactly like all the other C++11 bits. Eg, I don't 
think we should unconditionally, ie in C++03 mode too, declare 
at_quick_exit and quick_exit in namespace std.

I can tweak things for the two issues I noticed.

Paolo.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: RFA: v3 PATCH to add on_quick_exit/quick_exit to std
  2013-02-11 17:33 Jason Merrill
  2013-02-11 17:46 ` Benjamin De Kosnik
@ 2013-02-11 17:57 ` Paolo Carlini
  2013-02-11 18:35   ` Paolo Carlini
  2013-02-14 15:46 ` Rainer Orth
  2 siblings, 1 reply; 20+ messages in thread
From: Paolo Carlini @ 2013-02-11 17:57 UTC (permalink / raw)
  To: Jason Merrill; +Cc: gcc-patches List, libstdc++, Benjamin Kosnik

Hi,

On 02/11/2013 06:33 PM, Jason Merrill wrote:
> While I was going over the C++11 status page, I noticed that 
> quick_exit is implemented by glibc, it just needed to be added to the 
> libstdc++ cstdlib header.
>
> Does this configury/feature macro handling look right?  Is this enough 
> testcase?  Is this small/safe enough to go in for 4.8?
I'm only not sure we want to add the new C++11 functions to c_std too, 
besides c_global, because normally we don't, AFAIK. But Benjamin 
invented the split c_std / c_global, I'm only raising a trivial 
consistency issue.

Thanks!
Paolo.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: RFA: v3 PATCH to add on_quick_exit/quick_exit to std
  2013-02-11 17:33 Jason Merrill
@ 2013-02-11 17:46 ` Benjamin De Kosnik
  2013-02-11 17:57 ` Paolo Carlini
  2013-02-14 15:46 ` Rainer Orth
  2 siblings, 0 replies; 20+ messages in thread
From: Benjamin De Kosnik @ 2013-02-11 17:46 UTC (permalink / raw)
  To: Jason Merrill; +Cc: gcc-patches List, libstdc++


> Does this configury/feature macro handling look right? 

yes.

> Is this enough testcase? 

yes.

> Is this small/safe enough to go in for 4.8?

yes.
 
> commit 884a2a7815a95bade9d23f01b4c64a16808c7f05
> Author: Jason Merrill <jason@redhat.com>
> Date:   Mon Feb 11 11:23:30 2013 -0500
> 
>     	* linkage.m4 (GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE): New.
>     	(GLIBCXX_CHECK_STDLIB_SUPPORT): Check for atexit and
> at_quick_exit.
>     	* include/c_std/cstdlib: Add atexit and at_quick_exit.
>     	* include/c_global/cstdlib: Add atexit and at_quick_exit.
>     	* testsuite/18_support/quick_exit/quick_exit.cc: New.


thanks Jason

-benjamin

^ permalink raw reply	[flat|nested] 20+ messages in thread

* RFA: v3 PATCH to add on_quick_exit/quick_exit to std
@ 2013-02-11 17:33 Jason Merrill
  2013-02-11 17:46 ` Benjamin De Kosnik
                   ` (2 more replies)
  0 siblings, 3 replies; 20+ messages in thread
From: Jason Merrill @ 2013-02-11 17:33 UTC (permalink / raw)
  To: gcc-patches List, libstdc++

[-- Attachment #1: Type: text/plain, Size: 287 bytes --]

While I was going over the C++11 status page, I noticed that quick_exit 
is implemented by glibc, it just needed to be added to the libstdc++ 
cstdlib header.

Does this configury/feature macro handling look right?  Is this enough 
testcase?  Is this small/safe enough to go in for 4.8?

[-- Attachment #2: quick_exit.patch --]
[-- Type: text/x-patch, Size: 35046 bytes --]

commit 884a2a7815a95bade9d23f01b4c64a16808c7f05
Author: Jason Merrill <jason@redhat.com>
Date:   Mon Feb 11 11:23:30 2013 -0500

    	* linkage.m4 (GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE): New.
    	(GLIBCXX_CHECK_STDLIB_SUPPORT): Check for atexit and at_quick_exit.
    	* include/c_std/cstdlib: Add atexit and at_quick_exit.
    	* include/c_global/cstdlib: Add atexit and at_quick_exit.
    	* testsuite/18_support/quick_exit/quick_exit.cc: New.

diff --git a/libstdc++-v3/include/c_global/cstdlib b/libstdc++-v3/include/c_global/cstdlib
index c249c78..0eb0129 100644
--- a/libstdc++-v3/include/c_global/cstdlib
+++ b/libstdc++-v3/include/c_global/cstdlib
@@ -57,6 +57,8 @@ namespace std
   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 std
 
 #else
@@ -67,6 +69,7 @@ namespace std
 #undef abort
 #undef abs
 #undef atexit
+#undef at_quick_exit
 #undef atof
 #undef atoi
 #undef atol
@@ -83,6 +86,7 @@ namespace std
 #undef mbstowcs
 #undef mbtowc
 #undef qsort
+#undef quick_exit
 #undef rand
 #undef realloc
 #undef srand
@@ -103,6 +107,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   using ::abort;
   using ::abs;
   using ::atexit;
+#ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT
+  using ::at_quick_exit;
+#endif
   using ::atof;
   using ::atoi;
   using ::atol;
@@ -121,6 +128,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   using ::mbtowc;
 #endif // _GLIBCXX_HAVE_MBSTATE_T
   using ::qsort;
+#ifdef _GLIBCXX_HAVE_QUICK_EXIT
+  using ::quick_exit;
+#endif
   using ::rand;
   using ::realloc;
   using ::srand;
diff --git a/libstdc++-v3/linkage.m4 b/libstdc++-v3/linkage.m4
index b24f455..45a09cd 100644
--- a/libstdc++-v3/linkage.m4
+++ b/libstdc++-v3/linkage.m4
@@ -239,6 +239,35 @@ dnl 2) has "C" linkage
 dnl
 dnl argument 1 is name of function to check
 dnl
+dnl ASSUMES argument is a stdlib function with ONE parameter
+dnl
+dnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_1
+AC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_1], [
+  AC_MSG_CHECKING([for $1 declaration])
+  if test x${glibcxx_cv_func_$1_use+set} != xset; then
+    AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
+      AC_LANG_SAVE
+      AC_LANG_CPLUSPLUS
+      AC_TRY_COMPILE([#include <stdlib.h>],
+                     [ $1(0);],
+                     [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
+      AC_LANG_RESTORE
+    ])
+  fi
+  AC_MSG_RESULT($glibcxx_cv_func_$1_use)
+  if test x$glibcxx_cv_func_$1_use = x"yes"; then
+    AC_CHECK_FUNCS($1)
+  fi
+])
+
+
+dnl
+dnl Check to see if the (stdlib function) argument passed is
+dnl 1) declared when using the c++ compiler
+dnl 2) has "C" linkage
+dnl
+dnl argument 1 is name of function to check
+dnl
 dnl ASSUMES argument is a stdlib function with TWO parameters
 dnl
 dnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2
@@ -306,6 +335,8 @@ AC_DEFUN([GLIBCXX_CHECK_STDLIB_SUPPORT], [
   ac_save_CXXFLAGS="$CXXFLAGS"
   CXXFLAGS='-fno-builtin -D_GNU_SOURCE'
 
+  GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_1(at_quick_exit)
+  GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_1(quick_exit)
   GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtold)
   GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtof)
 
diff --git a/libstdc++-v3/testsuite/18_support/quick_exit/quick_exit.cc b/libstdc++-v3/testsuite/18_support/quick_exit/quick_exit.cc
new file mode 100644
index 0000000..54ee41e
--- /dev/null
+++ b/libstdc++-v3/testsuite/18_support/quick_exit/quick_exit.cc
@@ -0,0 +1,39 @@
+// 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
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// 18.5 - Start and termination
+
+#include <cstdlib>
+
+void handler()
+{
+  std::_Exit(0);
+}
+
+void wrong_handler()
+{
+  std::abort();
+}
+
+int main()
+{
+  std::at_quick_exit (handler);
+  std::atexit (wrong_handler);
+  std::quick_exit (1);
+}
diff --git a/libstdc++-v3/config.h.in b/libstdc++-v3/config.h.in
index dd14b91..59a7fae 100644
--- a/libstdc++-v3/config.h.in
+++ b/libstdc++-v3/config.h.in
@@ -27,6 +27,9 @@
 /* Define to 1 if you have the `atanl' function. */
 #undef HAVE_ATANL
 
+/* Define to 1 if you have the `at_quick_exit' function. */
+#undef HAVE_AT_QUICK_EXIT
+
 /* Define to 1 if the target assembler supports thread-local storage. */
 #undef HAVE_CC_TLS
 
@@ -303,6 +306,9 @@
 /* Define to 1 if you have the `qfpclass' function. */
 #undef HAVE_QFPCLASS
 
+/* Define to 1 if you have the `quick_exit' function. */
+#undef HAVE_QUICK_EXIT
+
 /* Define to 1 if you have the `setenv' function. */
 #undef HAVE_SETENV
 
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index a4cf5c9..008ccbf 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -26223,6 +26223,122 @@ done
   CXXFLAGS='-fno-builtin -D_GNU_SOURCE'
 
 
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for at_quick_exit declaration" >&5
+$as_echo_n "checking for at_quick_exit declaration... " >&6; }
+  if test x${glibcxx_cv_func_at_quick_exit_use+set} != xset; then
+    if test "${glibcxx_cv_func_at_quick_exit_use+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+
+      ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+int
+main ()
+{
+ at_quick_exit(0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  glibcxx_cv_func_at_quick_exit_use=yes
+else
+  glibcxx_cv_func_at_quick_exit_use=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+fi
+
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_at_quick_exit_use" >&5
+$as_echo "$glibcxx_cv_func_at_quick_exit_use" >&6; }
+  if test x$glibcxx_cv_func_at_quick_exit_use = x"yes"; then
+    for ac_func in at_quick_exit
+do :
+  ac_fn_c_check_func "$LINENO" "at_quick_exit" "ac_cv_func_at_quick_exit"
+if test "x$ac_cv_func_at_quick_exit" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_AT_QUICK_EXIT 1
+_ACEOF
+
+fi
+done
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for quick_exit declaration" >&5
+$as_echo_n "checking for quick_exit declaration... " >&6; }
+  if test x${glibcxx_cv_func_quick_exit_use+set} != xset; then
+    if test "${glibcxx_cv_func_quick_exit_use+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+
+      ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+int
+main ()
+{
+ quick_exit(0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  glibcxx_cv_func_quick_exit_use=yes
+else
+  glibcxx_cv_func_quick_exit_use=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+fi
+
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_quick_exit_use" >&5
+$as_echo "$glibcxx_cv_func_quick_exit_use" >&6; }
+  if test x$glibcxx_cv_func_quick_exit_use = x"yes"; then
+    for ac_func in quick_exit
+do :
+  ac_fn_c_check_func "$LINENO" "quick_exit" "ac_cv_func_quick_exit"
+if test "x$ac_cv_func_quick_exit" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_QUICK_EXIT 1
+_ACEOF
+
+fi
+done
+
+  fi
+
+
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strtold declaration" >&5
 $as_echo_n "checking for strtold declaration... " >&6; }
   if test x${glibcxx_cv_func_strtold_use+set} != xset; then
@@ -33125,6 +33241,122 @@ done
   CXXFLAGS='-fno-builtin -D_GNU_SOURCE'
 
 
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for at_quick_exit declaration" >&5
+$as_echo_n "checking for at_quick_exit declaration... " >&6; }
+  if test x${glibcxx_cv_func_at_quick_exit_use+set} != xset; then
+    if test "${glibcxx_cv_func_at_quick_exit_use+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+
+      ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+int
+main ()
+{
+ at_quick_exit(0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  glibcxx_cv_func_at_quick_exit_use=yes
+else
+  glibcxx_cv_func_at_quick_exit_use=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+fi
+
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_at_quick_exit_use" >&5
+$as_echo "$glibcxx_cv_func_at_quick_exit_use" >&6; }
+  if test x$glibcxx_cv_func_at_quick_exit_use = x"yes"; then
+    for ac_func in at_quick_exit
+do :
+  ac_fn_c_check_func "$LINENO" "at_quick_exit" "ac_cv_func_at_quick_exit"
+if test "x$ac_cv_func_at_quick_exit" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_AT_QUICK_EXIT 1
+_ACEOF
+
+fi
+done
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for quick_exit declaration" >&5
+$as_echo_n "checking for quick_exit declaration... " >&6; }
+  if test x${glibcxx_cv_func_quick_exit_use+set} != xset; then
+    if test "${glibcxx_cv_func_quick_exit_use+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+
+      ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+int
+main ()
+{
+ quick_exit(0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  glibcxx_cv_func_quick_exit_use=yes
+else
+  glibcxx_cv_func_quick_exit_use=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+fi
+
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_quick_exit_use" >&5
+$as_echo "$glibcxx_cv_func_quick_exit_use" >&6; }
+  if test x$glibcxx_cv_func_quick_exit_use = x"yes"; then
+    for ac_func in quick_exit
+do :
+  ac_fn_c_check_func "$LINENO" "quick_exit" "ac_cv_func_quick_exit"
+if test "x$ac_cv_func_quick_exit" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_QUICK_EXIT 1
+_ACEOF
+
+fi
+done
+
+  fi
+
+
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strtold declaration" >&5
 $as_echo_n "checking for strtold declaration... " >&6; }
   if test x${glibcxx_cv_func_strtold_use+set} != xset; then
@@ -38940,6 +39172,122 @@ done
   CXXFLAGS='-fno-builtin -D_GNU_SOURCE'
 
 
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for at_quick_exit declaration" >&5
+$as_echo_n "checking for at_quick_exit declaration... " >&6; }
+  if test x${glibcxx_cv_func_at_quick_exit_use+set} != xset; then
+    if test "${glibcxx_cv_func_at_quick_exit_use+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+
+      ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+int
+main ()
+{
+ at_quick_exit(0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  glibcxx_cv_func_at_quick_exit_use=yes
+else
+  glibcxx_cv_func_at_quick_exit_use=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+fi
+
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_at_quick_exit_use" >&5
+$as_echo "$glibcxx_cv_func_at_quick_exit_use" >&6; }
+  if test x$glibcxx_cv_func_at_quick_exit_use = x"yes"; then
+    for ac_func in at_quick_exit
+do :
+  ac_fn_c_check_func "$LINENO" "at_quick_exit" "ac_cv_func_at_quick_exit"
+if test "x$ac_cv_func_at_quick_exit" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_AT_QUICK_EXIT 1
+_ACEOF
+
+fi
+done
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for quick_exit declaration" >&5
+$as_echo_n "checking for quick_exit declaration... " >&6; }
+  if test x${glibcxx_cv_func_quick_exit_use+set} != xset; then
+    if test "${glibcxx_cv_func_quick_exit_use+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+
+      ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+int
+main ()
+{
+ quick_exit(0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  glibcxx_cv_func_quick_exit_use=yes
+else
+  glibcxx_cv_func_quick_exit_use=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+fi
+
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_quick_exit_use" >&5
+$as_echo "$glibcxx_cv_func_quick_exit_use" >&6; }
+  if test x$glibcxx_cv_func_quick_exit_use = x"yes"; then
+    for ac_func in quick_exit
+do :
+  ac_fn_c_check_func "$LINENO" "quick_exit" "ac_cv_func_quick_exit"
+if test "x$ac_cv_func_quick_exit" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_QUICK_EXIT 1
+_ACEOF
+
+fi
+done
+
+  fi
+
+
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strtold declaration" >&5
 $as_echo_n "checking for strtold declaration... " >&6; }
   if test x${glibcxx_cv_func_strtold_use+set} != xset; then
@@ -44770,6 +45118,122 @@ done
   CXXFLAGS='-fno-builtin -D_GNU_SOURCE'
 
 
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for at_quick_exit declaration" >&5
+$as_echo_n "checking for at_quick_exit declaration... " >&6; }
+  if test x${glibcxx_cv_func_at_quick_exit_use+set} != xset; then
+    if test "${glibcxx_cv_func_at_quick_exit_use+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+
+      ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+int
+main ()
+{
+ at_quick_exit(0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  glibcxx_cv_func_at_quick_exit_use=yes
+else
+  glibcxx_cv_func_at_quick_exit_use=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+fi
+
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_at_quick_exit_use" >&5
+$as_echo "$glibcxx_cv_func_at_quick_exit_use" >&6; }
+  if test x$glibcxx_cv_func_at_quick_exit_use = x"yes"; then
+    for ac_func in at_quick_exit
+do :
+  ac_fn_c_check_func "$LINENO" "at_quick_exit" "ac_cv_func_at_quick_exit"
+if test "x$ac_cv_func_at_quick_exit" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_AT_QUICK_EXIT 1
+_ACEOF
+
+fi
+done
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for quick_exit declaration" >&5
+$as_echo_n "checking for quick_exit declaration... " >&6; }
+  if test x${glibcxx_cv_func_quick_exit_use+set} != xset; then
+    if test "${glibcxx_cv_func_quick_exit_use+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+
+      ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+int
+main ()
+{
+ quick_exit(0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  glibcxx_cv_func_quick_exit_use=yes
+else
+  glibcxx_cv_func_quick_exit_use=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+fi
+
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_quick_exit_use" >&5
+$as_echo "$glibcxx_cv_func_quick_exit_use" >&6; }
+  if test x$glibcxx_cv_func_quick_exit_use = x"yes"; then
+    for ac_func in quick_exit
+do :
+  ac_fn_c_check_func "$LINENO" "quick_exit" "ac_cv_func_quick_exit"
+if test "x$ac_cv_func_quick_exit" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_QUICK_EXIT 1
+_ACEOF
+
+fi
+done
+
+  fi
+
+
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strtold declaration" >&5
 $as_echo_n "checking for strtold declaration... " >&6; }
   if test x${glibcxx_cv_func_strtold_use+set} != xset; then
@@ -51274,6 +51738,122 @@ done
   CXXFLAGS='-fno-builtin -D_GNU_SOURCE'
 
 
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for at_quick_exit declaration" >&5
+$as_echo_n "checking for at_quick_exit declaration... " >&6; }
+  if test x${glibcxx_cv_func_at_quick_exit_use+set} != xset; then
+    if test "${glibcxx_cv_func_at_quick_exit_use+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+
+      ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+int
+main ()
+{
+ at_quick_exit(0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  glibcxx_cv_func_at_quick_exit_use=yes
+else
+  glibcxx_cv_func_at_quick_exit_use=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+fi
+
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_at_quick_exit_use" >&5
+$as_echo "$glibcxx_cv_func_at_quick_exit_use" >&6; }
+  if test x$glibcxx_cv_func_at_quick_exit_use = x"yes"; then
+    for ac_func in at_quick_exit
+do :
+  ac_fn_c_check_func "$LINENO" "at_quick_exit" "ac_cv_func_at_quick_exit"
+if test "x$ac_cv_func_at_quick_exit" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_AT_QUICK_EXIT 1
+_ACEOF
+
+fi
+done
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for quick_exit declaration" >&5
+$as_echo_n "checking for quick_exit declaration... " >&6; }
+  if test x${glibcxx_cv_func_quick_exit_use+set} != xset; then
+    if test "${glibcxx_cv_func_quick_exit_use+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+
+      ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+int
+main ()
+{
+ quick_exit(0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  glibcxx_cv_func_quick_exit_use=yes
+else
+  glibcxx_cv_func_quick_exit_use=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+fi
+
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_quick_exit_use" >&5
+$as_echo "$glibcxx_cv_func_quick_exit_use" >&6; }
+  if test x$glibcxx_cv_func_quick_exit_use = x"yes"; then
+    for ac_func in quick_exit
+do :
+  ac_fn_c_check_func "$LINENO" "quick_exit" "ac_cv_func_quick_exit"
+if test "x$ac_cv_func_quick_exit" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_QUICK_EXIT 1
+_ACEOF
+
+fi
+done
+
+  fi
+
+
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strtold declaration" >&5
 $as_echo_n "checking for strtold declaration... " >&6; }
   if test x${glibcxx_cv_func_strtold_use+set} != xset; then
@@ -57443,6 +58023,122 @@ done
   CXXFLAGS='-fno-builtin -D_GNU_SOURCE'
 
 
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for at_quick_exit declaration" >&5
+$as_echo_n "checking for at_quick_exit declaration... " >&6; }
+  if test x${glibcxx_cv_func_at_quick_exit_use+set} != xset; then
+    if test "${glibcxx_cv_func_at_quick_exit_use+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+
+      ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+int
+main ()
+{
+ at_quick_exit(0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  glibcxx_cv_func_at_quick_exit_use=yes
+else
+  glibcxx_cv_func_at_quick_exit_use=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+fi
+
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_at_quick_exit_use" >&5
+$as_echo "$glibcxx_cv_func_at_quick_exit_use" >&6; }
+  if test x$glibcxx_cv_func_at_quick_exit_use = x"yes"; then
+    for ac_func in at_quick_exit
+do :
+  ac_fn_c_check_func "$LINENO" "at_quick_exit" "ac_cv_func_at_quick_exit"
+if test "x$ac_cv_func_at_quick_exit" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_AT_QUICK_EXIT 1
+_ACEOF
+
+fi
+done
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for quick_exit declaration" >&5
+$as_echo_n "checking for quick_exit declaration... " >&6; }
+  if test x${glibcxx_cv_func_quick_exit_use+set} != xset; then
+    if test "${glibcxx_cv_func_quick_exit_use+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+
+      ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+int
+main ()
+{
+ quick_exit(0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  glibcxx_cv_func_quick_exit_use=yes
+else
+  glibcxx_cv_func_quick_exit_use=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+fi
+
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_quick_exit_use" >&5
+$as_echo "$glibcxx_cv_func_quick_exit_use" >&6; }
+  if test x$glibcxx_cv_func_quick_exit_use = x"yes"; then
+    for ac_func in quick_exit
+do :
+  ac_fn_c_check_func "$LINENO" "quick_exit" "ac_cv_func_quick_exit"
+if test "x$ac_cv_func_quick_exit" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_QUICK_EXIT 1
+_ACEOF
+
+fi
+done
+
+  fi
+
+
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strtold declaration" >&5
 $as_echo_n "checking for strtold declaration... " >&6; }
   if test x${glibcxx_cv_func_strtold_use+set} != xset; then
@@ -63638,6 +64334,122 @@ done
   CXXFLAGS='-fno-builtin -D_GNU_SOURCE'
 
 
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for at_quick_exit declaration" >&5
+$as_echo_n "checking for at_quick_exit declaration... " >&6; }
+  if test x${glibcxx_cv_func_at_quick_exit_use+set} != xset; then
+    if test "${glibcxx_cv_func_at_quick_exit_use+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+
+      ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+int
+main ()
+{
+ at_quick_exit(0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  glibcxx_cv_func_at_quick_exit_use=yes
+else
+  glibcxx_cv_func_at_quick_exit_use=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+fi
+
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_at_quick_exit_use" >&5
+$as_echo "$glibcxx_cv_func_at_quick_exit_use" >&6; }
+  if test x$glibcxx_cv_func_at_quick_exit_use = x"yes"; then
+    for ac_func in at_quick_exit
+do :
+  ac_fn_c_check_func "$LINENO" "at_quick_exit" "ac_cv_func_at_quick_exit"
+if test "x$ac_cv_func_at_quick_exit" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_AT_QUICK_EXIT 1
+_ACEOF
+
+fi
+done
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for quick_exit declaration" >&5
+$as_echo_n "checking for quick_exit declaration... " >&6; }
+  if test x${glibcxx_cv_func_quick_exit_use+set} != xset; then
+    if test "${glibcxx_cv_func_quick_exit_use+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+
+      ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+int
+main ()
+{
+ quick_exit(0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  glibcxx_cv_func_quick_exit_use=yes
+else
+  glibcxx_cv_func_quick_exit_use=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+fi
+
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_quick_exit_use" >&5
+$as_echo "$glibcxx_cv_func_quick_exit_use" >&6; }
+  if test x$glibcxx_cv_func_quick_exit_use = x"yes"; then
+    for ac_func in quick_exit
+do :
+  ac_fn_c_check_func "$LINENO" "quick_exit" "ac_cv_func_quick_exit"
+if test "x$ac_cv_func_quick_exit" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_QUICK_EXIT 1
+_ACEOF
+
+fi
+done
+
+  fi
+
+
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strtold declaration" >&5
 $as_echo_n "checking for strtold declaration... " >&6; }
   if test x${glibcxx_cv_func_strtold_use+set} != xset; then
@@ -69506,6 +70318,122 @@ done
   CXXFLAGS='-fno-builtin -D_GNU_SOURCE'
 
 
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for at_quick_exit declaration" >&5
+$as_echo_n "checking for at_quick_exit declaration... " >&6; }
+  if test x${glibcxx_cv_func_at_quick_exit_use+set} != xset; then
+    if test "${glibcxx_cv_func_at_quick_exit_use+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+
+      ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+int
+main ()
+{
+ at_quick_exit(0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  glibcxx_cv_func_at_quick_exit_use=yes
+else
+  glibcxx_cv_func_at_quick_exit_use=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+fi
+
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_at_quick_exit_use" >&5
+$as_echo "$glibcxx_cv_func_at_quick_exit_use" >&6; }
+  if test x$glibcxx_cv_func_at_quick_exit_use = x"yes"; then
+    for ac_func in at_quick_exit
+do :
+  ac_fn_c_check_func "$LINENO" "at_quick_exit" "ac_cv_func_at_quick_exit"
+if test "x$ac_cv_func_at_quick_exit" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_AT_QUICK_EXIT 1
+_ACEOF
+
+fi
+done
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for quick_exit declaration" >&5
+$as_echo_n "checking for quick_exit declaration... " >&6; }
+  if test x${glibcxx_cv_func_quick_exit_use+set} != xset; then
+    if test "${glibcxx_cv_func_quick_exit_use+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+
+      ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+int
+main ()
+{
+ quick_exit(0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  glibcxx_cv_func_quick_exit_use=yes
+else
+  glibcxx_cv_func_quick_exit_use=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+fi
+
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_quick_exit_use" >&5
+$as_echo "$glibcxx_cv_func_quick_exit_use" >&6; }
+  if test x$glibcxx_cv_func_quick_exit_use = x"yes"; then
+    for ac_func in quick_exit
+do :
+  ac_fn_c_check_func "$LINENO" "quick_exit" "ac_cv_func_quick_exit"
+if test "x$ac_cv_func_quick_exit" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_QUICK_EXIT 1
+_ACEOF
+
+fi
+done
+
+  fi
+
+
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strtold declaration" >&5
 $as_echo_n "checking for strtold declaration... " >&6; }
   if test x${glibcxx_cv_func_strtold_use+set} != xset; then
diff --git a/libstdc++-v3/include/c_std/cstdlib b/libstdc++-v3/include/c_std/cstdlib
index 224fccf..9d2f51e 100644
--- a/libstdc++-v3/include/c_std/cstdlib
+++ b/libstdc++-v3/include/c_std/cstdlib
@@ -57,6 +57,8 @@ namespace std
   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
@@ -67,6 +69,7 @@ namespace std
 #undef abort
 #undef abs
 #undef atexit
+#undef at_quick_exit
 #undef atof
 #undef atoi
 #undef atol
@@ -83,6 +86,7 @@ namespace std
 #undef mbstowcs
 #undef mbtowc
 #undef qsort
+#undef quick_exit
 #undef rand
 #undef realloc
 #undef srand
@@ -103,6 +107,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   using ::abort;
   using ::abs;
   using ::atexit;
+#ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT
+  using ::at_quick_exit;
+#endif
   using ::atof;
   using ::atoi;
   using ::atol;
@@ -121,6 +128,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   using ::mbtowc;
 #endif // _GLIBCXX_HAVE_MBSTATE_T
   using ::qsort;
+#ifdef _GLIBCXX_HAVE_QUICK_EXIT
+  using ::quick_exit;
+#endif
   using ::rand;
   using ::realloc;
   using ::srand;

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2013-02-15  1:26 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-02-12 11:26 RFA: v3 PATCH to add on_quick_exit/quick_exit to std Dominique Dhumieres
2013-02-12 11:32 ` Paolo Carlini
2013-02-12 11:40   ` Paolo Carlini
2013-02-12 11:40   ` Dominique Dhumieres
2013-02-12 11:58     ` Paolo Carlini
2013-02-12 12:47       ` Dominique Dhumieres
2013-02-12 12:56         ` Paolo Carlini
2013-02-13 14:38           ` Jason Merrill
2013-02-13 15:08             ` Paolo Carlini
  -- strict thread matches above, loose matches on Subject: below --
2013-02-11 17:33 Jason Merrill
2013-02-11 17:46 ` Benjamin De Kosnik
2013-02-11 17:57 ` Paolo Carlini
2013-02-11 18:35   ` Paolo Carlini
2013-02-11 18:54     ` Benjamin De Kosnik
2013-02-11 19:01       ` Paolo Carlini
2013-02-11 23:44         ` Paolo Carlini
2013-02-14 15:46 ` Rainer Orth
2013-02-14 17:46   ` Paolo Carlini
2013-02-14 19:17     ` Paolo Carlini
2013-02-15  1:26       ` Jason Merrill

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).