aboutsummaryrefslogtreecommitdiff
path: root/gcc/ipa-inline.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2009-02-06 17:47:39 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2009-02-06 16:47:39 +0000
commite901811a8be42e9c292324550c84be46d4f27e4c (patch)
tree13b4a0dad8ff6765da899597c5f23d8ed89e8d45 /gcc/ipa-inline.c
parent3cfa762bf031f655442405487b7e206fbe5f6ddc (diff)
downloadgcc-e901811a8be42e9c292324550c84be46d4f27e4c.zip
gcc-e901811a8be42e9c292324550c84be46d4f27e4c.tar.gz
gcc-e901811a8be42e9c292324550c84be46d4f27e4c.tar.bz2
re PR tree-optimization/38844 (deadlock with __attribute__((always_inline)) at -O1 and above)
PR tree-optimization/38844 * ipa-inline.c (try_inline): Stop inlining recursion when edge is already inlined. From-SVN: r143985
Diffstat (limited to 'gcc/ipa-inline.c')
-rw-r--r--gcc/ipa-inline.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c
index 0656d79..e6b956c 100644
--- a/gcc/ipa-inline.c
+++ b/gcc/ipa-inline.c
@@ -1303,16 +1303,18 @@ try_inline (struct cgraph_edge *e, enum inlining_mode mode, int depth)
cgraph_node_name (e->caller));
}
if (e->inline_failed)
- cgraph_mark_inline (e);
+ {
+ cgraph_mark_inline (e);
- /* In order to fully inline always_inline functions, we need to
- recurse here, since the inlined functions might not be processed by
- incremental inlining at all yet.
+ /* In order to fully inline always_inline functions, we need to
+ recurse here, since the inlined functions might not be processed by
+ incremental inlining at all yet.
- Also flattening needs to be done recursively. */
+ Also flattening needs to be done recursively. */
- if (mode == INLINE_ALL || always_inline)
- cgraph_decide_inlining_incrementally (e->callee, mode, depth + 1);
+ if (mode == INLINE_ALL || always_inline)
+ cgraph_decide_inlining_incrementally (e->callee, mode, depth + 1);
+ }
callee->aux = (void *)(size_t) callee_mode;
return true;
}