summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/cgraphunit.c11
2 files changed, 16 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c908a7b64b0..517704f58ba 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2011-01-03 Martin Jambor <mjambor@suse.cz>
+ * cgraphunit.c (verify_cgraph_node): Verify there is no direct call to
+ a thunk.
+
+2011-01-03 Martin Jambor <mjambor@suse.cz>
+
PR tree-optimization/46984
* cgraph.h (cgraph_indirect_call_info): make field thunk_delta
HOST_WIDE_INT.
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index 36ba75a55ea..ec477ee920b 100644
--- a/gcc/cgraphunit.c
+++ b/gcc/cgraphunit.c
@@ -647,6 +647,8 @@ verify_cgraph_node (struct cgraph_node *node)
}
if (!e->indirect_unknown_callee)
{
+ struct cgraph_node *n;
+
if (e->callee->same_body_alias)
{
error ("edge points to same body alias:");
@@ -667,6 +669,15 @@ verify_cgraph_node (struct cgraph_node *node)
debug_tree (decl);
error_found = true;
}
+ else if (decl
+ && (n = cgraph_get_node_or_alias (decl))
+ && (n->same_body_alias
+ && n->thunk.thunk_p))
+ {
+ error ("a call to thunk improperly represented "
+ "in the call graph:");
+ debug_gimple_stmt (stmt);
+ }
}
else if (decl)
{