P0003R5 - removal of dynamic exception specification from C++17
authorJakub Jelinek <jakub@gcc.gnu.org>
Thu, 8 Dec 2016 08:26:06 +0000 (09:26 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 8 Dec 2016 08:26:06 +0000 (09:26 +0100)
P0003R5 - removal of dynamic exception specification from C++17
* parser.c (cp_parser_exception_specification_opt): For C++17
error out on throw ( type-id-list ), for C++11 and C++14 issue
-Wdeprecated warning on it.  Formatting fix.  Treat throw()
in C++17 as noexcept(true).

* g++.dg/compat/eh/ctor1.h: Adjust for deprecation of
throw (type-id-list) in C++11 and C++14 and removal in C++17.
* g++.dg/compat/eh/ctor1_y.C: Likewise.
* g++.dg/compat/eh/new1_x.C: Likewise.
* g++.dg/compat/eh/new1_y.C: Likewise.
* g++.dg/compat/eh/spec3_x.C: Likewise.
* g++.dg/compat/eh/spec3_y.C: Likewise.
* g++.dg/compat/eh/template1.h: Likewise.
* g++.dg/compat/eh/template1_y.C: Likewise.
* g++.dg/compat/eh/unexpected1_x.C: Likewise.
* g++.dg/compat/eh/unexpected1_y.C: Likewise.
* g++.dg/cpp0x/auto9.C: Likewise.
* g++.dg/cpp0x/defaulted23.C: Likewise.
* g++.dg/cpp0x/error5.C: Likewise.
* g++.dg/cpp0x/lambda/lambda-eh2.C: Likewise.
* g++.dg/cpp0x/noexcept02.C: Likewise.
* g++.dg/cpp0x/noexcept07.C: Likewise.
* g++.dg/cpp0x/noexcept08.C: Likewise.
* g++.dg/cpp0x/noexcept19.C: Likewise.
* g++.dg/cpp0x/variadic73.C: Likewise.
* g++.dg/cpp0x/variadic-throw.C: Likewise.
* g++.dg/cpp1z/noexcept-type1.C: Likewise.
* g++.dg/eh/async-unwind2.C: Likewise.
* g++.dg/eh/cond4.C: Likewise.
* g++.dg/eh/delete1.C: Likewise.
* g++.dg/eh/ehopt1.C: Likewise.
* g++.dg/eh/forced3.C: Likewise.
* g++.dg/eh/forced4.C: Likewise.
* g++.dg/eh/init-temp2.C: Likewise.
* g++.dg/eh/pr38662.C: Likewise.
* g++.dg/eh/pr41819.C: Likewise.
* g++.dg/eh/shadow1.C: Likewise.
* g++.dg/eh/spec2.C: Likewise.
* g++.dg/eh/spec3.C: Likewise.
* g++.dg/eh/spec5.C: Likewise.
* g++.dg/eh/spec6.C: Likewise.
* g++.dg/eh/spec7.C: Likewise.
* g++.dg/eh/spec8.C: Likewise.
* g++.dg/eh/spec9.C: Likewise.
* g++.dg/eh/template1.C: Likewise.
* g++.dg/eh/unexpected1.C: Likewise.
* g++.dg/ext/has_nothrow_assign.C: Likewise.
* g++.dg/ext/has_nothrow_constructor.C: Likewise.
* g++.dg/ext/has_nothrow_copy-1.C: Likewise.
* g++.dg/ext/has_nothrow_copy-2.C: Likewise.
* g++.dg/ext/has_nothrow_copy-4.C: Likewise.
* g++.dg/ext/has_nothrow_copy-5.C: Likewise.
* g++.dg/ext/has_nothrow_copy-6.C: Likewise.
* g++.dg/ext/has_nothrow_copy-7.C: Likewise.
* g++.dg/gcov/gcov-7.C: Likewise.
* g++.dg/init/new13.C: Likewise.
* g++.dg/init/new25.C: Likewise.
* g++.dg/lookup/exception1.C: Likewise.
* g++.dg/opt/noreturn-1.C: Likewise.
* g++.dg/other/error3.C: Likewise.
* g++.dg/rtti/crash3.C: Likewise.
* g++.dg/template/eh2.C: Likewise.
* g++.dg/template/error36.C: Likewise.
* g++.dg/tm/pr46567.C: Likewise.
* g++.dg/tm/pr47340.C: Likewise.
* g++.dg/torture/pr46364.C: Likewise.
* g++.dg/torture/pr49394.C: Likewise.
* g++.dg/torture/pr52918-1.C: Likewise.
* g++.dg/torture/pr57190.C: Likewise.
* g++.dg/torture/stackalign/eh-alloca-1.C: Likewise.
* g++.dg/torture/stackalign/eh-fastcall-1.C: Likewise.
* g++.dg/torture/stackalign/eh-global-1.C: Likewise.
* g++.dg/torture/stackalign/eh-inline-1.C: Likewise.
* g++.dg/torture/stackalign/eh-inline-2.C: Likewise.
* g++.dg/torture/stackalign/eh-thiscall-1.C: Likewise.
* g++.dg/torture/stackalign/eh-vararg-1.C: Likewise.
* g++.dg/torture/stackalign/eh-vararg-2.C: Likewise.
* g++.dg/tree-ssa/pr45605.C: Likewise.
* g++.dg/warn/Wreturn-type-3.C: Likewise.
* g++.old-deja/g++.eh/badalloc1.C: Likewise.
* g++.old-deja/g++.eh/cleanup2.C: Likewise.
* g++.old-deja/g++.eh/spec1.C: Likewise.
* g++.old-deja/g++.eh/spec2.C: Likewise.
* g++.old-deja/g++.eh/spec3.C: Likewise.
* g++.old-deja/g++.eh/spec4.C: Likewise.
* g++.old-deja/g++.eh/spec6.C: Likewise.
* g++.old-deja/g++.eh/throw1.C: Likewise.
* g++.old-deja/g++.eh/throw2.C: Likewise.
* g++.old-deja/g++.eh/tmpl1.C: Likewise.
* g++.old-deja/g++.eh/tmpl3.C: Likewise.
* g++.old-deja/g++.mike/eh15.C: Likewise.
* g++.old-deja/g++.mike/eh25.C: Likewise.
* g++.old-deja/g++.mike/eh33.C: Likewise.
* g++.old-deja/g++.mike/eh34.C: Likewise.
* g++.old-deja/g++.mike/eh50.C: Likewise.
* g++.old-deja/g++.mike/eh51.C: Likewise.
* g++.old-deja/g++.mike/eh55.C: Likewise.
* g++.old-deja/g++.mike/p10416.C: Likewise.
* g++.old-deja/g++.other/crash28.C: Likewise.
* g++.old-deja/g++.other/crash30.C: Likewise.
* g++.old-deja/g++.other/new7.C: Likewise.
* g++.old-deja/g++.pt/ehspec1.C: Likewise.
* g++.old-deja/g++.robertl/eb123.C: Likewise.

* testsuite/util/testsuite_new_operators.h: Include testsuite_hooks.h.
(operator new): Use THROW macro.

From-SVN: r243429

102 files changed:
gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/compat/eh/ctor1.h
gcc/testsuite/g++.dg/compat/eh/ctor1_y.C
gcc/testsuite/g++.dg/compat/eh/new1_x.C
gcc/testsuite/g++.dg/compat/eh/new1_y.C
gcc/testsuite/g++.dg/compat/eh/spec3_x.C
gcc/testsuite/g++.dg/compat/eh/spec3_y.C
gcc/testsuite/g++.dg/compat/eh/template1.h
gcc/testsuite/g++.dg/compat/eh/template1_y.C
gcc/testsuite/g++.dg/compat/eh/unexpected1_x.C
gcc/testsuite/g++.dg/compat/eh/unexpected1_y.C
gcc/testsuite/g++.dg/cpp0x/auto9.C
gcc/testsuite/g++.dg/cpp0x/defaulted23.C
gcc/testsuite/g++.dg/cpp0x/error5.C
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh2.C
gcc/testsuite/g++.dg/cpp0x/noexcept02.C
gcc/testsuite/g++.dg/cpp0x/noexcept07.C
gcc/testsuite/g++.dg/cpp0x/noexcept08.C
gcc/testsuite/g++.dg/cpp0x/noexcept19.C
gcc/testsuite/g++.dg/cpp0x/variadic-throw.C
gcc/testsuite/g++.dg/cpp0x/variadic73.C
gcc/testsuite/g++.dg/cpp1z/noexcept-type1.C
gcc/testsuite/g++.dg/eh/async-unwind2.C
gcc/testsuite/g++.dg/eh/cond4.C
gcc/testsuite/g++.dg/eh/delete1.C
gcc/testsuite/g++.dg/eh/ehopt1.C
gcc/testsuite/g++.dg/eh/forced3.C
gcc/testsuite/g++.dg/eh/forced4.C
gcc/testsuite/g++.dg/eh/init-temp2.C
gcc/testsuite/g++.dg/eh/pr38662.C
gcc/testsuite/g++.dg/eh/pr41819.C
gcc/testsuite/g++.dg/eh/shadow1.C
gcc/testsuite/g++.dg/eh/spec2.C
gcc/testsuite/g++.dg/eh/spec3.C
gcc/testsuite/g++.dg/eh/spec5.C
gcc/testsuite/g++.dg/eh/spec6.C
gcc/testsuite/g++.dg/eh/spec7.C
gcc/testsuite/g++.dg/eh/spec8.C
gcc/testsuite/g++.dg/eh/spec9.C
gcc/testsuite/g++.dg/eh/template1.C
gcc/testsuite/g++.dg/eh/unexpected1.C
gcc/testsuite/g++.dg/ext/has_nothrow_assign.C
gcc/testsuite/g++.dg/ext/has_nothrow_constructor.C
gcc/testsuite/g++.dg/ext/has_nothrow_copy-1.C
gcc/testsuite/g++.dg/ext/has_nothrow_copy-2.C
gcc/testsuite/g++.dg/ext/has_nothrow_copy-4.C
gcc/testsuite/g++.dg/ext/has_nothrow_copy-5.C
gcc/testsuite/g++.dg/ext/has_nothrow_copy-6.C
gcc/testsuite/g++.dg/ext/has_nothrow_copy-7.C
gcc/testsuite/g++.dg/gcov/gcov-7.C
gcc/testsuite/g++.dg/init/new13.C
gcc/testsuite/g++.dg/init/new25.C
gcc/testsuite/g++.dg/lookup/exception1.C
gcc/testsuite/g++.dg/opt/noreturn-1.C
gcc/testsuite/g++.dg/other/error3.C
gcc/testsuite/g++.dg/rtti/crash3.C
gcc/testsuite/g++.dg/template/eh2.C
gcc/testsuite/g++.dg/template/error36.C
gcc/testsuite/g++.dg/tm/pr46567.C
gcc/testsuite/g++.dg/tm/pr47340.C
gcc/testsuite/g++.dg/torture/pr46364.C
gcc/testsuite/g++.dg/torture/pr49394.C
gcc/testsuite/g++.dg/torture/pr52918-1.C
gcc/testsuite/g++.dg/torture/pr57190.C
gcc/testsuite/g++.dg/torture/stackalign/eh-alloca-1.C
gcc/testsuite/g++.dg/torture/stackalign/eh-fastcall-1.C
gcc/testsuite/g++.dg/torture/stackalign/eh-global-1.C
gcc/testsuite/g++.dg/torture/stackalign/eh-inline-1.C
gcc/testsuite/g++.dg/torture/stackalign/eh-inline-2.C
gcc/testsuite/g++.dg/torture/stackalign/eh-thiscall-1.C
gcc/testsuite/g++.dg/torture/stackalign/eh-vararg-1.C
gcc/testsuite/g++.dg/torture/stackalign/eh-vararg-2.C
gcc/testsuite/g++.dg/tree-ssa/pr45605.C
gcc/testsuite/g++.dg/warn/Wreturn-type-3.C
gcc/testsuite/g++.old-deja/g++.eh/badalloc1.C
gcc/testsuite/g++.old-deja/g++.eh/cleanup2.C
gcc/testsuite/g++.old-deja/g++.eh/spec1.C
gcc/testsuite/g++.old-deja/g++.eh/spec2.C
gcc/testsuite/g++.old-deja/g++.eh/spec3.C
gcc/testsuite/g++.old-deja/g++.eh/spec4.C
gcc/testsuite/g++.old-deja/g++.eh/spec6.C
gcc/testsuite/g++.old-deja/g++.eh/throw1.C
gcc/testsuite/g++.old-deja/g++.eh/throw2.C
gcc/testsuite/g++.old-deja/g++.eh/tmpl1.C
gcc/testsuite/g++.old-deja/g++.eh/tmpl3.C
gcc/testsuite/g++.old-deja/g++.mike/eh15.C
gcc/testsuite/g++.old-deja/g++.mike/eh25.C
gcc/testsuite/g++.old-deja/g++.mike/eh33.C
gcc/testsuite/g++.old-deja/g++.mike/eh34.C
gcc/testsuite/g++.old-deja/g++.mike/eh50.C
gcc/testsuite/g++.old-deja/g++.mike/eh51.C
gcc/testsuite/g++.old-deja/g++.mike/eh55.C
gcc/testsuite/g++.old-deja/g++.mike/p10416.C
gcc/testsuite/g++.old-deja/g++.other/crash28.C
gcc/testsuite/g++.old-deja/g++.other/crash30.C
gcc/testsuite/g++.old-deja/g++.other/new7.C
gcc/testsuite/g++.old-deja/g++.pt/ehspec1.C
gcc/testsuite/g++.old-deja/g++.robertl/eb123.C
libstdc++-v3/ChangeLog
libstdc++-v3/testsuite/util/testsuite_new_operators.h

index a59d25b7caad407c3c63e3208c23ddfeeaaaaa44..e32516450511db13bc9fa2aec06304b9347f2ead 100644 (file)
@@ -1,3 +1,11 @@
+2016-12-08  Jakub Jelinek  <jakub@redhat.com>
+
+       P0003R5 - removal of dynamic exception specification from C++17
+       * parser.c (cp_parser_exception_specification_opt): For C++17
+       error out on throw ( type-id-list ), for C++11 and C++14 issue
+       -Wdeprecated warning on it.  Formatting fix.  Treat throw()
+       in C++17 as noexcept(true).
+
 2016-12-07  Martin Jambor  <mjambor@suse.cz>
 
        PR c++/78589
index 08f5f9e52ef22fc7aa2798ab7f48887e979478af..70e5fb33f7c93b9fa2a5319c2dc8fb7ed95676e6 100644 (file)
@@ -23786,8 +23786,8 @@ cp_parser_exception_specification_opt (cp_parser* parser)
   token = cp_lexer_peek_token (parser->lexer);
 
   /* Is it a noexcept-specification?  */
-  type_id_list = cp_parser_noexcept_specification_opt(parser, true, NULL,
-                                                     false);
+  type_id_list = cp_parser_noexcept_specification_opt (parser, true, NULL,
+                                                      false);
   if (type_id_list != NULL_TREE)
     return type_id_list;
 
@@ -23795,12 +23795,7 @@ cp_parser_exception_specification_opt (cp_parser* parser)
   if (!cp_parser_is_keyword (token, RID_THROW))
     return NULL_TREE;
 
-#if 0
-  /* Enable this once a lot of code has transitioned to noexcept?  */
-  if (cxx_dialect >= cxx11 && !in_system_header_at (input_location))
-    warning (OPT_Wdeprecated, "dynamic exception specifications are "
-            "deprecated in C++0x; use %<noexcept%> instead");
-#endif
+  location_t loc = token->location;
 
   /* Consume the `throw'.  */
   cp_lexer_consume_token (parser->lexer);
@@ -23821,7 +23816,23 @@ cp_parser_exception_specification_opt (cp_parser* parser)
       type_id_list = cp_parser_type_id_list (parser);
       /* Restore the saved message.  */
       parser->type_definition_forbidden_message = saved_message;
+
+      if (cxx_dialect >= cxx1z)
+       {
+         error_at (loc, "ISO C++1z does not allow dynamic exception "
+                        "specifications");
+         type_id_list = NULL_TREE;
+       }
+      else if (cxx_dialect >= cxx11 && !in_system_header_at (loc))
+       warning_at (loc, OPT_Wdeprecated,
+                   "dynamic exception specifications are deprecated in C++11;"
+                   " use %<noexcept%> instead");
     }
+  /* In C++17, throw() is equivalent to noexcept (true).  throw()
+     is deprecated in C++11 and above as well, but is still widely used,
+     so don't warn about it yet.  */
+  else if (cxx_dialect >= cxx1z)
+    type_id_list = noexcept_true_spec;
   else
     type_id_list = empty_except_spec;
 
index bf6db373076329a1f43fb84554a4de4ce59bb327..b6b00960420acd09326ab162b082ad5aac282fd5 100644 (file)
+2016-12-08  Jakub Jelinek  <jakub@redhat.com>
+
+       P0003R5 - removal of dynamic exception specification from C++17
+       * g++.dg/compat/eh/ctor1.h: Adjust for deprecation of
+       throw (type-id-list) in C++11 and C++14 and removal in C++17.
+       * g++.dg/compat/eh/ctor1_y.C: Likewise.
+       * g++.dg/compat/eh/new1_x.C: Likewise.
+       * g++.dg/compat/eh/new1_y.C: Likewise.
+       * g++.dg/compat/eh/spec3_x.C: Likewise.
+       * g++.dg/compat/eh/spec3_y.C: Likewise.
+       * g++.dg/compat/eh/template1.h: Likewise.
+       * g++.dg/compat/eh/template1_y.C: Likewise.
+       * g++.dg/compat/eh/unexpected1_x.C: Likewise.
+       * g++.dg/compat/eh/unexpected1_y.C: Likewise.
+       * g++.dg/cpp0x/auto9.C: Likewise.
+       * g++.dg/cpp0x/defaulted23.C: Likewise.
+       * g++.dg/cpp0x/error5.C: Likewise.
+       * g++.dg/cpp0x/lambda/lambda-eh2.C: Likewise.
+       * g++.dg/cpp0x/noexcept02.C: Likewise.
+       * g++.dg/cpp0x/noexcept07.C: Likewise.
+       * g++.dg/cpp0x/noexcept08.C: Likewise.
+       * g++.dg/cpp0x/noexcept19.C: Likewise.
+       * g++.dg/cpp0x/variadic73.C: Likewise.
+       * g++.dg/cpp0x/variadic-throw.C: Likewise.
+       * g++.dg/cpp1z/noexcept-type1.C: Likewise.
+       * g++.dg/eh/async-unwind2.C: Likewise.
+       * g++.dg/eh/cond4.C: Likewise.
+       * g++.dg/eh/delete1.C: Likewise.
+       * g++.dg/eh/ehopt1.C: Likewise.
+       * g++.dg/eh/forced3.C: Likewise.
+       * g++.dg/eh/forced4.C: Likewise.
+       * g++.dg/eh/init-temp2.C: Likewise.
+       * g++.dg/eh/pr38662.C: Likewise.
+       * g++.dg/eh/pr41819.C: Likewise.
+       * g++.dg/eh/shadow1.C: Likewise.
+       * g++.dg/eh/spec2.C: Likewise.
+       * g++.dg/eh/spec3.C: Likewise.
+       * g++.dg/eh/spec5.C: Likewise.
+       * g++.dg/eh/spec6.C: Likewise.
+       * g++.dg/eh/spec7.C: Likewise.
+       * g++.dg/eh/spec8.C: Likewise.
+       * g++.dg/eh/spec9.C: Likewise.
+       * g++.dg/eh/template1.C: Likewise.
+       * g++.dg/eh/unexpected1.C: Likewise.
+       * g++.dg/ext/has_nothrow_assign.C: Likewise.
+       * g++.dg/ext/has_nothrow_constructor.C: Likewise.
+       * g++.dg/ext/has_nothrow_copy-1.C: Likewise.
+       * g++.dg/ext/has_nothrow_copy-2.C: Likewise.
+       * g++.dg/ext/has_nothrow_copy-4.C: Likewise.
+       * g++.dg/ext/has_nothrow_copy-5.C: Likewise.
+       * g++.dg/ext/has_nothrow_copy-6.C: Likewise.
+       * g++.dg/ext/has_nothrow_copy-7.C: Likewise.
+       * g++.dg/gcov/gcov-7.C: Likewise.
+       * g++.dg/init/new13.C: Likewise.
+       * g++.dg/init/new25.C: Likewise.
+       * g++.dg/lookup/exception1.C: Likewise.
+       * g++.dg/opt/noreturn-1.C: Likewise.
+       * g++.dg/other/error3.C: Likewise.
+       * g++.dg/rtti/crash3.C: Likewise.
+       * g++.dg/template/eh2.C: Likewise.
+       * g++.dg/template/error36.C: Likewise.
+       * g++.dg/tm/pr46567.C: Likewise.
+       * g++.dg/tm/pr47340.C: Likewise.
+       * g++.dg/torture/pr46364.C: Likewise.
+       * g++.dg/torture/pr49394.C: Likewise.
+       * g++.dg/torture/pr52918-1.C: Likewise.
+       * g++.dg/torture/pr57190.C: Likewise.
+       * g++.dg/torture/stackalign/eh-alloca-1.C: Likewise.
+       * g++.dg/torture/stackalign/eh-fastcall-1.C: Likewise.
+       * g++.dg/torture/stackalign/eh-global-1.C: Likewise.
+       * g++.dg/torture/stackalign/eh-inline-1.C: Likewise.
+       * g++.dg/torture/stackalign/eh-inline-2.C: Likewise.
+       * g++.dg/torture/stackalign/eh-thiscall-1.C: Likewise.
+       * g++.dg/torture/stackalign/eh-vararg-1.C: Likewise.
+       * g++.dg/torture/stackalign/eh-vararg-2.C: Likewise.
+       * g++.dg/tree-ssa/pr45605.C: Likewise.
+       * g++.dg/warn/Wreturn-type-3.C: Likewise.
+       * g++.old-deja/g++.eh/badalloc1.C: Likewise.
+       * g++.old-deja/g++.eh/cleanup2.C: Likewise.
+       * g++.old-deja/g++.eh/spec1.C: Likewise.
+       * g++.old-deja/g++.eh/spec2.C: Likewise.
+       * g++.old-deja/g++.eh/spec3.C: Likewise.
+       * g++.old-deja/g++.eh/spec4.C: Likewise.
+       * g++.old-deja/g++.eh/spec6.C: Likewise.
+       * g++.old-deja/g++.eh/throw1.C: Likewise.
+       * g++.old-deja/g++.eh/throw2.C: Likewise.
+       * g++.old-deja/g++.eh/tmpl1.C: Likewise.
+       * g++.old-deja/g++.eh/tmpl3.C: Likewise.
+       * g++.old-deja/g++.mike/eh15.C: Likewise.
+       * g++.old-deja/g++.mike/eh25.C: Likewise.
+       * g++.old-deja/g++.mike/eh33.C: Likewise.
+       * g++.old-deja/g++.mike/eh34.C: Likewise.
+       * g++.old-deja/g++.mike/eh50.C: Likewise.
+       * g++.old-deja/g++.mike/eh51.C: Likewise.
+       * g++.old-deja/g++.mike/eh55.C: Likewise.
+       * g++.old-deja/g++.mike/p10416.C: Likewise.
+       * g++.old-deja/g++.other/crash28.C: Likewise.
+       * g++.old-deja/g++.other/crash30.C: Likewise.
+       * g++.old-deja/g++.other/new7.C: Likewise.
+       * g++.old-deja/g++.pt/ehspec1.C: Likewise.
+       * g++.old-deja/g++.robertl/eb123.C: Likewise.
+
 2016-12-08  Naveen H.S  <Naveen.Hurugalawadi@cavium.com>
 
-       * gcc.target/aarch64/pr78382.c : New Testcase.
+       * gcc.target/aarch64/pr78382.c: New testcase.
 
 2016-12-08  Andrew Pinski  <apinski@cavium.com>
 
-       * gcc.target/aarch64/pr71112.c : New Testcase.
+       * gcc.target/aarch64/pr71112.c: New testcase.
 
 2016-12-07  Martin Sebor  <msebor@redhat.com>
 
        PR middle-end/77784
        PR middle-end/78149
        PR middle-end/78138
-
        * c-c++-common/Wsizeof-pointer-memaccess2.c: Adjust expected diagnostic.
        * g++.dg/ext/builtin-object-size3.C (bar): Same.
        * g++.dg/ext/strncpy-chk1.C: Same.
 
 2016-12-07  Naveen H.S  <Naveen.Hurugalawadi@cavium.com>
 
-       * gcc.target/aarch64/pr71727.c : New Testcase.
+       * gcc.target/aarch64/pr71727.c: New testcase.
 
 2016-12-06  Tom de Vries  <tom@codesourcery.com>
 
 
 2016-11-23  Naveen H.S  <Naveen.Hurugalawadi@caviumnetworks.com>
 
-       * gcc.target/aarch64/ldp_stp_1.c : Add -mcpu=generic.
-       * gcc.target/aarch64/store-pair-1.c : Likewise.
+       * gcc.target/aarch64/ldp_stp_1.c: Add -mcpu=generic.
+       * gcc.target/aarch64/store-pair-1.c: Likewise.
 
 2016-11-23  Naveen H.S  <Naveen.Hurugalawadi@caviumnetworks.com>
 
-       * gcc.target/aarch64/fmaxmin.c : Add -fno-vect-cost-model.
-       * gcc.target/aarch64/fmul_fcvt_2.c : Likewise.
-       * gcc.target/aarch64/vect-abs-compile.c : Likewise.
-       * gcc.target/aarch64/vect-clz.c : Likewise.
-       * gcc.target/aarch64/vect-fcm-eq-d.c : Likewise.
-       * gcc.target/aarch64/vect-fcm-ge-d.c : Likewise.
-       * gcc.target/aarch64/vect-fcm-gt-d.c : Likewise.
-       * gcc.target/aarch64/vect-fmovd-zero.c : Likewise.
-       * gcc.target/aarch64/vect-fmovd.c : Likewise.
-       * gcc.target/aarch64/vect-fmovf-zero.c : Likewise.
-       * gcc.target/aarch64/vect-fmovf.c : Likewise.
-       * gcc.target/aarch64/vect_ctz_1.c : Likewise.
+       * gcc.target/aarch64/fmaxmin.c: Add -fno-vect-cost-model.
+       * gcc.target/aarch64/fmul_fcvt_2.c: Likewise.
+       * gcc.target/aarch64/vect-abs-compile.c: Likewise.
+       * gcc.target/aarch64/vect-clz.c: Likewise.
+       * gcc.target/aarch64/vect-fcm-eq-d.c: Likewise.
+       * gcc.target/aarch64/vect-fcm-ge-d.c: Likewise.
+       * gcc.target/aarch64/vect-fcm-gt-d.c: Likewise.
+       * gcc.target/aarch64/vect-fmovd-zero.c: Likewise.
+       * gcc.target/aarch64/vect-fmovd.c: Likewise.
+       * gcc.target/aarch64/vect-fmovf-zero.c: Likewise.
+       * gcc.target/aarch64/vect-fmovf.c: Likewise.
+       * gcc.target/aarch64/vect_ctz_1.c: Likewise.
 
 2016-11-23  Peter Bergner  <bergner@vnet.ibm.com>
 
 2016-07-28  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/71883
-       * gfortran.dg/pr71883.f90 : New test.
+       * gfortran.dg/pr71883.f90: New test.
 
 2016-07-28  Yuri Rumyantsev  <ysrumyan@gmail.com>
 
 2016-02-20  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/69423
-       * gfortran.dg/deferred_character_15.f90 : New test.
+       * gfortran.dg/deferred_character_15.f90: New test.
 
 2016-02-20  Dominique d'Humieres  <dominiq@lps.ens.fr>
 
index 9ad186010becc83e34a3fa23bf9bba7e1a9d5f55..e88a62d223a7ca9af698ca59dbe71ae7c45eb49c 100644 (file)
@@ -5,6 +5,12 @@ struct Foo
 
 struct Bar
 {
-  ~Bar () throw(int);
+  ~Bar ()
+#if __cplusplus < 201103L
+  throw(int)
+#else
+  noexcept(false)
+#endif
+  ;
   Foo f;
 };
index ca1cf389caf75c90ca3a7c4e14717d6bbd1f1729..5478bb79c2d5cd007123dc46fdd1cb096edb35b4 100644 (file)
@@ -7,7 +7,12 @@ Foo::~Foo()
   was_f_in_Bar_destroyed=true;
 }
 
-Bar::~Bar() throw(int)
+Bar::~Bar()
+#if __cplusplus < 201103L
+throw(int)
+#else
+noexcept(false)
+#endif
 {
   throw 1;
 }
index 1212871708947472ccc217a0643a42871617e0f7..23ac80b87fc5f25c1ee6a1506a9e9eac6aa561b4 100644 (file)
@@ -4,7 +4,11 @@
 extern "C" void exit (int);
 extern "C" void abort (void);
 
-extern void * operator new[] (std::size_t s) throw (std::bad_alloc);
+extern void * operator new[] (std::size_t s)
+#if __cplusplus < 201103L
+throw (std::bad_alloc)
+#endif
+;
 extern void operator delete[] (void *p) throw ();
 
 struct A
index fbe0e214591d91b0134b9ed3cf0a93fb0db33633..1dd373dd382c2e612fc55041de5996b2c760692a 100644 (file)
@@ -4,7 +4,10 @@
 extern int ret;
 
 void *ptr;
-void * operator new[] (std::size_t s) throw (std::bad_alloc)
+void * operator new[] (std::size_t s)
+#if __cplusplus < 201103L
+throw (std::bad_alloc)
+#endif
 {
   ptr = operator new (s);
   return ptr;
index b8e5fbeaa1e5c2a41226eb32354b107c1342a2a1..4c2aefd7c0eea7b5c986914551355e4149009a29 100644 (file)
@@ -1,6 +1,10 @@
 #include "spec3.h"
 
-extern void func () throw (B,A);
+extern void func ()
+#if __cplusplus < 201103L
+throw (B,A)
+#endif
+;
 
 void spec3_x (void)
 {
index fef6b368c865af25bc6baecb20078d57871f0ef9..78b0914cdc5c8ab44359f7bdca3d1dd8c963721f 100644 (file)
@@ -2,7 +2,10 @@
 
 A::A() {}
 
-void func() throw (B,A)
+void func()
+#if __cplusplus < 201103L
+throw (B,A)
+#endif
 {
   throw A();
 }
index 93999a11d49e5a49a265bf2a065ca4e0650ed5f3..c807b4753b5061a98ce29d6337d9830986b78819 100644 (file)
@@ -11,5 +11,9 @@ struct C
 {
   typedef B<T> D;
   typedef typename D::E E;
-  void f() throw(E);
+  void f()
+#if __cplusplus < 201103L
+  throw(E)
+#endif
+  ;
 };
index 19425375c92f2cb6115d97eae0338fecda2a0e84..39559d917d118ea3efefc2639dba3509f9ed5dbe 100644 (file)
@@ -1,6 +1,9 @@
 #include "template1.h"
 
-template<class T> void C<T>::f (void) throw (E)
+template<class T> void C<T>::f (void)
+#if __cplusplus < 201103L
+throw (E)
+#endif
 {
   throw E();
 }
index 61361a68d9f643034ad562faa47f75f368710c19..e8f87f1bc42980ae76790886da754dffd8739b9a 100644 (file)
@@ -1,3 +1,5 @@
+// { dg-options "-std=c++98" }
+
 #include <exception>
 
 struct One { };
index 0c42c4579534a67142c804beb174c4f41d1843fd..182b956c5f815a6cee215132e72faa5ce4379727 100644 (file)
@@ -1,3 +1,5 @@
+// { dg-options "-std=c++98" }
+
 struct One { };
 struct Two { };
 
index 771ce0ef9d30d6536342f54b9159ad2dab39b7b4..d71e55f8c50b9eb2eef0d213592f81cc06de38ef 100644 (file)
@@ -103,13 +103,13 @@ auto fnlate2 () -> auto *;                        // { dg-error "invalid use of|expected" "" { target
 
 void
 badthrow () throw (auto)                       // { dg-error "invalid use of" }
-{
-}
+{                                              // { dg-error "dynamic exception specification" "" { target c++1z } .-1 }
+}                                              // { dg-warning "deprecated" "" { target { ! c++1z } } .-2 }
 
 void
 badthrow2 () throw (auto &)                    // { dg-error "invalid use of|expected" }
-{
-}
+{                                              // { dg-error "dynamic exception specification" "" { target c++1z } .-1 }
+}                                              // { dg-warning "deprecated" "" { target { ! c++1z } } .-2 }
 
 template <auto V = 4> struct G {};             // { dg-error "auto" "" { target { ! c++1z } } }
 
index 9e6cbc37d8972d36ac08b29a6ffddb7cc121a7e8..4d418873f316c77b7df639d6901125799ea1f822 100644 (file)
@@ -10,22 +10,22 @@ A a;
 
 struct B
 {
-  B() throw (int) = default; // { dg-message "exception-specification" }
-};
-
-B b;                           // { dg-error "deleted" }
+  B() throw (int) = default; // { dg-message "exception-specification" "" { target { ! c++1z } } }
+};                             // { dg-error "dynamic exception specification" "" { target c++1z } .-1 }
+                               // { dg-warning "deprecated" "" { target { ! c++1z } } .-2 }
+B b;                           // { dg-error "deleted" "" { target { ! c++1z } } }
 
 struct C
 {
-  C() throw (int) { }
-};
+  C() throw (int) { }          // { dg-error "dynamic exception specification" "" { target c++1z } }
+};                             // { dg-warning "deprecated" "" { target { ! c++1z } } .-1 }
 
 C c;
 
 struct D: C
 {
-  D() throw (int) = default;
-};
+  D() throw (int) = default;   // { dg-error "dynamic exception specification" "" { target c++1z } }
+};                             // { dg-warning "deprecated" "" { target { ! c++1z } } .-1 }
 
 D d;
 
index e46c46d927727752270af621fb855842ff5f54ab..99fb8e0b709d0ab32ef3d8ca3d700864d96603e4 100644 (file)
@@ -39,7 +39,11 @@ namespace std
 struct bad_alloc { };
 }
 
-void* operator new(std::size_t) throw (std::bad_alloc);
+void* operator new(std::size_t)
+#if __cplusplus <= 201402L
+throw (std::bad_alloc)                 // { dg-warning "deprecated" "" { target { ! c++1z } } }
+#endif
+;
 
 namespace std
 {
index 1ef510a484a90e333835e86cf6ea1317c896f823..330cf95c2d0a6f753c62959d2b436154ac69efad 100644 (file)
@@ -1,7 +1,7 @@
 // PR c++/47263
 // PR c++/49260
 // { dg-options "-fno-asynchronous-unwind-tables -fno-dwarf2-cfi-asm" }
-// { dg-do run { target c++11 } }
+// { dg-do run { target { c++11 && { ! c++1z } } } }
 
 #include <exception>
 
@@ -10,7 +10,7 @@ int main( void )
   std::set_unexpected( []{ throw 0; } );
   try
     {
-      []() throw( int ) { throw nullptr; }();
+      []() throw( int ) { throw nullptr; }();  // { dg-warning "deprecated" }
     }
   catch( int )
     { }
index 14bb2829fb573c71086286098f2bd8c6794fb125..77195415fba6546565397c2d91d50aafd074410d 100644 (file)
@@ -10,8 +10,10 @@ void f();
 
 SA(!noexcept(f()));
 
-void g() throw (int);          // { dg-message "previous declaration" }
-void g() noexcept(false);      // { dg-error "different exception" }
+void g() throw (int);          // { dg-message "previous declaration" "" { target { ! c++1z } } }
+                               // { dg-error "dynamic exception specification" "" { target c++1z } .-1 }
+                               // { dg-warning "deprecated" "" { target { ! c++1z } } .-2 }
+void g() noexcept(false);      // { dg-error "different exception" "" { target { ! c++1z } } }
 void g();
 
 void h() throw();
index 90c50a9c3b3a20213c9e3ccaf47dedec15a1b7e2..de16e016ff412b885dcd918379860dc3b548f4a5 100644 (file)
@@ -1,6 +1,6 @@
 // Test that checking of a nothrow specification uses the one on the
-// definition.
-// { dg-do run { target c++11 } }
+// definition.  In C++17 throw() is equivalent to noexcept(true).
+// { dg-do run { target { c++11 && c++14_down } } }
 
 #include <exception>
 #include <cstdlib>
index 96af0feb8ebf450139d00704ea4b86f2242a6c3c..5a554b7379aae515406ec03eba27622e063a0d77 100644 (file)
@@ -7,8 +7,8 @@ struct A
   virtual void g() throw();
   virtual void h() noexcept;
   virtual void i() noexcept(false);
-  virtual void j() throw(int);
-};
+  virtual void j() throw(int); // { dg-error "dynamic exception specification" "" { target c++1z } }
+};                             // { dg-warning "deprecated" "" { target { ! c++1z } } .-1 }
 
 struct B: A
 {
@@ -34,16 +34,23 @@ struct D: A
   void g() noexcept(false);    // { dg-error "looser" }
   void h() noexcept(false);    // { dg-error "looser" }
   void i() noexcept(false);
-  void j() noexcept(false);    // { dg-error "looser" }
+  void j() noexcept(false);    // { dg-error "looser" "" { target { ! c++1z } } }
 };
 
 struct E: A
 {
-  void f() throw(int);
+  void f() throw(int);         // { dg-error "dynamic exception specification" "" { target c++1z } }
+                               // { dg-warning "deprecated" "" { target { ! c++1z } } .-1 }
   void g() throw(int);         // { dg-error "looser" }
+                               // { dg-error "dynamic exception specification" "" { target c++1z } .-1 }
+                               // { dg-warning "deprecated" "" { target { ! c++1z } } .-2 }
   void h() throw(int);         // { dg-error "looser" }
-  void i() throw(int);
-  void j() throw(int);
+                               // { dg-error "dynamic exception specification" "" { target c++1z } .-1 }
+                               // { dg-warning "deprecated" "" { target { ! c++1z } } .-2 }
+  void i() throw(int);         // { dg-error "dynamic exception specification" "" { target c++1z } }
+                               // { dg-warning "deprecated" "" { target { ! c++1z } } .-1 }
+  void j() throw(int);         // { dg-error "dynamic exception specification" "" { target c++1z } }
+                               // { dg-warning "deprecated" "" { target { ! c++1z } } .-1 }
 };
 
 struct F: A
@@ -52,5 +59,5 @@ struct F: A
   void g();                    // { dg-error "looser" }
   void h();                    // { dg-error "looser" }
   void i();
-  void j();                    // { dg-error "looser" }
+  void j();                    // { dg-error "looser" "" { target { ! c++1z } } }
 };
index d303a8c60f20a2789996b2f0ae3f8c1858677619..8ec4d7df4422eb734eee22c19a7c1e2b42fa4f16 100644 (file)
@@ -22,7 +22,11 @@ struct C
 
 struct D
 {
-  D () throw (int);
+  D ()
+#if __cplusplus <= 201402L
+  throw (int)                  // { dg-warning "deprecated" "" { target { ! c++1z } } }
+#endif
+  ;
 };
 
 C <D, B <D>> c;
index fc81e9d5d4aedd38f9ad9db5cea3c1a462e8e134..368a67b57769ec17120361e3283854e6b1403bfe 100644 (file)
@@ -9,9 +9,9 @@ template<int M, int N> struct pair
 
 template<int... M> struct S
 {
-  template<int... N> static int foo() throw (pair <M, N>...) // { dg-error "mismatched" }
-  {
-    return 1;
+  template<int... N> static int foo() throw (pair <M, N>...) // { dg-error "mismatched" "" { target { ! c++1z } } }
+  {                                                         // { dg-error "dynamic exception specification" "" { target c++1z } .-1 }
+    return 1;                                               // { dg-warning "deprecated" "" { target { ! c++1z } } .-2 }
   }
 };
 
@@ -22,5 +22,5 @@ int bar ()
 
 int wibble()
 {
-  return S<0, 1, 2>::foo<0, 1> (); // { dg-error "no matching" }
+  return S<0, 1, 2>::foo<0, 1> (); // { dg-error "no matching" "" { target { ! c++1z } } }
 }
index 533ed46f883cbcec79cbb92271dc2883751fc216..be998d2420ca7d707bebfd41a88bf43fa462c8e2 100644 (file)
@@ -3,7 +3,11 @@ struct A {};
 struct B {};
 struct C {};
 
-template<typename... Exceptions> void f(int idx) throw(Exceptions...) {
+template<typename... Exceptions> void f(int idx)
+#if __cplusplus <= 201402L
+throw(Exceptions...)           // { dg-warning "deprecated" "" { target { ! c++1z } } }
+#endif
+{
   if (idx == 0) throw A();
   else if (idx == 1) throw B();
   else if (idx == 2) throw C();
index 62e1322e35ab6fa5350b2a4b10eecd488c9a89db..dfe64e550e0dcf764d961169f536e9f0ccdd516c 100644 (file)
@@ -1,7 +1,7 @@
 // Testcase from P0012r1
 // { dg-options -std=c++1z }
 
-void (*p)() throw(int);
+void (*p)() throw(int);               // { dg-error "dynamic exception specification" }
 void (**pp)() noexcept = &p;   // { dg-error "" } cannot convert to pointer to noexcept function
 
 struct S { typedef void (*p)(); operator p(); };
index 0c31f80e5e7ab6d9d35e0e66dd1000f941c73f78..0f84901fb6e0528d92ff8ed8e7683f7ed31afe4d 100644 (file)
@@ -87,8 +87,16 @@ struct Y
 
 struct Z;
 
-X <V> baz1 (const S &) throw (E);
-X <Z> baz2 (const X <Z> &) throw (E);
+X <V> baz1 (const S &)
+#if __cplusplus <= 201402L
+throw (E)                      // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+;
+X <Z> baz2 (const X <Z> &)
+#if __cplusplus <= 201402L
+throw (E)                      // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+;
 
 template <typename T> X<T>::X ()
 {
@@ -112,7 +120,10 @@ template <typename T> T *X<T>::operator -> () const
   return &y;
 }
 
-X <V> baz1 (const S &) throw (E)
+X <V> baz1 (const S &)
+#if __cplusplus <= 201402L
+throw (E)                      // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
 {
   return X<V> ();
 }
@@ -125,7 +136,10 @@ E::~E ()
 {
 }
 
-X <Z> baz2 (const X <Z> &) throw (E)
+X <Z> baz2 (const X <Z> &)
+#if __cplusplus <= 201402L
+throw (E)                      // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
 {
   throw E ();
 }
index 4d312e478d44294eef6a59d15b7a968f1ca38fff..17e9149b97555a228bfc22f17c48f4f64160109f 100644 (file)
@@ -12,7 +12,13 @@ void my_terminate ()
 
 struct A {
   A(int) { }
-  ~A() throw(int) { throw 1; };
+  ~A()
+#if __cplusplus <= 201402L
+  throw(int)                   // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#else
+  noexcept(false)
+#endif
+  { throw 1; };
 };
 struct B {
   B(A) { }
index 64ccb50cbf7ef3b2fb6ea97e32dd820825dbdd47..46b5307e0b46c5b0eeedc49d09271bc410bb3ab4 100644 (file)
@@ -12,7 +12,13 @@ void operator delete (void *) throw ()
 }
 
 struct Foo {
-  ~Foo() throw(int) {throw 1;}
+  ~Foo()
+#if __cplusplus <= 201402L
+  throw(int)                   // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#else
+  noexcept(false)
+#endif
+  {throw 1;}
 };
 
 struct Baz {
@@ -20,7 +26,13 @@ struct Baz {
   {
     deleted = 2;
   }
-  virtual ~Baz() throw(int) {throw 1;}
+  virtual ~Baz()
+#if __cplusplus <= 201402L
+  throw(int)                   // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#else
+  noexcept(false)
+#endif
+  {throw 1;}
 };
 
 int non_virt ()
index b2fb4121d09ed123e7108a2ce0fbfab0a15ce6b7..852d324cd9fd69c9db97ac6ef6f705f27a533ae4 100644 (file)
@@ -15,7 +15,13 @@ class A<int, int>
 public:
   A(int) { ++count; if (b) throw 1; }
   A(const A&) { ++count; if (b) throw 1; }
-  ~A() throw(int) { --count; if (b) throw 1; }
+  ~A()
+#if __cplusplus <= 201402L
+  throw(int)                   // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#else
+  noexcept(false)
+#endif
+  { --count; if (b) throw 1; }
 };
 
 typedef A<int, int> B;
@@ -26,7 +32,13 @@ class A<void *, void *>
 public:
   A() { if (b) throw 1; }
   A(const B&) { if (b) throw 1; }
-  ~A() throw(int) { if (b) throw 1; }
+  ~A()
+#if __cplusplus <= 201402L
+  throw(int)                   // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#else
+  noexcept(false)
+#endif
+  { if (b) throw 1; }
 };
 
 typedef A<void *, void *> C;
index b8f47df4a8e9e51e26da9d08f1729643cd003786..9e92dafb08f96957dae33588cf5a1c6cb66da8f0 100644 (file)
@@ -1,5 +1,6 @@
 // HP-UX libunwind.so doesn't provide _UA_END_OF_STACK.
 // { dg-do run { xfail "ia64-hp-hpux11.*" } }
+// { dg-require-effective-target c++14_down }
 
 // Test that forced unwinding calls std::unexpected going 
 // through a nothrow function.
index 17fd94a40641884fed83982425868d17b56e4a9f..96408d2592ffb17fde02772873e889b55fc7ceb9 100644 (file)
@@ -38,7 +38,10 @@ force_unwind ()
 }
 
 static void
-doit () throw(int)
+doit ()
+#if __cplusplus <= 201402L
+throw(int)                     // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
 {
   force_unwind ();
 }
index 9cf87976e3bd540c654b340a14222cf14e1d187b..127883ae197bb0533e75d30c39480192085bc26f 100644 (file)
@@ -8,18 +8,36 @@ template <class _Tp> class AutoPtr
 public:
   explicit AutoPtr(_Tp* __p = 0)  : _M_ptr(__p) {}
 
-  ~AutoPtr() throw(int) { delete _M_ptr; }
+  ~AutoPtr()
+#if __cplusplus <= 201402L
+  throw(int)                   // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#else
+  noexcept(false)
+#endif
+  { delete _M_ptr; }
 };
 
 struct A
 {
   A() { }
-  ~A() throw(int) { throw 1; }
+  ~A()
+#if __cplusplus <= 201402L
+  throw(int)                   // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#else
+  noexcept(false)
+#endif
+  { throw 1; }
 };
 
 struct B
 {
-  virtual ~B() throw(int);
+  virtual ~B()
+#if __cplusplus <= 201402L
+  throw(int)                   // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#else
+  noexcept(false)
+#endif
+  ;
 };
 
 B* f (const A &s) { throw 1; }
index 294a12941f30b0d6189fb955376e22f25f33137f..be3adbbd97dd8162e304349fdf4f893f4b661f3c 100644 (file)
@@ -2,7 +2,11 @@
 class E { };
 
 class T {
-  int foo(bool a) throw (E) __attribute__((regparm(1)));
+  int foo(bool a)
+#if __cplusplus <= 201402L
+  throw (E)                    // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+  __attribute__((regparm(1)));
   int bar(bool b) __attribute__((regparm(1)));
 };
 
index 07894a2995381354544ec1c8d96a5c77d0120f07..61c65729c9d2dbd823c39b97a92090821034146b 100644 (file)
@@ -15,7 +15,10 @@ void f1()
   try {} catch (...) {}                // { dg-error "" }
 }
 
-void f2() throw(int)
+void f2()
+#if __cplusplus <= 201402L
+throw(int)                     // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
 {
   bar();
 }
index 15f666a2cfe27201c85cbdc0bec206900ccf4d03..b96f65a92bb909fb13133b0e09a17daa6ca5203d 100644 (file)
@@ -13,14 +13,14 @@ struct D : private B
   friend class E;
   
   static B *baz (D *);
-  virtual void V () throw (B);  // { dg-error "overriding" "" }
-};
-
+  virtual void V () throw (B);  // { dg-error "overriding" "" { target { ! c++1z } } }
+};                             // { dg-error "dynamic exception specification" "" { target c++1z } .-1 }
+                               // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } .-2 }
 struct E : public D
 {
-  virtual void V () throw (D); // { dg-error "looser throw" "" }
-};
-
+  virtual void V () throw (D); // { dg-error "looser throw" "" { target { ! c++1z } } }
+};                            // { dg-error "dynamic exception specification" "" { target c++1z } .-1 }
+                              // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } .-2 }
 B* foo (D *);
 
 B *D::baz (D *p)
index 8107f019eb7ec11b87b9a0ba95756e9a4eb9441e..0f512640fd3e31287b29cad830f05ab833da1c6f 100644 (file)
@@ -3,8 +3,15 @@
 struct S { void f (void); };
 
 typedef void f1 (void) throw (int); // { dg-error "exception" "" { target c++14_down } }
+                                   // { dg-error "dynamic exception specification" "" { target c++1z } .-1 }
+                                   // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } .-2 }
 typedef void (*f2) (void) throw (int); // { dg-error "exception" "" { target c++14_down } }
+                                      // { dg-error "dynamic exception specification" "" { target c++1z } .-1 }
+                                      // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } .-2 }
 typedef void (S::*f3) (void) throw (int); // { dg-error "exception" "" { target c++14_down } }
-
-void (*f4) (void) throw (int);
-void (S::*f5) (void) throw (int);
+                                         // { dg-error "dynamic exception specification" "" { target c++1z } .-1 }
+                                         // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } .-2 }
+void (*f4) (void) throw (int); // { dg-error "dynamic exception specification" "" { target c++1z } }
+                              // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } .-1 }
+void (S::*f5) (void) throw (int); // { dg-error "dynamic exception specification" "" { target c++1z } }
+                                 // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } .-1 }
index 20bcfc33ee84e004eb56ff2b13241809a121e387..49bbdc394276f9a6b4b82259a9dae5dc411ae274 100644 (file)
@@ -12,7 +12,10 @@ struct A : virtual public Base
 
 struct B {};
 
-void func() throw (B,A)
+void func()
+#if __cplusplus <= 201402L
+throw (B,A)                    // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
 {
   throw A();
 }
index be8f327c0b7d5dc2dfcad73002fe84552687d64a..5735e8d2760101db98e845f0c709eee617313e0b 100644 (file)
@@ -8,12 +8,20 @@ struct A;
 
 struct B
 {
-  void f () throw (A);
+  void f ()
+#if __cplusplus <= 201402L
+  throw (A)
+#endif
+  ;
 };
 
 struct A {};
 
-void B::f () throw (A) {}
+void B::f ()
+#if __cplusplus <= 201402L
+throw (A)
+#endif
+{}
 
 int main ()
 {
index d6d817628916570a02532791ed8885d3c18e5e14..d08bd865a9ba5e003ed05f3b36287564198da538 100644 (file)
@@ -1,6 +1,7 @@
 // Test that we don't allow incomplete types in an exception-specification
 // for a definition, or at a call site.
 
+// { dg-do compile { target c++14_down } }
 // { dg-options "-fpermissive -w" }
 
 struct A;                      // { dg-message "" }
index 08586a2af75af56692a8b25da136ab35109357e6..37efedcc34cfe2c2403fb89a33b50c9018a35258 100644 (file)
@@ -19,7 +19,11 @@ struct D : public B {
         } o; 
          
         struct Raiser { 
-            Raiser()  throw( int ) {throw 1;}; 
+            Raiser()
+#if __cplusplus <= 201402L
+           throw( int )                        // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+           {throw 1;}; 
         } raiser; 
       }; 
 }; 
index c76032e38351d297298f1c6c73c5b22ea01746ad..8967e8c4edd95aa3f4c61134145f7bfde1654e10 100644 (file)
@@ -1,8 +1,10 @@
 // PR c++/24817
+// { dg-do compile { target c++14_down } }
 
 struct exception {};
 
 template <typename T> void foo() throw(exception); // { dg-message "declaration" }
+                                                  // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } .-1 }
 template <typename T> void foo(); // { dg-error "exception" }
 
 struct bar
index 9e00d1c7535f7f31ab70055520132dc6cdfae3c0..cceb98f5585009fd41df3235176d34e29c99dbb2 100644 (file)
@@ -4,7 +4,10 @@
 typedef int IntArray[10];
 IntArray i;
 
-void test_array() throw (IntArray)
+void test_array()
+#if __cplusplus <= 201402L
+throw (IntArray)       // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
 {
   throw i;
 }
index 2cbf9c698b081bb7ae75eeeca52abccea6495f14..fb471b2ac8375ff3dd5664ab87f3ead5048b6955 100644 (file)
@@ -17,7 +17,11 @@ struct C
 {
   typedef B<T> D;
   typedef typename D::E E;
-  void f() throw(E) { throw E(); }
+  void f()
+#if __cplusplus <= 201402L
+  throw(E)                     // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+  { throw E(); }
 };
 
 int main()
index e5982ffacc5cced8a8228fd0b48d97238098202b..cd5585face8f05eaa3150e10c7ceea8c8dd22c10 100644 (file)
@@ -1,6 +1,6 @@
 // PR 3719
 // Test that an unexpected handler can rethrow to categorize.
-// { dg-do run }
+// { dg-do run { target c++14_down } }
 
 #include <exception>
 
@@ -23,7 +23,7 @@ handle_unexpected ()
 }
 
 static void
-doit () throw (Two)
+doit () throw (Two)                    // { dg-warning "deprecated" "" { target { c++11 } } }
 {
   throw One ();
 }
index e6e9fc6eda9277b47ac2b6923b3ed5481e1c8456..d84a81ca4382a270486607887026df2c75e5c6d4 100644 (file)
@@ -15,6 +15,12 @@ struct B
 struct C
 : public A { };
 
+#if __cplusplus > 201402L
+#define THROW_INT
+#else
+#define THROW_INT throw(int)   // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+
 struct D
 {
   D& operator=(const D&) throw() { return *this; }
@@ -22,43 +28,43 @@ struct D
 
 struct E
 {
-  E& operator=(const E&) throw(int) { return *this; }
+  E& operator=(const E&) THROW_INT { return *this; }
 };
 
 struct E1
 {
-  E1& operator=(const E1&) throw(int) { throw int(); return *this; }
+  E1& operator=(const E1&) THROW_INT { throw int(); return *this; }
 };
 
 struct F
 {
-  F() throw(int) { }
+  F() THROW_INT { }
 };
 
 struct G
 {
-  G() throw(int) { throw int(); }
+  G() THROW_INT { throw int(); }
 };
 
 struct H
 {
-  H& operator=(H&) throw(int) { return *this; }
+  H& operator=(H&) THROW_INT { return *this; }
 };
 
 struct H1
 {
-  H1& operator=(H1&) throw(int) { throw int(); return *this; }
+  H1& operator=(H1&) THROW_INT { throw int(); return *this; }
 };
 
 struct I
 {
-  I& operator=(I&) throw(int) { return *this; }
+  I& operator=(I&) THROW_INT { return *this; }
   I& operator=(const I&) throw() { return *this; }
 };
 
 struct I1
 {
-  I1& operator=(I1&) throw(int) { throw int(); return *this; }
+  I1& operator=(I1&) THROW_INT { throw int(); return *this; }
   I1& operator=(const I1&) throw() { return *this; }
 };
 
index 1f1227c3011733e9dbedcf6d5fcf6eb47e9f9bc7..d69b312a3a814512f7fb34c21ecf0706d7424bbc 100644 (file)
@@ -12,6 +12,12 @@ struct B
   A a;
 };
 
+#if __cplusplus > 201402L
+#define THROW_INT
+#else
+#define THROW_INT throw(int)   // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+
 struct C 
 : public A { };
 
@@ -22,12 +28,12 @@ struct D
 
 struct E
 {
-  E() throw(int) { }
+  E() THROW_INT { }
 };
 
 struct E1
 {
-  E1() throw(int) { throw int(); }
+  E1() THROW_INT { throw int(); }
 };
 
 struct F
@@ -37,7 +43,7 @@ struct F
 
 struct G
 {
-  G(const G&) throw(int) { throw int(); }
+  G(const G&) THROW_INT { throw int(); }
 };
 
 template<typename T>
index 87785ae5abad3de87fc801510f323148040b6da8..0e5a9de46f9cbb6b235a61b64ddc68e80fc804c6 100644 (file)
@@ -15,6 +15,12 @@ struct B
 struct C
 : public A { };
 
+#if __cplusplus > 201402L
+#define THROW_INT
+#else
+#define THROW_INT throw(int)   // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+
 struct D
 {
   D(const D&) throw() { }
@@ -22,12 +28,12 @@ struct D
 
 struct E
 {
-  E(const E&) throw(int) { }
+  E(const E&) THROW_INT { }
 };
 
 struct E1
 {
-  E1(const E1&) throw(int) { throw int(); }
+  E1(const E1&) THROW_INT { throw int(); }
 };
 
 struct F
@@ -37,28 +43,28 @@ struct F
 
 struct G
 {
-  G() throw(int) { throw int(); }
+  G() THROW_INT { throw int(); }
 };
 
 struct H
 {
-  H(H&) throw(int) { }
+  H(H&) THROW_INT { }
 };
 
 struct H1
 {
-  H1(H1&) throw(int) { throw int(); }
+  H1(H1&) THROW_INT { throw int(); }
 };
 
 struct I
 {
-  I(I&) throw(int) { }
+  I(I&) THROW_INT { }
   I(const I&) throw() { }
 };
 
 struct I1
 {
-  I1(I1&) throw(int) { throw int(); }
+  I1(I1&) THROW_INT { throw int(); }
   I1(const I1&) throw() { }
 };
 
index b2eb203f396f9852af94ca34cf3ca7c6f03d65c1..f15c417c2f9bf5829db8e22ea8cb8cc5a00f8a49 100644 (file)
@@ -2,8 +2,21 @@
 // { dg-do run }
 #include <cassert>
 
-struct A { template <class T> A (T) throw (int); };
-struct B { B (B&) throw (); template <class T> B (T) throw (int); };
+struct A {
+  template <class T> A (T)
+#if __cplusplus <= 201402L
+  throw(int)                   // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+  ;
+};
+struct B {
+  B (B&) throw ();
+  template <class T> B (T)
+#if __cplusplus <= 201402L
+  throw(int)                   // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+  ;
+};
 
 int main ()
 {
index 69e9a6bacdf3b3352c2e7a53be5fcab30a70d9e6..4c63b963f7c1bc9ddc4e1e8ace48ee07f81b89d3 100644 (file)
@@ -4,7 +4,11 @@
 
 struct S {
     S (const S&) throw ();
-    S (...) throw (int);
+    S (...)
+#if __cplusplus <= 201402L
+    throw (int)                        // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+    ;
 };
 
 int main ()
index b94b338c3865e4ef57e5555208c0477b08a15a30..768c9af84c05d87862a3f4f6cd1960162d30ccb7 100644 (file)
@@ -4,7 +4,11 @@
 
 struct S {
     S (const S&) throw ();
-    S (int) throw (int);
+    S (int)
+#if __cplusplus <= 201402L
+    throw (int)                        // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+    ;
 };
 
 int main ()
index 6268ee292072305c9a9626512d0e7417e9668163..27f4c0ad63b41679c59600409041e816b4747744 100644 (file)
@@ -3,7 +3,11 @@
 
 struct S {
     S (S&) throw ();
-    S (const S&, int) throw (int);
+    S (const S&, int)
+#if __cplusplus <= 201402L
+    throw (int)                        // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+    ;
 };
 
 int main ()
index 10891b6b59279b02c2ff413dbdbae3f8767819da..ac2dd8c13afc8cc4c52d147718a180f615acd495 100644 (file)
@@ -3,7 +3,11 @@
 
 struct S {
     S (const S&) throw ();
-    S (S&&) throw (int);
+    S (S&&)
+#if __cplusplus <= 201402L
+    throw (int)                        // { dg-warning "deprecated" "" { target { ! c++1z } } }
+#endif
+    ;
 };
 
 int main ()
index db3e95a07bcf16be99bad53c35fe4a5e65be2b3d..bbc0f1046b5971a17c32fd2f1889edeb078acb7c 100644 (file)
@@ -7,7 +7,10 @@
 
 struct foo
 {
-  foo () throw (int)
+  foo ()
+#if __cplusplus <= 201402L
+    throw (int)                        // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
     {                  /* count (-) */
       throw (1);
     }
index 2ced6e3fe020107f5a111b9c5a792fa083b816e0..832942e74af029a89c688198f750bec576adc495 100644 (file)
@@ -6,6 +6,6 @@
 struct A
 {
   void* operator new(__SIZE_TYPE__) throw(X);  // { dg-error "expected|type" }
-};
-
+};                                            // { dg-error "dynamic exception specification" "" { target c++1z } .-1 }
+                                              // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } .-2 }
 A* p = new A;
index 2d447f8f28a43786db036b575c8e5ea2c5771239..754ac92ff4a816359d1bd41345b6ac6e5f61688d 100644 (file)
@@ -5,7 +5,11 @@ class C
 {
 public:
   void* operator new(std::size_t = 32) throw (std::bad_alloc); // { dg-error "first parameter" }
+                                                              // { dg-error "dynamic exception specification" "" { target c++1z } .-1 }
+                                                              // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } .-2 }
   void* operator new[](std::size_t = 32) throw (std::bad_alloc); // { dg-error "first parameter" }
+                                                                // { dg-error "dynamic exception specification" "" { target c++1z } .-1 }
+                                                                // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } .-2 }
   void* operator new(std::size_t = 32, const std::nothrow_t&) throw(); // { dg-error "first parameter" }
   void* operator new[](std::size_t = 32, const std::nothrow_t&) throw(); // { dg-error "first parameter" }
 };
index b5fcd0a6c4d2ee1323678ff540d695ce0c07a12f..00ef817ecc91f561195a66e9aa53c7f0eaa1a643 100644 (file)
@@ -11,8 +11,16 @@ namespace ns
 {
   class Test {
     public:
-      inline Test() throw( Exception );
-      inline Test(int n ) throw( Exception );
+      inline Test()
+#if __cplusplus <= 201402L
+      throw( Exception )                       // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+      ;
+      inline Test(int n )
+#if __cplusplus <= 201402L
+      throw( Exception )                       // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+      ;
     private:
       int i;
   };
@@ -20,11 +28,19 @@ namespace ns
 
 // This line used to fail because Exception wasn't looked up in the
 // right scope.
-ns::Test::Test() throw( Exception ) : i( 1 )
+ns::Test::Test()
+#if __cplusplus <= 201402L
+throw( Exception )                             // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+: i( 1 )
 {
 }
 
-ns::Test::Test( int n ) throw( Exception ) : i( n )
+ns::Test::Test( int n )
+#if __cplusplus <= 201402L
+throw( Exception )                             // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+: i( n )
 {
 }
 
index 9b2fc0cf16a8f3fd7025eaf413952b29d80d6c63..8fe2db0d3e302bb808bf1c5cfa37d96b6e47adac 100644 (file)
@@ -58,16 +58,34 @@ struct Egeneric {
 };
 
 struct infinint {
-    void detruit() throw(Egeneric);
-    template<class T> void infinint_from(T a) throw(Egeneric);
-    infinint(long a = 0) throw(Egeneric) {
+    void detruit()
+#if __cplusplus <= 201402L
+    throw(Egeneric)                    // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+    ;
+    template<class T> void infinint_from(T a)
+#if __cplusplus <= 201402L
+    throw(Egeneric)                    // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+    ;
+    infinint(long a = 0)
+#if __cplusplus <= 201402L
+    throw(Egeneric)                    // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+    {
        try {
            infinint_from(a);
        } catch(Egeneric& e) {
            e.stack("infinint::infinint", "long");
        }
     }
-    ~infinint() throw(Egeneric) {
+    ~infinint()
+#if __cplusplus <= 201402L
+    throw(Egeneric)                    // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#else
+    noexcept(false)
+#endif
+    {
        try {
            detruit();
        } catch(Egeneric& e) { }
index 37ea51ea845007226cd1ef73e104c78c4da481c5..1e645630ab8d9542c1f92d9613e8071f8d14747f 100644 (file)
@@ -1,5 +1,6 @@
 // Test for proper error message formatting; the throw() should go inside
 // the parens, as below.
 
-void (*g() throw())();         // { dg-message "g\\(\\) throw" "" }
+void (*g() throw())();         // { dg-message "g\\(\\) throw" "" { target { ! c++1z } } }
+                               // { dg-message "g\\(\\) noexcept" "" { target c++1z } .-1 }
 void (*g())();                 // { dg-error "" "" }
index 076e36002d9fb0603166f1ccae8aa3e2af3eaa37..111d3b3965fa4a514a95d887be7ab88d38ff7129 100644 (file)
@@ -5,6 +5,9 @@ class A {};
 class B {};
 class C : public A, public B {};
 class D : public C {};
-void f () throw (D)
+void f ()
+#if __cplusplus <= 201402L
+throw (D)                      // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
 {
 }
index 9559b4eccc11eb06958abad65e5f62712ce6e30f..3ed80a4672988f63ac72c6a58fd226fb61d595f6 100644 (file)
@@ -1,10 +1,10 @@
 // PR c++/23191
 // Origin: Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
-// { dg-do compile }
+// { dg-do compile { target c++14_down } }
 
 template<typename T> struct A
 {
     void foo() throw(typename T::X);  // { dg-error "not a class" }
-};
+};                                   // { dg-warning "deprecated" "" { target c++11 } .-1 }
 
 A<void> a;                            // { dg-message "required" }
index 8d3dc63b7308f5e4a389c5cb0bbc5d45e2f65251..d808c1430b18579582421b26fef36b195ca0f545 100644 (file)
@@ -1,9 +1,11 @@
 // PR c++/37719.C
+// { dg-do compile { target c++14_down } }
 
 template <typename T>
 class foo {
     void bar() throw(int); // { dg-message "throw \\(int\\)" }
-};
+};                        // { dg-warning "deprecated" "" { target c++11 } .-1 }
 
 template <>
 void foo<int>::bar() throw(float) {} // { dg-error "throw \\(float\\)" }
+                                    // { dg-warning "deprecated" "" { target c++11 } .-1 }
index 2f0ef93f2d46ed0449415e218758dbfb536f1147..448c92cd0a2d1dedb99e12ff551078adcb2ffb5f 100644 (file)
@@ -1667,8 +1667,16 @@ namespace std
   typedef void (*new_handler)();
   new_handler set_new_handler(new_handler) throw();
 }
-void* operator new(std::size_t) throw (std::bad_alloc);
-void* operator new[](std::size_t) throw (std::bad_alloc);
+void* operator new(std::size_t)
+#if __cplusplus <= 201402L
+throw (std::bad_alloc)                 // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+;
+void* operator new[](std::size_t)
+#if __cplusplus <= 201402L
+throw (std::bad_alloc)                 // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+;
 void operator delete(void*) throw();
 void operator delete[](void*) throw();
 void* operator new(std::size_t, const std::nothrow_t&) throw();
index ead3361fae218d0160840113ac7155f0c3375f04..e5075e2c251d07d27b1a797a6c917481a12cdec7 100644 (file)
@@ -1,7 +1,11 @@
 // { dg-do compile }
 // { dg-options "-fgnu-tm" }
 
-void* operator new(__SIZE_TYPE__) throw (int);
+void* operator new(__SIZE_TYPE__)
+#if __cplusplus <= 201402L
+throw (int)                    // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+;
 
 void *point;
 
index 8098991ace02a59a8d4a47ba03d3e0e8bdec3eaf..0160e9a24d5079c51884cf0028a454c21f342acd 100644 (file)
@@ -1,7 +1,11 @@
 // { dg-do compile }
 #include <string>
 
-void a() throw (int);
+void a()
+#if __cplusplus <= 201402L
+throw (int)                    // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+;
 void b(std::string const &);
 
 void c(std::string *e)
index e471885b5e6fb3b314c22bd4e3e85708a0532d41..cd8cac33c3b3ca1877bde68822b4deddd7bdcb74 100644 (file)
@@ -4,7 +4,10 @@
 struct Mutex
 {
   bool locked;
-  ~Mutex () throw(int)
+  ~Mutex ()
+#if __cplusplus <= 201402L
+  throw(int)                   // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
   {
     if (locked)
       throw 0;
index 9e7b21ba6a367f7b3e2a267f0c1aa2712710cccf..cb95048237b0e7b5e1947471e18c3208fe2dfab7 100644 (file)
@@ -21,9 +21,16 @@ public:
 class free_list   {
     typedef __mutex __mutex_type;
     __mutex_type&     _M_get_mutex();
-    void _M_get(size_t __sz) throw(bad_alloc);
+    void _M_get(size_t __sz)
+#if __cplusplus <= 201402L
+    throw(bad_alloc)                   // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+    ;
 };
-void  free_list::_M_get(size_t __sz) throw(bad_alloc)
+void  free_list::_M_get(size_t __sz)
+#if __cplusplus <= 201402L
+throw(bad_alloc)                       // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
 {
   __mutex_type& __bfl_mutex = _M_get_mutex();
   __bfl_mutex.unlock();
index 9fa11cd26ba80032d33a04274b6600c899a6df32..f3b7ecc1d990c8af877c77c4afeacdbc1ef024dc 100644 (file)
@@ -19,12 +19,24 @@ namespace std {
 class UIException {
 };
 class PasswordDialog {
-    void run() throw (UIException);
+    void run()
+#if __cplusplus <= 201402L
+    throw (UIException)                        // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+    ;
 };
 class MessageBox  {
 public:
-    MessageBox (std::string t) throw (UIException);
-    virtual int run() throw (UIException) ;
+    MessageBox (std::string t)
+#if __cplusplus <= 201402L
+    throw (UIException)                        // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+    ;
+    virtual int run()
+#if __cplusplus <= 201402L
+    throw (UIException)                        // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+    ;
 };
 extern "C" {
     struct __jmp_buf_tag   {
@@ -33,7 +45,10 @@ extern "C" {
     typedef struct __jmp_buf_tag sigjmp_buf[1];
 }
 sigjmp_buf password_dialog_sig_jmp_buf;
-void PasswordDialog::run() throw (UIException)
+void PasswordDialog::run()
+#if __cplusplus <= 201402L
+throw (UIException)                    // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
 {
   __sigsetjmp (password_dialog_sig_jmp_buf, 1);
   MessageBox* errmsg = __null;
index 89b0a6a67710396448f26d806f47dd13ccac913f..7c124fe330c5016ada07c1305cdcdb5a38fb6676 100644 (file)
@@ -27,7 +27,10 @@ struct A : virtual public Base
 struct B {};
 
 void
-foo (int size) throw (B,A)
+foo (int size)
+#if __cplusplus <= 201402L
+throw (B,A)                    // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
 {
   char *p = (char*) __builtin_alloca (size + 1);
   aligned i;
index 2c24ea3bcf11f8fdc737fedf4a4a70e92f009453..165e7cca14d82a7fd69b60f37c97ae66785f661f 100644 (file)
@@ -21,7 +21,10 @@ struct B {};
 
 __attribute__ ((fastcall))
 void
-foo (int j, int k, int m, int n, int o) throw (B,A)
+foo (int j, int k, int m, int n, int o)
+#if __cplusplus <= 201402L
+throw (B,A)                    // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
 {
   aligned i;
 
index cc05ed04f30a3e1cebc32b8fc927f5697a829843..48a59ebf22f4a920718de4f1c53abef2a7e81b48 100644 (file)
@@ -21,7 +21,10 @@ struct A : virtual public Base
 struct B {};
 
 void
-foo (void) throw (B,A)
+foo (void)
+#if __cplusplus <= 201402L
+throw (B,A)                    // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
 {
   aligned i;
 
index d2555f2e2c950751e052912df2b01eeb8ba7f24a..b8c04d95ddff3dc9a75aad347d5ec1836aff8bc5 100644 (file)
@@ -22,7 +22,10 @@ struct B {};
 
 static void
 inline __attribute__((always_inline))
-foo (void) throw (B,A)
+foo (void)
+#if __cplusplus <= 201402L
+throw (B,A)                    // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
 {
   aligned i;
 
index 1cbc68cc4934ff0fda54d5156f3071e8171a6099..53ff0ccf18b9ca51a2566d55365bab5a3d7393e8 100644 (file)
@@ -28,7 +28,10 @@ struct B {};
 
 static void
 inline __attribute__((always_inline))
-foo (int size) throw (B,A)
+foo (int size)
+#if __cplusplus <= 201402L
+throw (B,A)                    // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
 {
   char *p = (char *) __builtin_alloca (size + 1);
   aligned i;
index 403497a9a64eca5f5fdc114925dac610d310f56f..44f562aae13f2c5044abc1d54fd6ab82de980fb3 100644 (file)
@@ -21,7 +21,10 @@ struct B {};
 
 __attribute__ ((thiscall))
 void
-foo (int j, int k, int m, int n, int o) throw (B,A)
+foo (int j, int k, int m, int n, int o)
+#if __cplusplus <= 201402L
+throw (B,A)                    // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
 {
   aligned i;
 
index b9ba81b1297f4086dbb19620f37ed977c8424753..9c3c0f5db895c7d8faeb54301acb8ee8c9e1ff5f 100644 (file)
@@ -28,7 +28,10 @@ struct A : virtual public Base
 struct B {};
 
 void
-foo (const char *fmt, ...) throw (B,A)
+foo (const char *fmt, ...)
+#if __cplusplus <= 201402L
+throw (B,A)                    // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
 {
   va_list arg;
   char *p;
index 5e282179c63503b9184465eef629216e1cafd234..aa9b2bda8fb24e160f1bdf38b20a1fb5fb73181c 100644 (file)
@@ -29,7 +29,10 @@ struct A : virtual public Base
 struct B {};
 
 void
-test (va_list arg) throw (B,A)
+test (va_list arg)
+#if __cplusplus <= 201402L
+throw (B,A)                    // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
 {
   char *p;
   aligned i;
index 4d832458a4304168b781b2b7ee500cf287064e5c..5460021ae62888724ded34aab95a134168371f4f 100644 (file)
@@ -15,7 +15,11 @@ struct D : public B {
         } o; 
 
         struct Raiser { 
-            Raiser()  throw( int ) {throw 1;}; 
+            Raiser()
+#if __cplusplus <= 201402L
+           throw( int )                        // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+           {throw 1;}; 
         } raiser; 
       }; 
 }; 
index f13d58745cafde1fbe81994940778ef25e7a96a4..78a3851550ff993bbaad060253afc8ae7cb07053 100644 (file)
@@ -3,7 +3,10 @@
 
 struct E{};
 
-inline int bar() throw(E)
+inline int bar()
+#if __cplusplus <= 201402L
+throw(E)                       // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
 {
   return 0;
 }
index f4f443bd325f244228d7aeeec491f2ff354d5f2e..31c7300c90bd9ede3619d6867834d8029d401a3b 100644 (file)
@@ -93,19 +93,28 @@ extern "C" void *realloc (void *p, size_t size)
   return r;
 }
 
-void fn_throw() throw(int)
+void fn_throw()
+#if __cplusplus <= 201402L
+throw(int)                     // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
 {
   throw 1;
 }
 
-void fn_rethrow() throw(int)
+void fn_rethrow()
+#if __cplusplus <= 201402L
+throw(int)                     // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
 {
   try{fn_throw();}
   catch(int a){
     throw;}
 }
 
-void fn_catchthrow() throw(int)
+void fn_catchthrow()
+#if __cplusplus <= 201402L
+throw(int)                     // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
 {
   try{fn_throw();}
   catch(int a){
index 9538de961b70de895f72cac921ae44bc9897b17e..d6445124f88e0175eed110f14d6893b60ea75f9a 100644 (file)
@@ -18,11 +18,18 @@ static int thrower ()
 
 struct X
 {
-  X (int) throw (int);
+  X (int)
+#if __cplusplus <= 201402L
+  throw (int)                  // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+  ;
   ~X () throw ();
 };
 
-X::X (int) throw (int)
+X::X (int)
+#if __cplusplus <= 201402L
+  throw (int)                  // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
   {printf ("in ctor X %s\n", __PRETTY_FUNCTION__); bad = true;}
 X::~X () throw ()
   {printf ("in dtor X %s\n", __PRETTY_FUNCTION__); bad = true;}
@@ -30,10 +37,17 @@ X::~X () throw ()
 struct X1 {};
 struct Y : X
 {
-  Y() throw (int);
+  Y()
+#if __cplusplus <= 201402L
+  throw (int)                  // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+  ;
   ~Y() throw ();
 };
-Y::Y() throw (int)
+Y::Y()
+#if __cplusplus <= 201402L
+  throw (int)                  // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
   : X(thrower ())   // throws, so X::X is never called
   {printf ("in ctor Y%s\n", __PRETTY_FUNCTION__); bad = true;}
 Y::~Y() throw ()
index 0ff888369f293bff2b254c34b548c8afb2cd6266..ea32045117903be512a53f84848b83451c8b6cd2 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-do run  }
+// { dg-do run { target c++14_down } }
 // Testing exception specifications.
 // Test 1: the original exception succeeds.
 
@@ -9,7 +9,7 @@ void my_term ()  { exit (1); }
 void my_unexp () { throw 42; }
 
 void
-f () throw (char, int, std::bad_exception)
+f () throw (char, int, std::bad_exception)     // { dg-warning "deprecated" "" { target c++11 } }
 {
   throw 'a';
 }
index 5c7a91399e9c48b37b7c8372f178c628bf5538ed..d1aa6984f9f7c3f0767ca7d107b4c5aef28d3c5e 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-do run  }
+// { dg-do run { target c++14_down } }
 // Testing exception specifications.
 // Test 2: the second throw succeeds.
 
@@ -9,7 +9,7 @@ void my_term ()  { exit (1); }
 void my_unexp () { throw 42; }
 
 void
-f () throw (int, std::bad_exception)
+f () throw (int, std::bad_exception)   // { dg-warning "deprecated" "" { target c++11 } }
 {
   throw 'a';
 }
index 6239270ee370fd07ae9d51bd8fe7251b46339edd..1d57df3c335f7ba713903225f066af41b4f1672a 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-do run  }
+// { dg-do run { target c++14_down } }
 // Testing exception specifications.
 // Test 3: the bad_exception throw succeeds.
 
@@ -9,7 +9,7 @@ void my_term ()  { exit (1); }
 void my_unexp () { throw 42; }
 
 void
-f () throw (std::bad_exception)
+f () throw (std::bad_exception)                // { dg-warning "deprecated" "" { target c++11 } }
 {
   throw 'a';
 }
index e1f702e20392f71423780cea03265e2169baae97..e102239ed89dd37baef7d928c6afc809a43b6bd2 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-do run  }
+// { dg-do run { target c++14_down } }
 // Testing exception specifications.
 // Test 4: all throws fail, call terminate.
 
@@ -9,7 +9,7 @@ void my_term ()  { exit (0); }
 void my_unexp () { throw 42; }
 
 void
-f () throw (short)
+f () throw (short)             // { dg-warning "deprecated" "" { target c++11 } }
 {
   throw 'a';
 }
index 7aa474b12ab8722d826a8f09b555c999a2098a4e..ed485e299ec615f632c3420ed6704043e5460d2e 100644 (file)
@@ -1,4 +1,5 @@
-// { dg-do assemble  }
+// { dg-do assemble { target c++14_down } }
+// { dg-additional-options "-Wno-deprecated" }
 
 // Copyright (C) 1999 Free Software Foundation, Inc.
 // Contributed by Nathan Sidwell 19 Jan 1999 <nathan@acm.org>
index e5d234be3c317670022c27461542771ebe271eae..3c4813e3f743bca8e8dd3f9a20120d81385c7544 100644 (file)
@@ -1,6 +1,9 @@
 // { dg-do assemble  }
 
-void athrow(const int & e) throw(int)
+void athrow(const int & e)
+#if __cplusplus <= 201402L
+throw(int)                     // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
 {
    throw e;
 }
index 63bb029d9067a0f66d779c66380e041f119342fa..b4296ac45019c8ae7adf4724a3468393b1deb234 100644 (file)
@@ -4,7 +4,10 @@
 
 #define ANY int // a class with a public constructor
 
-void athrow(const ANY & e) throw(ANY)
+void athrow(const ANY & e)
+#if __cplusplus <= 201402L
+throw(ANY)                     // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
 {
    throw e; // { dg-bogus "" } discarding const
 }
index 985fcae6bc6b0b4f0ef16977e94f1325c5a59499..c64a5222b84394858c8006b9eff0f79e53138c4d 100644 (file)
@@ -1,6 +1,9 @@
 // { dg-do run  }
 template <class T>
-void f() throw (T)
+void f()
+#if __cplusplus <= 201402L
+throw (T)                      // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
 {
   throw 7;
 }
index 0ddf63c98be28cf860511b34690ba88146ede9e9..4fc869d90b8c0e277ff6fc1db5f2fac3999e6656 100644 (file)
@@ -3,9 +3,16 @@
 // Posted by Trevor Taylor <ttaylor@powerup.com.au>
 
 template<class T> struct A {
-    void X() throw(T);
+    void X()
+#if __cplusplus <= 201402L
+    throw(T)                   // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+    ;
 };
 
 template<class T>
 inline void A<T>::X() 
-throw(T) { } 
+#if __cplusplus <= 201402L
+throw(T)                       // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+{ } 
index 4418f160766fbb4a22a0d6dffbbe333491392a1e..a8690be7ec3e950ea139de1cc4f35f0bceb670f8 100644 (file)
@@ -1,6 +1,6 @@
-// { dg-do assemble  }
+// { dg-do assemble { target c++14_down } }
 // { dg-options "-fexceptions" }
 
 struct A {
-  A() throw (int);
+  A() throw (int);     // { dg-warning "deprecated" "" { target c++11 } }
 };
index f3728cf126f3244059d8d74eb41220be78259df2..a6ffd3375b5a95b74eec86c524eb26a48a8dc53e 100644 (file)
@@ -10,7 +10,13 @@ void my_terminate() {
 
 struct A {
   A() { }
-  ~A() throw(int) {
+  ~A()
+#if __cplusplus <= 201402L
+  throw(int)                   // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#else
+  noexcept(false)
+#endif
+  {
     std::set_terminate (my_terminate);
     throw 1;           // This throws from EH dtor, should call my_terminate
   }
index b679991e4633032edd129f83e9e04b163a71a26b..cffb0c48cda0e2a4905283fea35c7a6c05007f73 100644 (file)
@@ -1,4 +1,5 @@
 // { dg-do run { xfail sparc64-*-elf z8k-*-* arm-*-pe } }
+// { dg-require-effective-target c++14_down }
 // { dg-options "-fexceptions" }
 
 #include <exception>
@@ -7,7 +8,7 @@ void my_unexpected() {
   throw 42;
 }
 
-void foo() throw (int) { throw "Hi"; }
+void foo() throw (int) { throw "Hi"; } // { dg-warning "deprecated" "" { target c++11 } }
 
 int main() {
   std::set_unexpected (my_unexpected);
index 056f6b8df7493550de89e815d7f9562c934f5abd..3218dd9ef3ed333aa88d6dbb5421702537c7b5b2 100644 (file)
@@ -1,4 +1,5 @@
 // { dg-do run { xfail sparc64-*-elf arm-*-pe } }
+// { dg-require-effective-target c++14_down }
 
 #include <exception>
 #include <stdlib.h>
index de21dc2f4027c5ee8c165be333efb43202ec068f..0ebaab41fa66d94c498a62b3156f4768ef59273f 100644 (file)
@@ -1,4 +1,5 @@
 // { dg-do run { xfail sparc64-*-elf z8k-*-* arm-*-pe } }
+// { dg-require-effective-target c++14_down }
 // { dg-options "-fexceptions" }
 
 #include <exception>
@@ -7,7 +8,7 @@ void my_unexpected() {
   throw 42;
 }
 
-template <class T> void foo(T) throw (int) { throw "Hi"; }
+template <class T> void foo(T) throw (int) { throw "Hi"; }     // { dg-warning "deprecated" "" { target c++11 } }
 
 main() {
   std::set_unexpected (my_unexpected);
index 073980a5346737f7d02a0d62860bec08481f319d..7d3cd413ee75714805a09788baa85e4be66bd9f8 100644 (file)
@@ -1,4 +1,5 @@
 // { dg-do run { xfail sparc64-*-elf z8k-*-* arm-*-pe } }
+// { dg-require-effective-target c++14_down }
 // { dg-options "-fexceptions" }
 
 #include <exception>
@@ -7,7 +8,7 @@ void my_unexpected() {
   throw 42;
 }
 
-template <class T> void foo(T) throw (T) { throw "Hi"; }
+template <class T> void foo(T) throw (T) { throw "Hi"; }       // { dg-warning "deprecated" "" { target c++11 } }
 
 main() {
   std::set_unexpected (my_unexpected);
index 1482680745fd504f6c2e2f7efe1305210fe1c90c..8b574f57d7bf615b28839d8791b72c0cc57876f1 100644 (file)
@@ -9,7 +9,7 @@ void my_terminate_handler() {
 }
 
 void throw_an_unexpected_exception() throw() {
-  throw 1;
+  throw 1;     // { dg-warning "throw will always call terminate" "" { target c++1z } }
 }
 
 int main() {
index 2d21d19dda3eb677f402120fa695449ea18e45f5..766a27b4be74e206bc2cdcce1fa2b3d0bf63ea14 100644 (file)
@@ -5,5 +5,9 @@
 
 class not_ok {
 public:
-  void f() throw(int) { }
+  void f()
+#if __cplusplus <= 201402L
+  throw(int)                   // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+  { }
 };
index c0f4bfa66e6c6de94fe03e49facb1c80aa2bd00c..5ff84edafef6ebaf63938c48df69ab28a0cd28a4 100644 (file)
@@ -27,9 +27,16 @@ class foo
   bool b;
 public:
   foo();
-  void x () throw(bar);
+  void x ()
+#if __cplusplus <= 201402L
+  throw(bar)                   // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
+  ;
 };
-void foo::x() throw(bar)
+void foo::x()
+#if __cplusplus <= 201402L
+throw(bar)                     // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
 {
   if (!b) throw bar (static_cast<::N::X*>(this));      // { dg-error "lambda expressions|expected|invalid" } parse error
 }
index 043d54fa4c97a44f2958beccfbe8498f69d9386e..50ecfd9d97f2fee22d5f30a93f174f18d7f8a811 100644 (file)
@@ -8,7 +8,7 @@ struct foo
 };
 
 void foo::x() throw(bar)       // { dg-error "" } parse error
-{
+{                              // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } .-1 }
 }
 
 void bar()
index 0c0643e62e8929c298183596e78b8fe0122417a0..82eabb6d7d8a9d5cfb61369a537227e082f3733b 100644 (file)
@@ -13,7 +13,10 @@ struct X {
   {
     throw 1;
   }
-  void* operator new ( std::size_t n ) throw ( std::bad_alloc )
+  void* operator new ( std::size_t n )
+#if __cplusplus <= 201402L
+  throw ( std::bad_alloc )                     // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
   {
     new_flag = true;
     return ::operator new( n );
index e75704e776a513092e087316a3ddbd2bebedf814..3630e1fbddaaa867947ff3c4208c6335276689ed 100644 (file)
@@ -1,6 +1,6 @@
-// { dg-do assemble  }
+// { dg-do assemble { target c++14_down } }
 // Bug: g++ forgets to instantiate A<int>
 // Contributed by Jason Merrill <jason@cygnus.com>
 
 template <class T> struct A { };
-void f () throw (A<int>);
+void f () throw (A<int>);      // { dg-warning "deprecated" "" { target c++11 } }
index cb4505f7e0b65627971b203bebc60a87126c52cd..b22f4eb54bb374a1504400b7a020b5d91418bdc1 100644 (file)
@@ -2,7 +2,10 @@
 // { dg-options "-O2 -W   " }
 #include "stdio.h"
 
-void writeNote() throw( int )
+void writeNote()
+#if __cplusplus <= 201402L
+throw( int )                   // { dg-warning "deprecated" "" { target { c++11 && { ! c++1z } } } }
+#endif
 {
     printf( "hello world\n" );
     try { }
index 085b95a3d0cd7ebe4ec33bcd229de50c368d7121..15e1aafc2efa8b1e5b5f6ab4ff5dceb603bf1462 100644 (file)
@@ -1,3 +1,8 @@
+2016-12-08  Jakub Jelinek  <jakub@redhat.com>
+
+       * testsuite/util/testsuite_new_operators.h: Include testsuite_hooks.h.
+       (operator new): Use THROW macro.
+
 2016-12-07  François Dumont  <fdumont@gcc.gnu.org>
 
        * include/bits/stl_tree.h
index 6713fb83ed817f4327a75d2e2a74bf4df0fca23e..dea6fbe9eab86f70ad75781ef7ed4bd4d30fe62a 100644 (file)
@@ -23,6 +23,7 @@
 #define _GLIBCXX_TESTSUITE_NEW_OPERATORS_H
 
 #include <new>
+#include <testsuite_hooks.h>
 
 namespace __gnu_test
 {
@@ -38,7 +39,7 @@ namespace __gnu_test
   { get_new_limit() = l; }
 }
 
-void* operator new(std::size_t size) throw(std::bad_alloc)
+void* operator new(std::size_t size) THROW(std::bad_alloc)
 {
   if (size > __gnu_test::get_new_limit())
     throw std::bad_alloc();