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
This commit is contained in:
Jan Hubicka 2009-02-06 17:47:39 +01:00 committed by Jan Hubicka
parent 3cfa762bf0
commit e901811a8b
2 changed files with 15 additions and 7 deletions

View File

@ -1,3 +1,9 @@
2009-02-06 Jan Hubicka <jh@suse.cz>
PR tree-optimization/38844
* ipa-inline.c (try_inline): Stop inlining recursion when edge
is already inlined.
2009-02-06 Richard Guenther <rguenther@suse.de> 2009-02-06 Richard Guenther <rguenther@suse.de>
PR middle-end/38977 PR middle-end/38977

View File

@ -1303,16 +1303,18 @@ try_inline (struct cgraph_edge *e, enum inlining_mode mode, int depth)
cgraph_node_name (e->caller)); cgraph_node_name (e->caller));
} }
if (e->inline_failed) if (e->inline_failed)
cgraph_mark_inline (e); {
cgraph_mark_inline (e);
/* In order to fully inline always_inline functions, we need to /* In order to fully inline always_inline functions, we need to
recurse here, since the inlined functions might not be processed by recurse here, since the inlined functions might not be processed by
incremental inlining at all yet. 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) if (mode == INLINE_ALL || always_inline)
cgraph_decide_inlining_incrementally (e->callee, mode, depth + 1); cgraph_decide_inlining_incrementally (e->callee, mode, depth + 1);
}
callee->aux = (void *)(size_t) callee_mode; callee->aux = (void *)(size_t) callee_mode;
return true; return true;
} }