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

From: Petr Mladek

Date: Wed Apr 15 2026 - 05:45:24 EST


On Tue 2026-04-14 12:07:59, Tamir Duberstein wrote:
> 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>

Thanks a lot for checking.

JFYI, I have committed the patch into printk/linux.git,
branch for-7.1-printf-kunit-build.

Best Regards,
Petr