diff options
Diffstat (limited to 'libstdc++-v3/testsuite/18_support')
81 files changed, 4111 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/18_support/bad_alloc/cons_virtual_derivation.cc b/libstdc++-v3/testsuite/18_support/bad_alloc/cons_virtual_derivation.cc new file mode 100644 index 000000000..bec62c383 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/bad_alloc/cons_virtual_derivation.cc @@ -0,0 +1,28 @@ +// 2007-05-29 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2007, 2008, 2009 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/>. + +#include <new> +#include <testsuite_api.h> + +int main() +{ + typedef std::bad_alloc test_type; + __gnu_test::diamond_derivation<test_type, true>::test(); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/bad_alloc/what.cc b/libstdc++-v3/testsuite/18_support/bad_alloc/what.cc new file mode 100644 index 000000000..43bdae782 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/bad_alloc/what.cc @@ -0,0 +1,40 @@ +// 2007-01-30 Paolo Carlini <pcarlini@suse.de> + +// Copyright (C) 2007, 2009 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/>. + +#include <new> +#include <typeinfo> +#include <exception> +#include <cstring> +#include <testsuite_hooks.h> + +// libstdc++/14493 +void test01() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + bad_alloc ba; + VERIFY( !strcmp(ba.what(), "std::bad_alloc") ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/bad_cast/cons_virtual_derivation.cc b/libstdc++-v3/testsuite/18_support/bad_cast/cons_virtual_derivation.cc new file mode 100644 index 000000000..4ff9efd86 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/bad_cast/cons_virtual_derivation.cc @@ -0,0 +1,28 @@ +// 2007-05-29 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2007, 2008, 2009 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/>. + +#include <typeinfo> +#include <testsuite_api.h> + +int main() +{ + typedef std::bad_cast test_type; + __gnu_test::diamond_derivation<test_type, true>::test(); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/bad_cast/what.cc b/libstdc++-v3/testsuite/18_support/bad_cast/what.cc new file mode 100644 index 000000000..d71295266 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/bad_cast/what.cc @@ -0,0 +1,40 @@ +// 2007-01-30 Paolo Carlini <pcarlini@suse.de> + +// Copyright (C) 2007, 2009 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/>. + +#include <new> +#include <typeinfo> +#include <exception> +#include <cstring> +#include <testsuite_hooks.h> + +// libstdc++/14493 +void test01() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + bad_cast bc; + VERIFY( !strcmp(bc.what(), "std::bad_cast") ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/bad_exception/23591_thread-1.c b/libstdc++-v3/testsuite/18_support/bad_exception/23591_thread-1.c new file mode 100644 index 000000000..f6c623043 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/bad_exception/23591_thread-1.c @@ -0,0 +1,62 @@ +// { dg-require-sharedlib "" } +// { dg-options "-g -O2 -pthread -ldl -x c" { target *-*-linux* } } + +// Copyright (C) 2005, 2009, 2010 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/>. + +#include <pthread.h> +#include <dlfcn.h> +#include <errno.h> +#include <stdio.h> +#include <string.h> + +// NB: This must be compiled and linked as a "C" executable. +static void* run(void* arg) +{ + typedef void (*function_type) (void); + void* lib; + void (*cb)(); + + lib = dlopen("./testsuite_shared.so", RTLD_NOW); + if (!lib) + { + printf("dlopen failed: %s\n", strerror(errno)); + return 0; + } + cb = (function_type) dlsym(lib, "try_throw_exception"); + if (!cb) + { + printf("dlsym failed: %s\n", strerror(errno)); + return 0; + } + cb(); + dlclose(lib); + return 0; +} + +// libstdc++/23591 +int main(void) +{ + pthread_t pt; + + if (pthread_create(&pt, 0, &run, 0) != 0) + return 1; + if (pthread_join(pt, 0) != 0) + return 1; + + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/bad_exception/cons_virtual_derivation.cc b/libstdc++-v3/testsuite/18_support/bad_exception/cons_virtual_derivation.cc new file mode 100644 index 000000000..86a874b2c --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/bad_exception/cons_virtual_derivation.cc @@ -0,0 +1,28 @@ +// 2007-05-29 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2007, 2008, 2009 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/>. + +#include <exception> +#include <testsuite_api.h> + +int main() +{ + typedef std::bad_exception test_type; + __gnu_test::diamond_derivation<test_type, true>::test(); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/bad_exception/what.cc b/libstdc++-v3/testsuite/18_support/bad_exception/what.cc new file mode 100644 index 000000000..3c3180668 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/bad_exception/what.cc @@ -0,0 +1,40 @@ +// 2007-01-30 Paolo Carlini <pcarlini@suse.de> + +// Copyright (C) 2007, 2009 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/>. + +#include <new> +#include <typeinfo> +#include <exception> +#include <cstring> +#include <testsuite_hooks.h> + +// libstdc++/14493 +void test01() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + bad_exception be; + VERIFY( !strcmp(be.what(), "std::bad_exception") ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/bad_typeid/cons_virtual_derivation.cc b/libstdc++-v3/testsuite/18_support/bad_typeid/cons_virtual_derivation.cc new file mode 100644 index 000000000..510afa6ea --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/bad_typeid/cons_virtual_derivation.cc @@ -0,0 +1,28 @@ +// 2007-05-29 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2007, 2008, 2009 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/>. + +#include <typeinfo> +#include <testsuite_api.h> + +int main() +{ + typedef std::bad_typeid test_type; + __gnu_test::diamond_derivation<test_type, true>::test(); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/bad_typeid/what.cc b/libstdc++-v3/testsuite/18_support/bad_typeid/what.cc new file mode 100644 index 000000000..ea7ad298b --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/bad_typeid/what.cc @@ -0,0 +1,40 @@ +// 2007-01-30 Paolo Carlini <pcarlini@suse.de> + +// Copyright (C) 2007, 2009 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/>. + +#include <new> +#include <typeinfo> +#include <exception> +#include <cstring> +#include <testsuite_hooks.h> + +// libstdc++/14493 +void test01() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + bad_typeid bt; + VERIFY( !strcmp(bt.what(), "std::bad_typeid") ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/exception/38732.cc b/libstdc++-v3/testsuite/18_support/exception/38732.cc new file mode 100644 index 000000000..7c70f3a17 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/exception/38732.cc @@ -0,0 +1,91 @@ +// Copyright (C) 2009, 2010 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/>. + +#include <typeinfo> +#include <exception> +#include "unwind.h" +#include <testsuite_hooks.h> + +// Before exception_ptr was introduced, some programs copied +// part of unwind-cxx.h and used __cxa_get_globals to get at the +// current exceptionType. __cxa_exception structure is described in the +// C++ ABI, so they have the right to assume it works. +// Ensure it is true. + +struct __cxa_exception +{ + std::type_info *exceptionType; + void (*exceptionDestructor)(void *); + std::unexpected_handler unexpectedHandler; + std::terminate_handler terminateHandler; + __cxa_exception *nextException; + int handlerCount; +#ifdef __ARM_EABI_UNWINDER__ + __cxa_exception* nextPropagatingException; + int propagationCount; +#else + int handlerSwitchValue; + const unsigned char *actionRecord; + const unsigned char *languageSpecificData; + _Unwind_Ptr catchTemp; + void *adjustedPtr; +#endif + _Unwind_Exception unwindHeader; +}; + +struct __cxa_eh_globals +{ + __cxa_exception *caughtExceptions; + unsigned int uncaughtExceptions; +#ifdef __ARM_EABI_UNWINDER__ + __cxa_exception* propagatingExceptions; +#endif +}; + +extern "C" __cxa_eh_globals *__cxa_get_globals () throw(); + +// PR libstdc++/38732 +void test01 () +{ + bool test __attribute__((unused)) = true; + try { + throw 0; + } catch(...) { + __cxa_exception *exc = __cxa_get_globals()->caughtExceptions; + VERIFY ( exc != 0 ); + VERIFY ( typeid(int) == *exc->exceptionType ); + } + try { + throw 0LL; + } catch(...) { + __cxa_exception *exc = __cxa_get_globals()->caughtExceptions; + VERIFY ( exc != 0 ); + VERIFY ( typeid(long long int) == *exc->exceptionType ); + } + try { + throw 0.0; + } catch(...) { + __cxa_exception *exc = __cxa_get_globals()->caughtExceptions; + VERIFY ( exc != 0 ); + VERIFY ( typeid(double) == *exc->exceptionType ); + } +} + +int main () +{ + test01 (); +} diff --git a/libstdc++-v3/testsuite/18_support/exception/what.cc b/libstdc++-v3/testsuite/18_support/exception/what.cc new file mode 100644 index 000000000..c56fb1d35 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/exception/what.cc @@ -0,0 +1,40 @@ +// 2007-01-30 Paolo Carlini <pcarlini@suse.de> + +// Copyright (C) 2007, 2009 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/>. + +#include <new> +#include <typeinfo> +#include <exception> +#include <cstring> +#include <testsuite_hooks.h> + +// libstdc++/14493 +void test01() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + exception e; + VERIFY( !strcmp(e.what(), "std::exception") ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/exception_ptr/40296.cc b/libstdc++-v3/testsuite/18_support/exception_ptr/40296.cc new file mode 100644 index 000000000..933f41369 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/exception_ptr/40296.cc @@ -0,0 +1,30 @@ +// { dg-do compile } +// { dg-options "-std=gnu++0x" } +// { dg-require-atomic-builtins "" } + +// Copyright (C) 2009 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/>. + +#include <exception> + +// libstdc++/40296 +bool test01() +{ + std::exception_ptr p; + + return (p == 0); +} diff --git a/libstdc++-v3/testsuite/18_support/exception_ptr/current_exception.cc b/libstdc++-v3/testsuite/18_support/exception_ptr/current_exception.cc new file mode 100644 index 000000000..4029eaf69 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/exception_ptr/current_exception.cc @@ -0,0 +1,91 @@ +// { dg-options "-std=gnu++0x" } +// { dg-require-atomic-builtins "" } + +// 2008-05-25 Sebastian Redl <sebastian.redl@getdesigned.at> + +// Copyright (C) 2008, 2009 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/>. + +// current_exception() under various conditions. + +#include <exception> +#include <testsuite_hooks.h> + +void test01() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + exception_ptr ep = current_exception(); + VERIFY( ep == 0 ); +} + +void test02() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + try { + throw 0; + } catch(...) { + exception_ptr ep = current_exception(); + VERIFY( ep != 0 ); + } +} + +void test03() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + try { + throw exception(); + } catch(std::exception&) { + exception_ptr ep = current_exception(); + VERIFY( ep != 0 ); + } +} + +void test04() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + try { + throw 0; + } catch(...) { + exception_ptr ep1 = current_exception(); + try { + throw 0; + } catch(...) { + exception_ptr ep2 = current_exception(); + VERIFY( ep1 != ep2 ); + } + exception_ptr ep3 = current_exception(); + // Not guaranteed by standard, but by this implementation. + VERIFY( ep1 == ep3 ); + } +} + +int main() +{ + test01(); + test02(); + test03(); + test04(); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/exception_ptr/lifespan.cc b/libstdc++-v3/testsuite/18_support/exception_ptr/lifespan.cc new file mode 100644 index 000000000..704f77e69 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/exception_ptr/lifespan.cc @@ -0,0 +1,189 @@ +// { dg-options "-std=gnu++0x" } +// { dg-require-atomic-builtins "" } + +// 2008-05-25 Sebastian Redl <sebastian.redl@getdesigned.at> + +// Copyright (C) 2008, 2009 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/>. + +// Tests the life span of the exception object. + +#include <exception> +#include <testsuite_hooks.h> + +bool may_destruct = false; + +class destructing +{ + mutable bool copied; + +public: + destructing() : copied(false) { } + destructing(const destructing &o) : copied(false) { o.copied = true; } + ~destructing() { VERIFY( copied || may_destruct ); } +}; + +void test01() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + may_destruct = false; + + // Test the destructing class. + { + destructing *d = new destructing; + destructing d2(*d); + delete d; + may_destruct = true; + } + may_destruct = false; +} + +void test02() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + may_destruct = false; + + try { + throw destructing(); + } catch(...) { + may_destruct = true; + } + may_destruct = false; +} + +void test03() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + may_destruct = false; + + try { + throw destructing(); + } catch(...) { + { + exception_ptr ep = current_exception(); + } + may_destruct = true; + } + may_destruct = false; +} + +void test04() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + may_destruct = false; + + { + exception_ptr ep; + try { + throw destructing(); + } catch(...) { + ep = current_exception(); + } + may_destruct = true; + } + may_destruct = false; +} + +void test05_helper() +{ + using namespace std; + try { + throw destructing(); + } catch(...) { + exception_ptr ep = current_exception(); + rethrow_exception(ep); + } +} + +void test05() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + may_destruct = false; + + try { + test05_helper(); + } catch(...) { + may_destruct = true; + } + may_destruct = false; +} + +void test06_helper() +{ + using namespace std; + try { + throw destructing(); + } catch(...) { + exception_ptr ep = current_exception(); + throw; + } +} + +void test06() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + may_destruct = false; + + try { + test06_helper(); + } catch(...) { + may_destruct = true; + } + may_destruct = false; +} + +std::exception_ptr gep; + +void test99() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + may_destruct = false; + + try { + throw destructing(); + } catch(...) { + gep = current_exception(); + } +} + +int main() +{ + test01(); + test02(); + test03(); + test04(); + test05(); + test06(); + + test99(); + may_destruct = true; + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/exception_ptr/make_exception_ptr.cc b/libstdc++-v3/testsuite/18_support/exception_ptr/make_exception_ptr.cc new file mode 100644 index 000000000..4a7283f67 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/exception_ptr/make_exception_ptr.cc @@ -0,0 +1,38 @@ +// { dg-options "-std=gnu++0x" } +// { dg-require-atomic-builtins "" } + +// Copyright (C) 2010 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/>. + +#include <exception> +#include <testsuite_hooks.h> + +void test01() +{ + bool test __attribute__((unused)) = true; + + std::exception_ptr p = std::make_exception_ptr(0); + + VERIFY( !(p == 0) ); +} + +int main() +{ + test01(); + + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/exception_ptr/move.cc b/libstdc++-v3/testsuite/18_support/exception_ptr/move.cc new file mode 100644 index 000000000..ce97bc28c --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/exception_ptr/move.cc @@ -0,0 +1,45 @@ +// { dg-options "-std=gnu++0x" } +// { dg-require-atomic-builtins "" } + +// Copyright (C) 2009 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/>. + +#include <exception> +#include <utility> +#include <testsuite_hooks.h> + +// Verify move construction and assignment are efficient and do not copy. +// This behaviour is a GNU extension provided for efficiency. +void test01() +{ + bool test = true; + + std::exception_ptr p1 = std::copy_exception(test); + std::exception_ptr p2 = std::move(p1); + VERIFY( p1 == 0 ); + VERIFY( !(p2 == 0) ); + + p1 = std::move(p2); + VERIFY( !(p1 == 0) ); + VERIFY( p2 == 0 ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/exception_ptr/requirements.cc b/libstdc++-v3/testsuite/18_support/exception_ptr/requirements.cc new file mode 100644 index 000000000..36e6375d9 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/exception_ptr/requirements.cc @@ -0,0 +1,60 @@ +// { dg-options "-std=gnu++0x" } +// { dg-require-atomic-builtins "" } + +// Copyright (C) 2010 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/>. + +#include <exception> +#include <testsuite_hooks.h> + +// test NullablePointer requirements +void test01() +{ + std::exception_ptr p1; // DefaultConstructible + std::exception_ptr p2(p1); // CopyConstructible + p1 = p2; // CopyAssignable + VERIFY( p1 == p2 ); // EqualityComparable + VERIFY( !bool(p1) ); // contextually convertible to bool + swap(p1, p2); // Swappable + + // Table 39 expressions + std::exception_ptr p3 = nullptr; + std::exception_ptr p4(nullptr); + VERIFY( std::exception_ptr() == nullptr ); + p4 = nullptr; + VERIFY( p4 == nullptr ); + VERIFY( nullptr == p4 ); + VERIFY( (p4 != nullptr) == !(p4 == nullptr) ); + VERIFY( (nullptr != p4) == !(p4 == nullptr) ); + + std::exception_ptr p5{}; // value initialized ... + VERIFY( p5 == nullptr ); // ... is equivalent to null +} + +// additional exception_ptr requirements +void test02() +{ + std::exception_ptr p1; + VERIFY( p1 == nullptr ); +} + +int main() +{ + test01(); + test02(); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/exception_ptr/requirements_neg.cc b/libstdc++-v3/testsuite/18_support/exception_ptr/requirements_neg.cc new file mode 100644 index 000000000..b897b506d --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/exception_ptr/requirements_neg.cc @@ -0,0 +1,33 @@ +// { dg-do compile } +// { dg-options "-std=gnu++0x" } +// { dg-require-atomic-builtins "" } + +// Copyright (C) 2010 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/>. + +#include <exception> + +// test implicit conversions +void test01() +{ + std::exception_ptr p; + + int __attribute__((unused)) i = p; // { dg-error "cannot convert" } + bool __attribute__((unused)) b = p; // { dg-error "cannot convert" } + void* __attribute__((unused)) v = p; // { dg-error "cannot convert" } +} + diff --git a/libstdc++-v3/testsuite/18_support/exception_ptr/rethrow_exception.cc b/libstdc++-v3/testsuite/18_support/exception_ptr/rethrow_exception.cc new file mode 100644 index 000000000..96b04a2bf --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/exception_ptr/rethrow_exception.cc @@ -0,0 +1,114 @@ +// { dg-options "-std=gnu++0x" } +// { dg-require-atomic-builtins "" } + +// 2008-05-25 Sebastian Redl <sebastian.redl@getdesigned.at> + +// Copyright (C) 2008, 2009 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/>. + +// rethrow_exception() and preservation of data + +#include <exception> +#include <typeinfo> +#include <cstring> +#include <stdexcept> +#include <testsuite_hooks.h> + +void test01() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + try { + rethrow_exception(copy_exception(0)); + } catch(...) { + } +} + +void test02() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + try { + rethrow_exception(copy_exception(runtime_error("test"))); + } catch(exception &e) { + VERIFY( typeid(e) == typeid(runtime_error) ); + VERIFY( strcmp(e.what(), "test") == 0 ); + } +} + +void test03() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + exception_ptr ep; + try { + throw 0; + } catch(...) { + ep = current_exception(); + } + try { + rethrow_exception(ep); + } catch(...) { + } +} + +void test04() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + // Weave the exceptions in an attempt to confuse the machinery. + try { + throw 0; + } catch(...) { + exception_ptr ep1 = current_exception(); + try { + throw 1; + } catch(...) { + exception_ptr ep2 = current_exception(); + try { + rethrow_exception(ep1); + } catch(...) { + try { + rethrow_exception(ep2); + } catch(...) { + try { + rethrow_exception(ep1); + } catch(...) { + } + try { + rethrow_exception(ep2); + } catch(...) { + } + } + } + } + } +} + +int main() +{ + test01(); + test02(); + test03(); + test04(); + + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/headers/cfloat/values.cc b/libstdc++-v3/testsuite/18_support/headers/cfloat/values.cc new file mode 100644 index 000000000..2019afea8 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/cfloat/values.cc @@ -0,0 +1,53 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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/>. + +#include <cfloat> + +namespace gnu +{ + double d1 = DBL_DIG; + double d2 = DBL_EPSILON; + double d3 = DBL_MANT_DIG; + double d4 = DBL_MAX; + double d5 = DBL_MAX_10_EXP; + double d6 = DBL_MAX_EXP; + double d7 = DBL_MIN; + double d8 = DBL_MIN_10_EXP; + double d9 = DBL_MIN_EXP; + + float f1 = FLT_DIG; + float f2 = FLT_EPSILON; + float f3 = FLT_MANT_DIG; + float f4 = FLT_MAX; + float f5 = FLT_MAX_10_EXP; + float f6 = FLT_MAX_EXP; + float f7 = FLT_MIN; + float f8 = FLT_MIN_10_EXP; + float f9 = FLT_MIN_EXP; + + long double ld1 = LDBL_DIG; + long double ld2 = LDBL_EPSILON; + long double ld3 = LDBL_MANT_DIG; + long double ld4 = LDBL_MAX; + long double ld5 = LDBL_MAX_10_EXP; + long double ld6 = LDBL_MAX_EXP; + long double ld7 = LDBL_MIN; + long double ld8 = LDBL_MIN_10_EXP; + long double ld9 = LDBL_MIN_EXP; +} diff --git a/libstdc++-v3/testsuite/18_support/headers/climits/values.cc b/libstdc++-v3/testsuite/18_support/headers/climits/values.cc new file mode 100644 index 000000000..5b0c5688d --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/climits/values.cc @@ -0,0 +1,52 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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/>. + +#include <climits> + +namespace gnu +{ + // char + char c1 = CHAR_BIT; + char c2 = CHAR_MAX; + char c3 = CHAR_MIN; + + // int + int i2 = INT_MAX; + int i3 = INT_MIN; + + // short + short s2 = SHRT_MAX; + short s3 = SHRT_MIN; + + // long + long l2 = LONG_MAX; + long l3 = LONG_MIN; + + unsigned long mb = MB_LEN_MAX; + + // signed char + signed char sc1 = SCHAR_MIN; + signed char sc2 = SCHAR_MAX; + + // unsigned + unsigned int ui = UINT_MAX; + unsigned short us = USHRT_MAX; + unsigned long ul = ULONG_MAX; + +} diff --git a/libstdc++-v3/testsuite/18_support/headers/csetjmp/functions_std.cc b/libstdc++-v3/testsuite/18_support/headers/csetjmp/functions_std.cc new file mode 100644 index 000000000..8f2e0d650 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/csetjmp/functions_std.cc @@ -0,0 +1,25 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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/>. + +#include <csetjmp> + +namespace gnu +{ + using std::longjmp; +} diff --git a/libstdc++-v3/testsuite/18_support/headers/csetjmp/macros.cc b/libstdc++-v3/testsuite/18_support/headers/csetjmp/macros.cc new file mode 100644 index 000000000..0c9c9f02e --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/csetjmp/macros.cc @@ -0,0 +1,27 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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/>. + +#include <csetjmp> + +namespace gnu +{ +#ifndef setjmp + #error "setjmp_must_be_a_macro" +#endif +} diff --git a/libstdc++-v3/testsuite/18_support/headers/csetjmp/types_std.cc b/libstdc++-v3/testsuite/18_support/headers/csetjmp/types_std.cc new file mode 100644 index 000000000..abf8cc589 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/csetjmp/types_std.cc @@ -0,0 +1,25 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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/>. + +#include <csetjmp> + +namespace gnu +{ + std::jmp_buf j; +} diff --git a/libstdc++-v3/testsuite/18_support/headers/csignal/functions_std.cc b/libstdc++-v3/testsuite/18_support/headers/csignal/functions_std.cc new file mode 100644 index 000000000..ea96bfbd9 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/csignal/functions_std.cc @@ -0,0 +1,26 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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/>. + +#include <csignal> + +namespace gnu +{ + using std::raise; + using std::signal; +} diff --git a/libstdc++-v3/testsuite/18_support/headers/csignal/macros.cc b/libstdc++-v3/testsuite/18_support/headers/csignal/macros.cc new file mode 100644 index 000000000..33f8d023b --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/csignal/macros.cc @@ -0,0 +1,55 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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/>. + +#include <csignal> + +namespace gnu +{ +#ifndef SIGABRT + #error "SIGABRT_must_be_a_macro" +#endif + +#ifndef SIGILL + #error "SIGILL_must_be_a_macro" +#endif + +#ifndef SIGSEGV + #error "SIGSEGV_must_be_a_macro" +#endif + +#ifndef SIG_DFL + #error "SIG_DFL_must_be_a_macro" +#endif + +#ifndef SIGFPE + #error "SIGFPE_must_be_a_macro" +#endif + +#ifndef SIGINT + #error "SIGINT_must_be_a_macro" +#endif + +#ifndef SIGTERM + #error "SIGTERM_must_be_a_macro" +#endif + +#ifndef SIG_ERR + #error "SIG_ERR_must_be_a_macro" +#endif +} diff --git a/libstdc++-v3/testsuite/18_support/headers/csignal/types_std.cc b/libstdc++-v3/testsuite/18_support/headers/csignal/types_std.cc new file mode 100644 index 000000000..5745048fd --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/csignal/types_std.cc @@ -0,0 +1,25 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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/>. + +#include <csignal> + +namespace gnu +{ + std::sig_atomic_t s; +} diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdarg/macros.cc b/libstdc++-v3/testsuite/18_support/headers/cstdarg/macros.cc new file mode 100644 index 000000000..b89716e32 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/cstdarg/macros.cc @@ -0,0 +1,35 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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/>. + +#include <cstdarg> + +namespace gnu +{ +#ifndef va_arg + #error "va_arg_must_be_a_macro" +#endif + +#ifndef va_start + #error "va_start_must_be_a_macro" +#endif + +#ifndef va_end + #error "va_end_must_be_a_macro" +#endif +} diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdarg/types_std.cc b/libstdc++-v3/testsuite/18_support/headers/cstdarg/types_std.cc new file mode 100644 index 000000000..e4314627c --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/cstdarg/types_std.cc @@ -0,0 +1,25 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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/>. + +#include <cstdarg> + +namespace gnu +{ + std::va_list v; +} diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc b/libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc new file mode 100644 index 000000000..146b9656f --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc @@ -0,0 +1,26 @@ +// { dg-do compile } +// { dg-options "-std=gnu++98" } + +// Copyright (C) 2007, 2009 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/>. + +#include <cstdbool> + +// { dg-error "upcoming ISO" "" { target *-*-* } 32 } + + + diff --git a/libstdc++-v3/testsuite/18_support/headers/cstddef/macros.cc b/libstdc++-v3/testsuite/18_support/headers/cstddef/macros.cc new file mode 100644 index 000000000..c17e86f5e --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/cstddef/macros.cc @@ -0,0 +1,52 @@ +// { dg-do compile } +// { dg-options "-Wno-conversion-null" } +// 2001-02-06 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009 +// 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/>. + +#include <cstddef> + +namespace gnu +{ + struct test_type + { + int i; + int j; + }; + + // offsetof + void test01() + { + std::size_t i __attribute__((unused)) = offsetof(struct test_type, i); +#ifndef offsetof + #error "offsetof_must_be_a_macro" +#endif + } + + // NULL + void test02() + { + // Must not be (void*)0 + const int j __attribute__((unused)) = NULL; + +#ifndef NULL + #error "NULL_must_be_a_macro" +#endif + } +} diff --git a/libstdc++-v3/testsuite/18_support/headers/cstddef/types_std.cc b/libstdc++-v3/testsuite/18_support/headers/cstddef/types_std.cc new file mode 100644 index 000000000..82c438919 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/cstddef/types_std.cc @@ -0,0 +1,26 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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/>. + +#include <cstddef> + +namespace gnu +{ + std::size_t s; + std::ptrdiff_t p; +} diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdint/std_c++0x_neg.cc b/libstdc++-v3/testsuite/18_support/headers/cstdint/std_c++0x_neg.cc new file mode 100644 index 000000000..afd65a36a --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/cstdint/std_c++0x_neg.cc @@ -0,0 +1,26 @@ +// { dg-do compile } +// { dg-options "-std=gnu++98" } + +// Copyright (C) 2007, 2009 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/>. + +#include <cstdint> + +// { dg-error "upcoming ISO" "" { target *-*-* } 32 } + + + diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdint/types_std_c++0x.cc b/libstdc++-v3/testsuite/18_support/headers/cstdint/types_std_c++0x.cc new file mode 100644 index 000000000..1210ba611 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/cstdint/types_std_c++0x.cc @@ -0,0 +1,54 @@ +// { dg-do compile } +// { dg-options "-std=gnu++0x" } +// { dg-require-cstdint "" } + +// Copyright (C) 2007, 2008, 2009 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/>. + +#include <cstdint> + +void test01() +{ + typedef std::int8_t my_int8_t; + typedef std::int16_t my_int16_t; + typedef std::int32_t my_int32_t; + typedef std::int64_t my_int64_t; + typedef std::int_fast8_t my_int_fast8_t; + typedef std::int_fast16_t my_int_fast16_t; + typedef std::int_fast32_t my_int_fast32_t; + typedef std::int_fast64_t my_int_fast64_t; + typedef std::int_least8_t my_int_least8_t; + typedef std::int_least16_t my_int_least16_t; + typedef std::int_least32_t my_int_least32_t; + typedef std::int_least64_t my_int_least64_t; + typedef std::intmax_t my_intmax_t; + typedef std::intptr_t my_intptr_t; + typedef std::uint8_t my_uint8_t; + typedef std::uint16_t my_uint16_t; + typedef std::uint32_t my_uint32_t; + typedef std::uint64_t my_uint64_t; + typedef std::uint_fast8_t my_uint_fast8_t; + typedef std::uint_fast16_t my_uint_fast16_t; + typedef std::uint_fast32_t my_uint_fast32_t; + typedef std::uint_fast64_t my_uint_fast64_t; + typedef std::uint_least8_t my_uint_least8_t; + typedef std::uint_least16_t my_uint_least16_t; + typedef std::uint_least32_t my_uint_least32_t; + typedef std::uint_least64_t my_uint_least64_t; + typedef std::uintmax_t my_uintmax_t; + typedef std::uintptr_t my_uintptr_t; +} diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdlib/functions_std.cc b/libstdc++-v3/testsuite/18_support/headers/cstdlib/functions_std.cc new file mode 100644 index 000000000..0f98e7296 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/cstdlib/functions_std.cc @@ -0,0 +1,30 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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/>. + +#include <cstdlib> + +namespace gnu +{ + using std::abort; + using std::atexit; + using std::exit; + + using std::getenv; + using std::system; +} diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdlib/macros.cc b/libstdc++-v3/testsuite/18_support/headers/cstdlib/macros.cc new file mode 100644 index 000000000..f6aee4d03 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/cstdlib/macros.cc @@ -0,0 +1,32 @@ +// { dg-do compile } +// 2001-02-06 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2001, 2003, 2007, 2009 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/>. + +#include <cstdlib> + +namespace gnu +{ +#ifndef EXIT_FAILURE + #error "EXIT_FAILURE_must_be_a_macro" +#endif + +#ifndef EXIT_SUCCESS + #error "EXIT_SUCCESS_must_be_a_macro" +#endif +} diff --git a/libstdc++-v3/testsuite/18_support/headers/ctime/functions_std.cc b/libstdc++-v3/testsuite/18_support/headers/ctime/functions_std.cc new file mode 100644 index 000000000..9f64b7f5f --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/ctime/functions_std.cc @@ -0,0 +1,25 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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/>. + +#include <ctime> + +namespace gnu +{ + using std::clock; +} diff --git a/libstdc++-v3/testsuite/18_support/headers/ctime/macros.cc b/libstdc++-v3/testsuite/18_support/headers/ctime/macros.cc new file mode 100644 index 000000000..e191b43e5 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/ctime/macros.cc @@ -0,0 +1,27 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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/>. + +#include <ctime> + +namespace gnu +{ +#ifndef CLOCKS_PER_SEC + #error "CLOCKS_PER_SEC_must_be_a_macro" +#endif +} diff --git a/libstdc++-v3/testsuite/18_support/headers/ctime/types_std.cc b/libstdc++-v3/testsuite/18_support/headers/ctime/types_std.cc new file mode 100644 index 000000000..5f6c7b28d --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/ctime/types_std.cc @@ -0,0 +1,25 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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/>. + +#include <ctime> + +namespace gnu +{ + std::clock_t c; +} diff --git a/libstdc++-v3/testsuite/18_support/headers/exception/synopsis.cc b/libstdc++-v3/testsuite/18_support/headers/exception/synopsis.cc new file mode 100644 index 000000000..6c64eb29d --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/exception/synopsis.cc @@ -0,0 +1,35 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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/>. + +#include <exception> + +namespace std { + class exception; + class bad_exception; + + typedef void (*unexpected_handler)(); + unexpected_handler set_unexpected(unexpected_handler f ) throw(); + void unexpected(); + + typedef void (*terminate_handler)(); + terminate_handler set_terminate(terminate_handler f ) throw(); + void terminate() throw(); + + bool uncaught_exception() throw(); +} diff --git a/libstdc++-v3/testsuite/18_support/headers/exception/types_std.cc b/libstdc++-v3/testsuite/18_support/headers/exception/types_std.cc new file mode 100644 index 000000000..142b83583 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/exception/types_std.cc @@ -0,0 +1,26 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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/>. + +#include <exception> + +namespace gnu +{ + typedef std::exception t1; + typedef std::bad_exception t2; +} diff --git a/libstdc++-v3/testsuite/18_support/headers/limits/synopsis.cc b/libstdc++-v3/testsuite/18_support/headers/limits/synopsis.cc new file mode 100644 index 000000000..975b4ec38 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/limits/synopsis.cc @@ -0,0 +1,47 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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/>. + +#include <limits> + +namespace std { + template<class T> class numeric_limits; + +#if 0 + enum float_round_style; + enum float_denorm_style; +#endif + + template<> class numeric_limits<bool>; + + template<> class numeric_limits<char>; + template<> class numeric_limits<signed char>; + template<> class numeric_limits<unsigned char>; + template<> class numeric_limits<wchar_t>; + + template<> class numeric_limits<short>; + template<> class numeric_limits<int>; + template<> class numeric_limits<long>; + template<> class numeric_limits<unsigned short>; + template<> class numeric_limits<unsigned int>; + template<> class numeric_limits<unsigned long>; + + template<> class numeric_limits<float>; + template<> class numeric_limits<double>; + template<> class numeric_limits<long double>; +} diff --git a/libstdc++-v3/testsuite/18_support/headers/new/synopsis.cc b/libstdc++-v3/testsuite/18_support/headers/new/synopsis.cc new file mode 100644 index 000000000..f21dd1dc6 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/new/synopsis.cc @@ -0,0 +1,42 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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/>. + +#include <new> + +namespace std { + class bad_alloc; + struct nothrow_t; + extern const nothrow_t nothrow; + typedef void (*new_handler)(); + new_handler set_new_handler(new_handler new_p) throw(); +} + +void* operator new(std::size_t size) throw(std::bad_alloc); +void* operator new(std::size_t size, const std::nothrow_t&) throw(); +void operator delete(void* ptr) throw(); +void operator delete(void* ptr, const std::nothrow_t&) throw(); +void* operator new[](std::size_t size) throw(std::bad_alloc); +void* operator new[](std::size_t size, const std::nothrow_t&) throw(); +void operator delete[](void* ptr) throw(); +void operator delete[](void* ptr, const std::nothrow_t&) throw(); + +void* operator new (std::size_t size, void* ptr) throw(); +void* operator new[](std::size_t size, void* ptr) throw(); +void operator delete (void* ptr, void*) throw(); +void operator delete[](void* ptr, void*) throw(); diff --git a/libstdc++-v3/testsuite/18_support/headers/new/types_std.cc b/libstdc++-v3/testsuite/18_support/headers/new/types_std.cc new file mode 100644 index 000000000..b78a0becd --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/new/types_std.cc @@ -0,0 +1,28 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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/>. + +#include <new> + +namespace gnu +{ + typedef std::bad_alloc t1; + typedef std::nothrow_t t2; + + typedef std::new_handler t3; +} diff --git a/libstdc++-v3/testsuite/18_support/headers/typeinfo/synopsis.cc b/libstdc++-v3/testsuite/18_support/headers/typeinfo/synopsis.cc new file mode 100644 index 000000000..973a60823 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/typeinfo/synopsis.cc @@ -0,0 +1,26 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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/>. + +#include <typeinfo> + +namespace std { + class type_info; + class bad_cast; + class bad_typeid; +} diff --git a/libstdc++-v3/testsuite/18_support/headers/typeinfo/types_std.cc b/libstdc++-v3/testsuite/18_support/headers/typeinfo/types_std.cc new file mode 100644 index 000000000..58ef5c3a3 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/typeinfo/types_std.cc @@ -0,0 +1,28 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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/>. + +#include <typeinfo> + +namespace gnu +{ + typedef std::type_info t1; + typedef std::bad_cast t2; + + typedef std::bad_typeid t3; +} diff --git a/libstdc++-v3/testsuite/18_support/initializer_list/constexpr.cc b/libstdc++-v3/testsuite/18_support/initializer_list/constexpr.cc new file mode 100644 index 000000000..76e6f4dd6 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/initializer_list/constexpr.cc @@ -0,0 +1,30 @@ +// { dg-do compile } +// { dg-options "-std=gnu++0x" } + +// Copyright (C) 2010 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/>. + +#include <initializer_list> +#include <testsuite_common_types.h> + +int main() +{ + __gnu_test::constexpr_default_constructible test1; + test1.operator()<std::initializer_list<long>>(); + + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/initializer_list/range_access.cc b/libstdc++-v3/testsuite/18_support/initializer_list/range_access.cc new file mode 100644 index 000000000..ba5a0d490 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/initializer_list/range_access.cc @@ -0,0 +1,30 @@ +// { dg-do compile } +// { dg-options "-std=gnu++0x" } + +// Copyright (C) 2010 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.9.3 Initializer list range access [support.initlist.range] + +#include <initializer_list> + +void +test01() +{ + std::begin({1, 2, 3}); + std::end({1, 2, 3}); +} diff --git a/libstdc++-v3/testsuite/18_support/initializer_list/requirements/constexpr_functions.cc b/libstdc++-v3/testsuite/18_support/initializer_list/requirements/constexpr_functions.cc new file mode 100644 index 000000000..0cfd46e03 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/initializer_list/requirements/constexpr_functions.cc @@ -0,0 +1,57 @@ +// { dg-do compile } +// { dg-options "-std=gnu++0x" } + +// Copyright (C) 2010 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/>. + +#include <initializer_list> +#include <testsuite_common_types.h> + +namespace __gnu_test +{ + struct constexpr_member_functions + { + template<typename _Ttesttype> + void + operator()() + { + struct _Concept + { + void __constraint() + { + constexpr _Ttesttype obj; + constexpr auto v4 __attribute__((unused)) + = obj.size(); + constexpr auto v5 __attribute__((unused)) + = obj.begin(); + constexpr auto v6 __attribute__((unused)) + = obj.end(); + } + }; + + _Concept c; + c.__constraint(); + } + }; +} + +int main() +{ + __gnu_test::constexpr_member_functions test; + test.operator()<std::initializer_list<int>>(); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/initializer_list/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/18_support/initializer_list/requirements/explicit_instantiation.cc new file mode 100644 index 000000000..651ec0ef1 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/initializer_list/requirements/explicit_instantiation.cc @@ -0,0 +1,24 @@ +// { dg-do compile } +// { dg-options "-std=gnu++0x" } +// 2009-05-27 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2009 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/>. + +#include <initializer_list> + +template class std::initializer_list<int>; diff --git a/libstdc++-v3/testsuite/18_support/initializer_list/requirements/typedefs.cc b/libstdc++-v3/testsuite/18_support/initializer_list/requirements/typedefs.cc new file mode 100644 index 000000000..1f9939260 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/initializer_list/requirements/typedefs.cc @@ -0,0 +1,34 @@ +// { dg-do compile } +// { dg-options "-std=gnu++0x" } +// 2009-05-27 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2009 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/>. + +#include <initializer_list> + +void test01() +{ + // Check for required typedefs + typedef std::initializer_list<int> test_type; + typedef test_type::value_type type1; + typedef test_type::size_type type2; + typedef test_type::reference type3; + typedef test_type::const_reference type4; + typedef test_type::iterator type5; + typedef test_type::const_iterator type5; +} diff --git a/libstdc++-v3/testsuite/18_support/nested_exception/cons.cc b/libstdc++-v3/testsuite/18_support/nested_exception/cons.cc new file mode 100644 index 000000000..3dc67fb98 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/nested_exception/cons.cc @@ -0,0 +1,53 @@ +// { dg-options "-std=gnu++0x" } +// { dg-require-atomic-builtins "" } + +// Copyright (C) 2009 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/>. + +#include <exception> +#include <testsuite_hooks.h> + +void test01() +{ + bool test __attribute__((unused)) = true; + + std::nested_exception e; + + VERIFY( e.nested_ptr() == 0 ); +} + +void test02() +{ + bool test __attribute__((unused)) = true; + + try + { + throw 42; + } + catch (...) + { + std::nested_exception e; + VERIFY( e.nested_ptr() == std::current_exception() ); + } +} + +int main() +{ + test01(); + test02(); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/nested_exception/nested_ptr.cc b/libstdc++-v3/testsuite/18_support/nested_exception/nested_ptr.cc new file mode 100644 index 000000000..d016436d0 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/nested_exception/nested_ptr.cc @@ -0,0 +1,71 @@ +// { dg-options "-std=gnu++0x" } +// { dg-require-atomic-builtins "" } + +// Copyright (C) 2009 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/>. + +#include <exception> +#include <testsuite_hooks.h> + +void test01() +{ + bool test __attribute__((unused)) = true; + + try + { + throw std::nested_exception(); + } + catch (const std::nested_exception& e) + { + VERIFY( e.nested_ptr() == 0 ); + } +} + +void test02() +{ + bool test __attribute__((unused)) = true; + + try + { + throw 42; + } + catch (...) + { + try + { + throw std::nested_exception(); + } + catch (const std::nested_exception& e) + { + try + { + std::rethrow_exception( e.nested_ptr() ); + } + catch(const int& i) + { + VERIFY( i == 42 ); + } + } + } +} + +int main() +{ + test01(); + test02(); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/nested_exception/rethrow_if_nested.cc b/libstdc++-v3/testsuite/18_support/nested_exception/rethrow_if_nested.cc new file mode 100644 index 000000000..ec8d172c4 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/nested_exception/rethrow_if_nested.cc @@ -0,0 +1,111 @@ +// { dg-options "-std=gnu++0x" } +// { dg-require-atomic-builtins "" } + +// Copyright (C) 2009 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/>. + +#include <exception> +#include <testsuite_hooks.h> + +struct derived : std::nested_exception { }; + +struct base { virtual ~base(); }; +inline base::~base() = default; + +struct derived2 : base, std::nested_exception { }; + +void test01() +{ + bool test __attribute__((unused)) = false; + + try + { + throw 42; + } + catch (...) + { + derived d; + try + { + std::rethrow_if_nested(d); + } + catch (const int& i) + { + test = true; + VERIFY( i == 42 ); + } + } + + VERIFY( test ); +} + +void test02() +{ + bool test __attribute__((unused)) = false; + + try + { + throw base(); + } + catch (const base& b) + { + std::rethrow_if_nested(b); + test = true; + } + + VERIFY( test ); +} + +void test03() +{ + bool test __attribute__((unused)) = false; + + try + { + throw 42; + } + catch (...) + { + try + { + throw derived2(); + } + catch (const base& b) + { + try + { + std::rethrow_if_nested(b); + } + catch (const int& i) + { + VERIFY( i == 42 ); + test = true; + } + } + } + + VERIFY( test ); +} + + +int main() +{ + test01(); + test02(); + test03(); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/nested_exception/rethrow_nested.cc b/libstdc++-v3/testsuite/18_support/nested_exception/rethrow_nested.cc new file mode 100644 index 000000000..fca9c4c80 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/nested_exception/rethrow_nested.cc @@ -0,0 +1,53 @@ +// { dg-options "-std=gnu++0x" } +// { dg-require-atomic-builtins "" } + +// Copyright (C) 2009 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/>. + +#include <exception> +#include <testsuite_hooks.h> + +void test01() +{ + bool test __attribute__((unused)) = false; + + try + { + try + { + throw 42; + } + catch (...) + { + std::nested_exception e; + e.rethrow_nested(); + } + } + catch(const int& i) + { + test = true; + VERIFY( i == 42 ); + } + + VERIFY( test ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/nested_exception/throw_with_nested.cc b/libstdc++-v3/testsuite/18_support/nested_exception/throw_with_nested.cc new file mode 100644 index 000000000..c846d0944 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/nested_exception/throw_with_nested.cc @@ -0,0 +1,80 @@ +// { dg-options "-std=gnu++0x" } +// { dg-require-atomic-builtins "" } + +// Copyright (C) 2009 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/>. + +#include <exception> +#include <testsuite_hooks.h> + +struct derived : std::nested_exception { }; + +struct not_derived { virtual ~not_derived(); }; +inline not_derived::~not_derived() = default; + +void test01() +{ + bool test __attribute__((unused)) = false; + + try + { + std::throw_with_nested(derived()); + } + catch (const std::nested_exception& e) + { + VERIFY( e.nested_ptr() == 0 ); + try + { + throw; + } + catch (const derived&) + { + test = true; + } + } + VERIFY( test ); +} + +void test02() +{ + bool test __attribute__((unused)) = false; + + try + { + std::throw_with_nested(not_derived()); + } + catch (const std::nested_exception& e) + { + VERIFY( e.nested_ptr() == 0 ); + try + { + throw; + } + catch (const not_derived&) + { + test = true; + } + } + VERIFY( test ); +} + +int main() +{ + test01(); + test02(); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/new_delete_placement.cc b/libstdc++-v3/testsuite/18_support/new_delete_placement.cc new file mode 100644 index 000000000..866a89b79 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/new_delete_placement.cc @@ -0,0 +1,39 @@ +// 2002-07-24 Benjamin Kosnik + +// Copyright (C) 2002, 2004, 2009, 2010 Free Software Foundation +// +// 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.4.1.3 - Placement forms + +#include <new> +#include <testsuite_hooks.h> + +// libstdc++/7286 +void test01() +{ + void* pc = new char; + void* pa = new char[10]; + void* tmp = 0; + operator delete(pc, tmp); + operator delete[](pa, tmp); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/29989.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/29989.cc new file mode 100644 index 000000000..2ca723a78 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/29989.cc @@ -0,0 +1,22 @@ +// { dg-do compile } + +// Copyright (C) 2006, 2009 Free Software Foundation +// +// 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/>. + +// libstdc++/29989 +#define max(a,b) quirk +#include <limits> diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/char16_32_t.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/char16_32_t.cc new file mode 100644 index 000000000..62628c862 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/char16_32_t.cc @@ -0,0 +1,77 @@ +// { dg-options "-std=gnu++0x" } +// { dg-require-cstdint "" } + +// 2008-05-20 Paolo Carlini <paolo.carlini@oracle.com> +// +// Copyright (C) 2008, 2009 Free Software Foundation +// +// 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.2.1.1 template class numeric_limits + +#include <limits> +#include <cstdint> +#include <testsuite_hooks.h> + +// Test specializations for char16_t and char32_t, in C++0x. +template<typename T, typename R> + void + do_test() + { + bool test __attribute__((unused)) = true; + + typedef std::numeric_limits<T> char_type; + typedef std::numeric_limits<R> impl_type; + + VERIFY( char_type::is_specialized == impl_type::is_specialized ); + VERIFY( char_type::min() == impl_type::min() ); + VERIFY( char_type::max() == impl_type::max() ); + VERIFY( char_type::digits == impl_type::digits ); + VERIFY( char_type::digits10 == impl_type::digits10 ); + VERIFY( char_type::is_signed == impl_type::is_signed ); + VERIFY( char_type::is_integer == impl_type::is_integer ); + VERIFY( char_type::is_exact == impl_type::is_exact ); + VERIFY( char_type::radix == impl_type::radix ); + VERIFY( char_type::epsilon() == impl_type::epsilon() ); + VERIFY( char_type::round_error() == impl_type::round_error() ); + VERIFY( char_type::min_exponent == impl_type::min_exponent ); + VERIFY( char_type::min_exponent10 == impl_type::min_exponent10 ); + VERIFY( char_type::max_exponent == impl_type::max_exponent ); + VERIFY( char_type::max_exponent10 == impl_type::max_exponent10 ); + VERIFY( char_type::has_infinity == impl_type::has_infinity ); + VERIFY( char_type::has_quiet_NaN == impl_type::has_quiet_NaN ); + VERIFY( char_type::has_signaling_NaN == impl_type::has_signaling_NaN ); + VERIFY( char_type::has_denorm == impl_type::has_denorm ); + VERIFY( char_type::has_denorm_loss == impl_type::has_denorm_loss ); + VERIFY( char_type::infinity() == impl_type::infinity() ); + VERIFY( char_type::quiet_NaN() == impl_type::quiet_NaN() ); + VERIFY( char_type::signaling_NaN() == impl_type::signaling_NaN() ); + VERIFY( char_type::denorm_min() == impl_type::denorm_min() ); + VERIFY( char_type::is_iec559 == impl_type::is_iec559 ); + VERIFY( char_type::is_bounded == impl_type::is_bounded ); + VERIFY( char_type::is_modulo == impl_type::is_modulo ); + VERIFY( char_type::traps == impl_type::traps ); + VERIFY( char_type::tinyness_before == impl_type::tinyness_before ); + VERIFY( char_type::round_style == impl_type::round_style ); + } + +int main() +{ + do_test<char16_t, uint_least16_t>(); + do_test<char32_t, uint_least32_t>(); + + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/cons/default.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/cons/default.cc new file mode 100644 index 000000000..6b492569c --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/cons/default.cc @@ -0,0 +1,26 @@ +// Copyright (C) 2008, 2009, 2010 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/>. + +#include <limits> +#include <testsuite_common_types.h> + +int main() +{ + __gnu_test::default_constructible test; + __gnu_cxx::typelist::apply_generator(test, __gnu_test::limits_tl()); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/cons/default_c++0x.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/cons/default_c++0x.cc new file mode 100644 index 000000000..17ee4c79e --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/cons/default_c++0x.cc @@ -0,0 +1,28 @@ +// { dg-options "-std=gnu++0x" } + +// Copyright (C) 2008, 2009, 2010 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/>. + +#include <limits> +#include <testsuite_common_types.h> + +int main() +{ + __gnu_test::default_constructible test; + __gnu_cxx::typelist::apply_generator(test, __gnu_test::limits_tl()); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/denorm_min.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/denorm_min.cc new file mode 100644 index 000000000..b07cd7b06 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/denorm_min.cc @@ -0,0 +1,54 @@ +// { dg-add-options ieee } + +// 1999-08-23 bkoz + +// Copyright (C) 1999, 2001, 2002, 2003, 2004, 2009 Free Software Foundation +// +// 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.2.1.1 template class numeric_limits + +#include <limits> +#include <limits.h> +#include <float.h> +#include <cwchar> +#include <testsuite_hooks.h> + +template<typename T> +void +test_denorm_min() +{ + bool test; + + if (std::numeric_limits<T>::has_denorm == std::denorm_present) + { + T denorm = std::numeric_limits<T>::denorm_min(); + test = (denorm > 0); + } + else + test = true; + + VERIFY (test); +} + +int main() +{ + test_denorm_min<float>(); + test_denorm_min<double>(); + test_denorm_min<long double>(); + + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/digits10.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/digits10.cc new file mode 100644 index 000000000..a8a865937 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/digits10.cc @@ -0,0 +1,64 @@ +// { dg-add-options ieee } + +// 1999-08-23 bkoz + +// Copyright (C) 1999, 2001, 2002, 2003, 2004, 2009 Free Software Foundation +// +// 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.2.1.1 template class numeric_limits + +#include <limits> +#include <limits.h> +#include <float.h> +#include <cwchar> +#include <testsuite_hooks.h> + +// libstdc++/5045 +bool test03() +{ + bool test __attribute__((unused)) = true; + + VERIFY( std::numeric_limits<bool>::digits10 == 0 ); + if (__CHAR_BIT__ == 8) + { + VERIFY( std::numeric_limits<signed char>::digits10 == 2 ); + VERIFY( std::numeric_limits<unsigned char>::digits10 == 2 ); + } + if (__CHAR_BIT__ * sizeof(short) == 16) + { + VERIFY( std::numeric_limits<signed short>::digits10 == 4 ); + VERIFY( std::numeric_limits<unsigned short>::digits10 == 4 ); + } + if (__CHAR_BIT__ * sizeof(int) == 32) + { + VERIFY( std::numeric_limits<signed int>::digits10 == 9 ); + VERIFY( std::numeric_limits<unsigned int>::digits10 == 9 ); + } + if (__CHAR_BIT__ * sizeof(long long) == 64) + { + VERIFY( std::numeric_limits<signed long long>::digits10 == 18 ); + VERIFY( std::numeric_limits<unsigned long long>::digits10 == 19 ); + } + return test; +} + +int main() +{ + test03(); + + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/dr559.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/dr559.cc new file mode 100644 index 000000000..ffe5a4ba0 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/dr559.cc @@ -0,0 +1,102 @@ +// { dg-options "-std=gnu++0x" } + +// 2010-02-17 Paolo Carlini <paolo.carlini@oracle.com> +// +// Copyright (C) 2010 Free Software Foundation +// +// 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/>. + +#include <limits> +#include <type_traits> +#include <testsuite_hooks.h> + +template<typename T> + void do_test_aux() + { + bool test __attribute__((unused)) = true; + typedef std::numeric_limits<T> cv_limits; + typedef std::numeric_limits<typename std::remove_cv<T>::type> limits; + + VERIFY( cv_limits::is_specialized == limits::is_specialized ); + VERIFY( cv_limits::min() == limits::min() ); + VERIFY( cv_limits::max() == limits::max() ); + VERIFY( cv_limits::lowest() == limits::lowest() ); + VERIFY( cv_limits::digits == limits::digits ); + VERIFY( cv_limits::digits10 == limits::digits10 ); + VERIFY( cv_limits::max_digits10 == limits::max_digits10 ); + VERIFY( cv_limits::is_signed == limits::is_signed ); + VERIFY( cv_limits::is_integer == limits::is_integer ); + VERIFY( cv_limits::is_exact == limits::is_exact ); + VERIFY( cv_limits::radix == limits::radix ); + VERIFY( cv_limits::epsilon() == limits::epsilon() ); + VERIFY( cv_limits::round_error() == limits::round_error() ); + VERIFY( cv_limits::min_exponent == limits::min_exponent ); + VERIFY( cv_limits::min_exponent10 == limits::min_exponent10 ); + VERIFY( cv_limits::max_exponent == limits::max_exponent ); + VERIFY( cv_limits::max_exponent10 == limits::max_exponent10 ); + VERIFY( cv_limits::has_infinity == limits::has_infinity ); + VERIFY( cv_limits::has_quiet_NaN == limits::has_quiet_NaN ); + VERIFY( cv_limits::has_signaling_NaN == limits::has_signaling_NaN ); + VERIFY( cv_limits::has_denorm == limits::has_denorm ); + VERIFY( cv_limits::has_denorm_loss == limits::has_denorm_loss ); + VERIFY( cv_limits::infinity() == limits::infinity() ); + if (!std::is_floating_point<T>::value) + { + VERIFY( cv_limits::quiet_NaN() == limits::quiet_NaN() ); + VERIFY( cv_limits::signaling_NaN() == limits::signaling_NaN() ); + } + VERIFY( cv_limits::denorm_min() == limits::denorm_min() ); + VERIFY( cv_limits::is_iec559 == limits::is_iec559 ); + VERIFY( cv_limits::is_bounded == limits::is_bounded ); + VERIFY( cv_limits::is_modulo == limits::is_modulo ); + VERIFY( cv_limits::traps == limits::traps ); + VERIFY( cv_limits::tinyness_before == limits::tinyness_before ); + VERIFY( cv_limits::round_style == limits::round_style ); + } + +template<typename T> + void + do_test() + { + do_test_aux<T>(); + do_test_aux<const T>(); + do_test_aux<volatile T>(); + do_test_aux<const volatile T>(); + } + +// DR 559. +int main() +{ + do_test<bool>(); + do_test<char>(); + do_test<signed char>(); + do_test<unsigned char>(); + do_test<wchar_t>(); + do_test<char16_t>(); + do_test<char32_t>(); + do_test<short>(); + do_test<unsigned short>(); + do_test<int>(); + do_test<unsigned int>(); + do_test<long>(); + do_test<unsigned long>(); + do_test<long long>(); + do_test<unsigned long long>(); + do_test<float>(); + do_test<double>(); + do_test<long double>(); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/epsilon.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/epsilon.cc new file mode 100644 index 000000000..9ef546403 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/epsilon.cc @@ -0,0 +1,47 @@ +// { dg-add-options ieee } + +// 1999-08-23 bkoz + +// Copyright (C) 1999, 2001, 2002, 2003, 2004, 2009 Free Software Foundation +// +// 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.2.1.1 template class numeric_limits + +#include <limits> +#include <limits.h> +#include <float.h> +#include <cwchar> +#include <testsuite_hooks.h> + +template<typename T> +void test_epsilon() +{ + bool test __attribute__((unused)) = true; + T epsilon = std::numeric_limits<T>::epsilon(); + T one = 1; + + VERIFY( one != (one + epsilon) ); +} + +int main() +{ + test_epsilon<float>(); + test_epsilon<double>(); + test_epsilon<long double>(); + + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/infinity.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/infinity.cc new file mode 100644 index 000000000..92744c781 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/infinity.cc @@ -0,0 +1,54 @@ +// { dg-add-options ieee } + +// 1999-08-23 bkoz + +// Copyright (C) 1999, 2001, 2002, 2003, 2004, 2009 Free Software Foundation +// +// 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.2.1.1 template class numeric_limits + +#include <limits> +#include <limits.h> +#include <float.h> +#include <cwchar> +#include <testsuite_hooks.h> + +template<typename T> +void +test_infinity() +{ + bool test; + + if (std::numeric_limits<T>::has_infinity) + { + T inf = std::numeric_limits<T>::infinity(); + test = (inf + inf == inf); + } + else + test = true; + + VERIFY (test); +} + +int main() +{ + test_infinity<float>(); + test_infinity<double>(); + test_infinity<long double>(); + + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/is_iec559.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/is_iec559.cc new file mode 100644 index 000000000..ce1c74d5e --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/is_iec559.cc @@ -0,0 +1,79 @@ +// { dg-add-options ieee } + +// 1999-08-23 bkoz + +// Copyright (C) 1999, 2001, 2002, 2003, 2004, 2009 Free Software Foundation +// +// 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.2.1.1 template class numeric_limits + +#include <limits> +#include <limits.h> +#include <float.h> +#include <cwchar> +#include <testsuite_hooks.h> + +template<typename T> +void +test_is_iec559() +{ + bool test; + + if (std::numeric_limits<T>::is_iec559) + { + // IEC 559 requires all of the following. + test = (std::numeric_limits<T>::has_infinity + && std::numeric_limits<T>::has_quiet_NaN + && std::numeric_limits<T>::has_signaling_NaN); + } + else + { + // If we had all of the following, why didn't we set IEC 559? + test = (!std::numeric_limits<T>::has_infinity + || !std::numeric_limits<T>::has_quiet_NaN + || !std::numeric_limits<T>::has_signaling_NaN); + } + + VERIFY (test); +} + +// libstdc++/8949 +bool test04() +{ + bool test __attribute__((unused)) = true; + + VERIFY( !std::numeric_limits<short>::is_iec559 ); + VERIFY( !std::numeric_limits<unsigned short>::is_iec559 ); + VERIFY( !std::numeric_limits<int>::is_iec559 ); + VERIFY( !std::numeric_limits<unsigned int>::is_iec559 ); + VERIFY( !std::numeric_limits<long>::is_iec559 ); + VERIFY( !std::numeric_limits<unsigned long>::is_iec559 ); + VERIFY( !std::numeric_limits<long long>::is_iec559 ); + VERIFY( !std::numeric_limits<unsigned long long>::is_iec559 ); + return test; +} + +int main() +{ + test_is_iec559<float>(); + test_is_iec559<double>(); + test_is_iec559<long double>(); + + test04(); + + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/is_signed.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/is_signed.cc new file mode 100644 index 000000000..299cd571f --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/is_signed.cc @@ -0,0 +1,58 @@ +// { dg-add-options ieee } + +// 1999-08-23 bkoz + +// Copyright (C) 1999, 2001, 2002, 2003, 2004, 2009 Free Software Foundation +// +// 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.2.1.1 template class numeric_limits + +#include <limits> +#include <limits.h> +#include <float.h> +#include <cwchar> +#include <testsuite_hooks.h> + +#ifdef __CHAR_UNSIGNED__ +#define char_is_signed false +#else +#define char_is_signed true +#endif + +void test_sign() +{ + bool test __attribute__((unused)) = true; + VERIFY( std::numeric_limits<char>::is_signed == char_is_signed ); + VERIFY( std::numeric_limits<signed char>::is_signed == true ); + VERIFY( std::numeric_limits<unsigned char>::is_signed == false ); + VERIFY( std::numeric_limits<short>::is_signed == true ); + VERIFY( std::numeric_limits<unsigned short>::is_signed == false ); + VERIFY( std::numeric_limits<int>::is_signed == true ); + VERIFY( std::numeric_limits<unsigned>::is_signed == false ); + VERIFY( std::numeric_limits<long>::is_signed == true ); + VERIFY( std::numeric_limits<unsigned long>::is_signed == false ); + VERIFY( std::numeric_limits<float>::is_signed == true ); + VERIFY( std::numeric_limits<double>::is_signed == true ); + VERIFY( std::numeric_limits<long double>::is_signed == true ); +} + +int main() +{ + test_sign(); + + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/lowest.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/lowest.cc new file mode 100644 index 000000000..34b603e16 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/lowest.cc @@ -0,0 +1,84 @@ +// { dg-options "-std=gnu++0x" } +// { dg-add-options ieee } + +// 2010-02-25 Ed Smith-Rowland + +// Copyright (C) 2010, 2011 Free Software Foundation +// +// 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.2.1.1 template class numeric_limits + +#include <limits> +#include <type_traits> +#include <testsuite_hooks.h> + +template<typename T> + void + do_test(std::true_type) + { + bool test __attribute__((unused)) = true; + T limits_min = std::numeric_limits<T>::min(); + VERIFY( std::numeric_limits<T>::lowest() == limits_min ); + } + +template<typename T> + void + do_test(std::false_type) + { + bool test __attribute__((unused)) = true; + T limits_max = std::numeric_limits<T>::max(); + VERIFY( std::numeric_limits<T>::lowest() == -limits_max ); + } + +template<typename Tp> + void + do_test() + { do_test<Tp>(typename std::is_integral<Tp>::type()); } + +void test01() +{ + do_test<char>(); + do_test<signed char>(); + do_test<unsigned char>(); +#ifdef _GLIBCXX_USE_WCHAR_T + do_test<wchar_t>(); +#endif + do_test<char16_t>(); + do_test<char32_t>(); + + do_test<short>(); + do_test<unsigned short>(); + + do_test<int>(); + do_test<unsigned int>(); + + do_test<long>(); + do_test<unsigned long>(); + + do_test<long long>(); + do_test<unsigned long long>(); + + do_test<float>(); + do_test<double>(); + do_test<long double>(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/max_digits10.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/max_digits10.cc new file mode 100644 index 000000000..fdce19c36 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/max_digits10.cc @@ -0,0 +1,67 @@ +// { dg-options "-std=gnu++0x" } +// { dg-add-options ieee } + +// 2010-02-25 Ed Smith-Rowland + +// Copyright (C) 2010 Free Software Foundation +// +// 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.2.1.1 template class numeric_limits + +#include <limits> +#include <cmath> +#include <testsuite_hooks.h> + +void +test01() +{ + bool test __attribute__((unused)) = true; + + VERIFY( std::numeric_limits<bool>::max_digits10 == 0 ); + VERIFY( std::numeric_limits<char>::max_digits10 == 0 ); + VERIFY( std::numeric_limits<signed char>::max_digits10 == 0 ); + VERIFY( std::numeric_limits<unsigned char>::max_digits10 == 0 ); + VERIFY( std::numeric_limits<wchar_t>::max_digits10 == 0 ); + VERIFY( std::numeric_limits<short>::max_digits10 == 0 ); + VERIFY( std::numeric_limits<unsigned short>::max_digits10 == 0 ); + VERIFY( std::numeric_limits<int>::max_digits10 == 0 ); + VERIFY( std::numeric_limits<unsigned int>::max_digits10 == 0 ); + VERIFY( std::numeric_limits<long>::max_digits10 == 0 ); + VERIFY( std::numeric_limits<unsigned long>::max_digits10 == 0 ); + VERIFY( std::numeric_limits<long long>::max_digits10 == 0 ); + VERIFY( std::numeric_limits<unsigned long long>::max_digits10 == 0 ); + VERIFY( std::numeric_limits<char16_t>::max_digits10 == 0 ); + VERIFY( std::numeric_limits<char32_t>::max_digits10 == 0 ); + + const int f_max_digits10 = (2 + std::numeric_limits<float>::digits + * 643 / 2136); + VERIFY( std::numeric_limits<float>::max_digits10 == f_max_digits10 ); + + const int d_max_digits10 = (2 + std::numeric_limits<double>::digits + * 643 / 2136); + VERIFY( std::numeric_limits<double>::max_digits10 == d_max_digits10 ); + + const int ld_max_digits10 = (2 + std::numeric_limits<long double>::digits + * 643 / 2136); + VERIFY( std::numeric_limits<long double>::max_digits10 == ld_max_digits10 ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/min_max.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/min_max.cc new file mode 100644 index 000000000..ba2a9f61e --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/min_max.cc @@ -0,0 +1,93 @@ +// { dg-add-options ieee } + +// 1999-08-23 bkoz + +// Copyright (C) 1999, 2001, 2002, 2003, 2004, 2009 Free Software Foundation +// +// 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.2.1.1 template class numeric_limits + +#include <limits> +#include <limits.h> +#include <float.h> +#include <cwchar> +#include <testsuite_hooks.h> + +template<typename T> +struct extrema { + static T min; + static T max; +}; + + +#define DEFINE_EXTREMA(T, m, M) \ + template<> T extrema<T>::min = m; \ + template<> T extrema<T>::max = M + +DEFINE_EXTREMA(char, CHAR_MIN, CHAR_MAX); +DEFINE_EXTREMA(signed char, SCHAR_MIN, SCHAR_MAX); +DEFINE_EXTREMA(unsigned char, 0, UCHAR_MAX); +DEFINE_EXTREMA(short, SHRT_MIN, SHRT_MAX); +DEFINE_EXTREMA(unsigned short, 0, USHRT_MAX); +DEFINE_EXTREMA(int, INT_MIN, INT_MAX); +DEFINE_EXTREMA(unsigned, 0U, UINT_MAX); +DEFINE_EXTREMA(long, LONG_MIN, LONG_MAX); +DEFINE_EXTREMA(unsigned long, 0UL, ULONG_MAX); + +#if _GLIBCXX_USE_WCHAR_T +DEFINE_EXTREMA(wchar_t, WCHAR_MIN, WCHAR_MAX); +#endif //_GLIBCXX_USE_WCHAR_T + +DEFINE_EXTREMA(float, FLT_MIN, FLT_MAX); +DEFINE_EXTREMA(double, DBL_MIN, DBL_MAX); +DEFINE_EXTREMA(long double, LDBL_MIN, LDBL_MAX); + +#undef DEFINE_EXTREMA + +template<typename T> +void test_extrema() +{ + bool test __attribute__((unused)) = true; + T limits_min = std::numeric_limits<T>::min(); + T limits_max = std::numeric_limits<T>::max(); + T extrema_min = extrema<T>::min; + T extrema_max = extrema<T>::max; + VERIFY( extrema_min == limits_min ); + VERIFY( extrema_max == limits_max ); +} + +int main() +{ + test_extrema<char>(); + test_extrema<signed char>(); + test_extrema<unsigned char>(); + + test_extrema<short>(); + test_extrema<unsigned short>(); + + test_extrema<int>(); + test_extrema<unsigned>(); + + test_extrema<long>(); + test_extrema<unsigned long>(); + + test_extrema<float>(); + test_extrema<double>(); + test_extrema<long double>(); + + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/quiet_NaN.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/quiet_NaN.cc new file mode 100644 index 000000000..7d1db7835 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/quiet_NaN.cc @@ -0,0 +1,54 @@ +// { dg-add-options ieee } + +// 1999-08-23 bkoz + +// Copyright (C) 1999, 2001, 2002, 2003, 2004, 2009 Free Software Foundation +// +// 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.2.1.1 template class numeric_limits + +#include <limits> +#include <limits.h> +#include <float.h> +#include <cwchar> +#include <testsuite_hooks.h> + +template<typename T> +void +test_qnan() +{ + bool test; + + if (std::numeric_limits<T>::has_quiet_NaN) + { + T nan = std::numeric_limits<T>::quiet_NaN(); + test = (nan != nan); + } + else + test = true; + + VERIFY (test); +} + +int main() +{ + test_qnan<float>(); + test_qnan<double>(); + test_qnan<long double>(); + + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_data.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_data.cc new file mode 100644 index 000000000..0b82a75db --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_data.cc @@ -0,0 +1,98 @@ +// { dg-do compile } +// { dg-options "-std=gnu++0x" } + +// Copyright (C) 2010 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/>. + +#include <limits> +#include <testsuite_common_types.h> + +namespace __gnu_test +{ + struct constexpr_member_data + { + template<typename _Ttesttype> + void + operator()() + { + struct _Concept + { + void __constraint() + { + using std::float_denorm_style; + using std::float_round_style; + constexpr bool v1 __attribute__((unused)) + = _Ttesttype::is_specialized; + constexpr int v2 __attribute__((unused)) + = _Ttesttype::digits; + constexpr int v3 __attribute__((unused)) + = _Ttesttype::digits10; + constexpr int v4 __attribute__((unused)) + = _Ttesttype::max_digits10; + constexpr bool v5 __attribute__((unused)) + = _Ttesttype::is_signed; + constexpr bool v6 __attribute__((unused)) + = _Ttesttype::is_integer; + constexpr bool v7 __attribute__((unused)) + = _Ttesttype::is_exact; + constexpr int v8 __attribute__((unused)) + = _Ttesttype::radix; + constexpr int v9 __attribute__((unused)) + = _Ttesttype::min_exponent; + constexpr int v10 __attribute__((unused)) + = _Ttesttype::min_exponent10; + constexpr int v11 __attribute__((unused)) + = _Ttesttype::max_exponent; + constexpr int v12 __attribute__((unused)) + = _Ttesttype::max_exponent10; + constexpr bool v13 __attribute__((unused)) + = _Ttesttype::has_infinity; + constexpr bool v14 __attribute__((unused)) + = _Ttesttype::has_quiet_NaN; + constexpr bool v15 __attribute__((unused)) + = _Ttesttype::has_signaling_NaN; + constexpr float_denorm_style v16 __attribute__((unused)) + = _Ttesttype::has_denorm; + constexpr bool v17 __attribute__((unused)) + = _Ttesttype::has_denorm_loss; + constexpr bool v18 __attribute__((unused)) + = _Ttesttype::is_iec559; + constexpr bool v19 __attribute__((unused)) + = _Ttesttype::is_bounded; + constexpr bool v20 __attribute__((unused)) + = _Ttesttype::is_modulo; + constexpr bool v21 __attribute__((unused)) + = _Ttesttype::traps; + constexpr bool v22 __attribute__((unused)) + = _Ttesttype::tinyness_before; + constexpr float_round_style v23 __attribute__((unused)) + = _Ttesttype::round_style; + } + }; + + _Concept c; + c.__constraint(); + } + }; +} + +int main() +{ + __gnu_test::constexpr_member_data test; + __gnu_cxx::typelist::apply_generator(test, __gnu_test::limits_tl()); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc new file mode 100644 index 000000000..f1848f218 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc @@ -0,0 +1,70 @@ +// { dg-do compile } +// { dg-options "-std=gnu++0x" } + +// Copyright (C) 2010 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/>. + +#include <limits> +#include <testsuite_common_types.h> + +namespace __gnu_test +{ + struct constexpr_member_functions + { + template<typename _Ttesttype, typename _Tbasetype> + void + operator()() + { + struct _Concept + { + void __constraint() + { + constexpr _Tbasetype v1 __attribute__((unused)) + = _Ttesttype::min(); + constexpr _Tbasetype v2 __attribute__((unused)) + = _Ttesttype::max(); + constexpr _Tbasetype v3 __attribute__((unused)) + = _Ttesttype::lowest(); + constexpr _Tbasetype v4 __attribute__((unused)) + = _Ttesttype::epsilon(); + constexpr _Tbasetype v5 __attribute__((unused)) + = _Ttesttype::round_error(); + constexpr _Tbasetype v6 __attribute__((unused)) + = _Ttesttype::infinity(); + constexpr _Tbasetype v7 __attribute__((unused)) + = _Ttesttype::quiet_NaN(); + constexpr _Tbasetype v8 __attribute__((unused)) + = _Ttesttype::signaling_NaN(); + constexpr _Tbasetype v9 __attribute__((unused)) + = _Ttesttype::denorm_min(); + } + }; + + _Concept c; + c.__constraint(); + } + }; +} + +int main() +{ + __gnu_test::constexpr_member_functions test; + __gnu_cxx::typelist::apply_generator(test, + __gnu_test::limits_tl(), + __gnu_test::integral_types::type()); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/requirements/explicit_instantiation/1.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/requirements/explicit_instantiation/1.cc new file mode 100644 index 000000000..aa75bd14c --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/requirements/explicit_instantiation/1.cc @@ -0,0 +1,41 @@ +// { dg-do compile } + +// Copyright (C) 2007, 2009 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/>. + + +// This file tests explicit instantiation of library containers. + +#include <limits> + +template<typename T> + struct A + { + int key; + public: + A(int i = 0): key(i) { } + bool + operator==(int i) { return i == key; } + }; + +struct B +{ + B(int = 0) { } +}; + +// XXX Should this work for POD types? +template class std::numeric_limits<A<B> >; diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/specialization_default_values.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/specialization_default_values.cc new file mode 100644 index 000000000..e2036d77d --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/specialization_default_values.cc @@ -0,0 +1,106 @@ +// { dg-add-options ieee } + +// 1999-08-23 bkoz + +// Copyright (C) 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2009 +// Free Software Foundation +// +// 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.2.1.1 template class numeric_limits + +#include <limits> +#include <limits.h> +#include <float.h> +#include <cwchar> +#include <testsuite_hooks.h> + +template<typename T> + struct A + { + int key; + public: + A(int i = 0): key(i) { } + bool + operator==(int i) { return i == key; } + }; + +struct B +{ + B(int = 0) { } +}; + + +bool test01() +{ + bool test __attribute__((unused)) = true; + std::numeric_limits< A<B> > obj; + + VERIFY( !obj.is_specialized ); + VERIFY( obj.min() == 0 ); + VERIFY( obj.max() == 0 ); + VERIFY( obj.digits == 0 ); + VERIFY( obj.digits10 == 0 ); + VERIFY( !obj.is_signed ); + VERIFY( !obj.is_integer ); + VERIFY( !obj.is_exact ); + VERIFY( obj.radix == 0 ); + VERIFY( obj.epsilon() == 0 ); + VERIFY( obj.round_error() == 0 ); + VERIFY( obj.min_exponent == 0 ); + VERIFY( obj.min_exponent10 == 0 ); + VERIFY( obj.max_exponent == 0 ); + VERIFY( obj.max_exponent10 == 0 ); + VERIFY( !obj.has_infinity ); + VERIFY( !obj.has_quiet_NaN ); + VERIFY( !obj.has_signaling_NaN ); + VERIFY( !obj.has_denorm ); + VERIFY( !obj.has_denorm_loss ); + VERIFY( obj.infinity() == 0 ); + VERIFY( obj.quiet_NaN() == 0 ); + VERIFY( obj.signaling_NaN() == 0 ); + VERIFY( obj.denorm_min() == 0 ); + VERIFY( !obj.is_iec559 ); + VERIFY( !obj.is_bounded ); + VERIFY( !obj.is_modulo ); + VERIFY( !obj.traps ); + VERIFY( !obj.tinyness_before ); + VERIFY( obj.round_style == std::round_toward_zero ); + return test; +} + +// test linkage of the generic bits +template struct std::numeric_limits<B>; + +void test02() +{ + typedef std::numeric_limits<B> b_nl_type; + + // Should probably do all of them... + const int* __attribute__((unused)) pi1 = &b_nl_type::digits; + const int* __attribute__((unused)) pi2 = &b_nl_type::digits10; + const int* __attribute__((unused)) pi3 = &b_nl_type::max_exponent10; + const bool* __attribute__((unused)) pb1 = &b_nl_type::traps; +} + + +int main() +{ + test01(); + test02(); + + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/traps.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/traps.cc new file mode 100644 index 000000000..39c5576fa --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/traps.cc @@ -0,0 +1,61 @@ +// { dg-add-options ieee } + +// Copyright (C) 2005, 2009 Free Software Foundation +// +// 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.2.1.1 template class numeric_limits + +#include <limits> +#include <testsuite_hooks.h> + +template<typename T> + void + test_traps(T r = T(0)) + { + typedef T value_type; + volatile value_type i(5); + volatile value_type j(0); + + if (!std::numeric_limits<value_type>::traps) + r = i / j; + } + +// libstdc++/22203 +int main() +{ + test_traps<int>(); + test_traps<unsigned int>(); + test_traps<long>(); + test_traps<unsigned long>(); + test_traps<long long>(); + test_traps<unsigned long long>(); + + /* + For floating points, trapping is a different, more complicated + story. If is_iecxxx is true, then division by zero would not trap + (infinity). If is_iecxxx is false, we don't know (VAX may trap for + 0/0 -- I have to check). For most cases (i.e. IEE-754), trapping + for floating points have to do with whether there is a support for + signaling NaN. + - Gaby. + */ + // test_traps<float>(); + // test_traps<double>(); + // test_traps<long double>(); + + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/pthread_guard.cc b/libstdc++-v3/testsuite/18_support/pthread_guard.cc new file mode 100644 index 000000000..5389316ba --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/pthread_guard.cc @@ -0,0 +1,65 @@ +// +// Copyright (C) 2007, 2008, 2009, 2010 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/>. + +// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* } } +// { dg-options "-pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-darwin* alpha*-*-osf* } } + +#include <cstdlib> +#include <pthread.h> + +// This used to deadlock with the old libstdc++ because there is only one +// global mutex guarding initialization of statics and it is held during by +// the initializer thread of a static until the variable is completely +// initialized. If the initializer thread creates and waits for another thread +// which also initializes a static variable, there will be a deadlock because +// the first thread is holding the mutex and waiting for the second thread, +// which is blocked when it is acquiring the mutex. + +int +get_bar (void) +{ + return 1; +} + +void* +do_something (void *arg) +{ + static int bar __attribute__((unused)) = get_bar (); + return 0; +} + +int +get_foo (void) +{ + pthread_t new_thread; + + if (pthread_create (&new_thread, 0, do_something, 0) != 0) + std::abort (); + + if (pthread_join (new_thread, 0) != 0) + std::abort (); + + return 1; +} + +int +main (int argc, char **argv) +{ + static int foo __attribute__((unused)) = get_foo (); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/type_info/fundamental.cc b/libstdc++-v3/testsuite/18_support/type_info/fundamental.cc new file mode 100644 index 000000000..00c64b8cf --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/type_info/fundamental.cc @@ -0,0 +1,79 @@ +// { dg-options "-std=gnu++0x" } +// { dg-require-effective-target dfp } + +// 2011-02-23 Benjamin Kosnik <bkoz@redhat.com> +// +// Copyright (C) 2011 Free Software Foundation +// +// 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/>. + +#include <string> +#include <typeinfo> +#include <decimal/decimal> + +template<typename _Tp> + std::string + gen_type_info() + { + std::string s1 = typeid(_Tp).name(); + std::string s2 = typeid(_Tp*).name(); + std::string s3 = typeid(const _Tp*).name(); + return std::max(std::max(s1, s2), s3); + } + +// libstdc++/43622, others +int main() +{ + gen_type_info<bool>(); + gen_type_info<char>(); + gen_type_info<signed char>(); + gen_type_info<unsigned char>(); + gen_type_info<short>(); + gen_type_info<unsigned short>(); + gen_type_info<int>(); + gen_type_info<unsigned int>(); + gen_type_info<long>(); + gen_type_info<unsigned long>(); + gen_type_info<long long>(); + gen_type_info<unsigned long long>(); + gen_type_info<wchar_t>(); + gen_type_info<char16_t>(); + gen_type_info<char32_t>(); + + gen_type_info<float>(); + gen_type_info<double>(); + gen_type_info<long double>(); + + gen_type_info<void>(); + + gen_type_info<std::nullptr_t>(); + + // decimal + gen_type_info<std::decimal::decimal32>(); + gen_type_info<std::decimal::decimal64>(); + gen_type_info<std::decimal::decimal128>(); + + // attributes +#if 0 + typedef int ti_type __attribute__((__mode__(TI))); + gen_type_info<ti_type>(); + + typedef float tf_type __attribute__((__mode__(TF))); + gen_type_info<tf_type>(); +#endif + + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/type_info/hash_code.cc b/libstdc++-v3/testsuite/18_support/type_info/hash_code.cc new file mode 100644 index 000000000..2d4c65bc5 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/type_info/hash_code.cc @@ -0,0 +1,79 @@ +// { dg-options "-std=gnu++0x" } + +// 2010-09-21 Paolo Carlini <paolo.carlini@oracle.com> +// +// Copyright (C) 2010 Free Software Foundation +// +// 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/>. + +#include <typeinfo> +#include <testsuite_hooks.h> + +void test01() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + class Abraca { }; + Abraca a1, a2_; + + typedef const Abraca cAbraca; + cAbraca a2 = a2_; + + class Dabra { }; + Dabra d1; + + const type_info& to01 = typeid(int); + const type_info& to02 = typeid(double); + VERIFY( to01 != to02 ); + VERIFY( to01.hash_code() != to02.hash_code() ); + + const type_info& to03 = typeid(a1); + const type_info& to04 = typeid(a2); + VERIFY( to03 == to04 ); + VERIFY( to03.hash_code() == to04.hash_code() ); + + const type_info& to05 = typeid(Abraca); + const type_info& to06 = typeid(cAbraca); + VERIFY( to05 == to06 ); + VERIFY( to05.hash_code() == to06.hash_code() ); + + const type_info& to07 = typeid(Abraca); + const type_info& to08 = typeid(a2); + VERIFY( to07 == to08 ); + VERIFY( to07.hash_code() == to08.hash_code() ); + + const type_info& to09 = typeid(Abraca); + const type_info& to10 = typeid(const Abraca&); + VERIFY( to09 == to10 ); + VERIFY( to09.hash_code() == to10.hash_code() ); + + const type_info& to11 = typeid(Abraca); + const type_info& to12 = typeid(Dabra); + VERIFY( to11 != to12 ); + VERIFY( to11.hash_code() != to12.hash_code() ); + + const type_info& to13 = typeid(a1); + const type_info& to14 = typeid(d1); + VERIFY( to13 != to14 ); + VERIFY( to13.hash_code() != to14.hash_code() ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/uncaught_exception/14026.cc b/libstdc++-v3/testsuite/18_support/uncaught_exception/14026.cc new file mode 100644 index 000000000..554daf13e --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/uncaught_exception/14026.cc @@ -0,0 +1,53 @@ +// Copyright (C) 2004, 2007, 2009 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/>. + +// PR 14026 +// 18.6.4 uncaught_exception + +#include <cstdlib> +#include <exception> +#include <testsuite_hooks.h> + +static void +no_uncaught () +{ + if (std::uncaught_exception()) + abort(); +} + +int +main() +{ + try + { + throw 1; + } + catch (...) + { + try + { + throw; + } + catch (...) + { + no_uncaught (); + } + } + no_uncaught(); + + return 0; +} |