https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101941

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |missed-optimization

--- Comment #14 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #13)
> Actually, lookng at the kernel, I don't see how this can happen.
Inlining is not always the issue here.

In the case of the reduced case in PR 103242, function split will happen on
non-inline functions with -fconserve-stack. It will split off cold parts into a
seperate function to reduce the stack size of the main function.

Note the main issue is rather __builtin_object_size does not resolve itself
until after function splitting happens while __builtin_constant_p resolve
itself after inlining. So we get a jump threading and combining of the two ifs.

A few ideas on how to resovle this:
* special case function splitting such that a BB that contains a function call
which has either warning or error attribute on it; not to split out to a
different function.
* long term: figure out how to update call graph and not expand functions which
are no longer reachable after gimple level optimizations

Any other ideas?

I might look into the first idea tomorrow or the next day unless someone gets
to it before me.

Reply via email to