From: Richard Guenther Date: Fri, 6 Feb 2009 09:06:39 +0000 (+0000) Subject: re PR tree-optimization/38977 (bash no longer builds with profile-feedback) X-Git-Tag: releases/gcc-4.4.0~630 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3cfa762bf031f655442405487b7e206fbe5f6ddc;p=thirdparty%2Fgcc.git re PR tree-optimization/38977 (bash no longer builds with profile-feedback) 2009-02-06 Richard Guenther PR middle-end/38977 * tree-cfg.c (need_fake_edge_p): Force a fake edge for fork because we may expand it as __gcov_fork. From-SVN: r143982 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9b4a5431dbe5..849f101d6e41 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-02-06 Richard Guenther + + PR middle-end/38977 + * tree-cfg.c (need_fake_edge_p): Force a fake edge for + fork because we may expand it as __gcov_fork. + 2009-02-06 Nick Clifton * config/m32c/m32c.h (PCC_BITFIELD_TYPE_MATTERS): Define to diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 875d123244d0..cb0058189156 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -6444,9 +6444,14 @@ need_fake_edge_p (gimple t) && fndecl && DECL_BUILT_IN (fndecl) && (call_flags & ECF_NOTHROW) - && !(call_flags & ECF_NORETURN) - && !(call_flags & ECF_RETURNS_TWICE)) - return false; + && !(call_flags & ECF_RETURNS_TWICE) + /* fork() doesn't really return twice, but the effect of + wrapping it in __gcov_fork() which calls __gcov_flush() + and clears the counters before forking has the same + effect as returning twice. Force a fake edge. */ + && !(DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL + && DECL_FUNCTION_CODE (fndecl) == BUILT_IN_FORK)) + return false; if (is_gimple_call (t) && !(call_flags & ECF_NORETURN))