aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorCaroline Tice <cmtice@google.com>2013-12-06 13:22:14 -0800
committerCaroline Tice <ctice@gcc.gnu.org>2013-12-06 13:22:14 -0800
commit31226750a1cdf4542f402adc097aaae0bb988c33 (patch)
tree61aeffc1a983c7f43bfe016b023a8fe91fe023ed /gcc
parentcd93c60e35410dad9df0f21b8e1d2825f49b9386 (diff)
downloadgcc-31226750a1cdf4542f402adc097aaae0bb988c33.zip
gcc-31226750a1cdf4542f402adc097aaae0bb988c33.tar.gz
gcc-31226750a1cdf4542f402adc097aaae0bb988c33.tar.bz2
Fix two small problems...
Fix two small problems: Make the libvtv function decls globally visible, and update all uses of the verified vtable poitner with the verification results, rather than just hte first use. From-SVN: r205764
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/vtable-class-hierarchy.c2
-rw-r--r--gcc/vtable-verify.c37
4 files changed, 28 insertions, 24 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 039f704..5fddf41 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2013-12-06 Caroline Tice <cmtice@google.com>
+
+ Submitting patch from Stephen Checkoway, s@cs.jhu.edu
+ * vtable-verify.c (verify_bb_vtables): Replace all uses of verified
+ vtable pointer with the results of the verification call, rather than
+ only the uses in the next statement.
+
2013-12-06 Andrew Pinski <apinski@cavium.com>
PR target/59092
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index e682871..dd33b05 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2013-12-06 Caroline Tice <cmtice@google.com>
+
+ Submitting patch from Stephen Checkoway, s@cs.jhu.edu
+ * vtable-class-hierarchy.c (init_functions): Make the libvtv
+ function decls externally visible.
+
2013-12-06 Oleg Endo <olegendo@gcc.gnu.org>
* decl2.c: Remove struct tags when referring to class varpool_node.
diff --git a/gcc/cp/vtable-class-hierarchy.c b/gcc/cp/vtable-class-hierarchy.c
index b663724..4eb78ee 100644
--- a/gcc/cp/vtable-class-hierarchy.c
+++ b/gcc/cp/vtable-class-hierarchy.c
@@ -258,6 +258,7 @@ init_functions (void)
DECL_ATTRIBUTES (vlt_register_set_fndecl) =
tree_cons (get_identifier ("leaf"), NULL,
DECL_ATTRIBUTES (vlt_register_set_fndecl));
+ DECL_EXTERNAL(vlt_register_set_fndecl) = 1;
TREE_PUBLIC (vlt_register_set_fndecl) = 1;
DECL_PRESERVE_P (vlt_register_set_fndecl) = 1;
SET_DECL_LANGUAGE (vlt_register_set_fndecl, lang_cplusplus);
@@ -301,6 +302,7 @@ init_functions (void)
DECL_ATTRIBUTES (vlt_register_pairs_fndecl) =
tree_cons (get_identifier ("leaf"), NULL,
DECL_ATTRIBUTES (vlt_register_pairs_fndecl));
+ DECL_EXTERNAL(vlt_register_pairs_fndecl) = 1;
TREE_PUBLIC (vlt_register_pairs_fndecl) = 1;
DECL_PRESERVE_P (vlt_register_pairs_fndecl) = 1;
SET_DECL_LANGUAGE (vlt_register_pairs_fndecl, lang_cplusplus);
diff --git a/gcc/vtable-verify.c b/gcc/vtable-verify.c
index 46c5621..b544695 100644
--- a/gcc/vtable-verify.c
+++ b/gcc/vtable-verify.c
@@ -646,9 +646,6 @@ verify_bb_vtables (basic_block bb)
if (vtable_map_node && vtable_map_node->vtbl_map_decl)
{
- use_operand_p use_p;
- ssa_op_iter iter;
-
vtable_map_node->is_used = true;
vtbl_var_decl = vtable_map_node->vtbl_map_decl;
@@ -695,35 +692,27 @@ verify_bb_vtables (basic_block bb)
gimple_call_set_lhs (call_stmt, tmp0);
update_stmt (call_stmt);
- /* Find the next stmt, after the vptr assignment
- statememt, which should use the result of the
- vptr assignment statement value. */
- gsi_next (&gsi_vtbl_assign);
- gimple next_stmt = gsi_stmt (gsi_vtbl_assign);
-
- if (!next_stmt)
- return;
-
- /* Find any/all uses of 'lhs' in next_stmt, and
- replace them with 'tmp0'. */
+ /* Replace all uses of lhs with tmp0. */
found = false;
- FOR_EACH_PHI_OR_STMT_USE (use_p, next_stmt, iter,
- SSA_OP_ALL_USES)
+ imm_use_iterator iterator;
+ gimple use_stmt;
+ FOR_EACH_IMM_USE_STMT (use_stmt, iterator, lhs)
{
- tree op = USE_FROM_PTR (use_p);
- if (op == lhs)
- {
- SET_USE (use_p, tmp0);
- found = true;
- }
+ use_operand_p use_p;
+ if (use_stmt == call_stmt)
+ continue;
+ FOR_EACH_IMM_USE_ON_STMT (use_p, iterator)
+ SET_USE (use_p, tmp0);
+ update_stmt (use_stmt);
+ found = true;
}
- update_stmt (next_stmt);
+
gcc_assert (found);
/* Insert the new verification call just after the
statement that gets the vtable pointer out of the
object. */
- gsi_vtbl_assign = gsi_for_stmt (stmt);
+ gcc_assert (gsi_stmt (gsi_vtbl_assign) == stmt);
gsi_insert_after (&gsi_vtbl_assign, call_stmt,
GSI_NEW_STMT);