diff options
author | Jan Hubicka <jh@suse.cz> | 2009-02-06 17:47:39 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2009-02-06 16:47:39 +0000 |
commit | e901811a8be42e9c292324550c84be46d4f27e4c (patch) | |
tree | 13b4a0dad8ff6765da899597c5f23d8ed89e8d45 /gcc/ipa-inline.c | |
parent | 3cfa762bf031f655442405487b7e206fbe5f6ddc (diff) | |
download | gcc-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.c | 16 |
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; } |