Re: [PATCH v3] printf: Compile the kunit test with DISABLE_BRANCH_PROFILING DISABLE_BRANCH_PROFILING

From: Tamir Duberstein

Date: Tue Apr 14 2026 - 12:08:54 EST


On Tue, Apr 14, 2026 at 11:41 AM Petr Mladek <pmladek@xxxxxxxx> wrote:
>
> GCC < 12.1 can miscompile printf_kunit's errptr() test when branch
> profiling is enabled. BUILD_BUG_ON(IS_ERR(PTR)) is a constant false
> expression, but CONFIG_TRACE_BRANCH_PROFILING and
> CONFIG_PROFILE_ALL_BRANCHES make the IS_ERR() path side-effectful.
> GCC's IPA splitter can then outline the cold assert arm into
> errptr.part.* and leave that clone with an unconditional
> __compiletime_assert_*() call, causing a false build failure.
>
> This started showing up after test_hashed() became a macro and moved its
> local buffer into errptr(), which changed GCC's inlining and splitting
> decisions enough to expose the compiler bug.
>
> Workaround the problem by disabling the branch profiling for
> printf_kunit.o. It is a straightforward and acceptable solution.
>
> The workaround can be removed once the minimum GCC includes commit
> 76fe49423047 ("Fix tree-optimization/101941: IPA splitting out
> function with error attribute"), which first shipped in GCC 12.1.
>
> Fixes: 9bfa52dac27a ("printf: convert test_hashed into macro")
> Reported-by: kernel test robot <lkp@xxxxxxxxx>
> Closes: https://lore.kernel.org/oe-kbuild-all/202604030636.NqjaJvYp-lkp@xxxxxxxxx/
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Petr Mladek <pmladek@xxxxxxxx>

Acked-by: Tamir Duberstein <tamird@xxxxxxxxxx>