summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2013-10-08 12:13:13 +0000
committerAndrew Macleod <amacleod@gcc.gnu.org>2013-10-08 12:13:13 +0000
commit481d1b81534c70122187f38c26d6a19db587528f (patch)
tree535698e7a260f82134c7871c7ce81f209823f3e1
parent0e6a0e48eb5ead024d12453cb811bdf0ef5c3377 (diff)
downloadgcc-481d1b81534c70122187f38c26d6a19db587528f.tar.gz
tree-flow.h: Remove some prototypes.
* tree-flow.h: Remove some prototypes. * tree.h: Remove some protypes, add a couple. * tree.c (using_eh_for_cleanups_flag, using_eh_for_cleanups, using_eh_for_cleanups_p): Add interface routines for front ends. * tree-eh.h: New file. Add protoptyes. * tree-eh.c (using_eh_for_cleanups_p, using_eh_for_cleanups): Delete. (add_stmt_to_eh_lp_fn): Make static. (lower_try_finally): Use new using_eh_for_cleanups_p. * emit-rtl.c: Include tree-eh.h. * gimple.h: Include tree-eh.h. From-SVN: r203273
-rw-r--r--gcc/ChangeLog13
-rw-r--r--gcc/emit-rtl.c1
-rw-r--r--gcc/gimple.h1
-rw-r--r--gcc/tree-eh.c13
-rw-r--r--gcc/tree-eh.h52
-rw-r--r--gcc/tree-flow.h32
-rw-r--r--gcc/tree.c18
-rw-r--r--gcc/tree.h11
8 files changed, 89 insertions, 52 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index dc1bc7e41b9..d5bc285e92f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,16 @@
+2013-10-08 Andrew MacLeod <amacleod@redhat.com>
+
+ * tree-flow.h: Remove some prototypes.
+ * tree.h: Remove some protypes, add a couple.
+ * tree.c (using_eh_for_cleanups_flag, using_eh_for_cleanups,
+ using_eh_for_cleanups_p): Add interface routines for front ends.
+ * tree-eh.h: New file. Add protoptyes.
+ * tree-eh.c (using_eh_for_cleanups_p, using_eh_for_cleanups): Delete.
+ (add_stmt_to_eh_lp_fn): Make static.
+ (lower_try_finally): Use new using_eh_for_cleanups_p.
+ * emit-rtl.c: Include tree-eh.h.
+ * gimple.h: Include tree-eh.h.
+
2013-10-08 Marc Glisse <marc.glisse@inria.fr>
PR tree-optimization/58480
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index 85714f5d8a5..b0fc8462268 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -55,6 +55,7 @@ along with GCC; see the file COPYING3. If not see
#include "df.h"
#include "params.h"
#include "target.h"
+#include "tree-eh.h"
struct target_rtl default_target_rtl;
#if SWITCHABLE_TARGET
diff --git a/gcc/gimple.h b/gcc/gimple.h
index e7021a40a05..2272075c7ce 100644
--- a/gcc/gimple.h
+++ b/gcc/gimple.h
@@ -31,6 +31,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-ssa-alias.h"
#include "internal-fn.h"
#include "gimple-fold.h"
+#include "tree-eh.h"
typedef gimple gimple_seq_node;
diff --git a/gcc/tree-eh.c b/gcc/tree-eh.c
index 1ad5baf5828..9eaae1170ab 100644
--- a/gcc/tree-eh.c
+++ b/gcc/tree-eh.c
@@ -41,15 +41,6 @@ along with GCC; see the file COPYING3. If not see
i.e. in hash tables. This is a structure to do this. */
typedef union {tree *tp; tree t; gimple g;} treemple;
-/* Nonzero if we are using EH to handle cleanups. */
-static int using_eh_for_cleanups_p = 0;
-
-void
-using_eh_for_cleanups (void)
-{
- using_eh_for_cleanups_p = 1;
-}
-
/* Misc functions used in this file. */
/* Remember and lookup EH landing pad data for arbitrary statements.
@@ -66,7 +57,7 @@ using_eh_for_cleanups (void)
/* Add statement T in function IFUN to landing pad NUM. */
-void
+static void
add_stmt_to_eh_lp_fn (struct function *ifun, gimple t, int num)
{
struct throw_stmt_node *n;
@@ -1655,7 +1646,7 @@ lower_try_finally (struct leh_state *state, gimple tp)
this_tf.try_finally_expr = tp;
this_tf.top_p = tp;
this_tf.outer = state;
- if (using_eh_for_cleanups_p && !cleanup_is_dead_in (state->cur_region))
+ if (using_eh_for_cleanups_p () && !cleanup_is_dead_in (state->cur_region))
{
this_tf.region = gen_eh_region_cleanup (state->cur_region);
this_state.cur_region = this_tf.region;
diff --git a/gcc/tree-eh.h b/gcc/tree-eh.h
new file mode 100644
index 00000000000..308f20f77ee
--- /dev/null
+++ b/gcc/tree-eh.h
@@ -0,0 +1,52 @@
+/* Header file for exception handling.
+ Copyright (C) 2013 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC 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.
+
+GCC 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 GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef GCC_TREE_EH_H
+#define GCC_TREE_EH_H
+
+extern void using_eh_for_cleanups (void);
+extern void add_stmt_to_eh_lp (gimple, int);
+extern bool remove_stmt_from_eh_lp_fn (struct function *, gimple);
+extern bool remove_stmt_from_eh_lp (gimple);
+extern int lookup_stmt_eh_lp_fn (struct function *, gimple);
+extern int lookup_stmt_eh_lp (gimple);
+extern bool make_eh_dispatch_edges (gimple);
+extern void make_eh_edges (gimple);
+extern edge redirect_eh_edge (edge, basic_block);
+extern void redirect_eh_dispatch_edge (gimple, edge, basic_block);
+extern bool operation_could_trap_helper_p (enum tree_code, bool, bool, bool,
+ bool, tree, bool *);
+extern bool operation_could_trap_p (enum tree_code, bool, bool, tree);
+extern bool tree_could_trap_p (tree);
+extern bool stmt_could_throw_p (gimple);
+extern bool tree_could_throw_p (tree);
+extern bool stmt_can_throw_external (gimple);
+extern bool stmt_can_throw_internal (gimple);
+extern bool maybe_clean_eh_stmt_fn (struct function *, gimple);
+extern bool maybe_clean_eh_stmt (gimple);
+extern bool maybe_clean_or_replace_eh_stmt (gimple, gimple);
+extern bool maybe_duplicate_eh_stmt_fn (struct function *, gimple,
+ struct function *, gimple,
+ struct pointer_map_t *, int);
+extern bool maybe_duplicate_eh_stmt (gimple, gimple);
+extern void maybe_remove_unreachable_handlers (void);
+extern bool verify_eh_edges (gimple);
+extern bool verify_eh_dispatch_edge (gimple);
+
+#endif /* GCC_TREE_EH_H */
diff --git a/gcc/tree-flow.h b/gcc/tree-flow.h
index db7f3467203..54ba51aa68b 100644
--- a/gcc/tree-flow.h
+++ b/gcc/tree-flow.h
@@ -375,38 +375,6 @@ enum move_pos
extern enum move_pos movement_possibility (gimple);
char *get_lsm_tmp_name (tree, unsigned);
-/* In tree-flow-inline.h */
-static inline bool unmodifiable_var_p (const_tree);
-static inline bool ref_contains_array_ref (const_tree);
-
-/* In tree-eh.c */
-extern void make_eh_edges (gimple);
-extern bool make_eh_dispatch_edges (gimple);
-extern edge redirect_eh_edge (edge, basic_block);
-extern void redirect_eh_dispatch_edge (gimple, edge, basic_block);
-extern bool stmt_could_throw_p (gimple);
-extern bool stmt_can_throw_internal (gimple);
-extern bool stmt_can_throw_external (gimple);
-extern void add_stmt_to_eh_lp_fn (struct function *, gimple, int);
-extern void add_stmt_to_eh_lp (gimple, int);
-extern bool remove_stmt_from_eh_lp (gimple);
-extern bool remove_stmt_from_eh_lp_fn (struct function *, gimple);
-extern int lookup_stmt_eh_lp_fn (struct function *, gimple);
-extern int lookup_stmt_eh_lp (gimple);
-extern bool maybe_clean_eh_stmt_fn (struct function *, gimple);
-extern bool maybe_clean_eh_stmt (gimple);
-extern bool maybe_clean_or_replace_eh_stmt (gimple, gimple);
-extern bool maybe_duplicate_eh_stmt_fn (struct function *, gimple,
- struct function *, gimple,
- struct pointer_map_t *, int);
-extern bool maybe_duplicate_eh_stmt (gimple, gimple);
-extern bool verify_eh_edges (gimple);
-extern bool verify_eh_dispatch_edge (gimple);
-extern void maybe_remove_unreachable_handlers (void);
-
-/* In tree-ssa-pre.c */
-void debug_value_expressions (unsigned int);
-
/* In tree-loop-linear.c */
extern void linear_transform_loops (void);
extern unsigned perfect_loop_nest_depth (struct loop *);
diff --git a/gcc/tree.c b/gcc/tree.c
index 705332f878c..50717f0c787 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -12247,4 +12247,22 @@ block_may_fallthru (const_tree block)
}
}
+/* True if we are using EH to handle cleanups. */
+static bool using_eh_for_cleanups_flag = false;
+
+/* This routine is called from front ends to indicate eh should be used for
+ cleanups. */
+void
+using_eh_for_cleanups (void)
+{
+ using_eh_for_cleanups_flag = true;
+}
+
+/* Query whether EH is used for cleanups. */
+bool
+using_eh_for_cleanups_p (void)
+{
+ return using_eh_for_cleanups_flag;
+}
+
#include "gt-tree.h"
diff --git a/gcc/tree.h b/gcc/tree.h
index a71cd96414f..8a6a8f3f25e 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -4216,15 +4216,6 @@ extern rtx expand_stack_save (void);
extern void expand_stack_restore (tree);
extern void expand_return (tree);
-/* In tree-eh.c */
-extern void using_eh_for_cleanups (void);
-
-extern bool tree_could_trap_p (tree);
-extern bool operation_could_trap_helper_p (enum tree_code, bool, bool, bool,
- bool, tree, bool *);
-extern bool operation_could_trap_p (enum tree_code, bool, bool, tree);
-extern bool tree_could_throw_p (tree);
-
/* Compare and hash for any structure which begins with a canonical
pointer. Assumes all pointers are interchangeable, which is sort
of already assumed by gcc elsewhere IIRC. */
@@ -4531,6 +4522,8 @@ extern bool types_same_for_odr (tree type1, tree type2);
extern bool contains_bitfld_component_ref_p (const_tree);
extern bool type_in_anonymous_namespace_p (tree);
extern bool block_may_fallthru (const_tree);
+extern void using_eh_for_cleanups (void);
+extern bool using_eh_for_cleanups_p (void);
/* In tree-nested.c */
extern tree build_addr (tree, tree);