OSDN Git Service

gcc:
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 16 May 2010 02:27:02 +0000 (02:27 +0000)
committerMasaki Muranaka <monaka@monami-software.com>
Sun, 23 May 2010 05:09:45 +0000 (14:09 +0900)
* c.opt: Add -fnothrow-opt.
gcc/cp:
* cp-tree.h (TYPE_NOEXCEPT_P): New macro.
* except.c (begin_eh_spec_block): Use MUST_NOT_THROW_EXPR if
TYPE_NOEXCEPT_P.
(finish_eh_spec_block): Adjust.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159450 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/doc/invoke.texi
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/eh/spec11.C

index e294679..9380883 100644 (file)
@@ -1,3 +1,7 @@
+2010-05-15  Jason Merrill  <jason@redhat.com>
+
+       * c.opt: Add -fnothrow-opt.
+
 2010-05-15  Jan Hubicka  <jh@suse.cz>
 
        * ipa-prop.c (ipa_prop_read_section): Add sanity check that node is analyzed.
index fda48be..84b8ae5 100644 (file)
@@ -1,3 +1,10 @@
+2010-05-15  Jason Merrill  <jason@redhat.com>
+
+       * cp-tree.h (TYPE_NOEXCEPT_P): New macro.
+       * except.c (begin_eh_spec_block): Use MUST_NOT_THROW_EXPR if
+       TYPE_NOEXCEPT_P.
+       (finish_eh_spec_block): Adjust.
+
 2010-05-15  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/44148
index 3b8e9d0..361a6f2 100644 (file)
@@ -1741,6 +1741,12 @@ struct GTY(()) lang_type {
   (TYPE_RAISES_EXCEPTIONS (NODE) \
    && TREE_VALUE (TYPE_RAISES_EXCEPTIONS (NODE)) == NULL_TREE)
 
+/* For FUNCTION_TYPE or METHOD_TYPE, true if NODE is noexcept.  This is the
+   case for things declared noexcept(true) and, with -fnothrow-opt, for
+   throw() functions.  */
+#define TYPE_NOEXCEPT_P(NODE) \
+  (flag_nothrow_opt && TYPE_NOTHROW_P(NODE))
+
 /* The binding level associated with the namespace.  */
 #define NAMESPACE_LEVEL(NODE) \
   (LANG_DECL_NS_CHECK (NODE)->level)
index 98f97cc..81c2d03 100644 (file)
@@ -1929,6 +1929,15 @@ Disable built-in declarations of functions that are not mandated by
 ANSI/ISO C@.  These include @code{ffs}, @code{alloca}, @code{_exit},
 @code{index}, @code{bzero}, @code{conjf}, and other related functions.
 
+@item -fnothrow-opt
+@opindex fnothrow-opt
+Treat a @code{throw()} exception specification as though it were a
+@code{noexcept} specification to reduce or eliminate the text size
+overhead relative to a function with no exception specification.  The
+semantic effect is that an exception thrown out of a function with
+such an exception specification will result in a call to
+@code{terminate} rather than @code{unexpected}.
+
 @item -fno-operator-names
 @opindex fno-operator-names
 Do not treat the operator name keywords @code{and}, @code{bitand},
index ded582b..8b25528 100644 (file)
@@ -1,3 +1,9 @@
+2010-05-15  Jason Merrill  <jason@redhat.com>
+
+       * g++.dg/eh/spec10.C: New.
+       * g++.dg/eh/spec11.C: New.
+       * g++.old-deja/g++.mike/eh34.C: Remove dg-options.
+
 2010-05-15  Janus Weil  <janus@gcc.gnu.org>
 
        PR fortran/44154
index 4615a64..562e366 100644 (file)
@@ -1,8 +1,5 @@
 // Make sure that we force an LSDA for a throw() spec with -fnothrow-opt so
-// that the personality routine will call terminate.  Also check that we
-// optimize away the EH cleanup for var because the personality routine
-// will call terminate before unwinding: there should not be an EH region
-// (i.e. LEHB/LEHE labels) around the call to g().
+// that the personality routine will call terminate.
 
 // { dg-final { scan-assembler-not "_ZSt9terminatev" } }
 // { dg-final { scan-assembler-not "EHB" } }
@@ -10,10 +7,5 @@
 
 // { dg-options "-fnothrow-opt" }
 
-struct A { ~A(); };
 void g();
-void f() throw()
-{
-  A var;
-  g();
-}
+void f() throw() { g(); }