[clang] [clang][Sema] Add noinline check for __builtin_frame_address and __builtin_return_address (PR #82966)
John McCall via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 4 12:33:12 PST 2024
rjmccall wrote:
> I'm seeing evidence that this might be a chatty diagnostic in practice:
>
> https://sourcegraph.com/github.com/torvalds/linux@90d35da658da8cff0d4ecbb5113f5fac9d00eb72/-/blob/kernel/fork.c?L311 https://sourcegraph.com/github.com/torvalds/linux@90d35da658da8cff0d4ecbb5113f5fac9d00eb72/-/blob/mm/util.c?L644 https://sourcegraph.com/github.com/torvalds/linux@90d35da658da8cff0d4ecbb5113f5fac9d00eb72/-/blob/arch/arm/mm/nommu.c?L224 https://sourcegraph.com/github.com/torvalds/linux@90d35da658da8cff0d4ecbb5113f5fac9d00eb72/-/blob/kernel/scs.c?L48 (and quite a few others).
>
> CC @nathanchance @nickdesaulniers @rjmccall for opinions
Does anyone understand why Linux uses `__builtin_return_address` there? On first glance, I'd think this is exactly the sort of thing that the warning ought to be warning about — a `static` function that could easily be inlined into its callers.
Have we consider the alternative of just disabling inlining when a function uses `__builtin_return_address`? The middle-end already knows that there are things it can't inline.
Although I seem to remember having seen code that uses `always_inline` in order to force `__builtin_return_address` to actually apply to its caller.
https://github.com/llvm/llvm-project/pull/82966
More information about the cfe-commits
mailing list