https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80223
--- Comment #22 from Martin Liška <marxin at gcc dot gnu.org> --- > For example, if an inlining pass happens after instrumentation, then the > function attribute doesn't necessarily need to suppress inlining. After > instrumentation is done, we can even treat the noprofile attribute as a > no-op. In the case of GCC, the instrumentation happens before inlining, but after early inlining. The patch reviewer noticed that and we would implement it that way. So yes, in order to preserve the attribute contract, we have to block inlining for functions decorated with the attribute.