aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2006-10-10 08:27:02 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2006-10-10 08:27:02 +0000
commitbe0436d7d964255fd5b9e69f3b2b00b6e301c3a6 (patch)
tree39e8cda86d252657f4fe7508add31edc797fa766
parentbdcee4712ec20209d14aeb2d0487de41be1ad424 (diff)
downloadgcc-be0436d7d964255fd5b9e69f3b2b00b6e301c3a6.zip
gcc-be0436d7d964255fd5b9e69f3b2b00b6e301c3a6.tar.gz
gcc-be0436d7d964255fd5b9e69f3b2b00b6e301c3a6.tar.bz2
re PR rtl-optimization/29323 (set_nothrow_function_flags does invalid analysis on weak functions)
2006-10-10 Richard Guenther <rguenther@suse.de> PR rtl-optimization/29323 * except.c (set_nothrow_function_flags): For functions that do not bind local bail out early. * decl.c (finish_function): Set TREE_NOTHROW only for functions that bind local. From-SVN: r117598
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/decl.c3
-rw-r--r--gcc/except.c3
4 files changed, 17 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6f0fce1..b8c8d40 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2006-10-10 Richard Guenther <rguenther@suse.de>
+
+ PR rtl-optimization/29323
+ * except.c (set_nothrow_function_flags): For functions
+ that do not bind local bail out early.
+
2006-10-10 Ben Elliston <bje@au.ibm.com>
* doc/invoke.texi (RS/6000 and PowerPC Options): Add -m to the
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 615f53c..253c578 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2006-10-10 Richard Guenther <rguenther@suse.de>
+
+ PR rtl-optimization/29323
+ * decl.c (finish_function): Set TREE_NOTHROW only for
+ functions that bind local.
+
2006-10-09 Richard Henderson <rth@redhat.com>
Revert emutls patch.
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 84f2aaa..96ecc86 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -11096,7 +11096,8 @@ finish_function (int flags)
/* If this function can't throw any exceptions, remember that. */
if (!processing_template_decl
&& !cp_function_chain->can_throw
- && !flag_non_call_exceptions)
+ && !flag_non_call_exceptions
+ && targetm.binds_local_p (fndecl))
TREE_NOTHROW (fndecl) = 1;
/* This must come after expand_function_end because cleanups might
diff --git a/gcc/except.c b/gcc/except.c
index b344087..30dafbb 100644
--- a/gcc/except.c
+++ b/gcc/except.c
@@ -2787,6 +2787,9 @@ set_nothrow_function_flags (void)
{
rtx insn;
+ if (!targetm.binds_local_p (current_function_decl))
+ return 0;
+
TREE_NOTHROW (current_function_decl) = 1;
/* Assume cfun->all_throwers_are_sibcalls until we encounter